Platform#
Overview#
Remote procedure calls (RPC), channels, and communication streams
Structured logging, tokenization, metrics, crash handling, and tracing
Cooperative multitasking, futures, and asynchronous primitives
Protocol Buffers, JSON, Varint, Base64, and wire format serialization
Synchronization, threading, and portable RTOS abstractions
Embedded kernels, preemptive scheduling, and userspace isolation
Memory allocators, buffers, persistent flash storage, and key-value stores
Hardware abstraction layer interfaces for timers, I2C, SPI, UART, and GPIO
Board support, hardware drivers, and SDK integrations for target platforms
Embedded-safe collections, spans, strings, status, and error handling
Unit testing frameworks, mocking, compilation tests, and fuzzing
Bazel, GN, and CMake integrations and rules
Hermetic LLVM/Clang toolchains, C/C++ libraries, and build utilities
Interactive REPL, CLI utilities, code intelligence, and emulators
Hashing, cryptographic primitives, and secure storage
Comms#
Remote procedure calls (RPC), channels, and communication streams
Learn more: Comms
Name |
Status |
Description |
Languages |
|---|---|---|---|
experimental |
Next gen, zero-copy async RPC with end-to-end backpressure |
C++ |
|
experimental |
Asynchronous datagram-oriented transport interface |
C++ |
|
deprecated |
Async, zero-copy API for sending and receiving bytes or datagrams |
C++ |
|
unstable |
pw_rpc over gRPC |
C++ |
|
stable |
Simple, robust, and efficient serial communication |
Python, C++, TypeScript |
|
experimental |
Transport-agnostic packet routing |
C++ |
|
stable |
Efficient, low-code-size RPC system for embedded devices |
C++, Java, JavaScript, Python, TypeScript |
|
unstable |
|||
stable |
A foundational interface for streaming data |
C++, Rust |
|
stable |
Bluetooth#
Dual-mode Bluetooth Host stack, HCI controllers, and profiles
Learn more: Bluetooth
Name |
Status |
Description |
Languages |
|---|---|---|---|
unstable |
Host-layer Bluetooth Low Energy APIs and utilities |
C++ |
|
stable |
Bluetooth Host Controller Interface utilities |
C++ |
|
unstable |
Bluetooth profiles built on top of pw_bluetooth |
C++ |
|
unstable |
Lightweight proxy for augmenting Bluetooth functionality |
C++ |
|
unstable |
Battle-tested Bluetooth with rock-solid reliability |
C++ |
Observability#
Structured logging, tokenization, metrics, crash handling, and tracing
Learn more: Observability
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
Robust and portable logging for embedded projects |
C++, Java, Python, Rust |
|
stable |
Compress strings to shrink logs by +75% |
C, C++, Python, Rust, TypeScript, Java |
|
stable |
Flexible crash triggering and handling |
C, C++, Rust |
|
stable |
Multi-purpose pluggable interactive console for dev & manufacturing |
Python |
|
stable |
|||
stable |
|||
experimental |
String formatting |
Rust |
|
stable |
Handy hexdump utilities |
C++ |
|
stable |
|||
stable |
|||
stable |
Reliable memory across reboots for crash reporting |
C++ |
|
stable |
|||
stable |
|||
stable |
|||
stable |
Async & concurrency#
Cooperative multitasking, futures, and asynchronous primitives
Learn more: Async & concurrency
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
Cooperative async tasks for embedded |
C++ |
|
experimental |
Software implementations of atomic operations |
C, C++ |
|
stable |
|||
deprecated |
Portable APIs for asynchronous code |
C++ |
Encoding & serialization#
Protocol Buffers, JSON, Varint, Base64, and wire format serialization
Learn more: Encoding & serialization
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
Expressive interface for encoding and decoding protocol buffers |
C++ |
|
stable |
Base64 encoding, decoding, and validating |
C, C++, Rust |
|
stable |
Utilities for manipulating binary data |
C++, Rust |
|
stable |
Checksum calculation API |
C, C++ |
|
experimental |
|||
stable |
Simple, efficient C++ JSON serialization |
C++ |
|
stable |
|||
experimental |
128-bit universally unique identifier (UUID) |
||
stable |
Functions for encoding and decoding variable length integers |
C, C++, Rust |
OS abstraction layers#
Synchronization, threading, and portable RTOS abstractions
Learn more: OS abstraction layers
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
Portable abstraction for synchronization primitives |
||
stable |
Thread creation and execution |
C, C++, Rust |
|
stable |
Portable std::chrono for constrained embedded devices |
C, C++ |
|
unstable |
Interrupt handling utilities for embedded systems |
||
stable |
Simplified booting for C++ targets |
C++ |
|
unstable |
Backends#
Operating system, RTOS, and bare-metal backends for Pigweed’s OS abstraction layers
Learn more: Backends
Zephyr#
Modules, backends, and helpers for the Zephyr RTOS
Learn more: Zephyr
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
|||
stable |
|||
stable |
|||
experimental |
C++ |
||
experimental |
Zephyr utilities |
||
experimental |
Zephyr implementation for pw_i2c |
||
unstable |
|||
stable |
|||
stable |
|||
stable |
|||
stable |
|||
stable |
Amazon FreeRTOS#
Safe, non-overflowing OS abstractions & wrappers for FreeRTOS
Learn more: Amazon FreeRTOS
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
|||
experimental |
|||
stable |
|||
stable |
|||
stable |
Eclipse ThreadX#
Thread-safe OS abstraction layers & backends for Azure RTOS ThreadX
Learn more: Eclipse ThreadX
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
|||
stable |
|||
stable |
Segger embOS#
RTOS abstraction layers & thread-safety integrations for SEGGER embOS
Learn more: Segger embOS
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
|||
stable |
|||
stable |
STL#
C++ Standard Template Library backends for host and POSIX targets
Learn more: STL (Linux, MacOS, Windows, Fuchsia)
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
|||
stable |
|||
stable |
Bare metal#
Backends for running directly on target hardware without an OS or scheduler
Learn more: Bare metal
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
Android#
Utilities and toolchains for using Pigweed on Android
Learn more: Android
Name |
Status |
Description |
Languages |
|---|---|---|---|
unstable |
GN toolchains for the Android NDK |
GN |
|
stable |
Utilities for using Pigweed in Android platform |
C++ |
|
experimental |
Android Context Hub Runtime Environment backend |
C++ |
|
stable |
Android logging backend |
C++ |
Fuchsia#
Backends and platform integrations for Fuchsia OS
Learn more: Fuchsia
Name |
Status |
Description |
Languages |
|---|---|---|---|
experimental |
pw_assert backend for Fuchsia |
C, C++ |
|
experimental |
Fuchsia backend for pw_async |
C, C++ |
|
experimental |
Fuchsia logging backend |
C, C++ |
|
experimental |
Fuchsia implementation of pw_random |
Kernel#
Embedded kernels, preemptive scheduling, and userspace isolation
Learn more: Kernel
Name |
Status |
Description |
Languages |
|---|---|---|---|
experimental |
A Rust-based kernel for embedded systems |
Rust |
Memory & storage#
Memory allocators, buffers, persistent flash storage, and key-value stores
Learn more: Memory & storage
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
Flexible, safe, and measurable memory allocation |
C++ |
|
unstable |
Contiguous buffer views with optional memory ownership |
C++ |
|
stable |
Lightweight, persistent key-value store |
C++ |
|
stable |
Natural object alignment, guaranteed |
C++ |
|
stable |
Flash-backed persistent storage for data blobs |
C++ |
|
unstable |
|||
unstable |
|||
stable |
Replacement interface for standard libc dynamic memory operations |
C, C++ |
|
stable |
Memory utilities |
C++ |
|
unstable |
A buffer API optimized for zero-copy messaging |
C++ |
|
stable |
HALs#
Hardware abstraction layer interfaces for timers, I2C, SPI, UART, and GPIO
Learn more: HALs
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
Analog-to-digital converter libraries and utilities |
C++ |
|
unstable |
Clock tree management for embedded devices |
C++ |
|
stable |
Digital I/O interface |
C++ |
|
experimental |
Graphic display support and framebuffer management |
||
experimental |
|||
stable |
Cross-platform I2C API with interactive debugging |
C++ |
|
experimental |
A modular way to see the world |
Python, C++ |
|
stable |
|||
stable |
|||
experimental |
Robust time, instants, and durations for multiple clock domains |
Rust |
|
unstable |
Core interfaces for UART communication |
C++ |
Hardware support#
Board support, hardware drivers, and SDK integrations for target platforms
Learn more: Hardware support
Raspberry Pi RP2XXX#
Hardware drivers & platform support for Raspberry Pi RP2040 & Pico SDK
Learn more: Raspberry Pi RP2040 and RP2350
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
|||
stable |
|||
stable |
Raspberry Pi Pico SDK implementation for pw_i2c |
C++ |
|
unstable |
Raspberry Pi RP2040 backend for pw_spi |
C++ |
|
stable |
NXP#
Drivers, build utilities, & HAL implementations for NXP MCUXpresso SDK
Learn more: mimxrt595-evk
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
Utilities for building NXP MCUXpresso SDK targets |
Bazel, GN |
|
unstable |
NXP MCUXpresso SDK implementation for pw_clock_tree |
C++ |
|
stable |
Digital I/O for NXP MCUXpresso |
C++ |
|
unstable |
DMA helpers for MCUXpresso SDK |
C++ |
|
stable |
NXP MCUXpresso SDK implementation for pw_i2c |
C++ |
|
stable |
|||
stable |
|||
stable |
|||
unstable |
NXP MCUXpresso SDK implementation for pw_uart |
C++ |
Ambiq#
Hardware drivers & platform support for Ambiq Apollo4 & AmbiqSuite SDK
Learn more: Ambiq Apollo4
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
Arduino#
Build utilities, cores, & hardware support for Arduino
Learn more: Arduino
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
Main function wrapper and build utilities for Arduino |
C++, GN |
|
stable |
Emcraft#
Hardware support & HAL integrations for Emcraft SmartFusion2
Learn more: Emcraft SmartFusion2
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
STMicroelectronics STM32FXXX#
Build support & hardware drivers for STMicroelectronics STM32Cube
Learn more: stm32f429i-disc1
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
|||
stable |
|||
stable |
Texas Instruments#
Hardware & emulation support for Texas Instruments microcontrollers
Learn more: lm3s6965evb-qemu
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
Data structures & utilities#
Embedded-safe collections, spans, strings, status, and error handling
Learn more: Data structures & utilities
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
Exception-free error propagation for embedded |
C++, C, Python, Java, TypeScript, Rust |
|
stable |
Error propagation primitives: value-or-error |
C++ |
|
stable |
Generic collections of objects for embedded devices |
C++ |
|
stable |
Embedded-friendly std::function |
C++ |
|
unstable |
Rich enum support |
C++ |
|
stable |
Efficient mathematical utilities for embedded |
C++ |
|
stable |
std::span for C++17 |
C++ |
|
stable |
Efficient, easy, and safe string manipulation |
C++ |
Testing#
Unit testing frameworks, mocking, compilation tests, and fuzzing
Learn more: Testing
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
GoogleTest for embedded |
||
stable |
|||
unstable |
Better C++ code through easier fuzzing |
C++ |
|
experimental |
|||
unstable |
Micro-benchmarks that are easy to write and run |
C++ |
|
stable |
gRPC server for running executables in parallel |
Go |
Build systems#
Bazel, GN, and CMake integrations and rules
Learn more: Build systems
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
Integrations for Bazel, GN, and CMake |
Bazel, CMake, GN, Rust |
|
stable |
Generate, embed, and parse build-related information |
Bazel, CMake, GN |
|
experimental |
Toolchains#
Hermetic LLVM/Clang toolchains, C/C++ libraries, and build utilities
Learn more: Toolchains
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
Utilities for generating binary size reports |
C++, GN |
|
experimental |
ELF file support |
C++ |
|
unstable |
|||
unstable |
|||
stable |
|||
stable |
Helpful preprocessor macros |
C, C++ |
|
stable |
Embedded toolchains for GN-based Pigweed projects |
GN |
Developer tools#
Interactive REPL, CLI utilities, code intelligence, and emulators
Learn more: Developer tools
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
Code editor and IDE support for Pigweed projects |
C++, CLI, Python, VS Code |
|
stable |
|||
stable |
|||
stable |
Python tools for running presubmit checks and linters |
Python |
|
stable |
Embedded development file system watcher |
||
experimental |
Docker images for caching Pigweed environments |
||
experimental |
Commands that operate on Gerrit changes and Git commits |
Python |
|
stable |
Enhance and accelerate custom command-line tooling |
Python |
|
stable |
|||
stable |
Documentation generator for Pigweed-based projects |
GN |
|
stable |
|||
experimental |
Flexible emulators frontend |
Python, CLI |
|
experimental |
GitHub CLI-like interface for Gerrit code reviews and CI checks |
Go |
|
stable |
Cryptography & security#
Hashing, cryptographic primitives, and secure storage
Learn more: Cryptography & security
Name |
Status |
Description |
Languages |
|---|---|---|---|
stable |
|||
experimental |
Tools and frameworks for defensive development |
Python |
|
stable |
|||
experimental |
Secure software delivery |
Python, C++ |
|
stable |