# What changed in uniffi

> 31 changes in uniffi 0.32 from its official release notes, upgrade guides and advisories: 9 breaking, 1 deprecations, 13 new APIs and options. Each one cited. Sources checked 2026-11-12. HTML: https://unstale.sh/cargo/uniffi/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## uniffi 0.32

### Breaking changes

- Kotlin and Python now fail to generate bindings when a type has an async primary constructor; exclude the constructor to get similar behavior. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- The method was removed and replaced by the GlobalConfig struct. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- UDL arguments now map to &[u8] instead of &Vec<u8>; Rust implementations taking &Vec<u8> must change, and Kotlin callers must pass a direct ByteBuffer rather than ByteArray. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- The flag now expects a global config file; old-style flat uniffi.toml overrides produce a warning and are ignored. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- The method now takes a MetadataCommand instance and CargoMetadataOptions instead of a no_deps flag. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- Ruby enum constructors now require named parameters. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- The experimental pipeline bindgen code was reworked, requiring external binding generators that use it to be reworked. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- [ByRef] bytes now cross the FFI as a pointer-and-length ForeignBytes value instead of RustBuffer; external bindings must lower the foreign-language buffer for the call without copying. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- A new struct manages configuration and replaces BindgenPathsLayer::get_config(). (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)

### Deprecations

- The with_foreign flag is deprecated in favor of rust, foreign. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)

### New APIs and options

- The tokio async_runtime option can now be applied to trait exports, wrapping each method's FFI scaffolding future in async_compat::Compat. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- Custom Types can have docstrings in some languages. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- HashSet can now be used with proc-macros. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- derive(uniffi::Enum) now allows literal number suffixes. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- This configuration option lets specific records remain mutable when generate_immutable_records is enabled in Kotlin and Swift. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- The proc-macro name attribute can rename record fields. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- Ruby now supports async. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- Standard Rust traits are exposed for generated Ruby code. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- Ruby now supports sync foreign traits. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- Foreign code can transfer &[u8] / [ByRef] bytes to Rust without copying through RustBuffer; support excludes Ruby and async functions. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- Traits can be exported for foreign-only implementations; #[uniffi::export(rust, foreign)] supports both Rust and foreign implementations. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- Items can be excluded from generated bindings using uniffi.toml. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- Kotlin objects expose a property that returns true if the Rust reference no longer exists. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)

### Behavior and default changes

- Box<T> automatically implements FFI traits when T does, allowing direct use in enum variants and function parameters without NewType wrappers. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)

### Tooling

- Recursive enum and record cycles are detected and bindings are generated with indirect in Swift and forward references in Python. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- UniFfiTag is exempt from clippy::exhaustive_structs so downstream projects may depend on it. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)

### Fixes and other changes

- Generated Kotlin code no longer triggers compiler warnings. (0.32.2) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0322-backend-crates-v0322---_2026-09-22_)
- Fixed checksum failure on aarch64 for Kotlin. (0.32.1) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0321-backend-crates-v0321---_2026-09-08_)
- Fixed compile errors when exporting ambiguous method names. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- Fixed a bug that sometimes prevented renaming items inside a submodule. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
- Code generation now works correctly for all kinds of enums and custom types. (0.32.0) — [release notes](https://github.com/mozilla/uniffi-rs/blob/482095c1ba1b76a1393b582e0589e2fdc9c64b14/CHANGELOG.md#v0320-backend-crates-v0320---_2026-06-30_)
