One of the greatest challenges with Protobuf code generation is the complexity
of working with
protoc and plugins. Time and time again, we've
heard that developers want the benefits of code generation, but struggle with
the complex web of different compiler and plugin versions, and the varying
runtime needs that plugins have across different languages. Managing and
maintaining a stable environment locally on a single machine is hard enough, and
the problem is compounded as you scale out code generation across many
Every organization and open-source project develops homegrown Protobuf tooling in an effort to simplify the developer experience and maintain consistent output across developers. A handful of organizations might get a workable solution, but these remain brittle and difficult to maintain over time. Furthermore, domain knowledge of these homegrown solutions is lost and upgrade paths become challenging.
At Buf, we believe code generation is a key building block and the Protobuf
ecosystem deserves a proper solution. With remote plugins, you no
longer have to concern yourself with maintaining, downloading, or running
plugins on your local machine. Using a plugin is as simple as
referencing it in your
version: v1plugins: # Use protoc-gen-go at v1.28.1 - plugin: buf.build/protocolbuffers/go:v1.28.1 out: gen/go opt: paths=source_relative # Use the latest version of protoc-gen-go-grpc - plugin: buf.build/grpc/go out: gen/go opt: paths=source_relative
buf generate and you're done - no maintaining these plugins, no
worrying about how to download or install them, just generate your stubs and get
back to solving your real problems.
Buf verifies and maintains the commonly-used plugins used across the Protobuf ecosystem.
To discover the all publicly-available plugins, go to buf.build/plugins.
This page provides information on all available plugins on the Buf Schema
Registry, including the language type(s) and instructions for use in
buf.gen.yaml. The packaging and distribution
source code for Buf-managed plugins is available
on GitHub. If you have a plugin you'd
like us to maintain that you think will be valuable for the community,
file an issue.
All public plugins are maintained by Buf for security purposes - we want to make sure that the code generators everyone uses are verified by us. However, organizations often write their custom Protobuf plugins to generate logic specific to their business. For these users, the Buf Schema Registry allows you to upload your custom, private plugins. This feature is available for our enterprise users - reach out to us if you'd be interested in working with us!
Remote plugins should be considered in Release Candidate status. We do not anticipate any breaking changes between now and stability.