bindgen
Automatically generates Rust FFI bindings to C and C++ libraries.
0.72.1
365M downloads/mo
#309 most downloaded on crates.io
rust-lang/rust-bindgen
What this package is like to depend on
Last release 11 months ago
31 Aug 2025
Ships fairly regularly
a new release about every 2 months
Some releases are documented
notes for 58 of 120 stable releases
5 versions withdrawn
withdrawn after publishing
12 years old
126 releases · first in 2014
1 release in the last 12 months
see the full history below
Release timeline
126 releases · Nov 2014 to Aug 2025Releases
latest 60 of 126-
0.72.131 Aug 2025Release notes
Open source →This is just 0.72.0 with a fix for a breaking change in clang (see #3264 and related).
Full Changelog: v0.72.0...v0.72.1
-
0.72.008 Jun 2025Release notes
Open source →Added
- Report enums in ParseCallbacks.
- Refactor item_name method to use ItemInfo struct.
- Add callback to modify contents of macro
- Discovery callbacks for functions and methods.
- Options to generate uncallable C++ functions.
- Provide option to get real virtual fn receiver.
Changed
- Generate bindings compatible with current rustc version by default.
Removed
- Remove unused which-rustfmt feature
- Remove warning for opaque forward declarations
Fixed
- More sophisticated handling of the triple in rust_to_clang_target
- Rename *-apple-ios-sim to ...simulator
- Fix OpenCL vectors that use "ext_vector_type".
- Fix union layout when it contains 0 sized array.
- Avoid crashing on variadic unions without layout information.
- Distinguish char16_t.
- Fix bugs in --clang-macro-fallback
- Add missed unsafe in the raw_set_bit function
- Use link_name for dynamic library loading
- Add "gen" to list of rust keywords in 'rust_mangle'
- Use appropriate
rustfmt --format ...param
Full Changelog: v0.71.1...v0.72.0
Release notes
Open source →Added
- Report enums in ParseCallbacks.
- Refactor item_name method to use ItemInfo struct.
- Add callback to modify contents of macro
- Discovery callbacks for functions and methods.
- Options to generate uncallable C++ functions.
- Provide option to get real virtual fn receiver.
Changed
- Generate bindings compatible with current rustc version by default.
Removed
- Remove unused which-rustfmt feature
- Remove warning for opaque forward declarations
Fixed
- More sophisticated handling of the triple in rust_to_clang_target
- Rename *-apple-ios-sim to ...simulator
- Fix OpenCL vectors that use "ext_vector_type".
- Fix union layout when it contains 0 sized array.
- Avoid crashing on variadic unions without layout information.
- Distinguish char16_t.
- Fix bugs in --clang-macro-fallback
- Add missed unsafe in the raw_set_bit function
- Use link_name for dynamic library loading
- Add "gen" to list of rust keywords in 'rust_mangle'
- Use appropriate
rustfmt --format ...param
-
0.71.109 Dec 2024Release notes
Open source →We are happy to announce a new release of bindgen 🎉
Changelog
Fixed
- Fix
--versionand--generate-shell-completions(#3040)
Upgrade
bindgenUpgrade to this release by updating your
Cargo.toml:bindgen = "0.71.1"
Install
bindgen-cliInstall prebuild binaries using
cargo binstallJust run
cargo binstall bindgen-cli
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/rust-lang/rust-bindgen/releases/download/v0.71.1/bindgen-cli-installer.sh | sh
Download bindgen-cli 0.71.1
File Platform Checksum bindgen-cli-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum bindgen-cli-x86_64-apple-darwin.tar.xz Intel macOS checksum bindgen-cli-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum Compile and install binaries from source
Just run
cargo install bindgen-cli
Friends
Thanks to everyone who contributed to this release!
- Christian Poveda
- Jan Alexander Steffens (heftig)
Contributing
Want to join us? Check out our CONTRIBUTING.md and take a look
at some of these issues:- Issues labeled "easy"
- Issues labeled "less easy"
- Still can't find something to work on? Drop a comment here.
Want to help improve our documentation? Check out the issues labeled "docs".
Found a bug with
bindgen? File an issue here. - Fix
-
0.71.006 Dec 2024Release notes
Open source →We are happy to announce a new release of bindgen 🎉
Changelog
Added
- Add the
ParseCallbacks::new_item_foundcallback to expose the original and final name of structs, unions and enums (#2658). - Add the
field_type_namefield toFieldInfoto expose the name of the type of a field (#2863) - Add support for custom attributes with the
--with-attribute-customflag (#2866) - Allow setting
--rust-targetto any Rust version supported by bindgen (#2993) - Use c-string literals if the
--generate-cstrflag is used for Rust targets after 1.77 under the 2021 edition (#2996) - Add the
--rust-editionflag which allows to select which Rust edition to target. (#3002, #3013) - Use
unsafe externinstead ofexternin blocks for any Rust target after 1.82. (#3015)
Changed
- The
--wrap-static-fnsrelated options no longer require the experimental feature or flag (#2928) - Use the
Displayimplementation instead of theDebugone forBindgenErrorinbindgen-cli(#3005)
Removed
- Dropped support for any Clang versions strictly lower than 9.0 (#2932)
- Dropped support for any Rust version strictly lower than 1.33 (#2993)
Fixed
- Represent opaque types in a FFI-safe way (#2880)
- Use the underlying type of any atomic type instead of panicking (#2920)
- Use the right characters for newlines on windows (#2923)
- Inlined namespaces are properly recognized now (#2950)
- Unsafe calls to
libloadingare now wrapped inunsafeblocks when using dynamic loading (#2961) - The
ParseCallbacks::field_visibilitycallback is now called for newtypes as well (#2967) - Gate the use of the
addr_ofandaddr_of_mutmacros under the 1.51 rust version (#2988)
Upgrade
bindgenUpgrade to this release by updating your
Cargo.toml:bindgen = "0.71.0"
Install
bindgen-cliInstall prebuild binaries using
cargo binstallJust run
cargo binstall bindgen-cli
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/rust-lang/rust-bindgen/releases/download/v0.71.0/bindgen-cli-installer.sh | sh
Download bindgen-cli 0.71.0
File Platform Checksum bindgen-cli-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum bindgen-cli-x86_64-apple-darwin.tar.xz Intel macOS checksum bindgen-cli-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum Compile and install binaries from source
Just run
cargo install bindgen-cli
Friends
Thanks to everyone who contributed to this release!
- Brian Ward
- Christiaan Biesterbosch
- Christian Poveda
- David Tolnay
- Emilio Cobos Álvarez
- Enes
- George Bateman
- John Baublitz
- Jonathan Schwender
- Jubilee Young
- Martin Kröning
- Maxence Younsi
- Miguel Ojeda
- Mossa
- myyrakle
- Nik Konyuchenko
- Valentin
- Yuri Astrakhan
- Zhang Jingqiang
Contributing
Want to join us? Check out our CONTRIBUTING.md and take a look
at some of these issues:- Issues labeled "easy"
- Issues labeled "less easy"
- Still can't find something to work on? Drop a comment here.
Want to help improve our documentation? Check out the issues labeled "docs".
Found a bug with
bindgen? File an issue here.Release notes
Open source →Added
- Add the
ParseCallbacks::new_item_foundcallback to expose the original and final name of structs, unions and enums (#2658). - Add the
field_type_namefield toFieldInfoto expose the name of the type of a field (#2863) - Add support for custom attributes with the
--with-attribute-customflag (#2866) - Allow setting
--rust-targetto any Rust version supported by bindgen (#2993) - Use c-string literals if the
--generate-cstrflag is used for Rust targets after 1.77 under the 2021 edition (#2996) - Add the
--rust-editionflag which allows to select which Rust edition to target. (#3002, #3013) - Use
unsafe externinstead ofexternin blocks for any Rust target after 1.82. (#3015)
Changed
- The
--wrap-static-fnsrelated options no longer require the experimental feature or flag (#2928) - Use the
Displayimplementation instead of theDebugone forBindgenErrorinbindgen-cli(#3005)
Removed
- Dropped support for any Clang versions strictly lower than 9.0 (#2932)
- Dropped support for any Rust version strictly lower than 1.33 (#2993)
Fixed
- Represent opaque types in a FFI-safe way (#2880)
- Use the underlying type of any atomic type instead of panicking (#2920)
- Use the right characters for newlines on windows (#2923)
- Inlined namespaces are properly recognized now (#2950)
- Unsafe calls to
libloadingare now wrapped inunsafeblocks when using dynamic loading (#2961) - The
ParseCallbacks::field_visibilitycallback is now called for newtypes as well (#2967) - Gate the use of the
addr_ofandaddr_of_mutmacros under the 1.51 rust version (#2988)
- Add the
-
0.70.120 Aug 2024Release notes
Open source →Install bindgen-cli 0.70.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/rust-lang/rust-bindgen/releases/download/v0.70.1/bindgen-cli-installer.sh | sh
Download bindgen-cli 0.70.1
File Platform Checksum bindgen-cli-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum bindgen-cli-x86_64-apple-darwin.tar.xz Intel macOS checksum bindgen-cli-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum Release notes
Open source →Added
Changed
Removed
Fixed
- Fix regression where the
constlayout tests were triggering theunnecessary_operationandidentity_opclippy warnings.
Security
- Fix regression where the
-
0.70.016 Aug 2024Release notes
Open source →Install bindgen-cli 0.70.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/rust-lang/rust-bindgen/releases/download/v0.70.0/bindgen-cli-installer.sh | sh
Download bindgen-cli 0.70.0
File Platform Checksum bindgen-cli-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum bindgen-cli-x86_64-apple-darwin.tar.xz Intel macOS checksum bindgen-cli-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum Release notes
Open source →Added
- Add target mappings for riscv64imac and riscv32imafc.
- Add a complex macro fallback API (#2779).
- Add option to use DST structs for flexible arrays (--flexarray-dst, #2772).
- Add option to dynamically load variables (#2812).
- Add option in CLI to use rustified non-exhaustive enums (--rustified-non-exhaustive-enum, #2847).
- Add field_type_name to FieldInfo.
Changed
- Remove which and lazy-static dependencies (#2809, #2817).
- Generate compile-time layout tests (#2787).
- Print
bindgen-clierrors to stderr instead of stdout (#2840)
Removed
Fixed
- Fix
--formatter=prettypleasenot working inbindgen-cliby addingprettypleasefeature and enabling it by default forbindgen-cli(#2789) . - Fix
--allowlist-itemso anonymous enums are no longer ignored (#2827). - Use clang_getFileLocation instead of clang_getSpellingLocation to fix clang-trunk (#2824).
- Fix generated constants:
f64::INFINITY,f64::NEG_ INFINITY,f64::NAN(#2854).
Security
- Update
tempfileandrustixdue to GHSA-c827-hfw6-qwvm.
-
0.69.508 Oct 2024Release notes
Open source →Install bindgen-cli 0.69.5
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/rust-lang/rust-bindgen/releases/download/v0.69.5/bindgen-cli-installer.sh | sh
Download bindgen-cli 0.69.5
File Platform Checksum bindgen-cli-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum bindgen-cli-x86_64-apple-darwin.tar.xz Intel macOS checksum bindgen-cli-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum -
0.69.404 Feb 2024Release notes
Open source →Install bindgen-cli 0.69.4
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/rust-lang/rust-bindgen/releases/download/v0.69.4/bindgen-cli-installer.sh | sh
Download bindgen-cli 0.69.4
File Platform Checksum bindgen-cli-aarch64-apple-darwin.tar.xz macOS Apple Silicon checksum bindgen-cli-x86_64-apple-darwin.tar.xz macOS Intel checksum bindgen-cli-x86_64-unknown-linux-gnu.tar.xz Linux x64 checksum -
0.69.304 Feb 2024Release notes
Open source →Install bindgen-cli 0.69.3
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/rust-lang/rust-bindgen/releases/download/v0.69.3/bindgen-cli-installer.sh | sh
Download bindgen-cli 0.69.3
File Platform Checksum bindgen-cli-aarch64-apple-darwin.tar.xz macOS Apple Silicon checksum bindgen-cli-x86_64-apple-darwin.tar.xz macOS Intel checksum bindgen-cli-x86_64-unknown-linux-gnu.tar.xz Linux x64 checksum Release notes
Open source →Added
- Added blocklist_var (#2731)
- Stabilized thiscall_abi (#2661)
Changed
- Use CR consistently on windows (#2698)
- Replaced peeking_take_while by itertools (#2724)
Removed
Fixed
- Try to avoid repr(packed) for explicitly aligned types when not needed (#2734)
- Improved destructor handling on Windows (#2663)
- Support Float16 (#2667)
- Fix alignment contribution from bitfields (#2680)
- Fixed msrv build.
Security
- Updated shlex dependency (RUSTSEC-2024-0006)
-
0.69.213 Jan 2024Release notes
Open source →Install bindgen-cli 0.69.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/rust-lang/rust-bindgen/releases/download/v0.69.2/bindgen-cli-installer.sh | sh
Download bindgen-cli 0.69.2
File Platform Checksum bindgen-cli-aarch64-apple-darwin.tar.xz macOS Apple Silicon checksum bindgen-cli-x86_64-apple-darwin.tar.xz macOS Intel checksum bindgen-cli-x86_64-unknown-linux-gnu.tar.xz Linux x64 checksum Release notes
Open source →Added
Changed
Removed
Fixed
- Fixed generation of extern "C" blocks with llvm 18+. See #2689.
Security
-
0.69.102 Nov 2023 -
0.69.001 Nov 2023Release notes
Open source →Added
- Added the
ParseCallbacks::header_filecallback which runs on every filename passed toBuilder::header. - Added the
CargoCallbacks::newconstructor which emits a cargo-rerun line for every input header file by default. - Added the
CargoCallbacks::rerun_on_header_filesmethod to configure whether a cargo-rerun line should be emitted for every input header file.
Changed
- The
--wrap-static-fnsfeature was updated so function types that has no argument usevoidas its sole argument. CargoCallbacksis no longer a unit-like struct and theCargoCallbacksconstant was added to mitigate the breaking nature of this change. This constant has been marked as deprecated and users will have to use the newCargoCallbacks::newmethod in the future.
Removed
Fixed
- Allow compiling
bindgen-cliwith a static libclang. - Emit an opaque integer type for pointer types that don't have the same size as the target's pointer size.
- Avoid escaping Objective-C method names unless they are
Self,self,crateorsuper.
Security
- Added the
-
0.68.106 Sep 2023 -
0.68.006 Sep 2023 withdrawnRelease notes
Open source →Added
- The
systemABI is now supported as an option for the--override-abiflag. - The
allowlist_itemmethod and the--allowlist-itemflag have been included to filter items regardless or their kind. - Include installers as release artifacts on Github.
Changed
- The
Cloneimplementation for_BindgenUnionFieldhas been changed to pass theincorrect_clone_impl_on_copy_typeClippy lint. - The
c_unwindABI can be used without a feature gate for any Rust target version equal to or greater than 1.71. This comes as a result of the ABI being stabilised (in Rust 1.71). - Formatting changes when using prettyplease as a formatter due to a new prettyplease version.
- Avoid generating invalid
CStrconstants when using the--generate-cstroption.
Removed
- The
extra_assertandextra_assert_eqmacros are no longer exported.
Fixed
- Bindgen no longer panics when parsing an objective-C header that includes a
Rust keyword that cannot be a raw identifier, such as:
self,crate,superorSelf.
- The
-
0.66.119 Jun 2023Release notes
Open source →Removed
- Revert source order sorting (#2543) due to correctness regressions #2558.
-
0.66.014 Jun 2023Release notes
Open source →Added
- Added the
--generate-cstrCLI flag to generate string constants as&CStrinstead of&[u8]. (Requires Rust 1.59 or higher.) - Added the
--generate-shell-completionsCLI flag to generate completions for different shells. - The
--wrap-static-fnsoption can now wrapva_listfunctions as variadic functions with the experimentalParseCallbacks::wrap_as_variadic_fnmethod. - Add target mappings for riscv32imc and riscv32imac.
- Add the
ParseCallbacks::field_visibilitymethod to modify field visibility.
Changed
- Non-UTF-8 string constants are now generated as references (
&[u8; SIZE]) instead of arrays ([u8; SIZE]) to match UTF-8 strings. - Wrappers for static functions that return
voidno longer contain areturnstatement and only call the static function instead. - The
--wrap-static-fnsoption no longer emits wrappers for static variadic functions. - Depfiles generated with
--depfileorBuilder::depfilewill now properly generate module names and paths that include spaces by escaping them. To make the escaping clear and consistent, backslashes are also escaped. - Updated
bitflagsdependency to 2.2.1. This changes the API ofCodegenConfig. - Prettyplease formatting is gated by an optional, enabled by default Cargo
feature when depending on
bindgenas a library. - Items are now parsed in the order they appear in source files. This may result in
auto-generated
_bindgen_*names having a different index. - Use default visibility for padding fields: Previously, padding fields were always public. Now, they follow the default visibility for the type they are in.
- Compute visibility of bitfield unit based on actual field visibility: A bitfield unit field and its related functions now have their visibility determined based on the most private between the default visibility and the actual visibility of the bitfields within the unit.
Removed
-
Remove redundant Cargo features, which were all implicit:
- bindgen-cli:
env_loggerandlogremoved in favor oflogging - bindgen (lib):
logremoved in favor ofloggingwhichremoved in favor ofwhich-loggingannotate-snippetsremoved in favor ofexperimental
- bindgen-cli:
-
Prettyplease is available as a
Formattervariant now.
- Added the
-
0.65.110 Apr 2023Release notes
Open source →Fixed
- The
Builder::rustfmt_bindingsmethod was added back and tagged as deprecated instead of being removed. - Broken documentation links were fixed.
- The
-
0.65.010 Apr 2023 withdrawnRelease notes
Open source →Added
- Added the
Builder::default_visibilitymethod and the--default-visibilityflag to set the default visibility of fields. (#2338) - Added the
--formatterCLI flag with the valuesnone,rustfmtandprettypleaseto select which tool will be used to format the bindings. The default value isrustfmt. (#2453) - Added the
Builder::formattermethod and theFormattertype to select which tool will be used to format the bindings. (#2453) - Added the
Builder::emit_diagnosticsmethod and the--emit-diagnosticsflag to enable emission of diagnostic messages under theexperimentalfeature. (#2436) - Added support for the
"efiapi"calling convention (#2490). - Added the
ParseCallbacks::read_env_varmethod which runs everytimebindgenreads and environment variable. (#2400) - Added the
ParseCallbacks::generated_link_name_overridemethod which allow overriding the link name of items. (#2425) - Add support for C
enums when generating code while using the--wrap-static-fnsfeature. (#2415)
Changed
- Static functions with no arguments use
voidas their single argument instead of having no arguments when the--wrap-static-fnsflag is used. (#2443) - The source file generated when the
--wrap-static-fnsflag is enabled now contains#includedirectives with all the input headers and all the source code added with theheader_contentsmethod. (#2447) - The source file generated when the
--wrap-static-fnsflag no longer usesasmlabeling and the link name of static wrapper functions is allowed to be mangled. (#2448) - The documentation of the generated
typealiases now matches the comments of theirtypedefcounterparts instead of using the comments of the aliased types. (#2463) - The
Builder::rustfmt_bindingsmethods and the--no-rustfmt-bindingsflag are now deprecated in favor of the formatter API. (#2453)
Removed
- The following deprecated flags were removed:
--use-msvc-mangling,--rustfmt-bindingsand--size_t-is-usize. (#2408) - The
Bindings::emit_warningsandBindings::warningsmethods were removed in favor of--emit-diagnostics. (#2436) - Bindgen no longer generates C string constants that cannot be represented as byte slices. (#2487)
- Added the
-
0.64.007 Feb 2023Release notes
Open source →Added
- Added a new set of flags
--with-derive-custom,--with-derive-custom-struct,--with-derive-custom-enumand--with-derive-custom-enumto add custom derives from the CLI. - Added the
--experimentalflag onbindgen-cliand theexperimentalfeature onbindgento gate experimental features whose implementation is incomplete or are prone to change in a non-backwards compatible manner. - Added a new set of flags and their equivalent builder methods
--wrap-static-fns,--wrap-static-fns-suffixand--wrap-static-fns-pathto generate C function wrappers forstaticorstatic inlinefunctions. This feature is experimental.
Changed
- Fixed name collisions when having a C
enumand atypedefwith the same name. - The
ParseCallbacks::generated_name_overridemethod now receivesItemInfo<'_>as argument instead of a&str. - Updated the
clang-syscrate version to 1.4.0 to support clang 15. - The return type is now omitted in signatures of functions returning
void. - Updated the
clapdependency forbindgen-clito 4. - Rewrote the
bindgen-cliargument parser which could introduce unexpected behavior changes. - The
ParseCallbacks::add_derivesmethod now receivesDeriveInfo<'_>as argument instead of a&str. This type also includes the kind of target type.
Release notes
Open source →Added
- Added a new set of flags
--with-derive-custom,--with-derive-custom-struct,--with-derive-custom-enumand--with-derive-custom-enumto add custom derives from the CLI. - Added the
--experimentalflag onbindgen-cliand theexperimentalfeature onbindgento gate experimental features whose implementation is incomplete or are prone to change in a non-backwards compatible manner. - Added a new set of flags and their equivalent builder methods
--wrap-static-fns,--wrap-static-fns-suffixand--wrap-static-fns-pathto generate C function wrappers forstaticorstatic inlinefunctions. This feature is experimental.
Changed
- Fixed name collisions when having a C
enumand atypedefwith the same name. - The
ParseCallbacks::generated_name_overridemethod now receivesItemInfo<'_>as argument instead of a&str. - Updated the
clang-syscrate version to 1.4.0 to support clang 15. - The return type is now ommited in signatures of functions returning
void. - Updated the
clapdependency forbindgen-clito 4. - Rewrote the
bindgen-cliargument parser which could introduce unexpected behavior changes. - The
ParseCallbacks::add_derivesmethod now receivesDeriveInfo<'_>as argument instead of a&str. This type also includes the kind of target type.
- Added a new set of flags
-
0.63.022 Nov 2022Release notes
Open source →Added
- new feature:
process_commentsmethod to theParseCallbackstrait to handle source code comments.
Changed
- Only wrap unsafe operations in unsafe blocks if the
--wrap_unsafe_opsoption is enabled. - Replace the
name: &strargument forParseCallbacks::add_derivesbyinfo: DeriveInfo. - All the rust targets equal or lower than
1.30are being deprecated and will be removed in the future. If you have a good reason to use any of these targets, please report it in the issue tracker.
Removed
- The following deprecated methods and their equivalent CLI arguments were
removed:
whitelist_recursively,hide_type,blacklist_type,blacklist_function,blacklist_item,whitelisted_type,whitelist_type,whitelist_function,whitelisted_function,whitelist_var,whitelisted_var,unstable_rust.
- new feature:
-
0.62.017 Nov 2022Release notes
Open source →Added
- new feature:
--override-abiflag to override the ABI used by functions matching a regular expression. - new feature: allow using the
C-unwindABI in--override-abion nightly rust.
Changed
- Regex inputs are sanitized so alternation (
a|b) is handled correctly but wildcard patterns (*) are now considered invalid. The.*pattern can be used as a replacement. - the
ParseCallbackstrait does not require to implementUnwindSafe. - the
Builder::parse_callbacksmethod no longer overwrites previously added callbacks and composes them in a last-to-first manner. - any generated rust code containing unsafe operations inside unsafe functions is wrapped in unsafe blocks now.
Fixed
- Various issues with upcoming clang/libclang versions have been fixed.
- new feature:
-
0.61.016 Oct 2022Release notes
Open source →Released 2022/10/16
Added
- new feature:
--sort-semanticallyflag to sort the output in a predefined manner (#1743). - new feature:
Bindgen::emit_warningsmethod to emit warnings to stderr in build scripts. - new feature:
--newtype-global-enumflag to generate enum variants as global constants. - new feature:
--default-non-copy-union-styleflag to set the default style of code used to generate unions with non-Copymembers. - new feature:
--bindgen-wrapper-unionflag to mark any union that matches a regex and has a non-Copy member to use a bindgen-generated wrapper for its fields. - new feature:
--manually-drop-unionflag to mark any union that matches a regex and has a non-Copymember to useManuallyDrop. - new feature:
--merge-extern-blocksflag to merge severalexternblocks that have the same ABI. - new feature:
--no-size_t-is-usizeflag to not bindsize_tasusize. - new feature:
BuilderimplementsClone.
Changed
- clap and regex have been updated, new msrv is 1.57.
- The
--enable-function-attribute-detectionflag is also used to detect diverging functions so the generated bindings use!as the return type. - The
--size_t-is-usizeflag is enabled by default. - Unused type aliases for
<stdint.h>types are no longer emitted. - The
blocklistoptions now can be used to block objective-C methods. - The
core::ffimodule is used the sized raw integer types instead ofstd::os::rawif the Rust target version is1.64or higher and the--use-coreflag is enabled. - The
bindgenCLI utility must be installed usingcargo install bindgen-clinow. - Using
bindgenas a library no longer pulls clap and any other CLI related dependencies.
Fixed
- Const correctness of incomplete arrays has been fixed. (#2301)
- C++ inline namespaces don't panic. (#2294)
- new feature:
-
0.60.106 Jun 2022Release notes
Open source →Released 2022/06/06
Fixed
- Fixed stack overflow in generated tests for structs with many fields (#2219).
-
0.60.005 Jun 2022Release notes
Open source →Released 2022/06/05
Added
- Objective-C structs now derive
DebugandCopyto support C and Objective-C structs. (#2176) - Allow fully-qualified derives. (#2156)
- Bindings generation now returns a more suitable error (#2125)
--version --verbosenow prints clang version (#2140).- Experimental vtable generation (#2145).
- Added an
--allowlist-fileoption (#2122). - Support for vectorcall ABI (#2177).
Fixed
- Fixed lifetimes with Objective-C trait templates. (#2176)
- Fixed objc imports for non-
#[macro_use]use. (#2176) - Handle differences between clang and rustc targets for RISCV (#2137).
BINDGEN_EXTRA_CLANG_ARGSis respected on the CLI now (#1723).- Use common type alias for anonymous enums in consts mode (#2191)
- Look for
#[must_use]in typedefs (#2206). - Fixed derive on packed structs (#2083).
- Fixed warnings on layout tests (#2203).
Changed
- cexpr, clap, and nom have been updated, new msrv is 1.54.
Removed
- Support for ancient libclang versions has been removed.
- Objective-C structs now derive
-
0.59.226 Nov 2021Release notes
Open source →Released 2021/11/26
- cexpr+env_logger bump.
- Various fixes for C++ crashes / hangs.
- Enums now respect annotations and derives properly in more cases.
- Some more APIs (blocklist-file, etc).
- 'static lifetime is elided when appropriate.
-
0.59.125 Jul 2021Release notes
Open source →Released 2021/07/26
Fixed
- Fixed incorrect bitfield constructors generated for very large bitfields (#2082).
-
0.59.020 Jul 2021Release notes
Open source →Released 2021/07/20
Added
- Support emitting Makefile-syntax depfiles (#2026)
- Add a C naming option (#2045)
- Allow explicit padding (#2060)
- Add custom derives callback (#2059)
- Let Rust derive everything but Default for large arrays in 1.47 and later (#2070).
Fixed
- Constants now have docstrings (#2027)
- Don't generate bindings for deleted member functions. (#2044)
- Zero out padding in custom Default trait implementations (#2051)
- Identify forward declarations in params. (#2052)
- Add env var EXTRA_CLANG_ARGS_<target>. (#2031)
Changed
- cexpr and nom have been updated, new msrv is 1.44 (#2073).
-
0.58.106 Apr 2021Release notes
Open source →Released 2021/04/06
Added
- Re-introduced unintentionally removed
bindgen::Builder::whitelist_recursively(deprecated in favor ofbindgen::Builder::allowlist_recursively). [#2022][]
- Re-introduced unintentionally removed
-
0.58.003 Apr 2021Release notes
Open source →Released 2021/04/03
Added
- Add option to translate enum integer types to native Rust integer types. [#2004][]
- Add callback to check derives for blocklisted types. [#2007][]
- Add a flag to ensure all symbols are resolved when a library is loaded. [#2013][]
- Add from_library for generated dynamic library structs [#2011][].
Fixed
- Track union layout more accurately. Fixes an AArch64 bug and makes the bindings more portable where unions could return garbage data (#1984)
- Use original name when checking allowlist for anonymous enum variants. [#2006][]
Changed
Deprecated
-
bindgen::Builder::whitelist_typeis deprecated in favor ofbindgen::Builder::allowlist_type. [#1812][] -
bindgen::Builder::whitelist_functionis deprecated in favor ofbindgen::Builder::allowlist_function. [#1812][] -
bindgen::Builder::whitelist_varis deprecated in favor ofbindgen::Builder::allowlist_var. [#1812][] -
--whitelist-typeis deprecated in favor of--allowlist-type. [#1812][] -
--whitelist-functionis deprecated in favor of--allowlist-function. [#1812][] -
--whitelist-varis deprecated in favor of--allowlist-var. [#1812][] -
bindgen::Builder::blacklist_typeis deprecated in favor ofbindgen::Builder::blocklist_type. [#1812][] -
bindgen::Builder::blacklist_functionis deprecated in favor ofbindgen::Builder::blocklist_function. [#1812][] -
bindgen::Builder::blacklist_itemis deprecated in favor ofbindgen::Builder::blocklist_item. [#1812][] -
--blacklist-typeis deprecated in favor of--blocklist-type. [#1812][] -
--blacklist-functionis deprecated in favor of--blocklist-function. [#1812][] -
--blacklist-itemis deprecated in favor of--blocklist-item. [#1812][]
Removed
Fixed
Security
-
0.57.001 Feb 2021Release notes
Open source →Released 2021/02/01
Added
- Expose module-raw-lines to the CLI (#1936)
- Added an option to fit macro constants to smaller types (#1945)
- Add an option to respect C++ access specifiers on fields (#1968)
Fixed
- Improved C++ auto-detection (#1933)
- Fixed layout of bitfields in some edge cases (#1950)
- Escape the dyn keyword properly (#1951)
- Use absolute paths for unsaved files passed to clang (#1857).
-
0.56.026 Nov 2020Release notes
Open source →Released 2020/11/26
Added
- Objective-c bindings generate
From<ChildClass> for ParentClassas well asTryFrom<ParentClass> for ChildClass(#1883). - Experimental dynamic library support via
dynamic_library_name(#1846). - Option to disable deriving
Defaulton a per-struct basis (#1930).
Changed
- Objective-c bindings borrow self rather than take ownership (#1883).
- Templates and enums now correctly use the same naming scheme as other types (#1891).
Fixed
- Constructors in wasm32 now return a value. (#1877).
- Fixed objective-c protocol impl blocks for parent classes's protocols (#1883).
- Objective-c bindings generate
-
0.55.124 Aug 2020Release notes
Open source →Released 2020/08/24.
Fixed
- Fixed a regression where anonymous enums referenced by members or such won't generate valid Rust code. (#1882).
-
0.55.024 Aug 2020Release notes
Open source →Released 2020/08/23.
Removed
- Support for libclang 3.8 has been removed (#1830).
Added
-
Added options to avoid deriving the Debug trait (#1858).
-
Added options to allow to override the default anonymous field prefix (#1859).
-
Added options to allow to override the default macro integer type from the command line (#1863).
Changed
-
Typed anonymous enums now generate better code (#1850).
-
Objective-C bindings are more idiomatic now (#1847).
-
Updated to clang-sys 1.0. Minimum supported rust version is 1.40 as a consequence of that change.
Fixed
-
Fixed constness of multi-dimensional arrays in some cases (#1861).
-
Fixed wrong target given to clang when compiling with a target which doesn't match the target clang expects (#1870, #1878).
-
Fixed wrong flags being computed for cross-compilation cases where the target wasn't explicitly provided via clang flags (#1872).
Thanks again to all the awesome contributors that sent patches included in this release!
-
0.54.106 Jul 2020 withdrawnRelease notes
Open source →Released 2020/07/06.
Yanked: The change in #1798 is technically breaking, see PR for details.
Added
-
Added ParseCallbacks::func_macro to be able to process function-like macros. (#1792).
-
Allowed IntKind::Custom to represent paths instead of idents (#1800).
Changed
-
Generated comment now includes the bindgen version, and can be disabled (#1814).
-
Various documentation improvements.
Fixed
-
Typedefs for types with the same names as rust primitive types compiles (#1798).
-
Bindgen dependencies will now get rebuilt when various environment variables that affect bindgen change (#1809, #1813).
-
Various fixes to command_line_flags (#1816, #1819, #1821).
-
Functions that start with
operatornow get properly generated (#1817).
Thanks to all the awesome contributors that sent patches included in this release!
-
-
0.54.021 May 2020Release notes
Open source →Released 2020/05/21.
Added
- New command line flag to allow disabling untagged unions (#1789).
Changed
- Various documentation improvements (#1764, #1751, #1757).
- Better Objective-C support (#1722, #1750).
Fixed
- Rust method wrappers are not emitted for blacklisted functions (#1775).
- Fixed function signatures in some edge cases involving Objective-C or
__stdcall(#1781).
-
0.53.321 May 2020Release notes
Open source →Released 2020/05/21.
Note: This release contains the same fixes and additions as 0.54.0, but without the Objective-C breaking changes
Added
- New command line flag to allow disabling untagged unions (#1789).
Fixed
- Rust method wrappers are not emitted for blacklisted functions (#1775).
- Fixed function signatures in some edge cases involving Objective-C or
__stdcall(#1781).
-
0.53.209 Mar 2020Release notes
Open source →Released 2020/03/10.
Changed
- clang-sys and cexpr have been updated (#1741 and #1744).
- Runtime of some commands has been improved (#1737)
- Some error messages have been improved (#1734).
-
0.53.103 Feb 2020Release notes
Open source →Released 2020/02/03.
Added
- Opt-in to convert size_t to usize again (#1720).
-
0.53.002 Feb 2020Release notes
Open source →Released 2020/02/02.
Added
- Support for wasm_import_module. (#1691).
- non_exhaustive feature is now stable (#1698).
- Various objective-C improvements (#1702).
Changed
- Removed size_t to usize conversion rule (#1688).
Fixed
- Various unneeded padding fields shouldn't be generated anymore (#1710).
- Bitfields on packed structs should generate correct layout (#1717).
- Too large bitfield blocks now generate compiling code (#1719).
-
0.52.019 Nov 2019Release notes
Open source →Released 2019/11/19.
Added
- Added
newtypeenum style, much likebitfieldbut without the bitwise ops (#1677). - Added support for
MaybeUninitrather thanmem::uninitialized()(#1666). - Allowed static linking (#1620) behind a feature. Note that if you're using
default-features = false, you probably want to use the"runtime"feature to get the same behavior as before.
Changed
- Use c_void from core when --use-core is specified and available (#1634).
- Various dependencies and features are non-default now (like
regexunicode features).
Fixed
- Fixed crash when unknown keywords are used before a namespace (#1678).
- Do not generate implementation for clone for flexible array members (#1664).
- Fixed
#[must_use]support for libclang 9+ (#1646). - Fixed
BitfieldUnitconstructor to handle 64 bit wide bitfields on 32 bit (#1640). - Added a
ParseCallbackshandler for included files. (#1637).
- Added
-
0.51.123 Sep 2019Release notes
Open source →Released 2019/09/23.
Fixed
- Mismatched
OrdandPartialOrdimplementations were fixed, which regresses bindgen in funny ways when using rustc nightly. Dot releases for a few of the previous versions of bindgen will be created with this fix. Also, av0.51.1-oldsynversion was uploaded without the syn update. #1627
Changed
-
Syn and related dependencies have been updated. #1611
-
Switches added to allow less dependencies. In particular: It won't pull
failureand related dependencies by default, and there's a default-onwhich-rustfmtfeature which allows to get rid ofwhichaltogether. #1615 / #1625 -
fxhashdependency was switched torustc-hash. #1626
- Mismatched
-
0.51.1-oldsyn24 Sep 2019 pre-releaseNothing published for this version
-
0.51.026 Jul 2019Release notes
Open source →Released 2019/07/26.
Fixed
-
Improve workaround for LLVM stack overflow when evaluating value-dependent expressions. #1591
-
Bindgen will properly detect the layout of incomplete arrays. #1592
-
Bindgen will properly detect the layout of empty unions and forward declarations of unions. #1593 and #1595. Thanks @pmarks!
Changed
- Refactored the way layout of
wchar_tis computed. This is a breaking change sinceIntKind::WChar(exposed inParseCallbacks) no longer needs asizemember. #1596
Added
- Bindgen now reads
RUSTFMTin the environment to try to find a suitablerustfmtbinary. #1602
-
-
0.50.123 Sep 2019Nothing published for this version
-
0.50.002 Jul 2019 -
0.49.404 Dec 2019Nothing published for this version
-
0.49.325 Jun 2019 withdrawn -
0.49.222 May 2019Release notes
Open source →Released 2019/05/22
Changed
- Bindgen now has an option to generate array arguments as pointer to the array,
not to the element (so
void foo(int arr[2])would be generated asarr: *mut [c_int; 2]rather thanarr: *mut c_int. Thanks @elichai! #1564.
- Bindgen now has an option to generate array arguments as pointer to the array,
not to the element (so
-
0.49.116 May 2019Release notes
Open source →Released 2019/05/16
Fixed
- Bindgen will not emit
#[link_name]attributes in win32 and macos for C functions and constants where it can detect it's not needed (thanks @michaelwoerister!). #1558
Changed
- Bindgen will no longer use
hashbrowninternally, and will use fxhash andstd::HashMap. This is equivalent for newerrustcs sincehashbrownwas merged in libstd, and the performance difference should be close to zero for older rustcs.
- Bindgen will not emit
-
0.49.027 Mar 2019Release notes
Open source →Released 2019/03/27
Added
- BINDGEN_EXTRA_CLANG_ARGS environment variable was added (thanks @jhwgh1968!). #1537
Fixed
- Bindgen will properly name parameters inside nested function pointer declarations (thanks @flowbish!). #1535
Changed
- Derive code was greatly improved by @jethrogb. #1540
- Derive analysis now handles trivial types more gracefully. #1492
- clang-sys was updated by @eclipseo. [#1539][]
- bindgen should now get include paths correctly even when
--targetis specified. Thedetect_include_pathsoption can be used to opt-out of this behavior.
-
0.48.106 Mar 2019Release notes
Open source → -
0.48.004 Mar 2019Release notes
Open source →Released 2019/03/04
Changed
- Default rust target was changed to 1.33, which means that bindgen can get much more often the layout of structs right. #1529
Fixed
- Bindgen will output repr(align) just when needed for unions. #1498
-
0.47.413 Nov 2020Release notes
Open source →Released 2020/11/13
Added
- Backported BINDGEN_EXTRA_CLANG_ARGS support per request (#1910).
-
0.47.325 Feb 2019 -
0.47.223 Feb 2019Release notes
Open source →Released 2019/02/22
Fixed
- @flowbish fixed code generation for nested function prototypes. #1508
- Some complex C++ constructs no longer panic on code generation #1513
- Implicit template parameters are now appended to base classes #1515
- @flier fixed single-argument block pointers #1519
- Bindgen won't panic when parsing an undeduced auto type #1525
-
0.47.129 Jan 2019Release notes
Open source →Released 2019/02/02
Changed
- @luser improved the error message when rustfmt cannot be found #1501
Fixed
- Reverted
clang-sysupdate for regressions #1505
-
0.47.019 Jan 2019Release notes
Open source →Released 2019/01/19
Changed
#pragma pack(n)is now translated to#[repr(C, packed(n))]when targeting Rust 1.33+. #537
- Bitfield enums now use
#[repr(transparent)]instead of#[repr(C)]when targeting Rust 1.28+. #1474
Fixed
#[repr(packed)]is now properly added if the struct only contains a vtable. #1495
clang-sysshould now more accurately find libclang versions when multiple of them are available. #1489
-
0.46.029 Dec 2018Nothing published for this version
-
0.45.014 Dec 2018Nothing published for this version
-
0.44.030 Nov 2018Nothing published for this version