| :author: rules_proto_grpc | |
| :description: Bazel rules for building Protobuf and gRPC code and libraries from proto_library targets | |
| :keywords: Bazel, Protobuf, gRPC, Protocol Buffers, Rules, Build, Starlark | |
| Protobuf and gRPC rules for `Bazel <https://bazel.build>`_ | |
| ========================================================== | |
| `Bazel <https://bazel.build>`_ rules for building | |
| `Protobuf <https://developers.google.com/protocol-buffers>`_ and `gRPC <https://grpc.io>`_ code and | |
| libraries from | |
| `proto_library <https://docs.bazel.build/versions/master/be/protocol-buffer.html#proto_library>`_ | |
| targets. | |
| If you or your company find these rules useful, please consider `supporting the time spent | |
| building and maintaining these rules <https://github.com/sponsors/aaliddell>`_ ☕ | |
| .. image:: https://img.shields.io/github/v/tag/rules-proto-grpc/rules_proto_grpc?label=release&sort=semver&color=38a3a5 | |
| :alt: Latest Release | |
| :target: https://github.com/rules-proto-grpc/rules_proto_grpc/releases | |
| .. image:: https://badge.buildkite.com/a0c88e60f21c85a8bb53a8c73175aebd64f50a0d4bacbdb038.svg?branch=master | |
| :alt: Buildkite Status | |
| :target: https://buildkite.com/bazel/rules-proto-grpc-rules-proto-grpc | |
| .. image:: https://img.shields.io/badge/bazelbuild-%23proto-38a3a5?logo=slack | |
| :alt: Slack Channel | |
| :target: https://bazelbuild.slack.com/archives/CKU1D04RM | |
| Overview | |
| -------- | |
| These rules provide a consistent set of | |
| `Protocol Buffers (Protobuf) <https://developers.google.com/protocol-buffers>`_ and | |
| `gRPC <https://grpc.io>`_ Bazel rules for a wide range of supported languages, services and | |
| tools. This aims to encompass all aspects of working with ``.proto`` files, such as: | |
| - Generation of language specific source files with protoc | |
| - Creation of libraries from protoc source file outputs | |
| - Linting and checking for breaking changes with `Buf <https://buf.build>`__ | |
| - Producing documentation from your Protobuf definitions with | |
| `protoc-gen-doc <https://github.com/pseudomuto/protoc-gen-doc>`__ | |
| Each supported language (shown as ``{lang}`` below) is generally split into four rule types: | |
| - ``{lang}_proto_compile``: Provides generated files from the Protobuf `protoc` plugin for the | |
| language. For example, for C++ this provides the generated ``*.pb.cc`` and ``*.pb.h`` files. | |
| - ``{lang}_proto_library``: Provides a language-specific library from the generated Protobuf | |
| ``protoc`` plugin outputs, along with necessary dependencies. For example, for C++ this provides a | |
| Bazel native ``cpp_library`` created from the generated ``*.pb.cc`` and ``*.pb.h`` files, with | |
| the Protobuf library linked. | |
| - ``{lang}_grpc_compile``: Provides generated files from both the Protobuf and gRPC ``protoc`` | |
| plugins for the language. For example, for C++ this provides the generated ``*.pb.cc``, | |
| ``*.grpc.pb.cc``, ``*.pb.h`` and ``*.grpc.pb.h`` files. | |
| - ``{lang}_grpc_library``: Provides a language-specific library from the generated Protobuf and gRPC | |
| ``protoc`` plugins outputs, along with necessary dependencies. For example, for C++ this provides | |
| a Bazel native ``cpp_library`` created from the generated ``*.pb.cc``, ``*.grpc.pb.cc``, | |
| ``*.pb.h`` and ``*.grpc.pb.h`` files, with the Protobuf and gRPC libraries linked. | |
| Some languages may have variations on these rules, such as when there are multiple gRPC or Protobuf | |
| implementations. However, generally you'll want to use the ``{lang}_{proto|grpc}_library`` rules, | |
| since these bundle up all the outputs into a library that can easily be used elsewhere in your Bazel | |
| workspace. Alternatively, if you just want the generated source code files, you can use the | |
| ``{lang}_{proto|grpc}_compile`` rules instead. | |
| If you just need compilation of ``.proto`` files for a single language, you may | |
| find your language specific Bazel rules have their own Protobuf or gRPC rules, which may be | |
| preferrable in a single-language repo. | |
| .. _sec_installation: | |
| Installation | |
| ------------ | |
| Support for each language is provided by a separate module, which should be added to your | |
| ``MODULE.bazel`` file. Details for each language's module installation and usage are provided in the | |
| language specific documentation pages. For example, for Go support, you would add the following line: | |
| .. code-block:: python | |
| bazel_dep(name = "rules_proto_grpc_go", version = "<version number here>") | |
| Supported Languages and Tools | |
| ----------------------------- | |
| .. list-table:: Supported Languages | |
| :header-rows: 1 | |
| * - Language | |
| - Protobuf | |
| - gRPC | |
| * - C++ | |
| - ✔ | |
| - ✔ | |
| * - C# | |
| - ✔ | |
| - ✔ | |
| * - Go | |
| - ✔ | |
| - ✔ | |
| * - Java | |
| - ✔ | |
| - ✔ | |
| * - JavaScript | |
| - ✔ | |
| - ✔ | |
| * - Objective-C | |
| - ✔ | |
| - ✔ | |
| * - Python | |
| - ✔ | |
| - ✔ | |
| * - Scala | |
| - ✔ | |
| - ✔ | |
| * - Swift | |
| - ✔ | |
| - ✔ | |
| .. list-table:: Supported Tools | |
| :widths: 20 5 50 | |
| * - Buf Linting | |
| - ✔ | |
| - Checks ``.proto`` files for common errors and adherance to style guidelines | |
| * - Buf Breaking Change Detection | |
| - ✔ | |
| - Checks ``.proto`` files for changes to messages that would break existing clients | |
| * - grpc-gateway | |
| - ✔ | |
| - Produces source files for creating gRPC to JSON proxies | |
| * - protoc-gen-doc | |
| - ✔ | |
| - Creates Markdown, JSON, HTML or DocBook documentation files from your ``.proto`` files | |
| .. toctree:: | |
| :caption: General | |
| :hidden: | |
| Overview <self> | |
| example | |
| custom_plugins | |
| contributing | |
| changelog | |
| .. toctree:: | |
| :caption: External | |
| :hidden: | |
| GitHub Repo <https://github.com/rules-proto-grpc/rules_proto_grpc> | |
| Slack <https://bazelbuild.slack.com/archives/CKU1D04RM> | |
| .. toctree:: | |
| :caption: Rules | |
| :hidden: | |
| lang/buf | |
| lang/cpp | |
| lang/csharp | |
| lang/doc | |
| lang/go | |
| lang/grpc_gateway | |
| lang/java | |
| lang/js | |
| lang/objc | |
| lang/python | |
| lang/scala | |
| lang/swift |