首页
/ Protobuf 第三方生态全景:Protocol Buffers 的第三方实现、RPC 框架、构建集成与工具链

Protobuf 第三方生态全景:Protocol Buffers 的第三方实现、RPC 框架、构建集成与工具链

2026-09-04 14:47:28作者:伍霜盼Ellen

Protocol Buffers 的核心仓库不仅包含 Google 官方的 C++、Java、Python 等语言运行时与 protoc 编译器,还通过 docs/third_party.md 维护了一份庞大的第三方生态目录,覆盖 40 余种编程语言的 protobuf 实现、十余种 RPC 框架、构建系统集成、IDE 插件以及文档生成、校验、调试等实用工具。本文以这份官方目录为主体,完整梳理各分类下的项目清单,并结合当前仓库源码说明 protobuf 本体自身是如何消费第三方依赖的(如 vendored 的 zlib、jsoncpp、utf8_range),帮助你在选型时快速定位合适的实现、理解各生态类别的边界,并掌握评估第三方 protobuf 库的风险点。

一、文档定位与使用须知

docs/third_party.md 的原始表述非常明确:该页面列举的代码由第三方开发和维护,这些项目与 Google 没有隶属关系,也不代表 Google 的背书(除非明确标注),使用者需自行承担风险;并且其中许多项目处于开发早期阶段,尚未达到生产就绪(production-ready)。文档同时给出了贡献方式:如果你有应该收录的项目,应通过向 protobuf 仓库提交 pull request 来更新该页面。

