A search engine to compare packages and libraries in the Go ecosystem
The original post was published on Reddit with the title: "I created a search engine that helps you compare and determine quality, trends, and popularity in GO packages." It was used for early validation and feedback in the beginning of this project.
Explanation and features
I compiled 20,000+ packages from different sources as the ground truth for a search engine for Go modules.
The features for pkgindex.com are:
- a rising popularity graph over time (GitHub stargazers per week) that signals continuous support and improvement from the creators
- typo-tolerant search that matches names, descriptions, topics, and categories
- an overview table with quality indicators and quick links to dive into the repository yourself
Sources
- pkg.go.dev for Golang packages
- GitHub API for stargazers and repository information
- Open Source Insights by Google for the dependency graph
- Awesome Go for categories and topics
Important Go ecosystem packages
Web frameworks
Popularity trends over time: web frameworks
Name | Stars | Forks | Dependents | Description |
---|---|---|---|---|
gin | 72.8k | 7.8k | 24.0k | Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much better performance -- up to 40 times faster. If you need smashing performance, get yourself some Gin. |
fiber | 29.4k | 1.5k | 692 | ⚡️ Express inspired web framework written in Go |
echo | 27.1k | 2.2k | 3.7k | High performance, minimalist Go web framework |
kit | 25.7k | 2.5k | 4.1k | A standard library for microservices. |
iris | 24.5k | 2.5k | 959 | The fastest HTTP/2 Go Web Framework. New, modern and easy to learn. Fast development with Code you control. Unbeatable cost-performance ratio 🚀 |
kratos | 21.8k | 4.0k | 181 | Your ultimate Go microservices framework for the cloud-native era. |
chi | 16.0k | 979 | 2.9k | lightweight, idiomatic and composable router for building Go HTTP services |
Logging
Popularity trends over time: logging
Name | Stars | Forks | Dependents | Description |
---|---|---|---|---|
zap | 20.1k | 1.4k | 12.1k | Blazing fast, structured, leveled logging in Go. |
zerolog | 9.1k | 521 | 4.0k | Zero Allocation JSON Logger |
go-spew | 5.8k | 405 | 169.0k | Implements a deep pretty printer for Go data structures to aid in debugging |
lumberjack | 4.4k | 583 | 2.2k | lumberjack is a log rolling package for Go |
glog | 3.5k | 956 | 11.6k | Leveled execution logs for Go |
CLI
Popularity trends over time: CLI
Name | Stars | Forks | Dependents | Description |
---|---|---|---|---|
cobra | 34.3k | 2.8k | 21.2k | A Commander for modern Go CLI interactions |
bubbletea | 21.1k | 653 | 1.6k | A powerful little TUI framework ? |
cli | 21.0k | 1.7k | 8.3k | A simple, fast, and fun package for building command line apps in Go |
termui | 12.7k | 787 | 830 | Golang terminal dashboard |
gocui | 9.5k | 648 | 563 | Minimalist Go package aimed at creating Console User Interfaces. |
color | 6.7k | 640 | 14.2k | Color package for Go (golang) |
JSON
Popularity trends over time: JSON
Name | Stars | Forks | Dependents | Description |
---|---|---|---|---|
flatbuffers | 21.4k | 3.2k | 2.3k | FlatBuffers: Memory Efficient Serialization Library |
gjson | 13.1k | 866 | 2.5k | Get JSON values quickly - JSON parser for Go |
go | 12.8k | 1.1k | 76.0k | A high-performance 100% compatible drop-in replacement of "encoding/json" |
quicktype | 10.9k | 968 | 0 | Generate types and converters from JSON, Schema, and GraphQL |
jsonparser | 5.3k | 452 | 2.9k | One of the fastest alternative JSON parser for Go that does not require schema |
easyjson | 4.2k | 415 | 30.1k | Fast JSON serializer for golang. |
Testing
Popularity trends over time: Testing
Name | Stars | Forks | Dependents | Description |
---|---|---|---|---|
testify | 21.0k | 1.5k | 72.3k | A toolkit with common assertions and mocks that plays nicely with the standard library |
mock | 9.1k | 658 | 14.4k | GoMock is a mocking framework for the Go programming language. |
goconvey | 8.0k | 598 | 7.2k | Go testing in the browser. Integrates with `go test`. Write behavioral tests in Go. |
ginkgo | 7.6k | 672 | 12.5k | A Modern Testing Framework for Go |
go-sqlmock | 5.6k | 433 | 3.2k | Sql mock driver for golang to test database interactions |
mockery | 5.3k | 432 | 51 | A mock code autogenerator for Go |
gotests | 4.7k | 381 | 122 | Automatically generate Go test boilerplate from your source code. |
easyjson | 4.2k | 415 | 30.1k | Fast JSON serializer for golang. |
Databases
Popularity trends over time: Databases
Name | Stars | Forks | Dependents | Description |
---|---|---|---|---|
prometheus | 50.8k | 8.6k | 730 | The Prometheus monitoring system and time series database. |
tidb | 35.3k | 5.7k | 259 | TiDB is an open-source, cloud-native, distributed, MySQL-Compatible database for elastic scale and real-time analytics. Try AI-powered Chat2Query free at: https://tidbcloud.com/free-trial |
cockroach | 28.2k | 3.6k | 159 | CockroachDB - the open source, cloud-native distributed SQL database. |
influxdb | 26.8k | 3.5k | 2.4k | Scalable datastore for metrics, events, and real-time analytics. |
milvus | 24.4k | 2.6k | 0 | A cloud-native vector database, storage for next generation AI applications. |
dgraph | 19.8k | 1.5k | 70 | The high-performance database for modern applications. |
vitess | 17.1k | 2.0k | 410 | Vitess is a database clustering system for horizontal scaling of MySQL. |
Data structures
Popularity trends over time: Data structures
Name | Stars | Forks | Dependents | Description |
---|---|---|---|---|
gods | 14.7k | 1.7k | 9.7k | GoDS (Go Data Structures) - Sets, Lists, Stacks, Maps, Trees, Queues, and much more. |
go-datastructures | 7.2k | 870 | 1.2k | A collection of useful, performant, and threadsafe Go datastructures. |
golang-set | 3.6k | 295 | 3.7k | A simple, battle-tested, and generic set type for the Go language. Trusted by Docker, 1Password, Ethereum, and Hashicorp. |
gota | 2.8k | 308 | 263 | Gota: DataFrames and data wrangling in Go (Golang). |
fsm | 2.5k | 333 | 458 | Finite State Machine for Go. |
roaring | 2.2k | 256 | 719 | Roaring bitmaps in Go (golang), used by InfluxDB, Bleve, DataDog. |
ORM
Popularity trends over time: ORM
Name | Stars | Forks | Dependents | Description |
---|---|---|---|---|
gorm | 34.2k | 3.8k | 3.9k | The fantastic ORM library for Golang, aims to be developer friendly. |
ent | 14.3k | 904 | 181 | An entity framework for Go. |
sqlboiler | 6.1k | 561 | 183 | Generate a Go ORM tailored to your database schema. |
pg | 5.5k | 405 | 332 | Golang ORM with focus on PostgreSQL features and performance. |
gorp | 3.7k | 414 | 1.2k | Go Relational Persistence - an ORM-ish library for Go. |
bun | 2.6k | 173 | 162 | SQL-first Golang ORM. |
Not just limited to Go: Open source search engine alternatives
This is the comparison I used when choosing a typo-tolerant open source search solution. I picked Typesense because of ease-of-use and it had all what was required. GitHub stars give you an indicator but in the end you need to make a decision based on what you need.
Name | Stars | Forks | Dependents | Description |
---|---|---|---|---|
elasticsearch | 66.0k | 23.9k | Free and Open, Distributed, RESTful Search Engine. | |
meilisearch | 40.1k | 1.5k | A lightning-fast search engine that fits effortlessly into your apps, websites, and workflow. | |
typesense | 16.0k | 489 | Open Source alternative to Algolia + Pinecone and an Easier-to-Use alternative to ElasticSearch ⚡ ? ✨ Fast, typo tolerant, in-memory fuzzy Search Engine for building delightful search experiences. | |
zincsearch | 15.6k | 676 | ZincSearch. A lightweight alternative to elasticsearch that requires minimal resources, written in Go. |
Inspiration
The search on pkg.go.dev is helpful but lacks in quality indicators. It shows "Imported by" as its sole quality or popularity indicator but any context to comparable packages is missing.
✨ Includes all packages from Awesome Go ✨ (some entries did not exist anymore)
Inspiration was npmtrends.com from the JavaScript ecosystem, i.e. making the information on pkg.go.dev and Awesome Go comparable.
Feedback
Hope you guys find this useful and let me know if you have any feedback!