// the find
bufbuild/buf
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.