avelino/awesome-go: a curated list that is really a Go program, with tests policing what stays in it
GitHub describes it as A curated list of awesome Go frameworks, libraries and software. The repository metadata lists Go as its primary language. The metadata lists the MIT license. This article stays within the project description and details documented in the GitHub repository README.
At a glance
- What is it?
- A curated index of Go frameworks, libraries, and software, generated from a Go module and published as both a readme and a site. The curation rules are in test files rather than in prose, and the categories mix what a library does with how the language works.
- Who is it for?
- Use awesome-go when you want a broad, opinionated starting map of the Go ecosystem and can accept that it is one person's or one small group's judgement about what belongs, because the categories, the wording, and the entries are all editorial. Do not use it as a dependency index you can query, and do not treat its categories as a taxonomy you can rely on, since they mix capabilities with language mechanisms and a library is filed once.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly Go, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The readme you are reading is generated by main.go, not typed into README.md
The top level of the tree is a Go module, not a document repository: module github.com/avelino/awesome-go, a main.go, a main_test.go, a pkg directory, a tmpl directory, go.mod, and go.sum, alongside netlify.toml, COVERAGE.md, and a CI workflow file named tests.yaml whose badge is scoped to the main branch. The homepage field points at https://awesome-go.com, and one of the badges links to the Netlify deploy log for the awesome-go site. Consequence for the reader: the readme is a build artifact, and the entries come from a template in tmpl/ and whatever the code in pkg/ collects. Editing the markdown by hand is a change to a generated file, and the way to change the list is to change its input and run the program.
Two test files decide what is mature and what is stale
Two of the top level files are named after policies rather than features: maturity_test.go and stale_repositories_test.go. That matches the request the readme makes in plain text, asking readers to submit a pull request if they see a package or project that is no longer maintained or is not a good fit. Consequence for the reader: curation here is enforced by code that runs in CI, not by a reviewer's memory, so a newly added entry that nobody keeps alive can be removed by the test suite rather than by an argument. The flip side is that the criteria live in test code, and the readme gives you the outcome, never the threshold, so you can be told an entry is not good enough without being able to read the rule that decided it.
Sixty-seven categories mix what a library does with how the language works
The table of contents runs from Actor Model and Artificial Intelligence through to Windows, and among the topical headings sit Go Compilers, Goroutines, Reflection, Resource Embedding, Package Management, Performance, Query Language, Generators, and Date and Time. Others carry subheadings of their own: Data Structures and Algorithms splits into thirteen, Database into five, Text Processing into eight, and Web Frameworks into middlewares and routers. Consequence for the reader: two different classification habits share one index, so searching by capability and searching by language mechanism lead to different corners of the same list, and a library that spans several jobs can only sit in one of them. There is also no stated priority between the categories, so nothing tells you which of two plausible homes is the one the editors consider authoritative.
The whole table of contents hides behind one collapsed summary line
The contents block is wrapped in a details element whose summary reads Expand contents, so the index is closed when the page opens. Everything under it is still addressable by anchor, including the deep subheadings, but none of it is visible until someone expands it. Consequence for the reader: first impressions come from the prose above the fold, which is badges, the community Slack invitation, the sponsor table, and the contributing note, and the actual index is one interaction away. A reader scanning for whether a topic is covered at all has nothing to scan, and a reader who arrives from a search engine on a deep anchor gets a page that opens looking like a page with no contents.
go.mod pins Go 1.23 and a go1.24.1 toolchain, so a list edit needs a build
The module declares go 1.23.0 with a toolchain line of go1.24.1, and five direct dependencies: goquery for parsing pages, avelino/slugify, otiai10/copy, the goldmark Markdown renderer, and golang.org/x/oauth2. Consequence for the reader: the pipeline is HTML and Markdown aware, which is what collecting and rendering hundreds of external links requires, and none of that runs in a browser. A contributor who edits an entry without a Go toolchain installed cannot regenerate the readme or the site, cannot run the two test files that guard the entries, and cannot confirm whether the change would pass CI. The list is public and free to read, but the editing path is a Go developer path.
The sponsor table and the billing note sit above the entries
Above the description there is a sponsorship block with a sponsor table, a claim that Awesome Go has no monthly fee, a statement that there are employees who work hard to keep it running, a promise that you can see how billing and distribution are calculated because it is open to the entire community, and a supporter contact address. Consequence for the reader: a page you opened to find a library asks you to fund the project as well, and a commercial link is part of the index you read. The disclosure is unusually direct, so you can see what the money does before you click, but if you mirror the readme or build a derivative list you inherit both the appeal and the sponsor block unless you strip them deliberately.
A parent list, a third-party tracker, and a shared Slack shape who owns the list
The readme points back to sindresorhus/awesome as the list it belongs to, and one badge goes to a third-party tracking service pointed at this repository, so changes here are mirrored into an index you do not control. Communication runs through the Golang Bridge community Slack with a join form, and a Product Hunt post records the launch. Alongside them the repository keeps MAINTAINERS, SECURITY.md, CODE_OF_CONDUCT.md, CONTRIBUTING.md, and AGENTS.md. Consequence for the reader: this is a list with named owners rather than a single anonymous curator, which is a better answer when an entry is wrong, but the corrections channel is a pull request against generated content, not an issue form. The mirrored copy is the part you cannot appeal, since a third-party tracker is downstream of the source.
Editorial conclusion
Use awesome-go when you want a broad, opinionated starting map of the Go ecosystem and can accept that it is one person's or one small group's judgement about what belongs, because the categories, the wording, and the entries are all editorial. Do not use it as a dependency index you can query, and do not treat its categories as a taxonomy you can rely on, since they mix capabilities with language mechanisms and a library is filed once. Before you commit anything to it, verify three things on your own: that the project you found is still maintained, because the maintenance signal is a single push date of 2026-09-28 for the whole list and nothing per entry that you can see from the readme; that the version you need is compatible with your Go toolchain, because the list says nothing about versions; and that the entry you are about to trust is not one the maintenance tests would flag, since removing a stale or unmaintained entry is something the project explicitly asks readers to do through a pull request.
Frequently asked questions
How do I add a Go library to awesome-go?
The readme sends contributors to the contribution guidelines in CONTRIBUTING.md and asks for a pull request whenever a listed package is no longer maintained or is not a good fit. Because the page is generated, an addition goes through main.go, tmpl/, and pkg/ rather than through README.md, and the workflow is run against the main branch.
Is awesome-go free to use?
The readme states that Awesome Go has no monthly fee and that the billing and distribution calculations are open to the entire community. It also says there are employees working to keep the list running, and it links a supporter contact address alongside the sponsor table.
How is awesome-go different from awesome-python?
The readme says the list is inspired by awesome-python and links the sindresorhus/awesome list it belongs to. awesome-go also differs in construction: the tree is a Go module with main.go, tmpl/, pkg/, and go.mod at the top level, and the site is published at awesome-go.com through netlify.toml.
Does awesome-go remove dead projects?
The readme asks readers to submit a pull request when a package is no longer maintained or is not a good fit, and the tree carries stale_repositories_test.go next to maturity_test.go. The repository publishes no GitHub releases, so there is no version history to compare a removal against.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/avelino-awesome-go)
Community notes