PackageTrack
Sign in Get early access

defmt

A highly efficient logging framework that targets resource-constrained devices, like microcontrollers

1.1.1 30M downloads/mo #1675 most downloaded on crates.io knurling-rs/defmt

What this package is like to depend on

Last release 1 months ago

03 Jul 2026

Release timing varies

gaps range from 3 weeks to 1.1 years

Nearly every release is documented

notes for 19 of 20 stable releases

5 versions withdrawn

withdrawn after publishing

6 years old

29 releases · first in 2020

2 releases in the last 12 months

see the full history below

Release timeline

29 releases · Aug 2020 to Jul 2026
2021 2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 29
  1. 1.1.1 03 Jul 2026
    Release notes

    What's Changed

    New Contributors

    Full Changelog: defmt-v1.1.0...defmt-v1.1.1

    Open source →
    Release notes
    • [#1070] Swap from proc-macro-error2 to syn::Error
    Open source →
  2. 1.1.0 12 May 2026
    Release notes

    What's Changed

    New Contributors

    Full Changelog: defmt-v1.0.1...defmt-v1.1.0

    Open source →
    Release notes
    • [#974] Ensure typechecking is still performed on disabled log statement.
    • [#960] Fix Format not accepting multiple helper attribute instances
    • [#937] add support for #[defmt(transparent)] on Format derive
    • [#959] Missing "unstable-test" cfg in tests module
    • [#956] Link LICENSE-* in the crate folder
    • [#955] Allow using the defmt/alloc feature on bare metal ESP32-S2
    • [#972] Fix logic bug in env_filter
    • [#1007] defmt: impl Format for core::fmt::Error
    • [#983] Add Format implementation for core::num::Wrapping<T>
    • [#1022] Re-fix accidental breaking change in Format macro
    • [#1041] Ignore RUSTSEC-2026-0009
    • [#1052] Pin UI tests to host MSRV
    Open source →
  3. 1.0.1 01 Apr 2025
    Release notes
    • [#954] Fix accidental breaking change in Format macro
    Open source →
  4. 1.0.0 01 Apr 2025 withdrawn
    Release notes
    • [#909] First 1.0 stable release :tada:
    • [#938] Emit option_env!("DEFMT_LOG") so rustc depinfo can track it
    • [#935] Add note in book's setup chapter to clarify staticlib setup
    • [#914] Add cargo-deny as a CI action to check crate security and licensing
    Open source →
  5. 1.0.0-rc.1 08 Jan 2025 pre-release

    Nothing published for this version

  6. 0.3.100 01 Apr 2025
    Release notes
    • [#909] Re-exports defmt-1.0.0
    Open source →
  7. 0.3.100-rc.1 08 Jan 2025 pre-release

    Nothing published for this version

  8. 0.3.10 29 Nov 2024
    Release notes
    • [#902] Minor change to Format impl for core::panic::PanicInfo, eliding a lifetime specifier to satisfy Clippy 1.83.
    • [#899] Pin the defmt-macro crate to avoid incompatible versions being used together
    Open source →
  9. 0.3.9 27 Nov 2024 withdrawn
    Release notes
    • [#889] Add script for book hosting
    • [#887] Fix interning example in the book
    • [#884] Upgrade dependencies: notify is now at v7, thiserror is now at v2
    • [#883] Mark decoder and parser not as unstable anymore
    • [#880] Merge function calls emitted by the macro to save space.
    • [#874] defmt: Fix doc test
    • [#872] defmt: Add expect! as alias for unwrap! for discoverability
    • [#871] Set MSRV to Rust 1.76
    • [#869] macros: Add missing type hints
    • [#865] defmt: Replace proc-macro-error with proc-macro-error2
    • [#858] defmt: Implement "passthrough" trait impls for *2Format wrappers
    • [#857] Add an octal display hint (:o)
    • [#856] defmt: Add a Format impl for PanicInfo and related types.
    • [#852] CI: Update mdbook to v0.4.40
    • [#848] decoder: add optional one-line format
    • [#847] decoder: Fix log format width specifier not working as expected
    • [#845] decoder: fix println!() records being printed with formatting
    • [#843] defmt: Sort IDs of log msgs by severity to allow runtime filtering by severity
    • [#822] CI: Run cargo semver-checks on every PR
    Open source →
  10. 0.3.8 17 May 2024
    Release notes
    • [#840] defmt: Support pre-1.77
    • [#839] CI: Fix tests
    • [#838] defmt: Switch to Cargo instruction compatible with older versions of Cargo
    Open source →
  11. 0.3.7 13 May 2024 withdrawn
    Release notes
    • [#831] CI: Fix CI
    • [#830] book: Add section about feature-gated derive Format
    • [#821] Clean up
    • [#813] doc: add note for the alloc feature flag
    • [#812] defmt: Add a feature to stop linking a default panic handler
    • [#811] book: Add some examples for byte slice/array hints as well
    • [#805] defmt: Drop ip_in_core feature and re-enable nightly snapshot tests
    Open source →
  12. 0.3.6 07 Feb 2024
    Release notes
    • [#804] CI: Remove mdbook strategy
    • [#803] CI: Disable nightly qemu-snapshot tests
    • [#789] defmt: Add support for new time-related display hints
    Open source →
  13. 0.3.6-beta.1 07 Jul 2023 pre-release

    Nothing published for this version

  14. 0.3.6-beta.0 07 Jul 2023 pre-release

    Nothing published for this version

  15. 0.3.5 19 Jun 2023
    Release notes
    • [#758] defmt-print: Tidy up
    • [#757] defmt-print: Allow reading from a tcp port
    • [#756] CI: Switch from bors to merge queue
    • [#753] demft Add Format impls for core::ptr::NonNull and fn(Args...) -> Ret (up to 12 arguments)
    Open source →
  16. 0.3.4 05 Apr 2023
    Release notes
    • [#747] Bump wire version
    Open source →
  17. 0.3.3 29 Mar 2023 withdrawn
    Release notes
    • [#744] defmt-parser: Clean and simplify
    • [#743] defmt-parser: Simplify tests with rstest
    • [#740] Snapshot tests for core::net
    • [#739] xtask: Clean up
    • [#737] panic-probe: Add hard_fault() for use in defmt::panic_handler
    • [#733] defmt: Add formatting for core::net with the ip_in_core feature
    • [#603] defmt: Raw pointers now print as 0x1234 instead of 1234
    • [#536] defmt-parser: Switch to using an enum for errors, and add some help text pointing you to the defmt docs if you use the wrong type specifier in a format string.
    Open source →
  18. 0.3.2 31 May 2022
    Release notes
    • [#669] Refine docs for --json flag
    Open source →
  19. 0.3.1 10 Mar 2022 withdrawn
    Release notes

    Added

    • [#662] #[derive(Format)] now accepts attribute fields to format fields using the Debug2Format adapter instead of a Format implementation.
    • [#661] Add tests for Cell types
    • [#656] Implement defmt::Format for Cell and RefCell
    • [#630] Add test instructions to README.md

    Changed

    • [#659] mark extern::acquire() and extern::release() as unsafe. this is not a breaking change; this is an internal API
    • [#640] use crate critical-section in defmt-rtt
    • [#634] update ELF parsing dependencies
    • [#633] make RTT buffer size configurable
    • [#626] Make errror message more meaningful in case of version-mismatch
    Open source →
  20. 0.3.0 10 Nov 2021
    Release notes
    • [#618] Support #[ignore] attribute in defmt_test
    • [#621] Readme Diagram: Replace duplicate defmt-itm with defmt-rtt
    • [#617] Add display hint to output u64 as ISO8601 time
    • [#620] Tidy up: remove unused code and dependencies
    • [#619] Update all crates to rust edition 2021! 🎉
    • [#610] defmt-print: Log if malformed frame gets skipped
    • [#547] Migration guide v0.2.x to v0.3.0
    • [#604] defmt-test: #[cfg(test)] the #[defmt_test::tests] module
    • [#616] Update user guide part of the book
    • [#615] Document how to deal with backward compatibility breakage
    • [#614] Bugfix: decoder breaks with pipe symbol
    • [#605] Properly handle the off pseudo-level in presence of nested logging directives
    • [#611] Fix cargo doc-warnings
    • [#608] decoder: Fix that defmt::println! shows leading space when timestamps are disabled
    • [#601] Move crate defmt to defmt/
    • [#600] Run snapshot & backcompat tests in dev mode only
    • [#519] Target-side env_logger-like env filter
    • [#592] xtask: add backward compability test
    • [#598] defmt-print: Recover from decoding-errors
    • [#569] Add defmt println! macro
    • [#580] Structure defmt::export
    • [#594] panic-probe: use UDF instruction on nested panics
    • [#591] Remove timestamps from snapshot test
    • [#585] Add xtask option to run a single snapshot test by name
    • [#589] Implement Format for arrays of any length
    • [#587] Tweak inline attributes to remove machine code duplication
    • [#574] Refactor rtt [1/2]
    • [#584] Remove outdated doc "you may only call write! once"
    • [#581] Add impl for alloc::Layout
    • [#579] defmt-rtt: fix check for blocking RTT
    • [#577] Fix typo in cfg of encoding-feature-compile_error!
    • [#578] qemu: Allow dead code
    • [#550] Added defmt::flush()
    • [#570] Support referring to Self in bitflags constants
    • [#568] Encoding docs.
    • [#564] Make order of bitflags values deterministic
    • [#561] Remove unused cortex-m-rt in panic-probe a=Dirbaio
    • [#562] Remove call to fill in user survey from README
    • [#560] Update cortex-m-rt crate from 0.6 to 0.7
    • [#557] Add impl for TryFromSliceError
    • [#556] Add impl for TryFromIntError
    • [#551] Display git version & date to introduction section
    • [#540] Separate "crate version" from "wire format version
    • [#545] Revert "build.rs: Obtain version from macro; simplify"
    • [#539] Add optional rzCOBS encoding+framing
    • [#518] build.rs: Obtain version from macro; simplify
    • [#543] CI: Temporarily drop backward-compatibility check
    • [#542] snapshot-tests: Test alternate hint for bitfields
    • [#538] Fix wrong bit count in comment.
    • [#537] snapshot-tests: Delete :? hint without impact
    • [#531] refactor the macros crate
    • [#534] Attribute test progress message to the test in question;
    • [#535] Don't print leading space when timestamp is absent
    • [#529] Refactor user-guide of book
    • [#528] Support bitflags
    • [#533] Adds add for user survey into readme.
    • [#527] book: Add logo and support text to introduction
    • [#526] decoder: Simplify tests
    • [#359] Implement precedence of inner display hint
    • [#523] Minimize dependencies
    • [#508] [5/n] Format trait v2
    • [#522] Replace µs hint with us
    • [#521] [3/n] Remove u24
    • [#516] xtask: Only install additional targets for tests that require them
    • [#512] Add overwrite option for xtask cross results.
    • [#514] extend raw pointer implementation to include !Format types
    • [#513] book/duplicates.md: discriminator -> disambiguator
    • [#507] [2/n] - Remove code-size-costly optimizations
    • [#505] [1/n] - Logger trait v2.
    Open source →
  21. 0.2.3 17 Jun 2021
    Release notes

    Added

    • [#499] Illustrate structure of the defmt crates
    • [#503] Add alternate hint ('#')
    • [#509] impl Format for NonZero*

    Changed

    • [#488] Structure impl Formats into multiple files
    • [#496] Bump build-dep semver to 1.0
    • [#489] Structure lib
    • [#500] book: fix leftover old formatting syntax; typos
    • [#510] CI: Don't install MacOS dependency which is included by default

    Fixed

    • [#497] macros: match unused vars if logging is disabled
    Open source →
  22. 0.2.2 21 May 2021
    Release notes

    Added

    • [#446] Add usage examples for Debug2Format, Display2Format
    • [#464] impl<T> Format for {*const, *mut} T where T: Format + ?Sized
    • [#472] impl Format for the core::{iter, ops, slice} structs
    • [#473] impl Format for all the Cows
    • [#478] add dbg! macro

    Changed

    • [#477] Disable logging calls via conditional compilation when all defmt features are disabled
    Open source →
  23. 0.2.1 08 Mar 2021
    Release notes

    Added

    • [#403] Add knurling logo to API docs

    Fixed

    • [#413] Fix docs-rs build, by disabling feature "unstable-test"
    • [#427] Drop outdated note about defmt v0.2.0 from book
    Open source →
  24. 0.2.0 19 Feb 2021
    Release notes

    Added

    • [#284] Implement support for i128 and u128 types
    • [#291] Allows using defmt on x86 platforms by making the test suite use an internal Cargo feature
    • [#293] Make defmt attributes forward input attributes
    • [#294] Permits use items inside #[defmt_test::tests] modules
    • [#296] Allows skipping the defmt version check in order to make development easier
    • [#302] derive(Format) now supports more than 256 variants
    • [#304] impl Format for chars
    • [#313] Add display hints
    • [#323] Merge Uxx(u64) (Ixx(i64)) and U128(u128) (u128(i128)) data variants
    • [#327] impl<T> Format for PhantomData<T>
    • [#329] Document safety of implementation detail functions
    • [#335] Add the defmt-itm crate
    • [#338] Add defmt-logger and defmt-print crates
    • [#343] Customizable timestamps
    • [#347] Document the grammar of defmts current format parameter syntax
    • [#351] Allow tools to distinguish user-controlled format strings from generated ones
    • [#354] Add f64 support
    • [#376] Make defmt-logger more configurable, remove probe-run strings
    • [#377] defmt-test: support returning Result from tests
    • [#382] impl Format for Infallible
    • [#391] impl Format for core::time::Duration

    Changed

    • [#297] Improves the output formatting and includes a progress indicator
    • [#299] Test embedded test runner (defmt-test) as part of our CI setup
    • [#300] #[derive] now uses built-in primitive formatting for primitive references
    • [#303] Employ the help of [bors]
    • [#305] Formatter is now passed by value, i.e. consumed during formatting
    • [#308] compile-fail test new Formatter move semantics
    • [#312] str fields in structs are now treated as a native type by the encoder instead of going through the Format trait
    • [#325] Update our UI tests to work with the latest stable release
    • [#331] Add more compile-fail tests
    • [#332] Improve Format trait docs
    • [#333] Hide Formatter's inner field
    • [#334] Fix dead link in parser docs
    • [#337] Improve diagnostics on double write!
    • [#339] Make leb64 encoding fully safe (while at the same time reducing its code footprint)
    • [#340] Stream core::fmt adapters
    • [#345] Reduce code size by avoiding 64-bit arithmetic in LEB encoding
    • [#350] panic-probe now uses defmts Display2Format to log panic messages. In consequence, panic messages won't get truncated anymore.
    • [#355] Clarify the docs on Write::write
    • [#352] Do not display full version with --help. Thanks to [Javier-varez]!
    • [#354] Support f64 floating point numbers.
    • [#355] Clarify docs on Write::write.
    • [#363] Improve test coverage on basic defmt usage on std rust
    • [#364] Split firmware code into separate workspace
    • [#368] defmt-itm: Raise compile error on armv6m
    • [#369] Move bors.toml to .github/
    • [#371] Link to git version of defmt book
    • [#372] Update Printers section in defmt book
    • [#373] Improve information in Cargo.toml
    • [#379] Make link to defmt book clickable
    • [#380] Merge crates elf2table and logger into decoder
    • [#383] defmt-test: Modify attributes in place and handle #[cfg]
    • [#384] pin unstable path dependencies
    • [#385] defmt_decoder: Skip allocation of datastructure for raw symbols of the table entries in fn get_locations
    • [#386], [#392] Refactor decoder
      • rename mod logger to log
      • make fn parse_*, fn get_locations, fn decode methods of struct Table
      • various simplifications and restructuring of internal code
    • [#387] CI: bump timeout to 20 minutes
    • [#389] defmt_decoder: Bump deps object and gimli

    Fixed

    • [#301] Fix the nightly builds after a linked_list_allocator feature change
    • [#310], [#311] remove the runtime check (and matching tests) if the write! macro was called multiple times as this can no longer happen since write! now consumes the Formatter due to [#305].
    • [#321] ASCII hint (:a) is now respected when used together with the Format trait (=? and =[?]).
    • [#342] Fix a data corruption issue when using bools in write!
    • [#357] Fix issue preventing defmt from compiling on MacOS.
    Open source →
  25. 0.1.3 30 Nov 2020
    Release notes

    Fixed

    • [#290] fixed cross compilation to ARMv6-M and other targets that have no CAS (Compare-and-Swap) primitives when the "alloc" feature is enabled
    Open source →
  26. 0.1.2 26 Nov 2020
    Release notes

    Added

    • [#263] [#276] add and document write! macro
    • [#273] [#280] add and document unwrap! macro
    • [#266] add panic!-like and assert!-like macros which will log the panic message using defmt and then call core::panic! (by default)
    • [#267], [#281] add Debug2Format and Display2Format adapters
    • [#279] started adding notes about feature availability (e.g. "defmt 0.1.2 and up")

    Changed

    • [#257] code size optimizations
    • [#265] updated the 'how we deal with duplicated format strings' section of our implementation notes

    Fixed

    • [#264] probe-run doesn't panic if log message is not UTF-8
    • [#269] fixes compiler error that was thrown when using defmt::panic within e.g. a match expression
    • [#272] braces in format args passed to the new defmt::panic! and defmt::assert! macros do not cause unexpected errors anymore
    Open source →
  27. 0.1.1 16 Nov 2020
    Release notes

    Fixed

    • [#259] crates.io version of defmt crates no longer require git to be built
    Open source →
  28. 0.1.0 11 Nov 2020
    Release notes

    Initial release

    defmt-macros

    Macros for defmt

    Open source →
  29. 0.0.0 14 Aug 2020

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive