Platform#

Overview#

Comms

Remote procedure calls (RPC), channels, and communication streams

Comms
Observability

Structured logging, tokenization, metrics, crash handling, and tracing

Observability
Async & concurrency

Cooperative multitasking, futures, and asynchronous primitives

Async & concurrency
Encoding & serialization

Protocol Buffers, JSON, Varint, Base64, and wire format serialization

Encoding & serialization
OS abstraction layers

Synchronization, threading, and portable RTOS abstractions

OS abstraction layers
Kernel

Embedded kernels, preemptive scheduling, and userspace isolation

Kernel
Memory & storage

Memory allocators, buffers, persistent flash storage, and key-value stores

Memory & storage
HALs

Hardware abstraction layer interfaces for timers, I2C, SPI, UART, and GPIO

HALs
Hardware support

Board support, hardware drivers, and SDK integrations for target platforms

Hardware support
Data structures & utilities

Embedded-safe collections, spans, strings, status, and error handling

Data structures & utilities
Testing

Unit testing frameworks, mocking, compilation tests, and fuzzing

Testing
Build systems

Bazel, GN, and CMake integrations and rules

Build systems
Toolchains

Hermetic LLVM/Clang toolchains, C/C++ libraries, and build utilities

Toolchains
Developer tools

Interactive REPL, CLI utilities, code intelligence, and emulators

Developer tools
Cryptography & security

Hashing, cryptographic primitives, and secure storage

Cryptography & security

Comms#

Remote procedure calls (RPC), channels, and communication streams

Learn more: Comms

Name

Status

Description

Languages

pw_rpc2

experimental

Next gen, zero-copy async RPC with end-to-end backpressure

C++

pw_transport

experimental

Asynchronous datagram-oriented transport interface

C++

pw_channel

deprecated

Async, zero-copy API for sending and receiving bytes or datagrams

C++

pw_grpc

unstable

pw_rpc over gRPC

C++

pw_hdlc

stable

Simple, robust, and efficient serial communication

Python, C++, TypeScript

pw_router

experimental

Transport-agnostic packet routing

C++

pw_rpc

stable

Efficient, low-code-size RPC system for embedded devices

C++, Java, JavaScript, Python, TypeScript

pw_rpc_transport

unstable

pw_stream

stable

A foundational interface for streaming data

C++, Rust

pw_transfer

stable

Bluetooth#

Dual-mode Bluetooth Host stack, HCI controllers, and profiles

Learn more: Bluetooth

Name

Status

Description

Languages

pw_bluetooth

unstable

Host-layer Bluetooth Low Energy APIs and utilities

C++

pw_bluetooth_hci

stable

Bluetooth Host Controller Interface utilities

C++

pw_bluetooth_profiles

unstable

Bluetooth profiles built on top of pw_bluetooth

C++

pw_bluetooth_proxy

unstable

Lightweight proxy for augmenting Bluetooth functionality

C++

pw_bluetooth_sapphire

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

pw_log

stable

Robust and portable logging for embedded projects

C++, Java, Python, Rust

pw_tokenizer

stable

Compress strings to shrink logs by +75%

C, C++, Python, Rust, TypeScript, Java

pw_assert

stable

Flexible crash triggering and handling

C, C++, Rust

pw_console

stable

Multi-purpose pluggable interactive console for dev & manufacturing

Python

pw_cli_analytics

stable

pw_cpu_exception

stable

pw_format

experimental

String formatting

Rust

pw_hex_dump

stable

Handy hexdump utilities

C++

pw_metric

stable

pw_multisink

stable

pw_persistent_ram

stable

Reliable memory across reboots for crash reporting

C++

pw_snapshot

stable

pw_symbolizer

stable

pw_trace

stable

pw_web

stable

Async & concurrency#

Cooperative multitasking, futures, and asynchronous primitives

Learn more: Async & concurrency

Name

Status

Description

Languages

pw_async2

stable

Cooperative async tasks for embedded

C++

pw_atomic

experimental

Software implementations of atomic operations

C, C++

pw_work_queue

stable

pw_async

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

pw_protobuf

stable

Expressive interface for encoding and decoding protocol buffers

C++

pw_base64

stable

Base64 encoding, decoding, and validating

C, C++, Rust

pw_bytes

stable

Utilities for manipulating binary data

C++, Rust

pw_checksum

stable

Checksum calculation API

C, C++

pw_flatbuffers

experimental

pw_json

stable

Simple, efficient C++ JSON serialization

C++

pw_protobuf_compiler

stable

pw_uuid

experimental

128-bit universally unique identifier (UUID)

pw_varint

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

pw_sync

stable

Portable abstraction for synchronization primitives

pw_thread

stable

Thread creation and execution

C, C++, Rust

pw_chrono

stable

Portable std::chrono for constrained embedded devices

C, C++

pw_interrupt

unstable

Interrupt handling utilities for embedded systems

pw_boot

stable

Simplified booting for C++ targets

C++

pw_system

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

pw_allocator_zephyr

stable

pw_assert_zephyr

stable

pw_chrono_zephyr

stable

pw_digital_io_zephyr

experimental

C++

pw_env_setup_zephyr

experimental

Zephyr utilities

pw_i2c_zephyr

experimental

Zephyr implementation for pw_i2c

pw_interrupt_zephyr

unstable

pw_log_zephyr

stable

pw_spi_zephyr

stable

pw_sync_zephyr

stable

pw_sys_io_zephyr

stable

pw_thread_zephyr

stable

Amazon FreeRTOS#

Safe, non-overflowing OS abstractions & wrappers for FreeRTOS

Learn more: Amazon FreeRTOS

Name

Status

Description

Languages

pw_chrono_freertos

stable

pw_interrupt_freertos

experimental

pw_malloc_freertos

stable

pw_sync_freertos

stable

pw_thread_freertos

stable

Eclipse ThreadX#

Thread-safe OS abstraction layers & backends for Azure RTOS ThreadX

Learn more: Eclipse ThreadX

Name

Status

Description

Languages

pw_chrono_threadx

stable

pw_sync_threadx

stable

pw_thread_threadx

stable

Segger embOS#

RTOS abstraction layers & thread-safety integrations for SEGGER embOS

Learn more: Segger embOS

Name

Status

Description

Languages

pw_chrono_embos

stable

pw_sync_embos

stable

pw_thread_embos

stable

STL#

C++ Standard Template Library backends for host and POSIX targets

Learn more: STL (Linux, MacOS, Windows, Fuchsia)

Name

Status

Description

Languages

pw_chrono_stl

stable

pw_sync_stl

stable

pw_thread_stl

stable

Bare metal#

Backends for running directly on target hardware without an OS or scheduler

Learn more: Bare metal

Name

Status

Description

Languages

pw_sync_baremetal

stable

Android#

Utilities and toolchains for using Pigweed on Android

Learn more: Android

Name

Status

Description

Languages

pw_android_toolchain

unstable

GN toolchains for the Android NDK

GN

pw_build_android

stable

Utilities for using Pigweed in Android platform

C++

pw_chre

experimental

Android Context Hub Runtime Environment backend

C++

pw_log_android

stable

Android logging backend

C++

Fuchsia#

Backends and platform integrations for Fuchsia OS

Learn more: Fuchsia

Name

Status

Description

Languages

pw_assert_fuchsia

experimental

pw_assert backend for Fuchsia

C, C++

pw_async_fuchsia

experimental

Fuchsia backend for pw_async

C, C++

pw_log_fuchsia

experimental

Fuchsia logging backend

C, C++

pw_random_fuchsia

experimental

Fuchsia implementation of pw_random

Kernel#

Embedded kernels, preemptive scheduling, and userspace isolation

Learn more: Kernel

Name

Status

Description

Languages

pw_kernel

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

pw_allocator

stable

Flexible, safe, and measurable memory allocation

C++

pw_buf

unstable

Contiguous buffer views with optional memory ownership

C++

pw_kvs

stable

Lightweight, persistent key-value store

C++

pw_alignment

stable

Natural object alignment, guaranteed

C++

pw_blob_store

stable

Flash-backed persistent storage for data blobs

C++

pw_file

unstable

pw_intrusive_ptr

unstable

pw_malloc

stable

Replacement interface for standard libc dynamic memory operations

C, C++

pw_memory

stable

Memory utilities

C++

pw_multibuf

unstable

A buffer API optimized for zero-copy messaging

C++

pw_ring_buffer

stable

HALs#

Hardware abstraction layer interfaces for timers, I2C, SPI, UART, and GPIO

Learn more: HALs

Name

Status

Description

Languages

pw_analog

stable

Analog-to-digital converter libraries and utilities

C++

pw_clock_tree

unstable

Clock tree management for embedded devices

C++

pw_digital_io

stable

Digital I/O interface

C++

pw_display

experimental

Graphic display support and framebuffer management

pw_hal

experimental

pw_i2c

stable

Cross-platform I2C API with interactive debugging

C++

pw_sensor

experimental

A modular way to see the world

Python, C++

pw_spi

stable

pw_sys_io

stable

pw_time

experimental

Robust time, instants, and durations for multiple clock domains

Rust

pw_uart

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

pw_chrono_rp2040

stable

pw_digital_io_rp2040

stable

pw_i2c_rp2040

stable

Raspberry Pi Pico SDK implementation for pw_i2c

C++

pw_spi_rp2040

unstable

Raspberry Pi RP2040 backend for pw_spi

C++

pw_sys_io_rp2040

stable

NXP#

Drivers, build utilities, & HAL implementations for NXP MCUXpresso SDK

