No description
Find a file
Joshua Haberman d2bc60c98c
Merge pull request #461 from haberman/python-message
Message and MessageMeta classes for Python
2021-12-08 22:28:01 -08:00
.bazelci Install additional packages to run test on Bazel CI 2021-09-30 13:26:02 +08:00
.github/workflows Reverted GitHub Actions changes. 2021-12-03 15:14:07 -08:00
bazel Removed defunct link to old protobuf. 2021-12-03 16:49:15 -08:00
benchmarks Properly byte-swap fixed packed fields. 2021-11-05 00:31:38 +00:00
cmake Added required field checking into the encoder. 2021-12-05 10:28:37 -08:00
python Addressed PR comments. 2021-12-08 21:09:22 -08:00
tests Fix conformance test getting stuck on big-endian system 2021-11-06 01:09:47 -07:00
third_party A few more fixes. 2021-10-12 11:28:50 -07:00
upb Addressed PR comments. 2021-12-05 19:45:51 -08:00
upbc Addressed PR comments. 2021-12-05 12:56:21 -08:00
.bazelignore Added missing .bazelignore file. 2021-08-16 17:12:09 -07:00
.bazelrc Removed the explicit define of __SANITIZE_ADDRESS__. 2021-12-01 13:29:36 -08:00
.gitignore Implement json decoding for Any message. (#130) 2018-12-04 15:21:32 -08:00
BUILD Addressed PR comments. 2021-12-05 19:45:51 -08:00
CONTRIBUTING.md Updated some docs and removed/rearranged some obsolete stuff. 2021-08-11 14:10:28 -07:00
DESIGN.md Fleshed out DESIGN.md a bit more. 2021-09-15 22:06:52 -07:00
LICENSE Updated Google, Inc. to Google LLC. 2021-04-05 12:28:27 -07:00
README.md Added support for extensions. 2021-10-01 16:34:42 -07:00
WORKSPACE Merge pull request #420 from haberman/new-fuzzing 2021-10-11 22:50:27 -07:00

μpb: small, fast C protos

μpb (often written 'upb') is a small protobuf implementation written in C.

upb is the core runtime for protobuf languages extensions in Ruby, PHP, and (soon) 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:

$ gem install google-protobuf

For PHP, use PECL:

$ sudo pecl install protobuf

Contributing

Please see CONTRIBUTING.md.