finds.dev← search

// the find

bufbuild/buf

★ 11,224 · Go · Apache-2.0 · updated Jun 2026

The best way of working with Protocol Buffers.

Buf is a modern CLI toolchain for Protocol Buffers that replaces protoc and the shell scripts wrapped around it. It handles compilation, formatting, linting, breaking-change detection, code generation, and dependency management — all from a single binary with a declarative config file. The target audience is any team shipping gRPC or Connect services who has felt the pain of maintaining protoc invocations and import paths by hand.

Breaking-change detection is the standout feature — the distinction between FILE, PACKAGE, WIRE_JSON, and WIRE compatibility levels is genuinely useful and something protoc gives you nothing on. Managed mode in buf.gen.yaml is a real quality-of-life improvement: it lets you keep language-specific file options (go_package, java_package, etc.) out of your .proto files, which matters when the same schema is consumed by multiple language teams. The BSR's remote plugin hosting means CI doesn't need protoc-gen-go installed everywhere, which eliminates an entire class of 'works on my machine' generation bugs. The v1 stability guarantee with no planned v2 is worth calling out — that's a real commitment for tooling that's usually a moving target.

The BSR is where buf's value proposition concentrates, and it's a hosted SaaS product — teams with air-gapped environments or strong opinions about external dependencies for their schema registry get a worse deal. The managed mode configuration syntax has real complexity to it once you're managing overrides across multiple modules and languages; the docs are adequate but you will spend time in them. buf curl is convenient but is essentially a subset of grpcurl with tighter BSR integration; if you're already using grpcurl in your scripts it's not a compelling reason to switch. The plugin ecosystem for non-mainstream languages (Rust, Swift, C++) is thinner on the BSR than it is for Go and TypeScript, so remote plugins don't fully solve the binary management problem for those targets.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →