# μ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).