| |
| # μpb: small, fast C protos |
| |
| μpb (often written 'upb') is a small |
| [protobuf](https://github.com/protocolbuffers/protobuf) implementation written |
| in C. |
| |
| upb is the core runtime for protobuf languages extensions in |
| [Ruby](https://github.com/protocolbuffers/protobuf/tree/main/ruby), |
| [PHP](https://github.com/protocolbuffers/protobuf/tree/main/php), and |
| [Python](https://github.com/protocolbuffers/protobuf/tree/main/python). |
| |
| While upb offers a C API, the C API & ABI **are not stable**. For this reason, |
| upb is not generally offered as a C library for direct consumption, and there |
| are no releases. |
| |
| ## Features |
| |
| upb has comparable speed to protobuf C++, but is an order of magnitude smaller |
| in code size. |
| |
| Like the main protobuf implementation in C++, it supports: |
| |
| - a generated API (in C) |
| - reflection |
| - binary & JSON wire formats |
| - text format serialization |
| - all standard features of protobufs (oneofs, maps, unknown fields, extensions, |
| etc.) |
| - full conformance with the protobuf conformance tests |
| |
| upb also supports some features that C++ does not: |
| |
| - **optional reflection:** generated messages are agnostic to whether |
| reflection will be linked in or not. |
| - **no global state:** no pre-main registration or other global state. |
| - **fast reflection-based parsing:** messages loaded at runtime parse |
| just as fast as compiled-in messages. |
| |
| However there are a few features it does not support: |
| |
| - text format parsing |
| - deep descriptor verification: upb's descriptor validation is not as exhaustive |
| as `protoc`. |
| |
| ## Install |
| |
| For Ruby, use [RubyGems](https://rubygems.org/gems/google-protobuf): |
| |
| ``` |
| $ gem install google-protobuf |
| ``` |
| |
| For PHP, use [PECL](https://pecl.php.net/package/protobuf): |
| |
| ``` |
| $ sudo pecl install protobuf |
| ``` |
| |
| For Python, use [PyPI](https://pypi.org/project/protobuf/): |
| |
| ``` |
| $ sudo pip install protobuf |
| ``` |
| |
| Alternatively, you can build and install upb using |
| [vcpkg](https://github.com/microsoft/vcpkg/) dependency manager: |
| |
| git clone https://github.com/Microsoft/vcpkg.git |
| cd vcpkg |
| ./bootstrap-vcpkg.sh |
| ./vcpkg integrate install |
| ./vcpkg install upb |
| |
| The upb port in vcpkg is kept up to date by microsoft team members and community |
| contributors. |
| |
| If the version is out of date, please |
| [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the |
| vcpkg repository. |
| |
| ## Contributing |
| |
| Please see [CONTRIBUTING.md](CONTRIBUTING.md). |