GoGo Protobuf

A deprecated fork of golang/protobuf adding faster marshaling, custom types, and richer Go code generation for Protocol Buffers.

Library
Go
vv1.3.2
5,664stars
BSD 3-Clause License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
50/100Fair
Development Activity0
Maintenance20
Community80
Maturity60
Momentum40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
66/100Good
Architecture78
Code Quality62
Innovation58
Learning Curve65

GoGo Protobuf is a fork of Google’s golang/protobuf that extends the standard protoc-generated Go code with extra generation options: faster marshal/unmarshal paths, more canonical Go structs (non-pointer fields, custom types, embedding), and optional generated test/benchmark code. It ships as a family of protoc plugins (protoc-gen-gogo, gogofast, gogofaster, gogoslick, and others) alongside the core proto runtime package that consumers import to work with generated messages.

For several years it was the de facto choice for performance-sensitive Go services generating large volumes of protobuf traffic, and was adopted by projects including etcd, CockroachDB, Kubernetes-adjacent tooling, and containerd. The project was formally marked deprecated by its maintainers in 2022, with development now concentrated on successor forks and Google’s own protobuf-go v2 API, but it remains widely vendored in existing dependency trees.

What You Get

  • A family of protoc code-generator plugins (protoc-gen-gogo, gogofast, gogofaster, gogoslick, gogotypes, combo) with different speed/codegen tradeoffs
  • The core proto runtime package implementing Marshal/Unmarshal, wire encoding, extensions, and the message registry
  • Custom .proto extensions for non-pointer fields, custom types, field embedding, and generated String()/Equal()/GoString()/Size() methods
  • vanity helpers for building your own customized protoc-gen-* command-line tool
  • jsonpb for JSON<->protobuf marshaling and sortkeys/io support packages
  • A large generated test/ fixture tree exercising wire-format compatibility across proto2 and proto3

Common Use Cases

  • Generating faster, allocation-lighter Go structs from .proto files for high-throughput RPC services
  • Maintaining legacy services (etcd-, CockroachDB-, and containerd-style codebases) that were built against gogoproto’s generated API
  • Customizing generated code via .proto extensions instead of hand-writing marshaling logic
  • Generating JSON-compatible protobuf bindings via jsonpb for HTTP/gRPC-gateway style services
  • Building a bespoke protoc plugin on top of the vanity package’s code-generation helpers

Under The Hood

Architecture The repo is organized as a fork of golang/protobuf, split into layered packages: proto (core runtime — encode.go/decode.go/equal.go/clone.go/extensions.go implementing reflection-based Marshal/Unmarshal, wire encoding, and the message registry), gogoproto (custom extension definitions consumed by protoc), a family of protoc-gen-* code-generator binaries (gogo, gogofast, gogofaster, gogoslick, gogotypes, combo) that plug into the standard protoc toolchain, vanity (helpers for building custom generator CLIs), plus types, io, jsonpb, and sortkeys support packages. The core abstraction is the generated .pb.go struct implementing proto.Message; changing that interface would break every consumer relying on generated code across a large historical ecosystem (etcd, CockroachDB, containerd). Data flow is: .proto IDL is compiled by protoc, which invokes one of the gogo plugin binaries to emit Go structs with marshal/unmarshal methods, while the proto package’s reflection-based runtime supports extension access, cloning, and equality checks on those structs at runtime.

Tech Stack A Go module pinned to go 1.15 in go.mod, with indirect dependencies limited to kisielk/errcheck, kisielk/gotool, and golang.org/x/tools — used only for linting and codegen tooling, not runtime. There is no web framework or ORM involved; this is a low-level serialization library. Build orchestration runs through an extensive Makefile that drives protoc across the whole tree, plus an install-protobuf.sh script to fetch a pinned protoc binary. CI runs a GitHub Actions matrix across multiple Go versions and multiple protoc versions on Ubuntu, exercising codegen and regenerated test fixtures. The library is consumed both as an importable package and as a set of go install-able protoc-gen-* binaries.

