This release is a pre-release and may not be stable for production use.
Embedded Proto is a product of Embedded AMS B.V. For more information about Embedded Proto please visit EmbeddedProto.com.
Copyright (C) 2020-2026 Embedded AMS B.V. - All Rights Reserved, www.EmbeddedAMS.nl, info@EmbeddedAMS.nl
Introduction
Embedded Proto is a C++ implementation of Google Protocol Buffers dedicated to microcontrollers. The implementation focuses on a small footprint and low memory usage. No dynamic memory allocation is used to make the code predictable. Unit tests and static code analysis are used to improve the reliability of the code.
Natively, protocol buffers are not suitable for microcontrollers. The C++ code protoc generates is written for server and desktop processors. Embedded Proto is a plugin for protoc generating C++ code suitable for microcontrollers. In this way, Embedded Proto provides an easy-to-use interface to exchange data between embedded devices and the outside world. Specify the data format between your IoT device and other devices, servers, apps, or desktop applications in a standardized way!
Requirements
To generate the code for your messages:
- Python 3.11 or newer, and pip.
The protobuf compiler comes with Embedded Proto, you do not have to install protoc yourself.
To build the generated code for your target:
- A C++ compiler supporting C++17.
- No dynamic memory, no exceptions and no RTTI are required. The library is header only.
Optional, for the alternative ways to install described on the installation page:
- uv, a much faster replacement for pip and venv.
- Git, when you use Embedded Proto as a submodule in your project.
Optional, for developing Embedded Proto itself:
- CMake 3.28 or newer, to build and run the unit tests. See CONTRIBUTING.md.
Getting started
New to Embedded Proto? Follow the quick start. In about ten minutes you install Embedded Proto, define a message, generate the code for it and serialize the message in a small program on your PC. The same code moves to your microcontroller without changes.
In short, Embedded Proto is installed with pip:
pip install EmbeddedProto
Generate the C++ code for the messages in your *.proto file:
embeddedproto -I proto --eams_out=generated proto/reading.proto
Build your project with C++17, the generated folder and the header only library of Embedded Proto as include paths. The command embeddedproto --cpp-src-location prints where the library is.
When linking with a C compiler, do not forget to pass -lstdc++ to the linker. This prevents errors like undefined reference to.
Other ways to install, with uv or as a git submodule, are described on the installation page.
Documentation
The manual lives on EmbeddedProto.com:
- How it works
- Generating source code and setting field options from a file
- Using a message: strings, bytes, repeated fields, maps, Any and more
- Serialization and deserialization
- Supported features
- Advanced topics: protobuf editions, callback storage and custom storage
Our website also hosts an array of examples detailing possible use cases and tutorials on toolchain integrations.
What is new
Version 4.0.0 is the largest release of Embedded Proto so far. It changes how the library is installed, adds maps, Any and streaming, and supports the new protobuf editions. See what is new in 4.0 for what you gain, and migrating from 3.x for what to change in your project.
To stay up to date, signup for our User Update.
License
Embedded Proto is dual licensed. See LICENSE for the full notice.
Open source
Embedded Proto is free of charge under the GNU General Public License v3.0. The combined work you distribute must comply with the GPLv3; your own source code may use the GPLv3 or any license compatible with it. The code Embedded Proto generates is produced from templates in this repository and embeds code from them, so the template code in it is covered by the same license. The GPL version comes without support.
Commercial
Building a closed source product? Then you need a commercial license. It removes the obligation to publish your source code, and depending on the tier includes:
- An unlimited number of MCUs
- Professional support
- A code quality report
See embeddedproto.com/pricing. Setting your license token is described on the installation page.
Evaluation
Internal evaluation and testing of Embedded Proto before purchase are free and do not require either license, as long as no product containing Embedded Proto or its generated code is distributed.
Third-party software
For compliance reviews, this is every piece of software Embedded Proto relies on, split by whether it ends up in your product or is only used while generating code.
In your product
Only code from Embedded Proto itself ends up in your firmware. It contains no third-party code. It does use the C++ standard library, which comes from your own toolchain and is licensed by its vendor, not by Embedded Proto.
| Component | Copyright | License |
|---|---|---|
| Embedded Proto header-only library | Embedded AMS B.V. | GPL-3.0-only OR commercial |
| Generated message code | Embedded AMS B.V. for the template code, you for your .proto definitions |
GPL-3.0-only OR commercial |
| C++ standard library | The vendor of your toolchain | Whatever your toolchain uses, for example GCC's libstdc++ is GPL-3.0 with the runtime library exception |
During code generation
These run on your development machine and are not linked into your product. Python comes from your own installation, the packages are installed from PyPI. None of them are redistributed by Embedded Proto.
| Component | Use | License |
|---|---|---|
| Python 3.11 or newer | Runs the generator | PSF License |
| protobuf | Parses .proto files, descriptor.proto is imported by the options file |
BSD-3-Clause |
| grpcio-tools | Bundles the protoc compiler |
Apache-2.0, bundled protoc is BSD-3-Clause |
| Jinja2 | Renders the code templates | BSD-3-Clause |
| MarkupSafe | Dependency of Jinja2 | BSD-3-Clause |
| toposort | Orders message definitions | Apache-2.0 |
Development only
GoogleTest (BSD-3-Clause) is a git submodule used for the unit tests of the library. It is not part of the generator package or of your product.
Development
If you consider helping with the development of Embedded Proto please read CONTRIBUTING.md and the developer section of the installation page. They detail how you can build the unit tests included in this repo.
Metadata
Release files for EmbeddedProto 4.0.0b3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| embeddedproto-4.0.0b3.tar.gz | 134.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| embeddedproto-4.0.0b3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 315.3 kB
Release files / embeddedproto-4.0.0b3.tar.gz
| Download URL | embeddedproto-4.0.0b3.tar.gz |
|---|---|
| Size | 134.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5321c90fb08d7399e0a591c7c7de6ca522f8f3cdab562e57407aa82ffe5d1960
|
|
BLAKE2b-256 checksum How to use checksums |
9e91c0496b7b546d1d5ef38041cf15ba6cde0728b598b278a4b61656816939de
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.
Transparency logRelease files / embeddedproto-4.0.0b3-py3-none-any.whl
| Download URL | embeddedproto-4.0.0b3-py3-none-any.whl |
|---|---|
| Size | 181.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e37603d4bdb37435f4edfd0da75874c9ad07d2ad7474ceded6032732142d4c5e
|
|
BLAKE2b-256 checksum How to use checksums |
b61d19f7a8284d0e40c559508f07d86815eac014c7f4c62b19f777a43a3604f1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.
Transparency log