2014-09-01 15:34:14 -07:00
|
|
|
|
2021-08-11 14:10:28 -07:00
|
|
|
# μpb: small, fast C protos
|
2019-05-15 13:51:18 -07:00
|
|
|
|
2021-08-11 14:10:28 -07:00
|
|
|
μpb (often written 'upb') is a small
|
|
|
|
[protobuf](https://github.com/protocolbuffers/protobuf) implementation written
|
|
|
|
in C.
|
2014-09-01 15:34:14 -07:00
|
|
|
|
2021-08-11 14:10:28 -07:00
|
|
|
upb is the core runtime for protobuf languages extensions in
|
2023-08-25 11:05:44 -07:00
|
|
|
[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/upb/python).
|
2014-09-01 15:34:14 -07:00
|
|
|
|
2021-08-11 14:10:28 -07:00
|
|
|
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.
|
2014-09-01 15:34:14 -07:00
|
|
|
|
2021-08-11 14:10:28 -07:00
|
|
|
## Features
|
2014-09-01 15:34:14 -07:00
|
|
|
|
2021-08-11 14:10:28 -07:00
|
|
|
upb has comparable speed to protobuf C++, but is an order of magnitude smaller
|
|
|
|
in code size.
|
2019-05-16 11:38:51 -07:00
|
|
|
|
2021-08-11 14:10:28 -07:00
|
|
|
Like the main protobuf implementation in C++, it supports:
|
2019-05-16 11:38:51 -07:00
|
|
|
|
2021-08-11 14:10:28 -07:00
|
|
|
- a generated API (in C)
|
|
|
|
- reflection
|
|
|
|
- binary & JSON wire formats
|
|
|
|
- text format serialization
|
2021-10-01 16:34:42 -07:00
|
|
|
- all standard features of protobufs (oneofs, maps, unknown fields, extensions,
|
|
|
|
etc.)
|
2021-08-11 14:10:28 -07:00
|
|
|
- full conformance with the protobuf conformance tests
|
2019-05-16 11:38:51 -07:00
|
|
|
|
2021-08-11 14:10:28 -07:00
|
|
|
upb also supports some features that C++ does not:
|
2014-09-01 15:34:14 -07:00
|
|
|
|
2021-08-11 14:10:28 -07:00
|
|
|
- **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.
|
|
|
|
|
2021-10-01 16:34:42 -07:00
|
|
|
However there are a few features it does not support:
|
2014-09-01 15:34:14 -07:00
|
|
|
|
2021-08-11 14:10:28 -07:00
|
|
|
- text format parsing
|
2021-08-11 17:01:29 -07:00
|
|
|
- deep descriptor verification: upb's descriptor validation is not as exhaustive
|
2021-08-11 14:10:28 -07:00
|
|
|
as `protoc`.
|
2014-09-01 15:34:14 -07:00
|
|
|
|
2021-08-11 14:10:28 -07:00
|
|
|
## Install
|
2014-09-01 15:34:14 -07:00
|
|
|
|
2021-08-11 14:10:28 -07:00
|
|
|
For Ruby, use [RubyGems](https://rubygems.org/gems/google-protobuf):
|
|
|
|
|
|
|
|
```
|
|
|
|
$ gem install google-protobuf
|
2019-05-15 13:51:18 -07:00
|
|
|
```
|
2014-09-01 15:34:14 -07:00
|
|
|
|
2021-08-11 14:10:28 -07:00
|
|
|
For PHP, use [PECL](https://pecl.php.net/package/protobuf):
|
2014-09-01 15:34:14 -07:00
|
|
|
|
2021-08-11 14:10:28 -07:00
|
|
|
```
|
|
|
|
$ sudo pecl install protobuf
|
|
|
|
```
|
2014-09-01 15:34:14 -07:00
|
|
|
|
2022-09-30 17:29:35 -07:00
|
|
|
For Python, use [PyPI](https://pypi.org/project/protobuf/):
|
|
|
|
|
|
|
|
```
|
|
|
|
$ sudo pip install protobuf
|
|
|
|
```
|
|
|
|
|
2022-03-06 15:07:47 -08:00
|
|
|
Alternatively, you can build and install upb using
|
|
|
|
[vcpkg](https://github.com/microsoft/vcpkg/) dependency manager:
|
2020-03-31 00:30:36 -07:00
|
|
|
|
|
|
|
git clone https://github.com/Microsoft/vcpkg.git
|
|
|
|
cd vcpkg
|
|
|
|
./bootstrap-vcpkg.sh
|
|
|
|
./vcpkg integrate install
|
|
|
|
./vcpkg install upb
|
|
|
|
|
2022-03-06 15:07:47 -08:00
|
|
|
The upb port in vcpkg is kept up to date by microsoft team members and community
|
|
|
|
contributors.
|
2014-09-01 15:34:14 -07:00
|
|
|
|
2022-03-06 15:07:47 -08:00
|
|
|
If the version is out of date, please
|
|
|
|
[create an issue or pull request](https://github.com/Microsoft/vcpkg) on the
|
|
|
|
vcpkg repository.
|
2014-09-01 15:34:14 -07:00
|
|
|
|
2021-08-11 14:10:28 -07:00
|
|
|
## Contributing
|
2014-09-01 15:34:14 -07:00
|
|
|
|
2021-08-11 14:10:28 -07:00
|
|
|
Please see [CONTRIBUTING.md](CONTRIBUTING.md).
|