• Improve zero value flag handling and documentation (#157)


  • 30% improvement in compile time of bitflags crate (#156)

  • Documentation improvements (#153)

  • Implementation cleanup (#149)


  • Add support for pub(restricted) specifier on the bitflags struct (#135)
  • Optimize performance of all() when called from a separate crate (#136)


  • [breaking change] Macro now generates associated constants (#24)

  • [breaking change] Minimum supported version is Rust 1.20, due to usage of associated constants

  • After being broken in 0.9, the #[deprecated] attribute is now supported again (#112)

  • Other improvements to unit tests and documentation (#106 and #115)

How to update your code to use associated constants

Assuming the following structure definition:

bitflags! {
  struct Something: u8 {
     const FOO = 0b01,
     const BAR = 0b10

In 0.9 and older you could do:

let x = FOO.bits | BAR.bits;

Now you must use:

let x = Something::FOO.bits | Something::BAR.bits;


  • Fix the implementation of Formatting traits when other formatting traits were present in scope (#105)


  • [breaking change] Use struct keyword instead of flags to define bitflag types (#84)

  • [breaking change] Terminate const items with semicolons instead of commas (#87)

  • Implement the Hex, Octal, and Binary formatting traits (#86)

  • Printing an empty flag value with the Debug trait now prints “(empty)” instead of nothing (#85)

  • The bitflags! macro can now be used inside of a fn body, to define a type local to that function (#74)


  • Update feature flag used when building bitflags as a dependency of the Rust toolchain


  • Allow bitflags to be used as a dependency of the Rust toolchain


  • Add support for the experimental i128 and u128 integer types (#57)
  • Add set method: flags.set(SOME_FLAG, true) or flags.set(SOME_FLAG, false) (#55) This may break code that defines its own set method




  • Implement the Extend trait (#49)
  • Allow definitions inside the bitflags! macro to refer to items imported from other modules (#51)


  • The no_std feature was removed as it is now the default
  • The assignment_operators feature was remove as it is now enabled by default
  • Some clippy suggestions have been applied