Skip to main content
menu
Pigweed
Overview
expand_more
Pigweed overview
Mission & philosophies
Glossary
FAQs
Support policies
Quickstart
expand_more
Overview
First-time setup
Install Bazel
Bazel quickstart
Bazel integration
CMake integration
Static and runtime analysis
GitHub Actions
Zephyr quickstart
Tour
expand_more
Overview
0. Expectations and prerequisites
1. Setup
2. Explore build targets
3. Build an app
4. Explore C++ code intelligence
5. Run host tests
6. Static and runtime analysis
7. Run the host app
8. Flash your Pico
9. Run on-device tests
10. Communicate with your Pico over RPC
11. Automate common workflows
12. Communicate with your Pico over the Web Serial API
13. Run factory workflows at your desk
14. Use Bazel’s cloud features
15. Run the air quality monitor app
16. Handle crashes and view snapshots
17. Wrapping up
Source code
Platform
expand_more
Overview
Comms
Observability
Async & concurrency
Encoding & serialization
OS abstraction layers
Kernel
Memory & storage
HALs
Hardware support
Data structures & utilities
Testing
Build systems
Toolchains
Developer tools
Cryptography & security
Module index
Module structure
Facades & backends
Contributing
expand_more
Contributing guide
Build systems reference
Code reviews (Gerrit)
Code review guidelines
Issue tracker
Report a vulnerability
SEEDs
Infra
Embedded C++ Guide
Style guides
Code of conduct
Docs contributors
Testing Guide
Fuchsia libraries
Security
More
expand_more
Community & news
Reference
search
light_mode
dark_mode
code_xml
toc
Home
/
Platform
/
HALs
/
HAL
Back to top
Home
Overview
Mission & philosophies
Glossary
FAQs
Support policies
Quickstart
First-time setup
Install Bazel
Bazel quickstart
Bazel integration
CMake integration
Static and runtime analysis
GitHub Actions
Zephyr quickstart
Tour
0. Expectations and prerequisites
1. Setup
2. Explore build targets
3. Build an app
4. Explore C++ code intelligence
5. Run host tests
6. Static and runtime analysis
7. Run the host app
8. Flash your Pico
9. Run on-device tests
10. Communicate with your Pico over RPC
11. Automate common workflows
12. Communicate with your Pico over the Web Serial API
13. Run factory workflows at your desk
14. Use Bazel’s cloud features
15. Run the air quality monitor app
16. Handle crashes and view snapshots
17. Wrapping up
Source code
Platform
Comms
RPC2
C++ client and server
C++ examples
C++ Unit testing
Wire protocol
Why RPC2?
RPC1 vs. RPC2
Extended size report
C/C++ API reference
Source code
Issues
Transport
C/C++ API reference
Source code
Issues
Bluetooth
BLE Host API
C/C++ API reference
Source code
Issues
HCI
Source code
Issues
Profiles
Source code
Issues
Proxy
Crash recovery
pw_bluetooth_proxy threat model
C/C++ API reference
Source code
Issues
Sapphire Host stack
Fuchsia development
Size report
C/C++ API reference
Source code
Issues
Emboss
Channels
Quickstart & guides
Design
C/C++ API reference
Source code
Issues
gRPC
Source code
Issues
HDLC
Get started & guides
API reference
Design & roadmap
Code size analysis
RPC over HDLC example
Router
C/C++ API reference
Source code
Issues
Packet routing
Source code
Issues
RPC1
Integration & setup
Creating services
C++ client & server
C++ with Nanopb
C++ with pw_protobuf
C++ with raw RPC
C/C++ API reference
Python client
TypeScript client
Java client
Benchmarking
Wire protocol
Design
Serial & HDLC example
Source code
Issues
RPC transport
Source code
Issues
Streams
Backends
UART (Linux)
C/C++ API reference
Source code
Issues
UART (MCUXpresso)
Rust API reference
C/C++ API reference
Source code
Issues
Python
Data transfer
C/C++ API reference
Source code
Issues
Observability
Logging
The pw_log protobuf
Tokenized log arguments
API reference
Backends
Android
Basic
Source code
Issues
Fuchsia
Null
Source code
Issues
RPC
String
C/C++ API reference
Source code
Issues
Tokenized
C/C++ API reference
Source code
Issues
Zephyr
Rust API reference
C/C++ API reference
Source code
Issues
Tokenization
Get started
Tokenization
Token databases
Detokenization
API reference
Rust API reference
C/C++ API reference
Source code
Issues
Assertions
Backends
Basic
Source code
Issues
Fuchsia
Pigweed logging
Source code
Issues
Tokenized
Source code
Issues
Trap
Source code
Issues
Zephyr
Rust API reference
C/C++ API reference
Source code
Issues
Console
User Guide
Embedding Guide
Plugin Guide
Manual Test Procedure
Built-in CLI Tools
Internal Design
pw_console threat model
Source code
Issues
CLI analytics
Source code
Issues
CPU exceptions
Backends
Cortex-M
Source code
Issues
RISCV
Source code
Issues
Source code
Issues
String formatting
Rust API reference
Source code
Issues
Hex dump
C/C++ API reference
Source code
Issues
Metrics
Source code
Issues
Multisink
Source code
Issues
Persistent RAM
C/C++ API reference
Source code
Issues
Snapshots
Setting up a Snapshot Pipeline
Module Usage
Snapshot Proto Format
Design Discussion
Source code
Issues
Symbolizer
Source code
Issues
Tracing
Backends
Tokenized
C/C++ API reference
Source code
Issues
C/C++ API reference
Source code
Issues
Web
Manual Test Procedure
Log viewer
Python shell
Source code
Issues
Perfetto
Async & concurrency
Async2
Why pw_async2?
Quickstart
Informed poll
Codelab
1. Run a task
2. Call an async function
3. Create and wake a Future
4. Use a state machine
5. Communicate between tasks
Guides
Dispatcher
Code size analysis
Coroutines
Futures
Channels
Tasks
C/C++ API reference
Source code
Issues
Atomics
Source code
Issues
Work queues
C/C++ API reference
Source code
Issues
Async1
Backends
Basic
C/C++ API reference
Source code
Issues
Fuchsia
C/C++ API reference
Source code
Issues
Encoding & serialization
Protocol Buffers
Extended size report
C/C++ API reference
Source code
Issues
Base64
Rust API reference
C/C++ API reference
Source code
Issues
Bytes
Code size analysis
Design & roadmap
Quickstart & guides
pw_bytes Python package
Rust API reference
C/C++ API reference
Source code
Issues
Checksums
Source code
Issues
FlatBuffers
Source code
Issues
JSON
C/C++ API reference
Source code
Issues
Protobuf compiler
Source code
Issues
UUID
C/C++ API reference
Source code
Issues
Varint
Rust API reference
C/C++ API reference
Source code
Issues
Nanopb
OS abstraction layers
Synchronization
Backends
Bare Metal
embOS
FreeRTOS
STL
ThreadX
Zephyr
C/C++ API reference
Source code
Issues
Threads
Backends
embOS
FreeRTOS
STL
ThreadX
Zephyr
Rust API reference
C/C++ API reference
Source code
Issues
Chrono
Backends
embOS
FreeRTOS
RP2040
STL
ThreadX
Zephyr
C/C++ API reference
Source code
Issues
Interrupts
Backends
Cortex-M
Source code
Issues
FreeRTOS
Zephyr
Fake (test-only)
C/C++ API reference
Source code
Issues
Booting
Backends
Cortex-M
Source code
Issues
pw_boot threat model
Source code
Issues
System
Console CLI reference
Python Console APIs
C/C++ API reference
Source code
Issues
Backends
Zephyr
Setup
Advantages & differences
Allocators
Source code
Issues
Assertions
Source code
Issues
Chrono
Source code
Issues
Digital I/O
Source code
Issues
Environment setup
Source code
Issues
I2C
C/C++ API reference
Source code
Issues
Interrupts
Source code
Issues
Logging
Source code
Issues
SPI
Source code
Issues
Synchronization
Source code
Issues
System I/O
Source code
Issues
Threads
Source code
Issues
Amazon FreeRTOS
Setup
Advantages & differences
Chrono
Source code
Issues
Interrupts
Source code
Issues
Malloc
Source code
Issues
Synchronization
Source code
Issues
Threads
Source code
Issues
Eclipse ThreadX
Setup
Advantages & differences
Chrono
Source code
Issues
Synchronization
Source code
Issues
Threads
Source code
Issues
Segger embOS
Setup
Advantages & differences
Chrono
Source code
Issues
Synchronization
Source code
Issues
Threads
Source code
Issues
STL
Chrono
Source code
Issues
Synchronization
Source code
Issues
Threads
Source code
Issues
Bare metal
Synchronization
Source code
Issues
Android
NDK toolchains
Source code
Issues
Build utilities
Source code
Issues
CHRE
C/C++ API reference
Source code
Issues
Logging
Source code
Issues
Fuchsia
Assertions
Source code
Issues
Async
Source code
Issues
Logging
Source code
Issues
Random
Source code
Issues
Kernel
Pigweed kernel
Quickstart
Tour
Design
Guides
Upstream
Source code
Issues
Memory & storage
Allocators
Guides
Design & roadmap
Backends
Zephyr
Code size analysis
pw_allocator threat model
C/C++ API reference
Source code
Issues
Buffers
C/C++ API reference
Source code
Issues
Key-value store
Guides
On-disk format and design
Code size analysis
pw_kvs threat model
C/C++ API reference
Source code
Issues
Alignment
C/C++ API reference
Source code
Issues
Blob store
Source code
Issues
File system
Source code
Issues
Intrusive pointers
Source code
Issues
Malloc
Backends
Freelist
Source code
Issues
FreeRTOS
C/C++ API reference
Source code
Issues
Memory utilities
Source code
Issues
MultiBuf
Usage examples
Concepts
Design
Code size analysis
C/C++ API reference
Source code
Issues
Ring buffer
Source code
Issues
HALs
Analog
C/C++ API reference
Source code
Issues
Clock tree
Examples
Implementations
MCUXpresso
C/C++ API reference
Source code
Issues
Digital I/O
Backends
Linux
Source code
Issues
MCUXpresso
RP2040
Zephyr
C/C++ API reference
Source code
Issues
Display
API reference
C/C++ API reference
Source code
Issues
HAL
Source code
Issues
I2C
Quickstart and guides
Implementations
Linux
C/C++ API reference
Source code
Issues
MCUXpresso
Pico SDK
Zephyr RTOS
C/C++ API reference
Source code
Issues
Sensors
Python package
Source code
Issues
SPI
Backends
Linux
Source code
Issues
MCUXpresso
RP2040
Zephyr
C/C++ API reference
Source code
Issues
System I/O
Backends
Ambiq Suite SDK
Arduino
LM3S6965EVB
STM32F429
Emcraft SF2
MCUXpresso
RP2040
Standard I/O
Source code
Issues
STM32Cube
Zephyr
C/C++ API reference
Source code
Issues
Time
Rust API reference
Source code
Issues
UART
Backends
MCUXpresso
C/C++ API reference
Source code
Issues
TinyUSB
Hardware support
Raspberry Pi RP2XXX
Chrono
Source code
Issues
Digital I/O
Source code
Issues
I2C
Source code
Issues
SPI
Source code
Issues
System I/O
Source code
Issues
Upstream Pigweed
pw_rp2350
NXP
Build utilities
Source code
Issues
Clock tree
C/C++ API reference
Source code
Issues
Digital I/O
C/C++ API reference
Source code
Issues
DMA
Source code
Issues
I2C
Source code
Issues
SPI
Source code
Issues
UART stream
Source code
Issues
System I/O
Source code
Issues
UART
Source code
Issues
mimxrt595-evk-freertos
Ambiq
System I/O
Source code
Issues
Ambiq Apollo4 with pw_system
Arduino
Build
Source code
Issues
System I/O
Source code
Issues
Emcraft
System I/O
Source code
Issues
STMicroelectronics STM32FXXX
STM32Cube build
Source code
Issues
System I/O (STM32F429)
Source code
Issues
System I/O (STM32Cube)
Source code
Issues
stm32f429i-disc1: STM32Cube
Texas Instruments
System I/O
Source code
Issues
Data structures & utilities
Status
Get started & guides
Reference
Rust API reference
C/C++ API reference
Source code
Issues
Result
C/C++ API reference
Source code
Issues
Containers
Lists
Maps
Queues
Sets
Vectors
Utilities
Using items with multiple containers
C/C++ API reference
Source code
Issues
Functions
C/C++ API reference
Source code
Issues
Enums
C/C++ API reference
Source code
Issues
Numeric
C/C++ API reference
Source code
Issues
Span
C/C++ API reference
Source code
Issues
Strings
Get Started & Guides
Design & Roadmap
Code Size Analysis
C/C++ API reference
Source code
Issues
Testing
Unit testing
C/C++ API reference
Source code
Issues
Compilation testing
Source code
Issues
Fuzzing
Concepts
Adding Fuzzers Using FuzzTest
Adding Fuzzers Using LibFuzzer
Using OSS-Fuzz
Source code
Issues
Hardware-in-the-loop
Source code
Issues
Performance testing
C/C++ API reference
Source code
Issues
Target runner
Go
Source code
Issues
host
Abseil C++
FuzzTest
GoogleTest
Build systems
Overview
Bazel
Install Bazel
Get Started With Pigweed And Bazel
Using Pigweed in an existing Bazel project
Add Pigweed as a dependency
Use Pigweed modules
Manage external dependencies in a Bazel project
Set up a MCU platform
Pigweed Bazel build compatibility patterns
crates.io dependencies
GN / Ninja
Pigweed’s GN Python Build
Targets
docs
CMake
Quickstart
Integration guide
API reference
Build integrations
GN / Ninja
Python GN Templates
Bazel
Rules
Compatibility constraints
Helper targets, macros, and templates
Project Builder
Python API Reference
Linker Scripts
Workflows Launcher
Workflows build drivers
pw_build threat model
Rust API reference
C/C++ API reference
Source code
Issues
Build info
Source code
Issues
Rust
Source code
Issues
Size optimizations
Toolchains
Pigweed toolchain
Get started
Why Clang/LLVM for embedded
Supported targets and hosts
Migrate from a GNU toolchain
Versioning, rolls, and stability
Status & roadmap
LLVM compiler-rt
LLVM libc
LLVM libcxx
Size reports
pw_bloat threat model
C/C++ API reference
Source code
Issues
ELF
pw_elf Python package
C/C++ API reference
Source code
Issues
libc
Source code
Issues
libc++
Source code
Issues
C++ polyfills
C/C++ API reference
Source code
Issues
Preprocessor
C/C++ API reference
Source code
Issues
Toolchains
Bazel build system integrations
GN build system integrations
pw_toolchain threat model
C/C++ API reference
Source code
Issues
Developer tools
IDE
Bazel
Getting Started
Code intelligence
Rust code intelligence
Extension enforcement
Commands Reference
Troubleshooting
Bootstrap
Legacy support via CLI
Contributing
Development
Manual Test Procedure
Design
C/C++ code intelligence
Projects
Source code
Issues
Environment setup
Bazel CIPD Module Extension
Source code
Issues
Module management
Source code
Issues
Presubmit
Code formatting
pigweed.json configuration options
Source code
Issues
File watcher
How-to guide
CLI reference
Source code
Issues
Docker
Change management
Source code
Issues
CLI
API Reference
pw_cli threat model
Source code
Issues
Config loader
API Reference
Source code
Issues
Docgen
Source code
Issues
Doctor
Source code
Issues
Emulators
Get started & guides
CLI reference
API reference
Configuration
Design
SEED-0108
Source code
Issues
Gerrit & CI CLI
Life of a PR
Project setup
Agent setup
Agent workflows
Subcommands
gh pr
gh run
gh issue
gh auth
gh hook
gh wt
gh sense
Developing
Compat policy
Agent evaluation
Status & roadmap
Source code
Issues
Package manager
Source code
Issues
Host Device Simulator
Cryptography & security
Cryptography
pw_crypto threat model
C/C++ API reference
Source code
Issues
Fortifier
User guide for defect scanners
User guide for freshness scanners
Other utilities
Implementation guide for defect scanners
Implementation guide for freshness scanners
Design
API reference
Source code
Issues
Random
Backends
Fuchsia
C/C++ API reference
Source code
Issues
Software update
Get started
Design
Guide
CLI reference
pw_software_update threat model
Source code
Issues
TLS client
Backends
BoringSSL
Source code
Issues
MbedTLS
Source code
Issues
Source code
Issues
BoringSSL
Module index
Module structure
Facades & backends
Contributing
Build systems reference
Code reviews (Gerrit)
Code review guidelines
Issue tracker
Report a vulnerability
SEEDs
0001: The SEED Process
0002: SEED Template
0101: pigweed.json
0102: Consistent Module Documentation
0103: pw_protobuf: Past, present, and future
0104: Display Support
0105: Nested Tokens and Tokenized Log Arguments
0106: Project template
0107: Pigweed Communications
0108: Emulators Frontend
0109: Communication Buffers
0110: Memory Allocation Interfaces
0111: Make Bazel Pigweed’s Primary Build System
0112: Async Poll Model
0113: Add modular Bazel C/C++ toolchain API
0114: Channels
0115: Sensors
0116: Sockets
0117: I3C
0118: Sensor Read API
0119: Sensors
0120: Sensor Configuration
0121: Pigweed project server
0122: Organize Pigweed code samples
0123: Sprout Bazel C++ toolchain API into a separate repository
0124: Interfaces for Retrieving Size Information from Multisink
0125: Statistics Database
0126: Key-Value Store Interfaces
0127: Sensor Reading
0128: Abstracting Thread Creation
0129: Support PW_ASSERT with non-argument message
0130: Update Sphinx theme
0132: pw_usb
0133: pw_wakelock
0134: Unify pw_build, pw_presubmit, and the pw tool with Workflows
Infra
Managing the Bazel lockfile
CI/CQ Intro
Rollers
Glossary
Embedded C++ Guide
Style guides
Bazel
C++
Commit message
CLI
Go
Protobuf
Python
reStructuredText
Doxygen
Writing
AI artifacts
Code of conduct
Docs contributors
Build system
Doxygen
Module docs contributor guidelines
Code examples
Website updates
Changelog guide for contributors
Testing Guide
C++ Type Equivalence Classes
Fuchsia libraries
Security
Report a vulnerability
Agentic threat model
Handling false positives
2026 Security Bulletins
July 2026
August 2026
Community & news
Issue tracker
Mailing list
Chat room (Discord)
Code of conduct
Blog
#1: Kudzu
#2: Feature flags in Bazel
#3: Pigweed SDK launch
#4: Fixed Point Arithmetic as a Replacement for Soft Floats
#5: C++20 coroutines without heap allocation
#6: Shaping a better future for Bazel C/C++ toolchains
#7: BazelCon 2024
#8: Migrating pigweed.dev to Bazel
#9: Satisfying Bazel's relative paths requirement in C++ toolchains
RSS feed
Showcase projects
Kudzu
What's new
September 2026
August 2026
July 2026
June 2026
May 2026
April 2026
March 2026
Reference
pw_hal
#
Experimental