About
What the catalog says, and how it knows.
2754 developer tools, each listed with what it replaces. The rest of what you see on a tool comes from GitHub, not from whoever added it.
What an entry states
Every tool is a small YAML file under data/tools/. It names the tool, its GitHub repository, its category, the tools it replaces with a fit level for each, and an affiliation when there is one. That is all a contributor can write.
An entry never states stars, a licence, a version or a description. The schema rejects them, so a pull request cannot inflate a star count or claim a release that does not exist.
The nightly refresh
Every night, and whenever the catalog data changes on the main branch, the refresh reads every listed repository from the GitHub API:
- description, homepage, language, licence, stars, forks and topics
- whether the repository is archived, and the date of its last push
- the latest release, or the latest tag when there is no release, and whether it is signed
- the last five published releases, shown on the tool page
- the authors of the commits on the default branch over the last 90 days, of which only the count is kept
- the names of the files attached to the latest release, read for the operating systems and architectures they name
- the maintainer file described under verified
The tool page turns these into how alive a project is, never into a score. Its age is counted from the day the repository was created. The release cadence is the median gap between its latest stable releases, shown once there are three. Active contributors are the distinct commit authors on the default branch in the last 90 days: accounts whose name ends in [bot] are left out, and a commit linked to no GitHub account counts by its email, which is never published. Only the latest 500 commits are read, so a busier project shows a lower bound such as 40+. A squash-merge workflow credits one author per pull request, whoever else co-wrote it, and for a tool that lives in a monorepo the count covers the whole repository, which the page says. Platforms are shown only when the file names of the latest release name them, and nothing is guessed when they do not, nor for a tool in a monorepo, whose latest release may be another package's.
When anything changed, the refresh commits the new catalog and a new build of this site goes out. If GitHub stops returning the repository of a listed tool, because it was deleted or made private, the tool keeps its last published facts and a pull request that removes its entry is opened, so a person decides: a tool leaves the catalog only through such a pull request.
Each refresh also compares the new catalog with the previous one and records what changed: a licence, a repository name, an archive, a new release, a tool joining or leaving. The what changed page lists it by day, with an RSS feed for the whole catalog, one for each tool and one for each category. A change in stars never counts.
Between two nightly runs, a published release refreshes its tool within minutes when the repository has the awesome-alternatives GitHub App installed, or runs refresh-action in its release workflow.
Marks
- ✓ signed
- Next to the latest version. The tag carries a signature GitHub verified, or, for a lightweight tag, the commit it points at does. Only the latest release is checked.
- Verified by its maintainers
- The tool's own repository has an
.awesome-alternativesfile at the root of its default branch, withslug:set to this entry. Only someone with write access to the repository can add it, so the mark says its maintainers stand behind the entry. The refresh reads the file every night.The mark is also set when the awesome-alternatives GitHub App is installed on the repository, since installing an app on it takes admin rights.A file dates the verification by its last commit, and an entry edited after that date shows “edited since verification” until the maintainers commit to the file again, where a dated # comment is enough.In every list, a verified tool comes before unverified ones that fit the same way, and stars order the rest. It never moves above a better fit. - archived
- The repository is archived and gets no more changes. An archived tool is exactly what people look to move off, so it is accepted only as something other entries replace, never as an alternative, and it does not get the no push warning.
- Other
- Shown as the licence when GitHub detects one but cannot map it to an SPDX identifier. When GitHub detects none, the tool reads None detected and gets the no licence warning.
Fit levels
Each replacement carries one, set by whoever adds the entry.
- Drop-in
- Accepts the original's configuration or interface unchanged: you swap it in without touching your setup. Asking for a drop-in in the search keeps only these.
- Full replacement
- Covers the same job, in its own way. Expect to migrate your configuration.
- Partial
- Covers part of the job. The note under the tool says which part.
Warnings
A warning never removes a tool. It is something a maintainer looks at before merging a pull request, and something you may want to know before you depend on the tool.
- Repository moved
- The repository now lives under another name or owner. GitHub redirects the old address, but the entry should be updated.
- No licence detected
- GitHub detects no licence, so the terms under which you can use the code are unclear.
- No release or tag
- The repository has neither a release nor a tag, so there is no version to pin.
- No push in a year
- Nothing was pushed for more than 365 days. Archived repositories are left out of this one.
- Unusual star burst
- A day that gained 50 or more stars, and at least 5 times the tool's usual daily pace over the last month, and at least 3% of the stars it had the day before, so a large project's ordinary good day does not count. Bought stars arrive in bursts, and so does a launch on Hacker News, which is why a person decides. GitHub no longer lists who starred a repository, so the nightly refresh keeps the star count of each day and compares the days. It needs a week of that history before it judges, which means a tool is only checked once it is listed.
- New repository
- The repository is less than 30 days old; the mark shows the day it was created. With so little history, its stars, releases and activity say little yet. The mark goes away on its own once the repository is old enough.
Some problems block a pull request instead: a repository that is private, a fork, archived but offered as an alternative, or already listed under another slug. The contributor guide lists every check.
Affiliation
The affiliation field is for a tie between a tool and this directory or the people who run it, such as a tool made by the maintainers of awesome-alternatives. When an entry has one, the tool page shows it as written. Maintaining a tool you list is not an affiliation: have the entry verified instead, and its page says its maintainers vouch for it.
How search works
Your query is first read as keywords: the names of tools that others replace, the languages and licences in the catalog, and "drop in". When no tool to replace is named, a small multilingual embedding model running on the search server compares the query with every tool's description, so a query written in any language the site speaks finds the same tools as its English wording, even though the descriptions themselves stay in English, the way GitHub returns them. If one tool to replace clearly stands out, it is picked; otherwise the results are ranked by how close they are to the query. Only when neither step finds a tool to replace, and the server has a key for it, is the text of the query sent to Jev, an external service, to read it. Its reading is cached on the server for a day. The privacy page says what is sent and what is kept.
Some words become filters, in every language the site speaks. "Open source" keeps tools whose licence is open. "Maintained" drops archived tools and those with no push in 365 days. "Self-hosted" keeps tools from categories of services you run yourself. A way to deploy, such as Docker, Docker Compose, Kubernetes, Helm or a single binary, keeps the tools that declare it. A platform, such as Linux or ARM, is recognised but not checked yet, and the results say so instead of pretending.
From an AI agent
The catalog is also a Model Context Protocol (MCP) server at https://awesome-alternatives.com/api/mcp, over Streamable HTTP, with no key and no account. An agent can find alternatives to a tool or a product, list tools by category, language or licence, and read one tool's facts. Its search tool reads queries with keywords and the model on this server only, never with Jev, and has a limit per address; the other tools have none.
To add it to Claude Code: claude mcp add --transport http awesome-alternatives https://awesome-alternatives.com/api/mcp
Licences
The catalog data is under CC BY-SA 4.0: reuse it freely, with a link to awesome-alternatives.com and under the same licence. The code of the site, the API and the scripts is under the GNU AGPL v3.