Code Quality The repository contains over 160 _test.go files, split between hand-written unit tests and protoc-generated fixture pairs across roughly ninety test/ subpackages, using the standard testing package with table-driven assertions rather than an assertion library. Error handling on the marshal/unmarshal hot path favors sentinel errors (errRepeatedHasNil, ErrNil, ErrTooLarge) over panics, consistent with idiomatic Go. Naming follows the golang/protobuf conventions it forked from. CI exercises the test suite across a Go/protoc version matrix, giving reasonable wire-format regression coverage, though a substantial share of the tree is copy-pasted generated boilerplate. Notably, the project carries an explicit deprecation notice from its maintainers and has had infrequent commits since 2022-2023.

What Makes It Unique gogoproto’s differentiator against golang/protobuf was extension-driven code generation — .proto annotations like customtype, nullable, embed, and castType let consumers opt into non-pointer fields, custom marshaled types, and generated String()/Equal()/GoString()/Size() methods for lower allocation overhead and more idiomatic Go structs, a meaningfully different tradeoff than the reflection-only upstream implementation of its era. That positioning drove adoption across performance-sensitive infrastructure projects, though the library’s approach has since been largely superseded by Google’s newer protobuf-go v2 API and by community successor forks now that gogoproto itself is deprecated.

Used by 9 apps in this directory

Go
85%
Apache 2.0

Argo Workflows

Devops · Data Engineering

16,943

The most popular Kubernetes-native workflow engine for orchestrating containerized DAGs, ML pipelines, CI/CD, and parallel batch jobs at scale.

View details
95
Repo Health
90
Technical
68
Dependency
Built with
Go85%
TypeScript11%
Updated yesterday
Go
63%
Apache 2.0

Coroot

Analytics · Monitoring

7,895

eBPF-powered observability with AI root cause analysis — zero code changes required, full-stack visibility out of the box.

View details
88
Repo Health
80
Technical
65
Dependency
Built with
Go63%
Vue35%
Updated 3 days ago
Go
97%
Apache 2.0

Docker (Moby)

Devops · Developer Tools

72,014

The open-source container engine at the heart of Docker — a modular toolkit of runtime, build, and networking components for assembling container-based systems.

View details
98
Repo Health
86
Technical
68
Dependency
Built with
Go97%
Updated yesterday
TypeScript
49%
AGPL 3.0

Grafana

Monitoring · Analytics

76,498

The open-source observability platform that unifies metrics, logs, and traces from any data source into dynamic, queryable dashboards.

View details
95
Repo Health
91
Technical
65
Dependency
Built with
TypeScript49%
Go45%
Updated today
Go
98%
Apache 2.0

Nightingale

Monitoring

13,272

Open-source alerting engine that connects to any time-series or log data source and routes alarms to 20+ notification channels with AI-assisted triage.

View details
96
Repo Health
77
Technical
68
Dependency
Built with
Go98%
Updated today
Go
90%
AGPL 3.0

Pyroscope

Monitoring · Devops · Developer Tools

11,643

An open-source, horizontally scalable continuous profiling platform that pinpoints CPU, memory, and I/O bottlenecks down to the exact line of code, built by Grafana Labs alongside Loki, Tempo, and Mimir.

View details
91
Repo Health
89
Technical
66
Dependency
Built with
Go90%
Updated 2 days ago
Go
98%
Apache 2.0

Space Cloud

Devops · Authentication

3,998

Kubernetes-native serverless platform that generates instant GraphQL and REST APIs for any database with built-in auth and real-time subscriptions

View details
50
Repo Health
74
Technical
63
Dependency
Built with
Go98%
Updated 2 years ago
Go
75%
AGPL 3.0

Teleport

Security · Authentication

20,860

Zero-trust infrastructure access platform that replaces credentials and VPNs with short-lived certificates, SSO, and identity-aware proxies for SSH, Kubernetes, databases, RDP, and AI agents.

View details
94
Repo Health
81
Technical
69
Dependency
Built with
Go75%
TypeScript16%
Updated 2 days ago
Go
95%
Apache 2.0

TiDB

Databases · AI Development

40,477

AI-Native Distributed SQL Database for Agentic Workloads

View details
97
Repo Health
66
Technical
68
Dependency
Built with
Go95%
Updated today

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers

Search