NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #2912 most downloaded on crates.io
Easily define bitfield types with modular building blocks.
Last release 10 months ago
06 Dec 2025
Ships unpredictably
gaps range from 8 days to 4.5 years
Some releases are documented
notes for 10 of 17 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
17 releases · first in 2019
Bug fixes #[repr] attributes containing lists like align(..) are now properly handled. Thanks, @minty99 !
The BitfieldSpecifier alias, which was deprecated in v0.12, is removed.
From<[u8; {n}]> (when conversions are guaranteed) and TryFrom<[u8; {n}]> traits are now automatically derived by #[bitfield]. This will conflict with any manual implementations of the same trait, but you wrote those implementations to do this thing anyway, right? (#120)BitfieldSpecifier alias, which was deprecated in v0.12, is removed.Specifier trait.One column per quarter.
…because it derives the Specifier trait. The deprecated alias will be removed in the next release of modular-bitfield.
InvalidBitPattern::invalid_bytes field is now private. Use the InvalidBitPattern::invalid_bytes() method to access the invalid bytes (and InvalidBitPattern::new() to create new errors).#[derive(BitfieldSpecifier)] has been renamed to #[derive(Specifier)] because it derives the Specifier trait. The deprecated alias will be removed in the next release of modular-bitfield.#[must_use]. (#79)#[bitfield]. (#87)#[derive(Specifier)]. (#82)#[bitfield] on an empty struct now emits an appropriate diagnostic instead of causing a compile-time arithmetic error. (#104)Debug, tuple-like structs are now formatted normally instead of like structs with numeric fields.Fixed a bug that all but the first #[skip(..)] attribute for a bitfield were ignored despite proper error handling. E.g. when flagging a field with #[
#[skip(..)] attribute for a bitfield were ignored despite proper error handling.#[skip(getters)] #[skip(setters)] the #[skip(setters)] was ignored.Allow non-overlapping #[skip(getters)] and #[skip(setters)] attributes. This might be useful for conditional compilation.
#[skip(getters)] and #[skip(setters)] attributes. This might be useful for conditional compilation.#[skip] skipped fields not properly bumping the bit offset#[skip] attributes would yield a confusing error.Add bits: int parameter to the #[bitfield] macro which allows to precisely control the resulting bit width of the generated bitfield struct. Use it li
bits: int parameter to the #[bitfield] macro which allows to precisely control the resulting bit width#[bitfield(bits = 5)].#[bitfield(specifier = true)] syntax with #[bitfield] #[derive(BitfieldSpecifier)].#[bitfield] structs with #[skip(..)] in order to skip code generation for them.#[skip(setters)], only getters #[skip(getters)]#[skip]) defaults to skipping both setters and getters.#[skip]: __: B10#[bitfield] fields are now properly propagated to their generated getters and setters.#[bits = N] field attributes for #[bitfield] fields.#[derive(Debug)] now produces code that the Rust 2015 edition will accept.(Thanks @jam1garner ): The #[bitfield] macro now looks for #[derive(Debug)] annotations and if found will implement one that formats the struct with i
#[bitfield] macro now looks for #[derive(Debug)] annotations and if found will implement#[derive(Debug)]#[bitfield] struct would simply print the contents of the generated internal byte array.#[bitfield(bytes = N)] parameter to ensure at compile time that the bitfield structN bytes of memory.#[bitfield(filled: bool)] parameter to control whether the bitfield struct ensures that eitherfilled = true) or if there are going to be some bits intentionally undefined (filled = false).filled = true.#[repr(uN)] for #[bitfield] structs where uN is one of u8, u16, u32, u64 or u128 with which it isuN and the bitfield. Also it ensures at compile time thatfilled = false.#[repr(transparent)]. If a user wants their bitfield struct to remain transparent#[repr(transparent)] manually to their struct definition.#[bitfield(specifier = bool)] got changed so that it no longer by default allows forfilled = false) or undefined bits. Instead users now have to additionally add filled = false if theyas_bytes method for #[bitfield] structs to into_bytes. It now takes self instead of &self#[repr(uN)] feature.#[bitfield(specifier = true)] bitfields that were not aligned to have a power-of-two bytes.Add #[bitfield(specifier = bool)] parameter with which it now is possible to have bitfield structs automatically also implement the modular_bitfield::
#[bitfield(specifier = bool)] parameter with which it now is possible to have bitfield structs automatically alsomodular_bitfield::Specifier trait which makes it possible to have bitfields as fields of bitfields.unsafe fn from_bytes_unchecked. Now generates a safe fn from_bytes that is basically identical.Release Notes: 0.8.0 (2020-10-25)
#[derive(BitfieldSpecifier)] now allows an amount of variants that is not a power of two via#[bits = N] where N is the bit width of the deriving enum. (Thanks @lkolbly)Specifier implementations for u8, u16, u32, u64 and u128.#[bitfield] macro now additionally generates getters for expected failures just as it alreadya the new fail-safe getter is called a_or_err and returnsResult.dead_code warnings originating from generated #[bitfield] getters and setters.modular_bitfield crate and its generated code.Release Notes: 0.7.0 (2020-10-18)
#[bitfield] and #[derive(BitfieldSpecifier)].#[bitfield] now produces with_{} and with_{}_checked methods that take self and return Self. (Thanks @lkolbly)
#[bitfield] generated getters now are the same identifiers as their fields. (Thanks @Qyriad)
a it generated fn get_a(..) but now it generates fn a(..) instead.#[bitfield] now properly inherits visibility modifiers for all fields onto their generated getters and setters. (Thanks @WorldSEnder)TryFrom implementation from #[bitfield] generated structs since it never was really safe.
#[bitfield] generated new constructor is now a const fn.#[bitfield] generated to_bytes to as_bytes.
&[u8; N] instead of a slice.#[bitfield] macro now generates an unsafe fn from_bytes_unchecked that allows constructing from raw bytes.
unsafe replacement for the removed TryFrom implementation.criterion crate.enum variant names sometimes could clash with Rust keywords. (Thanks @Qyriad)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →