fbuild
fbuild is a fast, multi-platform compiler, deployer, emulator runner, and
serial monitor for embedded development. It reads the same platformio.ini
files already used by PlatformIO sketches, but uses a Rust-native, data-driven
build pipeline.
Build Matrix
These board builds are part of the front door. They show the platform breadth that fbuild actively protects in CI.
AVR
MegaAVR
Renesas
ESP8266
ESP32
CH32V (RISC-V)
CH32X (RISC-V, USB PD)
Teensy
STM32
SAM / SAMD / SAME
RP2040 / RP2350
Nordic NRF52
Apollo3
NXP LPC (Cortex-M0+)
Silicon Labs
Raspberry Pi Pico
Board descriptions and family deep-dives live in
docs/BOARD_STATUS.md.
Build performance
The chart is regenerated nightly from clean-output (cold) and immediate repeat (warm) Arduino Uno and ESP32-S3 Blink builds. Raw measurements are discoverable through the benchmark manifest.
Installation
pip install fbuild
For source installs, platform notes, and first-run cache behavior, start with the getting started guide.
Command Quick Start
fbuild reads the same platformio.ini files as PlatformIO. Use these commands
as direct replacements for the most common PlatformIO workflows:
| fbuild | PlatformIO equivalent | Use it to |
|---|---|---|
fbuild build |
pio run |
Compile the project. |
fbuild build --clean |
pio run --target clean, then pio run |
Clean and compile the project. |
fbuild deploy |
pio run --target upload |
Build and upload firmware. |
fbuild deploy --clean |
Clean, then pio run --target upload |
Clean, build, and upload firmware. |
fbuild monitor |
pio device monitor |
Monitor serial output without flashing. |
fbuild ci |
pio ci |
Build one or more sketches for CI. |
Pass --platformio to build, deploy, or monitor to delegate that
workflow to the installed PlatformIO CLI. fbuild ci is a fbuild-native,
PlatformIO-compatible CI command; detailed flags and nested commands are in
the CLI reference.
fbuild-only commands
These commands extend beyond the PlatformIO workflow surface:
| Command | Purpose |
|---|---|
fbuild symbols |
Report per-symbol firmware size and bloat details. |
fbuild bloat |
Inspect symbol back-references and generate bloat graphs. |
fbuild reset |
Reset a device without flashing it. |
fbuild purge |
Purge downloaded packages or run cache garbage collection. |
fbuild sync |
Resolve platformio.ini dependencies into a deterministic lock file. |
fbuild install |
Download an environment's platform, toolchains, framework, tools and lib_deps without compiling (--check exits 2 when something is missing). |
fbuild daemon |
Manage the background build daemon, locks, and cache. |
fbuild show |
Show daemon logs and other runtime information. |
fbuild device |
List devices and manage device leases. |
fbuild mcp |
Start the Model Context Protocol server for AI integrations. |
fbuild clang-tidy |
Run clang-tidy static analysis on project sources. |
fbuild iwyu |
Run include-what-you-use analysis on project sources. |
fbuild clangd-config |
Generate clangd and VS Code configuration for the project. |
fbuild test-emu |
Build and run firmware in an emulator for testing. |
fbuild clang-query |
Run a clang-query matcher against project sources. |
fbuild lnk |
Fetch, verify, and create .lnk resource pointers. |
fbuild lib-select |
Diagnose the LDF-style library selection result. |
fbuild compile-many |
Compile many sketches against one board in parallel stages. |
fbuild serial |
Probe serial ports and read them with board-aware settings. |
fbuild bringup |
Orchestrate build, flash, reset, monitor, and bring-up steps. |
fbuild port |
Scan serial ports with vendor and product identification. |
fbuild cache |
Save, restore, list, and verify portable cache archives. |
See fbuild help <command> or the full CLI reference
for options and nested subcommands.
Quick Start
Create a minimal Arduino project:
mkdir my-project
cd my-project
mkdir src
Add platformio.ini:
[env:uno]
platform = atmelavr
board = uno
framework = arduino
Add src/main.ino:
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
Build it:
fbuild build
On the first build, fbuild downloads the toolchain and framework packages it
needs, then caches them for later builds. A successful Uno build writes
.fbuild/build/uno/firmware.hex.
Examples
Common workflows:
fbuild build
fbuild deploy --clean
fbuild deploy --monitor
fbuild test-emu . -e uno
fbuild monitor --timeout 60 --halt-on-success "TEST PASSED"
Detailed build, deploy, monitor, and emulator examples live in the CLI reference and emulator testing guide.
Docs Index
The full FAQ-style map is docs/INDEX.md. Common entry
points:
| Goal | Start here |
|---|---|
| Install fbuild and run the first build | docs/getting-started/ |
| Use build, deploy, monitor, or test-emu | docs/reference/cli.md |
Configure platformio.ini |
docs/reference/platformio-ini.md |
| Check board and platform support | docs/platforms/ |
| Understand the project rationale | docs/WHY.md |
| Work on fbuild itself | docs/development/ |
| Read architecture internals | docs/architecture/overview.md |
Key Features
platformio.inicompatibility for existing Arduino and ESP32 sketches- Fast incremental builds with cached toolchains, frameworks, and libraries
- URL-based package and library management, including GitHub
lib_deps - Build, deploy, serial monitor, and emulator test workflows from one CLI
- Cross-platform support on Windows, macOS, and Linux
- Transparent architecture with Rust workspace internals documented under
docs/architecture/
See docs/WHY.md for the full rationale, benefits, and
performance notes.
CLI Usage
The user-facing command reference is
docs/reference/cli.md. It covers core workflows
(build, deploy, monitor, test-emu) and diagnostics such as symbols,
bloat, lib-select, compile-many, and ci.
Configuration
fbuild reads platformio.ini project files. The configuration reference,
including default_envs, build_flags, lib_deps, upload and monitor
settings, and compatibility notes, lives in
docs/reference/platformio-ini.md.
Emulator Testing
fbuild can build firmware and run it without hardware via fbuild test-emu or
fbuild deploy --to emu. Emulator backends, auto-detection rules, QEMU notes,
and known limitations live in
docs/guides/emulator-testing.md.
PlatformIO Compatibility: .eh_frame Strip
On supported release builds, fbuild may strip unused GCC .eh_frame unwind
metadata to reduce firmware size. The policy, opt-out controls, and rationale
are documented in
docs/reference/platformio-compatibility.md.
Supported Platforms
fbuild supports AVR, MegaAVR, Renesas RA, ESP8266, ESP32 variants, CH32 RISC-V, Teensy, STM32, SAM/SAMD, RP2040/RP2350, Nordic NRF52, Apollo3, Silicon Labs EFR32, NXP LPC, and WASM via Emscripten.
For the canonical per-board CI badge matrix, support table, and board-family
notes, see docs/BOARD_STATUS.md or the
platforms docs.
Project Structure
The repository is a Rust workspace with a Python package boundary. The human
development guide is docs/development/, and the
crate dependency map is crates/CLAUDE.md.
Architecture
Architecture docs are decentralized under
docs/architecture/. Start with
docs/architecture/overview.md, then follow
the subsystem-specific docs.
Development
Testing, troubleshooting, linting, release, and local setup instructions live
in docs/development/. Project-wide rules for
contributors and LLM agents are in CLAUDE.md.
License
fbuild is free software licensed under the GNU Affero General Public
License v3.0 only (AGPL-3.0-only). See LICENSE.
Metadata
Release files for fbuild 2.5.30
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| fbuild-2.5.30-cp310-abi3-win_amd64.whl | CPython 3.10 | abi3 | Windows x86-64 | Details |
| fbuild-2.5.30-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.10 | abi3 | Linux glibc 2.17+ x86-64 | Details |
| fbuild-2.5.30-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.10 | abi3 | Linux glibc 2.17+ ARM64 | Details |
| fbuild-2.5.30-cp310-abi3-macosx_11_0_arm64.macosx_10_12_x86_64.whl | CPython 3.10 | abi3 | macOS 10.12+ x86-64, macOS 11.0+ ARM64 | Details |
Total release size: 162.5 MB
Release files / fbuild-2.5.30-cp310-abi3-win_amd64.whl
| Download URL | fbuild-2.5.30-cp310-abi3-win_amd64.whl |
|---|---|
| Size | 39.0 MB |
| Tags | CPython 3.10 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
ffb7aaa858cd650f38f5af086cfaec437628b30e5b69ea5bfe3ec5d9d6233579
|
|
BLAKE2b-256 checksum How to use checksums |
7e94b11cebef7621d058516e10df0238d9b801322742e1d17a3b98614a1aa028
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 2, 2026.
Transparency logRelease files / fbuild-2.5.30-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | fbuild-2.5.30-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 40.3 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
7dc37900032fafc4eb305929fe0753986067e54778a8c21c80572d621d2f2335
|
|
BLAKE2b-256 checksum How to use checksums |
937c56ff365623fb7fe53b0a2d377994c54bf2c67398ef8d1b9de962f3077ee5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 2, 2026.
Transparency logRelease files / fbuild-2.5.30-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | fbuild-2.5.30-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 43.4 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
ec94a7e32364202a03a079331373443e86243c3bd4803e314b4ad04783b747d0
|
|
BLAKE2b-256 checksum How to use checksums |
4f743d7505dc175f3b51bfd6ddd5f8cd2b672a037c554eac55574d5f27737a86
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 2, 2026.
Transparency logRelease files / fbuild-2.5.30-cp310-abi3-macosx_11_0_arm64.macosx_10_12_x86_64.whl
| Download URL | fbuild-2.5.30-cp310-abi3-macosx_11_0_arm64.macosx_10_12_x86_64.whl |
|---|---|
| Size | 39.8 MB |
| Tags | CPython 3.10 abi3 macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
6c68aa9a3c327d969456fabc042f2a630b250408b6dea6bf2ad3a280d040e2b2
|
|
BLAKE2b-256 checksum How to use checksums |
ff87469ec68145d6966f58ff10af6ac2e06f6cf5a8492d3c3653f0b77d9fcc5e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 2, 2026.
Transparency log