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
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 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 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
In the spirit of Dan Garcia's permissively licensed software, fbuild is
presented as free software.
BSD 3-Clause License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fbuild-2.5.11-cp310-abi3-win_amd64.whl.
File metadata
- Download URL: fbuild-2.5.11-cp310-abi3-win_amd64.whl
- Upload date:
- Size: 28.7 MB
- Tags: CPython 3.10+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
47b8d246cbf54aab92368853c8a273afe611725231af8e836058f6bad2169edc
|
|
| MD5 |
bd5e7d08d744c83f88ea1b002e444ab9
|
|
| BLAKE2b-256 |
6908d879d2c864e1e46466a29297f3b8fb8b0b20b6fd6aef033b11fdaaeaf02e
|
Provenance
The following attestation bundles were made for fbuild-2.5.11-cp310-abi3-win_amd64.whl:
Publisher:
release-auto.yml on FastLED/fbuild
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fbuild-2.5.11-cp310-abi3-win_amd64.whl -
Subject digest:
47b8d246cbf54aab92368853c8a273afe611725231af8e836058f6bad2169edc - Sigstore transparency entry: 2352235554
- Sigstore integration time:
-
Permalink:
FastLED/fbuild@86d87412fa6046774623483d59eb826fddbad572 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/FastLED
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-auto.yml@86d87412fa6046774623483d59eb826fddbad572 -
Trigger Event:
push
-
Statement type:
File details
Details for the file fbuild-2.5.11-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: fbuild-2.5.11-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 29.8 MB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
363549ddcd8ebef78d42c953ee35b81bbbb47bb18e6ec99e2126667ccd80faca
|
|
| MD5 |
5ca07dd5729b26ca573c48415419cd62
|
|
| BLAKE2b-256 |
fbbf81c7fba2d78eed2a7498df5d72cf5ab5233a8dde520b92ae3daa12ce7d97
|
Provenance
The following attestation bundles were made for fbuild-2.5.11-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release-auto.yml on FastLED/fbuild
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fbuild-2.5.11-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
363549ddcd8ebef78d42c953ee35b81bbbb47bb18e6ec99e2126667ccd80faca - Sigstore transparency entry: 2352236116
- Sigstore integration time:
-
Permalink:
FastLED/fbuild@86d87412fa6046774623483d59eb826fddbad572 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/FastLED
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-auto.yml@86d87412fa6046774623483d59eb826fddbad572 -
Trigger Event:
push
-
Statement type:
File details
Details for the file fbuild-2.5.11-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: fbuild-2.5.11-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 27.8 MB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3802ce688269093babc5920cb97ba3a01b5acda1f178cbf8db052bfd8762d033
|
|
| MD5 |
6ff19ef1a24ae890d9003f1aa62ab6b0
|
|
| BLAKE2b-256 |
cb65c48e9c14935fa6f33735c9dade33331ffedb53588a185215c5c88ed81930
|
Provenance
The following attestation bundles were made for fbuild-2.5.11-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
release-auto.yml on FastLED/fbuild
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fbuild-2.5.11-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
3802ce688269093babc5920cb97ba3a01b5acda1f178cbf8db052bfd8762d033 - Sigstore transparency entry: 2352235768
- Sigstore integration time:
-
Permalink:
FastLED/fbuild@86d87412fa6046774623483d59eb826fddbad572 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/FastLED
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-auto.yml@86d87412fa6046774623483d59eb826fddbad572 -
Trigger Event:
push
-
Statement type:
File details
Details for the file fbuild-2.5.11-cp310-abi3-macosx_11_0_arm64.macosx_10_12_x86_64.whl.
File metadata
- Download URL: fbuild-2.5.11-cp310-abi3-macosx_11_0_arm64.macosx_10_12_x86_64.whl
- Upload date:
- Size: 32.9 MB
- Tags: CPython 3.10+, macOS 10.12+ x86-64, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c9885e0ab2fa316375daebefcf5b711545eda96dca158fdf3db1bbe244cee6f4
|
|
| MD5 |
9dd9c7b8276d9d208906c2d6c93059e9
|
|
| BLAKE2b-256 |
94fe4760c1f0a835a563b70377d89ec3fc52536325e2bf0e77f7cb664ed2e076
|
Provenance
The following attestation bundles were made for fbuild-2.5.11-cp310-abi3-macosx_11_0_arm64.macosx_10_12_x86_64.whl:
Publisher:
release-auto.yml on FastLED/fbuild
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fbuild-2.5.11-cp310-abi3-macosx_11_0_arm64.macosx_10_12_x86_64.whl -
Subject digest:
c9885e0ab2fa316375daebefcf5b711545eda96dca158fdf3db1bbe244cee6f4 - Sigstore transparency entry: 2352235976
- Sigstore integration time:
-
Permalink:
FastLED/fbuild@86d87412fa6046774623483d59eb826fddbad572 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/FastLED
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-auto.yml@86d87412fa6046774623483d59eb826fddbad572 -
Trigger Event:
push
-
Statement type: