top of page

Open source.

Open source:

smpclient and smpmgr

Updating firmware on a device in the field is a problem every connected product has. We wrote the tools we wanted for it, and published them.

What they are

The Simple Management Protocol is how Zephyr devices are managed over a wire — firmware upgrade, file transfer, reset, statistics. It is specified by the Zephyr Project.

smpclient is a Python library that implements the transport layer of SMP over serial (UART or USB), Bluetooth Low Energy and UDP, with abstractions for the routines everyone needs, firmware upgrade first among them. If you want to handle transport yourself, use the lower-level smp library instead.

smpmgr is the command-line application built on it. It talks to a device over the same three transports, and it doubles as the reference implementation if you are writing your own SMP tooling. It ships as a portable executable for Windows, Linux and macOS, and on PyPI.

Both support plugins for proprietary SMP groups, so a team with its own commands can add them without forking anything.

Why we wrote them

Field upgrade is where connected products go wrong, and the problem does not stop at the protocol. Our Enso project needed a bootloader that upgraded two separate chips at once, because no vendor supported that arrangement. The work that goes into getting an update path right is the same work every time, so we made it reusable and gave it away.

Using them

pip install smpclient[all]

The repositories carry the full documentation, the plugin examples and the releases.

Testing firmware tooling without hardware covers how we test them: SMP servers that run as host processes, so the whole client can be exercised in CI without a board on a desk.

Code: github.com/intercreate/smpclient
Package: pypi.org/project/smpclient/

What this supports

Explore our case studies.