理解这三点提示,是正确使用这份目录的前提:

  • 目录中明确标注 "Google-official implementation" 的条目(如 C++、Go、Java、Python 对应的 protocolbuffers/protobuf 仓库,以及 gRPC 对 C++、Node.js、Python、Ruby、Objective-C、PHP、C# 的支持)才属于官方支持范围;
  • 其余条目(nanopb、prost、scalapb、wire 等)虽然广泛使用,但属于社区项目,API 稳定性、安全响应、与最新 editions 特性(如仓库中 editions/ 目录所实现的 edition 2023/2024 特性)的跟进速度都需自行评估;
  • 文档中部分条目已标注维护状态,例如 Erlang 生态明确注明 basho/erlang_protobuffs "不再维护,请改用 gpb",RPC 部分也单列了 "Inactive"(已停止维护)清单。

二、编程语言实现(Programming Languages)

这是目录中最长的一类,列举了实现 Protocol Buffers 的第三方(及部分官方)库。官方条目对应本仓库的实际代码:C++ 运行时在 src/google/protobuf/(含 upb 高性能解析内核 upb/),Java/Kotlin 运行时在 java/(Kotlin 官方支持见 java/kotlin/java/kotlin-lite/),Python 运行时在 python/,C# 在 csharp/,Ruby 在 ruby/,PHP 在 php/,以及仓库内直接提供的 Lua 绑定 lua/ 和 Rust 实验性绑定 rust/

以下按文档原文完整继承各语言条目(外部项目地址以文档列出的仓库地址为原文记录,此处以纯文本给出,不转换为链接):

2.1 C / C++ 系

  • C 语言:protobuf-c(github.com/protobuf-c/protobuf-c)、nanopb(koti.kapsi.fi/jpa/nanopb)、pbc(github.com/cloudwu/pbc)、upb(github.com/haberman/upb/wiki)、protobluff(github.com/squidfunk/protobluff)、pbtools(github.com/eerimoq/pbtools);
  • C++ 语言:protocolbuffers/protobuf(Google 官方实现,即本仓库)、simple-protobuf(github.com/tonda-kriz/simple-protobuf)、EmbeddedProto(EmbeddedProto.com)、struct2x(github.com/yksten/struct2x);
  • C/C++ 通用:spbc(spbc.sf.net)。

其中 nanopb 与 protobuf-c 是最典型的嵌入式 C 场景选择:它们不依赖官方 C++ 运行时,直接用 .proto 文件生成 C 结构体与编解码函数。值得注意的是,文档中列出的 upb 正是本仓库内 upb/ 目录的上游来源,upb 如今已内置于 protobuf 仓库并作为 C++ 与多种语言运行时的高性能 wire 解析内核(见 upb/README.md)。

2.2 JVM 系(Java / Kotlin / Scala)

  • Java:protocolbuffers/protobuf(Google 官方实现,对应本仓库 java/core/java/lite/)、Wire(github.com/square/wire,Java/Android 向)、QuickBuffers(github.com/HebiRobotics/QuickBuffers,零拷贝方案)、Java ME 的 swingme 移植;
  • Kotlin:kroto-plus(github.com/marcoferrer/kroto-plus)、kotlinx.serialization(github.com/Kotlin/kotlinx.serialization)、sisyphus(github.com/ButterCam/sisyphus)、protokt(github.com/open-toast/protokt)、pbandk(Kotlin Multiplatform,github.com/streem/pbandk)。

本仓库的 Kotlin 官方运行时位于 java/kotlin/,lite 裁剪版通过 java/kotlin-lite/lite.awk 从完整运行时派生生成;JVM AOT 使用方式可进一步参考 docs/jvm_aot.md

2.3 .NET / C# 系

  • C#:silentorbit.com/protobuf(文档收录的第三方 C# 实现;仓库内 csharp/ 目录为 Google 官方 C# 运行时);
  • C# 生态在文档工具类中还收录了 protobuf-net(RPC 一节)、icerpc-csharp、gRPC 官方 C# 支持等。

2.4 脚本与动态语言

  • Clojure / ClojureScript:clojure-protobuf、clojusc/protobuf、protojure(protojure.readthedocs.io)、clojobuf(github.com/s-expresso/clojobuf);文档工具类还收录了 clojure 生态的 rubberbuf(动态转译为 AST)与 clojobuf-serdes(二进制格式低层编解码);
  • Elixir:exprotoc、protobuf-elixir、protox;
  • Erlang:gpb(github.com/tomas-abrahamsson/gpb,推荐项)、piqi.org、erlang_protobuffs(文档注明已停止维护,改用 gpb);
  • Go:golang/protobuf(Google 官方实现)、gopbuf、gogo/protobuf(github.com/gogo/protobuf,社区高星扩展);
  • GopherJS:github.com/johanbrandhorst/protobuf(浏览器端 Go);
  • Haskell:hprotoc(hackage)、proto-lens(标注为 Google 非官方实现)、proto3-suite(代码生成器)与 proto3-wire(二进制序列化器);
  • Julia:ProtoBuf.jl(github.com/JuliaIO/ProtoBuf.jl);
  • Lua:lua-protobuf、lua-pb。本仓库同时内置了一套可直接构建的 Lua 绑定 lua/(基于 upb,见 lua/README.md),可作为官方 Lua 方案的参照;
  • Objective-C:protobuf-objc;本仓库官方 Objective-C 运行时见 objectivec/(GPBMessage 等);
  • OCaml / Perl / PHP:piqi.org、Google::ProtocolBuffers 系列、allegro/php-protobuf、chobie/php-protocolbuffers(仓库内 php/ 为官方 PHP 实现,含 C 扩展 php/ext/);
  • Python:protocolbuffers/protobuf(Google 官方实现)、eigenein/protobuf、python-betterproto(现代 Pythonic API);
  • R:RProtoBuf;
  • Ruby:ruby-protocol-buffers、beefcake、localshred/protobuf;
  • Scala:scala-protobuf、ScalaBuff、scalapb(scalapb.github.io);
  • Swift:protobuf-swift、swift-protobuf(github.com/apple/swift-protobuf);
  • Rust:prost(github.com/tokio-rs/prost)、rust-protobuf、quick-protobuf。仓库内 rust/ 目录是官方 Rust 绑定(upb 之上的 C++ 内核封装),其 crate 发布材料位于 rust/release_crates/
  • 其他:Action Script(JProtoc、protobuf-as3)、Ada(github.com/reznikmm/protobuf)、C#(silentorbit)、Common Lisp(brown/protobuf、cl-protobuf)、D(protobuf-d、dproto、ProtocolBuffer)、Delphi(protobuf-delphi、fundementals)、Dart(dart-protobuf 运行时 + dart-protoc-plugin 生成器,dart-lang 官方)、Elixir、Elm(elm-protobuf)、Hacklang/HHVM(proto-hack)、GDScript(godobuf,Godot v3 插件)、Haxe(protoc-gen-haxe)、JavaScript(bufbuild/protobuf-es、protojs、ProtoBuf.js、node-protoc-plugin、node-protoc-gen-javascript、sisyphus-js)、Kotlin Multiplatform、Purescript、Prolog(SWI-Prolog protobufs 包)、Solidity(pb3-gen-sol)、TypeScript(protobuf-es、ts-protoc-gen、protoc-gen-ts、pbkit)、Vala、Zig(zig-protobuf)。

从条目数量可以推断:JavaScript/TypeScript、Kotlin、Clojure 与 C 语言是第三方实现最密集的区域,选型时同一语言下往往需要比较多个项目的活跃度、editions/新特性支持(如字段 presence、JSON mapping)与许可证。

三、RPC 实现(RPC Implementations)

文档对此类有一句关键说明:gRPC(grpc.io)是 Google 针对 Protocol Buffers 的官方 RPC 实现;其余第三方 RPC 实现中,一部分真正工作在 protobuf 的 service 定义上(即 .proto 文件中 service 关键字定义的服务),另一部分只是复用 protobuf 消息对象作为序列化格式。

3.1 活跃项目(按文档原文)

  • gRPC(github.com/grpc/grpc,C++、Node.js、Python、Ruby、Objective-C、PHP、C#,Google 官方实现);
  • Connect(connectrpc.com,Go、JavaScript、TypeScript、Python、Dart、Swift、Kotlin);
  • ZeroC ICE(zeroc.com/products/ice,多语言);
  • protobuf-net(github.com/protobuf-net/protobuf-net,C#/.NET/WCF/VB);
  • DeltaV 外部序列化(C++);
  • protojure(Clojure);
  • sofa-pbrpc(github.com/baidu/sofa-pbrpc,C++);
  • protobuf-csharp-rpc、libpbrpc(C++)、grpc-protobuf-validation(Java)、elixir-grpc/grpc(Elixir);
  • GopherJS 版 protobuf(github.com/johanbrandhorst/protobuf)、gRPC-haskell(Haskell);
  • raster(github.com/Yeolar/raster,C++)、wsrpc(JavaScript Node.js/浏览器);
  • pbkit 的 frpc 测试实现(TypeScript Node.js/浏览器);
  • xsrpcj(Java)、twirp(github.com/twitchtv/twirp,多语言);
  • icerpc-csharp(C#);
  • amp-embedded-infra-lib(C++、C#、Java,嵌入式基础设施库);
  • blerpc(C/nanopb、Python、Kotlin、Swift、Dart、TypeScript,走 BLE 蓝牙低功耗的 RPC)。

3.2 已停止维护清单(Inactive)

文档单独列出了 Inactive 清单,收录了大量 code.google.com 时代的项目(protobuf-actionscript3、protoc-gen-as3、protobuf-csharp-port、protobuf-javame、protobuf-rpc-pro、txprotobuf、modeswitch/protobuf-rpc、protobuf-socket-rpc、proto-streamer、server1、protobuf-mina-rpc、casocklib、cxf-protobuf、protobuf-remote、eneter-protobuf-serializer、claire/protorpc、arab、rpcz、libmaid、protobuf-js、protobuf-for-node、protostuff、protoc-gen-lua、protobuf-matlab、protobuf-mercury、protobuf-objc、protobuf-perlxs、pb4php、ruby-protobuf、protobuf-scala、protoc-gen-docbook 等)。这一清单的实际价值在于提醒读者:看到老文章中引用的这些项目时,应默认其不可用于新项目。

四、构建系统集成(Build)

文档的 Build 一节覆盖了将 .proto 文件纳入主流构建系统的第三方插件,这也是本仓库自身构建体系中大量使用的集成方式:

  • Bazel Build(bazel.build)及其规则集:

    • rules_closure(js-closure);
    • rules_go(go);
    • rules_protobuf(java c++ c# go js-closure js-node python ruby)。

    本仓库正是 Bazel 用户:根目录 BUILD.bazelWORKSPACEWORKSPACE.bzlmod 以及自研的 proto 规则 bazel/(如 bazel/proto_library.bzlbazel/cc_proto_library.bzlbazel/py_proto_library.bzlbazel/java_proto_library.bzl)都展示了 proto_library 风格的规则如何按语言生成代码,与文档中 rules_protobuf 的角色类似。

  • Maven Protobuf Compiler Plugin

    • xolstice 的 protobuf-maven-plugin(xolstice.org 有文档,源码在 github.com/xolstice/protobuf-maven-plugin,发布在 Maven Central);
    • 早期的 maven-protoc-plugin(code.google.com);
    • os72 的 protoc-jar-maven-plugin;
    • ascopes 的 protobuf-maven-plugin。
  • Gradle:google/protobuf-gradle-plugin(文档收录的 Gradle 插件)。

  • sbt:Atry/sbt-cppp(Protocol Buffers 的 sbt 插件)。

仓库中 CMake 构建对第三方构建集成的对应物是 cmake/ 目录:cmake/dependencies.cmake 管理外部依赖、cmake/protobuf-generate.cmake 提供 protobuf_generate 类的生成宏,使用细节见 docs/cmake_protobuf_generate.md

五、IDE 支持(IDE)

文档收录的编辑器工具,与本仓库 editors/ 目录提供的原生语法高亮/配置互相补充(editors/README.txt 说明该目录存放让编辑器正确显示 .proto 文件的高亮与配置文件,各文件头注释有具体用法;例如 editors/proto.vimeditors/protobuf-mode.el):

  • Buf for Visual Studio Code(marketplace 扩展);
  • vscode-proto3(zxh404 的 VS Code 支持);
  • Visual Studio 语言服务支持(visualstudiogallery);
  • IntelliJ IDEA 插件:jvolkman/intellij-protobuf-editor 与 devkanro/intellij-protobuf-plugin;
  • TextMate 语法高亮(michaeledgar/protobuf-tmbundle);
  • Notepad++ 的 .proto 高亮(chai2010/notepadplus-protobuf);
  • Eclipse 编辑器(Google 出品的 code.google.com/p/protobuf-dt);
  • NetBeans IDE 插件(code.google.com/p/protobuf-netbeans-plugin);
  • 序列化 protobuf 数据的可视化编辑器 protobufeditor(code.google.com/p/protobufeditor)。

六、文档生成与其他工具(Documentation / Other Utilities)

6.1 文档生成器

文档在 Documentation 一节收录了 protoc-gen-doc:一个支持 Markdown/HTML/DocBook 等输出的文档生成插件(github.com/pseudomuto/protoc-gen-doc)。所有此类工具的共同模式是作为 protoc 插件工作——protoc 通过 CodeGeneratorRequest 把 descriptor 喂给插件进程,插件输出 CodeGeneratorResponse 完成代码/文档生成。本仓库 src/google/protobuf/compiler/ 目录实现了插件协议本身,第三方插件开发者可直接对接。

6.2 其他实用工具(按文档原文完整继承)

  • Buf CLI(buf.build):代码生成、Lint、破坏性变更检测(breaking change detection)、格式化、调用 gRPC API(curl 式)、编辑器集成与 LSP;
  • Wireshark/Ethereal 抓包插件(code.google.com/p/protobuf-wireshark):按 .proto 解析抓到的二进制流,排查线上 wire 数据利器;
  • Java protobuf 的 JSON/XML/HTML 替代编码(protobuf-java-format,code.google.com)、另一个 Java JSON 编解码器(sijuv/protobuf-codec);
  • Oracle PL SQL 插件(protocol-buffer-plsql);
  • C++ Builder 兼容版 protobuf(saadware/protobuf-cppbuilder);
  • nginx 的 Protobuf 模块(dbcode/protobuf-nginx);
  • RSpec matchers 与 Cucumber 步骤定义(protobuf_spec);
  • protoc-jar:多平台可执行 JAR 与 Java API,跨环境调用 protoc(os72/protoc-jar);
  • Python 脚本在 protobuf 与 JSON 间互转(NextTuesday/py-pb-converters);
  • C++ 的 protobuf/JSON 互转库(yinqiwen/pbjson);
  • protobuf-el:Java EE7 EL 3.0 纯 Java ProtoBuf 解析器/Builder;
  • protoc-gen-lint:.proto 文件 linter(ckaznocha);
  • protobuf-dynamic:程序化创建 protobuf schema 的动态 schema 库(os72);
  • node-protoc-plugin:在 Node.js 中编写 protoc 插件(konsumer);
  • ProfaneDB:基于 Protocol Buffers 的数据库(profanedb.gitlab.io);
  • hypothesis-protobuf:基于 Hypothesis 的属性测试工具与消息生成器(CurataEng);
  • protolock:防止 .proto 出现向后不兼容变更的 CLI(nilslice);
  • optional-grpc:面向可测试微服务的 gRPC(Python);
  • go-protoparser:解析 .proto 文件的 Go 包(yoheimuta,支持 proto2+proto3);
  • protolint:强制 protobuf 风格与惯例的工具(yoheimuta),配套 vscode-protolint、intellij-protolint、vim-protolint;
  • super-linter:把 protobuf lint 作为 GitHub Action(github/super-linter);
  • protoc-gen-fieldmask:生成静态类型 fieldmask 路径的插件(idodod);
  • protoc-gen-bq-schema:生成 BigQuery schema 的 protoc 插件(GoogleCloudPlatform);
  • protobuf-decoder-explainer:粘贴二进制 protobuf 后解码并逐字段解释的网页工具(jamesdbrock);
  • gRPC Federation:通过在 .proto 中写自定义 option 生成 gRPC server(mercari/grpc-federation);
  • protoboiler:用模板从 .proto 生成样板代码的插件(in4lio)。

可以推断,这一类工具的共同主题是围绕 .proto 文件的治理:lint(protolint、protoc-gen-lint、Buf lint、super-linter)、兼容性防护(protolock、Buf breaking)、可观测性(Wireshark 插件、decoder-explainer)与代码生成增强(protoc-gen-fieldmask、protoc-gen-bq-schema、protoboiler)。

七、从本仓库源码看"第三方"的另一面:官方仓库如何消费第三方依赖

文档标题中的 "Third-Party" 在 protobuf 仓库内部还有另一层含义:third_party/ 目录本身就是官方仓库管理第三方代码的位置。观察其实际内容,可以学到官方工程组织第三方依赖的方式:

这说明官方仓库处理第三方代码遵循两类模式:小依赖用"下载源码 + 仓库内 BUILD 规则注入",核心路径依赖则直接 vendored 进 third_party/utf8_range/ 并纳入 fuzz(third_party/utf8_range/fuzz/)与单测(third_party/utf8_range/utf8_validity_test.cc)。这与 docs/third_party.md 面向外部生态的定位形成互补:前者是"别人写的 protobuf 周边",后者是"protobuf 自己依赖的别人"。

八、选型建议与风险边界

结合文档声明与仓库证据,使用这份第三方目录时建议遵循:

  1. 优先官方实现:仓库 README.md 所支持的 C++/Java/Python/C#/Objective-C/PHP/Ruby/Go(官方 Go 实现位于独立仓库 golang/protobuf)、Kotlin(java/kotlin/)、Rust(rust/)、Dart、Lua(lua/)等,其代码在本仓库可查证;文档中标注 "Google-official" 的条目与之对应;
  2. 区分"实现类"与"工具类":语言实现(第二节)替换的是运行时,RPC 框架(第三节)替换的是通信层,构建插件(第四节)与 IDE/文档/lint 工具(第五、六节)通常可与官方实现叠加使用,三者的引入风险递减;
  3. 警惕版本与特性差距:官方 C++ 运行时正在向 upb 内核与 editions 体系演进(见 upb/editions/hpb/ 目录),第三方库对字段 presence(docs/field_presence.md)、JSON mapping(docs/options.md)等新语义的跟进速度不一,选型前应以目标库的 .proto 特性覆盖度为准;
  4. Inactive 即弃用:文档 RPC 一节的 Inactive 清单(大量 code.google.com 项目)不应再用于任何新项目,其中部分项目(如 protobuf-net)已迁移到新地址并被收录到活跃清单中,引用旧文章时需比对两者。
登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
528
588
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
906
1.83 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
891
5.79 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.53 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.34 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
988
506
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384