Defmt
Efficient, deferred formatting for logging on embedded systems
Install / Use
/learn @knurling-rs/DefmtREADME
defmt
defmt ("de format", short for "deferred formatting") is a highly efficient logging framework that targets resource-constrained devices, like microcontrollers.
For more details about the framework check the book at https://defmt.ferrous-systems.com.
Components
This repository contains the following packages:
| Name | Path | Description |
| ------------------- | -------------------------------------------------------------- | -------------------------------------------------------------------------- |
| defmt | ./defmt | On-target code for highly efficient logging |
| defmt-macros | ./macros | Proc Macros for defmt |
| defmt-print | ./print | CLI utility for decoding and printing defmt encoded logs to standard out |
| defmt-decoder | ./decoder | Host Library for decoding defmt log frames |
| defmt-parser | ./parser | Host Library for parsing defmt log frames |
| defmt-rtt | ./firmware/defmt-rtt | On-target library for sending defmt logs over RTT |
| defmt-itm | ./firmware/defmt-itm | On-target library for sending defmt logs over ITM |
| defmt-semihosting | ./firmware/defmt-semihosting | On-target library for sending defmt logs over semihosting |
| panic-probe | ./firmware/panic-probe | On-target library for sending panic! over defmt |
| defmt-test | ./firmware/defmt-test | Framework for running tests on-target |
| defmt-test-macros | ./firmware/defmt-test/macros | Proc Macros for defmt-test |
| defmt-json-schema | ./decoder/defmt-json-schema | Describes the JSON emitted by defmt-decoder |
MSRV
The minimum supported Rust version is 1.76 (or Ferrocene 24.05) for the crates that cross-compile to your microcontroller. The minimum supported Rust version is 1.83 for all host-side crates.
The defmt crates are tested against the latest stable Rust version and the MSRV.
Developer Information
Running Tests
Tests are run using cargo xtask -- although this is simply an alias (defined in .cargo/config.toml) for cargo run --package xtask --.
To see a list of options, see xtask/src/main.rs, or run:
cargo xtask help
For example, to run all the tests, run:
cargo xtask test-all
You will need qemu-system-arm installed and in your $PATH for some of the tests (e.g. test-snapshot).
Support
defmt is part of the Knurling project, Ferrous Systems' effort at
improving tooling used to develop for embedded systems.
If you think that our work is useful, consider sponsoring it via GitHub Sponsors.
License
Licensed under either of
-
Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
-
MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.
Related Skills
himalaya
325.9kCLI to manage emails via IMAP/SMTP. Use `himalaya` to list, read, write, reply, forward, search, and organize emails from the terminal. Supports multiple accounts and message composition with MML (MIME Meta Language).
node-connect
325.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
80.3kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
coding-agent
325.9kDelegate coding tasks to Codex, Claude Code, or Pi agents via background process
