| # Third-Party Add-ons for Protocol Buffers | |
| This page lists code related to Protocol Buffers which is developed and | |
| maintained by third parties. You may find this code useful, but note that | |
| **these projects are not affiliated with or endorsed by Google (unless | |
| explicitly marked)**; try them at your own risk. Also note that many projects | |
| here are in the early stages of development and not production-ready. | |
| If you have a project that should be listed here, please | |
| [send us a pull request](https://github.com/protocolbuffers/protobuf/pulls) to | |
| update this page. | |
| ## Programming Languages | |
| These are projects we know about implementing Protocol Buffers for other | |
| programming languages: | |
| * Action Script: https://github.com/matrix3d/JProtoc | |
| * Action Script: https://github.com/zhongfq/protobuf-as3/ | |
| * Ada: https://github.com/reznikmm/protobuf | |
| * C: https://github.com/protobuf-c/protobuf-c | |
| * C: https://koti.kapsi.fi/jpa/nanopb/ | |
| * C: https://github.com/cloudwu/pbc/ | |
| * C: https://github.com/haberman/upb/wiki | |
| * C: https://github.com/squidfunk/protobluff | |
| * C: https://github.com/eerimoq/pbtools | |
| * C++: https://github.com/protocolbuffers/protobuf (Google-official | |
| implementation) | |
| * C++: https://github.com/tonda-kriz/simple-protobuf | |
| * C++: https://EmbeddedProto.com | |
| * C++: https://github.com/yksten/struct2x | |
| * C/C++: http://spbc.sf.net/ | |
| * C#: https://silentorbit.com/protobuf/ | |
| * Clojure: http://github.com/ninjudd/clojure-protobuf | |
| * Clojure: https://github.com/clojusc/protobuf | |
| * Clojure: https://protojure.readthedocs.io | |
| * Clojure: https://github.com/s-expresso/clojobuf | |
| * ClojureScript: https://github.com/s-expresso/clojobuf | |
| * Common Lisp: http://github.com/brown/protobuf | |
| * Common Lisp: http://github.com/qitab/cl-protobuf | |
| * D: https://github.com/dcarp/protobuf-d | |
| * D: https://github.com/msoucy/dproto | |
| * D: https://github.com/opticron/ProtocolBuffer | |
| * Dart: https://github.com/dart-lang/dart-protobuf (runtime) | |
| https://github.com/dart-lang/dart-protoc-plugin (code generator) | |
| * Delphi: http://sourceforge.net/projects/protobuf-delphi/ | |
| * Delphi: http://fundementals.sourceforge.net/dl.html | |
| * Elixir: https://github.com/jeremyong/exprotoc | |
| * Elixir: https://github.com/tony612/protobuf-elixir | |
| * Elixir: https://github.com/ahamez/protox | |
| * Elm: https://github.com/tiziano88/elm-protobuf | |
| * Erlang: https://github.com/tomas-abrahamsson/gpb | |
| * Erlang: http://piqi.org/ | |
| * Erlang: https://github.com/basho/erlang_protobuffs (no longer maintained, | |
| use gpb instead) | |
| * Hacklang/HHVM: https://github.com/y3llowcake/proto-hack | |
| * GDScript: https://github.com/oniksan/godobuf (Godot v3 engine plugin) | |
| * Go: https://github.com/golang/protobuf (Google-official implementation) | |
| * Go: https://github.com/akunspy/gopbuf | |
| * Go: https://github.com/gogo/protobuf | |
| * GopherJS: https://github.com/johanbrandhorst/protobuf | |
| * Haskell: https://hackage.haskell.org/package/hprotoc | |
| * Haskell: https://github.com/google/proto-lens (Google-unofficial | |
| implementation) | |
| * Haskell: https://github.com/awakesecurity/proto3-suite (code generator) | |
| https://github.com/awakesecurity/proto3-wire (binary | |
| serializer/deserializer) | |
| * Haxe: https://github.com/Atry/protoc-gen-haxe | |
| * Java: https://github.com/protocolbuffers/protobuf (Google-official | |
| implementation) | |
| * Java/Android: https://github.com/square/wire | |
| * Java: https://github.com/HebiRobotics/QuickBuffers/ | |
| * Java ME: http://swingme.sourceforge.net/encode.shtml | |
| * Javascript: http://github.com/bufbuild/protobuf-es | |
| * Javascript: http://github.com/sirikata/protojs | |
| * Javascript: https://github.com/dcodeIO/ProtoBuf.js | |
| * Javascript: https://github.com/seishun/node-protoc-plugin (Node.js port of | |
| plugin.h) | |
| * Javascript: https://github.com/seishun/node-protoc-gen-javascript (Node.js | |
| port of the Google-official implementation) | |
| * Javascript: https://github.com/ButterCam/sisyphus-js | |
| * Julia: https://github.com/JuliaIO/ProtoBuf.jl | |
| * Kotlin: https://github.com/marcoferrer/kroto-plus | |
| * Kotlin: https://github.com/Kotlin/kotlinx.serialization | |
| * Kotlin: https://github.com/ButterCam/sisyphus | |
| * Kotlin: https://github.com/open-toast/protokt | |
| * Kotlin Multiplatform: https://github.com/streem/pbandk | |
| * Lua: http://github.com/indygreg/lua-protobuf | |
| * Lua: https://github.com/Neopallium/lua-pb | |
| * Objective C: https://github.com/alexeyxo/protobuf-objc | |
| * OCaml: http://piqi.org/ | |
| * Perl: http://groups.google.com/group/protobuf-perl | |
| * Perl: https://metacpan.org/pod/Google::ProtocolBuffers | |
| * Perl: https://metacpan.org/pod/Google::ProtocolBuffers::Dynamic | |
| * PHP: https://github.com/allegro/php-protobuf/ | |
| * PHP: https://github.com/chobie/php-protocolbuffers | |
| * Protobuf: https://github.com/mycroftjr/protoc-gen-proto | |
| * Prolog: http://www.swi-prolog.org/pldoc/package/protobufs.html | |
| * Purescript: https://github.com/xc-jp/purescript-protobuf | |
| * Python: https://github.com/protocolbuffers/protobuf (Google-official | |
| implementation) | |
| * Python: https://github.com/eigenein/protobuf | |
| * Python: https://github.com/danielgtaylor/python-betterproto | |
| * R: http://cran.r-project.org/package=RProtoBuf | |
| * Ruby: http://github.com/mozy/ruby-protocol-buffers | |
| * Ruby: https://github.com/bmizerany/beefcake/tree/master/lib/beefcake | |
| * Ruby: https://github.com/localshred/protobuf | |
| * Rust: https://github.com/tokio-rs/prost | |
| * Rust: https://github.com/stepancheg/rust-protobuf/ | |
| * Rust: https://github.com/tafia/quick-protobuf | |
| * Scala: http://github.com/jeffplaisance/scala-protobuf | |
| * Scala: https://github.com/SandroGrzicic/ScalaBuff | |
| * Scala: https://scalapb.github.io | |
| * Solidity: https://github.com/celer-network/pb3-gen-sol | |
| * Swift: https://github.com/alexeyxo/protobuf-swift | |
| * Swift: https://github.com/apple/swift-protobuf/ | |
| * Typescript: http://github.com/bufbuild/protobuf-es | |
| * Typescript: https://github.com/improbable-eng/ts-protoc-gen | |
| * Typescript: https://github.com/thesayyn/protoc-gen-ts | |
| * Typescript: https://github.com/pbkit/pbkit | |
| * Vala: https://launchpad.net/protobuf-vala | |
| * Zig: https://github.com/Arwalk/zig-protobuf | |
| ## RPC Implementations | |
| GRPC (http://www.grpc.io/) is Google's RPC implementation for Protocol Buffers. | |
| There are other third-party RPC implementations as well. Some of these actually | |
| work with Protocol Buffers service definitions (defined using the `service` | |
| keyword in `.proto` files) while others just use Protocol Buffers message | |
| objects. | |
| * https://github.com/grpc/grpc (C++, Node.js, Python, Ruby, Objective-C, PHP, | |
| C#, Google-official implementation) | |
| * https://connectrpc.com (Go, Javascript, Typescript, Python, Dart, Swift, | |
| Kotlin) | |
| * https://zeroc.com/products/ice (Multiple languages) | |
| * https://github.com/protobuf-net/protobuf-net (C#/.NET/WCF/VB) | |
| * http://www.deltavsoft.com/doc/_external_serialization.html#Protobufs (C++) | |
| * https://protojure.github.io (Clojure) | |
| * https://github.com/baidu/sofa-pbrpc (C++) | |
| * https://github.com/madhon/protobuf-csharp-rpc (C#) | |
| * https://github.com/madwyn/libpbrpc (C++) | |
| * https://github.com/SeriousMa/grpc-protobuf-validation (Java) | |
| * https://github.com/elixir-grpc/grpc (Elixir) | |
| * https://github.com/johanbrandhorst/protobuf (GopherJS) | |
| * https://github.com/awakesecurity/gRPC-haskell (Haskell) | |
| * https://github.com/Yeolar/raster (C++) | |
| * https://github.com/jnordberg/wsrpc (JavaScript Node.js/Browser) | |
| * https://github.com/pbkit/npm-packages/blob/main/frpc-test/src/index.spec.ts | |
| (TypeScript Node.js/Browser) | |
| * https://github.com/ppissias/xsrpcj (Java) | |
| * https://github.com/twitchtv/twirp (Multiple languages) | |
| * https://github.com/icerpc/icerpc-csharp (C#) | |
| * https://philips-software.github.io/amp-embedded-infra-lib (C++, C#, Java) | |
| * https://github.com/tdaira/blerpc (C/nanopb, Python, Kotlin, Swift, Dart, | |
| TypeScript; RPC over Bluetooth Low Energy) | |
| Inactive: | |
| * https://code.google.com/p/protobuf-actionscript3/ (Action Script) | |
| * https://code.google.com/p/protoc-gen-as3/ (Action Script) | |
| * https://code.google.com/p/protobuf-csharp-port (C#) | |
| * https://code.google.com/p/protobuf-net/ (C#/.NET/WCF/VB) | |
| * https://code.google.com/p/protobuf-javame/ (Java ME) | |
| * https://code.google.com/p/protobuf-rpc-pro/ (Java) | |
| * https://launchpad.net/txprotobuf/ (Python) | |
| * https://github.com/modeswitch/protobuf-rpc (Python) | |
| * https://github.com/sdeo/protobuf-socket-rpc (Java, Python) | |
| * https://code.google.com/p/proto-streamer/ (Java) | |
| * https://code.google.com/p/server1/ (C++) | |
| * https://code.google.com/p/protobuf-mina-rpc/ (Python client, Java server) | |
| * https://code.google.com/p/casocklib/ (C++) | |
| * https://code.google.com/p/cxf-protobuf/ (Java) | |
| * https://code.google.com/p/protobuf-remote/ (C++/C#) | |
| * https://code.google.com/p/eneter-protobuf-serializer/ (Java/.NET) | |
| * https://github.com/robbinfan/claire/tree/master/protorpc (C++) | |
| * https://github.com/ebencheung/arab (C++) | |
| * https://code.google.com/p/protobuf-csharp-rpc/ (C#) | |
| * https://github.com/thesamet/rpcz (C++/Python, based on ZeroMQ) | |
| * https://github.com/w359405949/libmaid (C++, Python) | |
| * https://code.google.com/p/protobuf-js/ (Javascript) | |
| * https://code.google.com/p/protobuf-for-node/ (Javascript) | |
| * https://code.google.com/p/protostuff/ (Javascript) | |
| * https://code.google.com/p/protoc-gen-lua/ (Lua) | |
| * https://code.google.com/p/protobuf-matlab/ (Matlab) | |
| * https://code.google.com/p/protobuf-mercury/ (Mercury) | |
| * https://code.google.com/p/protobuf-objc/ (ObjC) | |
| * https://code.google.com/p/protobuf-perlxs/ (Perl/XS) | |
| * https://code.google.com/p/pb4php/ (PHP) | |
| * https://code.google.com/p/ruby-protobuf/ (Ruby) | |
| * https://code.google.com/p/protobuf-scala (Scala) | |
| * https://code.google.com/p/protobuf-net/ (Visual Basic) | |
| * https://code.google.com/p/protoc-gen-docbook/ (DocBook generator) | |
| ## Build | |
| * [Bazel Build](https://bazel.build) | |
| * [rules_closure](https://github.com/bazelbuild/rules_closure) | |
| `js-closure` | |
| * [rules_go](https://github.com/bazelbuild/rules_go) `go` | |
| * [rules_protobuf](https://github.com/pubref/rules_protobuf) `java` `c++` | |
| `c#` `go` `js-closure` `js-node` `python` `ruby` | |
| * Maven Protobuf Compiler Plugin | |
| * By xolstice.org | |
| ([Documentation](https://www.xolstice.org/protobuf-maven-plugin/)) | |
| ([Source](https://github.com/xolstice/protobuf-maven-plugin/)) | |
| [](https://repo1.maven.org/maven2/org/xolstice/maven/plugins/protobuf-maven-plugin/) | |
| * https://code.google.com/p/maven-protoc-plugin/ | |
| * https://github.com/os72/protoc-jar-maven-plugin | |
| * https://ascopes.github.io/protobuf-maven-plugin | |
| * [Protobuf Plugin for Gradle](https://github.com/google/protobuf-gradle-plugin) | |
| * [Sbt plugin for Protocol Buffers](https://github.com/Atry/sbt-cppp) | |
| ## IDE | |
| * [Buf for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=bufbuild.vscode-buf) | |
| * [Visual Studio Code Support for Protocol Buffers](https://marketplace.visualstudio.com/items?itemName=zxh404.vscode-proto3) | |
| * [Visual Studio Language Service support for Protocol Buffers](http://visualstudiogallery.msdn.microsoft.com/4bc0f38c-b058-4e05-ae38-155e053c19c5) | |
| * [IntelliJ IDEA plugin](http://github.com/jvolkman/intellij-protobuf-editor) | |
| * [IntelliJ Protobuf Plugin](https://github.com/devkanro/intellij-protobuf-plugin) | |
| * [TextMate syntax highlighting](http://github.com/michaeledgar/protobuf-tmbundle) | |
| * [Notepad++ Syntax Highlighting for .proto files](https://github.com/chai2010/notepadplus-protobuf) | |
| * [Eclipse editor for protobuf (from Google)](https://code.google.com/p/protobuf-dt/) | |
| * [NetBeans IDE plugin](https://code.google.com/p/protobuf-netbeans-plugin/) | |
| * [Editor for serialized protobufs](https://code.google.com/p/protobufeditor/) | |
| ## Documentation | |
| * [Documentation generator plugin (Markdown/HTML/DocBook/...)](https://github.com/pseudomuto/protoc-gen-doc) | |
| ## Other Utilities | |
| There are miscellaneous other things you may find useful as a Protocol Buffers | |
| developer. | |
| * [Buf CLI](https://buf.build/docs/cli/) | |
| * [Code generation](https://buf.build/docs/generate/) | |
| * [Linting](https://buf.build/docs/lint/) | |
| * [Breaking change detection](https://buf.build/docs/breaking/) | |
| * [Formatting](https://buf.build/docs/format/) | |
| * [Calling gRPC APIs](https://buf.build/docs/curl/) | |
| * [Editor integration and LSP](https://buf.build/docs/cli/editors-lsp/) | |
| * [Wireshark/Ethereal packet sniffer plugin](https://code.google.com/p/protobuf-wireshark/) | |
| * [Alternate encodings (JSON, XML, HTML) for Java protobufs](https://code.google.com/p/protobuf-java-format/) | |
| * [Another JSON encoder/decoder for Java](https://github.com/sijuv/protobuf-codec) | |
| * [Oracle PL SQL plugin](https://code.google.com/p/protocol-buffer-plsql/) | |
| * [C++ Builder compatible protobuf](https://github.com/saadware/protobuf-cppbuilder) | |
| * [Protobuf for nginx module](https://github.com/dbcode/protobuf-nginx/) | |
| * [RSpec matchers and Cucumber step defs for testing Protocol Buffers](https://github.com/connamara/protobuf_spec) | |
| * [Multi-platform executable JAR and Java API for protoc](https://github.com/os72/protoc-jar) | |
| * [Python scripts to convert between Protocol Buffers and JSON](https://github.com/NextTuesday/py-pb-converters) | |
| * [C++ library for serialization/de-serialization between Protocol Buffers and | |
| JSON.](https://github.com/yinqiwen/pbjson) | |
| * [ProtoBuf with Java EE7 Expression Language 3.0; pure Java ProtoBuf Parser | |
| and Builder.](https://github.com/protobufel/protobuf-el) | |
| * [Linter for .proto files](https://github.com/ckaznocha/protoc-gen-lint) | |
| * [Protocol Buffers Dynamic Schema - create protobuf schemas programmatically | |
| (Java)](https://github.com/os72/protobuf-dynamic) | |
| * [Make protoc plugins in NodeJS](https://github.com/konsumer/node-protoc-plugin) | |
| * [ProfaneDB - A Protocol Buffers database](https://profanedb.gitlab.io) | |
| * [Protocol Buffer property-based testing utility and example message | |
| generator (Python / | |
| Hypothesis)](https://github.com/CurataEng/hypothesis-protobuf) | |
| * [Protolock - CLI utility to prevent backward-incompatible changes to .proto | |
| files](https://github.com/nilslice/protolock) | |
| * [Optional GRPC - GRPC for testable microservices (Python)](https://github.com/mattpaletta/optional-grpc.git) | |
| * [Protobuf Parser - Yet another Go package which parses a Protocol Buffer | |
| file (proto2+proto3)](https://github.com/yoheimuta/go-protoparser) | |
| * [Protolint - A tool to enforce Protocol Buffer style and conventions.](https://github.com/yoheimuta/protolint) | |
| * [vscode-protolint: A protobuf linter for visual studio code](https://github.com/plexsystems/vscode-protolint) | |
| * [intellij-protolint: A protobuf linter for JetBrains IDEs](https://github.com/yoheimuta/intellij-protolint) | |
| * [vim-protolint: A protobuf linter for Vim](https://github.com/yoheimuta/vim-protolint) | |
| * [super-linter: Protocol Buffer lint as GitHub Action](https://github.com/github/super-linter) | |
| * [protoc-gen-fieldmask - A plugin to generate static type fieldmask paths](https://github.com/idodod/protoc-gen-fieldmask) | |
| * [protoc-gen-bq-schema - A protoc plugin to generate BigQuery schema files](https://github.com/GoogleCloudPlatform/protoc-gen-bq-schema) | |
| * [protobuf-decoder-explainer - Web page which decodes and explains pasted | |
| binary Protocol | |
| Buffers](https://github.com/jamesdbrock/protobuf-decoder-explainer) | |
| * [rubberbuf - dynamically transpile protobuf into AST](https://github.com/s-expresso/rubberbuf) | |
| `clojure` `clojurescript` | |
| * [clojobuf-serdes - low level serialize/deserialize library for protobuf | |
| binary format](https://github.com/s-expresso/clojobuf-codec) `clojure` | |
| `clojurescript` | |
| * [gRPC Federation - generates a gRPC server by writing a custom option in | |
| Protocol Buffers](https://github.com/mercari/grpc-federation) | |
| * [Proto Boiler - A plugin to generate boilerplate code from .proto files | |
| using templates](https://github.com/in4lio/protoboiler) |