Learn more: mimxrt595-evk

Name

Status

Description

Languages

pw_build_mcuxpresso

stable

Utilities for building NXP MCUXpresso SDK targets

Bazel, GN

pw_clock_tree_mcuxpresso

unstable

NXP MCUXpresso SDK implementation for pw_clock_tree

C++

pw_digital_io_mcuxpresso

stable

Digital I/O for NXP MCUXpresso

C++

pw_dma_mcuxpresso

unstable

DMA helpers for MCUXpresso SDK

C++

pw_i2c_mcuxpresso

stable

NXP MCUXpresso SDK implementation for pw_i2c

C++

pw_spi_mcuxpresso

stable

pw_stream_uart_mcuxpresso

stable

pw_sys_io_mcuxpresso

stable

pw_uart_mcuxpresso

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

pw_sys_io_ambiq_sdk

stable

Arduino#

Build utilities, cores, & hardware support for Arduino

Learn more: Arduino

Name

Status

Description

Languages

pw_arduino_build

stable

Main function wrapper and build utilities for Arduino

C++, GN

pw_sys_io_arduino

stable

Emcraft#

Hardware support & HAL integrations for Emcraft SmartFusion2

Learn more: Emcraft SmartFusion2

Name

Status

Description

Languages

pw_sys_io_emcraft_sf2

stable

STMicroelectronics STM32FXXX#

Build support & hardware drivers for STMicroelectronics STM32Cube

Learn more: stm32f429i-disc1

Name

Status

Description

Languages

pw_stm32cube_build

stable

pw_sys_io_baremetal_stm32f429

stable

pw_sys_io_stm32cube

stable

Texas Instruments#

Hardware & emulation support for Texas Instruments microcontrollers

Learn more: lm3s6965evb-qemu

Name

Status

Description

Languages

pw_sys_io_baremetal_lm3s6965evb

stable

Data structures & utilities#

Embedded-safe collections, spans, strings, status, and error handling

Learn more: Data structures & utilities

Name

Status

Description

Languages

pw_status

stable

Exception-free error propagation for embedded

C++, C, Python, Java, TypeScript, Rust

pw_result

stable

Error propagation primitives: value-or-error

C++

pw_containers

stable

Generic collections of objects for embedded devices

C++

pw_function

stable

Embedded-friendly std::function

C++

pw_enum

unstable

Rich enum support

C++

pw_numeric

stable

Efficient mathematical utilities for embedded

C++

pw_span

stable

std::span for C++17

C++

pw_string

stable

Efficient, easy, and safe string manipulation

C++

Testing#

Unit testing frameworks, mocking, compilation tests, and fuzzing

Learn more: Testing

Name

Status

Description

Languages

pw_unit_test

stable

GoogleTest for embedded

pw_compilation_testing

stable

pw_fuzzer

unstable

Better C++ code through easier fuzzing

C++

pw_hil

experimental

pw_perf_test

unstable

Micro-benchmarks that are easy to write and run

C++

pw_target_runner

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

pw_build

stable

Integrations for Bazel, GN, and CMake

Bazel, CMake, GN, Rust

pw_build_info

stable

Generate, embed, and parse build-related information

Bazel, CMake, GN

pw_rust

experimental

Toolchains#

Hermetic LLVM/Clang toolchains, C/C++ libraries, and build utilities

Learn more: Toolchains

Name

Status

Description

Languages

pw_bloat

stable

Utilities for generating binary size reports

C++, GN

pw_elf

experimental

ELF file support

C++

pw_libc

unstable

pw_libcxx

unstable

pw_polyfill

stable

pw_preprocessor

stable

Helpful preprocessor macros

C, C++

pw_toolchain

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

pw_ide

stable

Code editor and IDE support for Pigweed projects

C++, CLI, Python, VS Code

pw_env_setup

stable

pw_module

stable

pw_presubmit

stable

Python tools for running presubmit checks and linters

Python

pw_watch

stable

Embedded development file system watcher

Docker

experimental

Docker images for caching Pigweed environments

pw_change

experimental

Commands that operate on Gerrit changes and Git commits

Python

pw_cli

stable

Enhance and accelerate custom command-line tooling

Python

pw_config_loader

stable

pw_docgen

stable

Documentation generator for Pigweed-based projects

GN

pw_doctor

stable

pw_emu

experimental

Flexible emulators frontend

Python, CLI

pw_ghish

experimental

GitHub CLI-like interface for Gerrit code reviews and CI checks

Go

pw_package

stable

Cryptography & security#

Hashing, cryptographic primitives, and secure storage

Learn more: Cryptography & security

Name

Status

Description

Languages

pw_crypto

stable

pw_fortifier

experimental

Tools and frameworks for defensive development

Python

pw_random

stable

pw_software_update

experimental

Secure software delivery

Python, C++

pw_tls_client

stable