Library for writing protoc plugins in Go; also includes a pure-Go protoc replacement
Go
89
81 commits
updated Jun 10, 2025
This repo makes it easy to work in the protobuf tool chain using Go.
protocFirst and foremost, the included plugins package makes it easy to implement protoc plugins in Go. It defines
an interface that plugins implement as well as facilities to actually integrate with protoc (e.g. implementing
the proper plugin protocol). It also provides "name resolution" logic: computing qualified names in Go source
code for elements in proto descriptors. This makes it a snap to write plugins in Go that generate additional Go
code from your proto sources.
protocThis repo also contains a pure-Go re-implementation of protoc. This new version of protoc, named goprotoc
(of course!), will delegate to a protoc executable on the path, driving it as if it were a plugin, for generating
C++, C#, Objective-C, Java, JavaScript, Python, PHP, and Ruby code (since they are implemented in protoc itself).
But it provides descriptors to protoc, parsed by goprotoc, instead of having protoc re-parse all of the source
code. And it can invoke any other plugins (such as protoc-gen-go) the same way that protoc would.
In addition to the goprotoc command, this repo provides a package that other Go programs can use as the
entry-point to running Protocol Buffer code gen, without having to shell out to an external program.
You'll also find a protoc plugin named protoc-gen-gox that can be the entry point for generating Go code. It
will delegate to protoc-gen-go for standard code gen and gRPC code gen, but it can also be configured to execute
other plugins that emit additional Go code. It's sort of like a plugin multiplexer that supports a configuration
file for enabling and configuring the various plugins that it invokes.
Overall
Maintained
Code review
Go module
Latest release
Releases this year
1,273 followers · starred Jun 2019
58 followers · starred May 2019
265 followers · starred Mar 2024
Library for writing protoc plugins in Go; also includes a pure-Go protoc replacement
Go
89
81 commits
updated Jun 10, 2025
This repo makes it easy to work in the protobuf tool chain using Go.
protocFirst and foremost, the included plugins package makes it easy to implement protoc plugins in Go. It defines
an interface that plugins implement as well as facilities to actually integrate with protoc (e.g. implementing
the proper plugin protocol). It also provides "name resolution" logic: computing qualified names in Go source
code for elements in proto descriptors. This makes it a snap to write plugins in Go that generate additional Go
code from your proto sources.
protocThis repo also contains a pure-Go re-implementation of protoc. This new version of protoc, named goprotoc
(of course!), will delegate to a protoc executable on the path, driving it as if it were a plugin, for generating
C++, C#, Objective-C, Java, JavaScript, Python, PHP, and Ruby code (since they are implemented in protoc itself).
But it provides descriptors to protoc, parsed by goprotoc, instead of having protoc re-parse all of the source
code. And it can invoke any other plugins (such as protoc-gen-go) the same way that protoc would.
In addition to the goprotoc command, this repo provides a package that other Go programs can use as the
entry-point to running Protocol Buffer code gen, without having to shell out to an external program.
You'll also find a protoc plugin named protoc-gen-gox that can be the entry point for generating Go code. It
will delegate to protoc-gen-go for standard code gen and gRPC code gen, but it can also be configured to execute
other plugins that emit additional Go code. It's sort of like a plugin multiplexer that supports a configuration
file for enabling and configuring the various plugins that it invokes.
Overall
Maintained
Code review
Go module
Latest release
Releases this year
1,273 followers · starred Jun 2019
58 followers · starred May 2019
265 followers · starred Mar 2024