unstale

npm / expo-modules-macros

expo-modules-macros

What changed in expo-modules-macros 0.1 to 0.21, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-18.

9 breaking13 new APIs and options1 performance24 behavior and defaults10 tooling15 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli 0.1.1 on npm

expo-modules-macros 0.213 changes

Behavior and default changes 1

  • Generated @Record code now emits decode and encode witnesses.

    0.21.0release notes

Tooling 1

  • The plugin is now built and published for Linux.

    0.21.0release notes

Fixes and other changes 1

  • Reports @JS members that share a JS name on one object.

    0.21.0release notes

expo-modules-macros 0.204 changes

New APIs and options 1

Tooling 1

  • scan-exports reports platforms, deprecations, access levels, and default values.

    0.20.0release notes

Fixes and other changes 2

  • Closure types are reported in @Record properties and @Event and @Union payloads.

    0.20.0release notes

  • @JS functions and setters that return nothing are bound through the Void overload.

    0.20.0release notes

expo-modules-macros 0.193 changes

Behavior and default changes 3

  • The conformance assertion now accepts non-copyable types.

    0.19.1release notes

  • @JS now allows free-form Any return values and properties.

    0.19.0release notes

  • scan-exports now reports nested types.

    0.19.0release notes

expo-modules-macros 0.183 changes

Breaking changes 1

  • Drops ownership specifiers from parameters and rejects inout and isolated.

    0.18.0release notes

Behavior and default changes 1

  • Binds backticked member names under their bare JavaScript names.

    0.18.0release notes

Fixes and other changes 1

  • Reports backticked names without their backticks.

    0.18.0release notes

expo-modules-macros 0.172 changes

Behavior and default changes 1

Fixes and other changes 1

expo-modules-macros 0.163 changes

Behavior and default changes 1

  • Supports closure arguments in @JS functions and initializers.

    0.16.0release notes

Tooling 1

Fixes and other changes 1

  • Maps numeric Swift types to JS primitives in scan-exports.

    0.16.0release notes

expo-modules-macros 0.151 changes

Fixes and other changes 1

  • Only unowned @Union values are decoded, and decoding is gated on the payload's decodableKinds.

    0.15.0release notes

expo-modules-macros 0.142 changes

Breaking changes 2

expo-modules-macros 0.132 changes

Behavior and default changes 1

  • Accepts free-form Any property types, allowing @Record properties to use those types.

    0.13.0release notes

Fixes and other changes 1

  • Silences the optional-to-Any coercion warning in free-form encodes using @Record.

    0.13.1release notes

expo-modules-macros 0.124 changes

Fixes and other changes 4

  • Resolves ref type nodes against the scanned surface.

    0.12.0release notes

  • Reports @Event members in scan-exports, making them visible in scanned exports.

    0.12.0release notes

  • Reports Enumerable enums in scan-exports, making them visible in scanned exports.

    0.12.0release notes

  • Reports @Union types in scan-exports, making them visible in scanned exports.

    0.12.0release notes

expo-modules-macros 0.115 changes

Breaking changes 1

  • Reports each scanned module's platforms instead of filtering by one.

    0.11.0release notes

New APIs and options 3

  • Adds a macro that binds a view to its props type.

    0.11.0release notes

  • Adds a TypeScript wrapper around the scanner CLI.

    0.11.0release notes

  • Adds a macro that synthesizes PropName and PropSet.

    0.11.0release notes

Behavior and default changes 1

  • Async bindings emit try only for throwing @JS members.

    0.11.0release notes

expo-modules-macros 0.103 changes

New APIs and options 2

  • Adds a .concurrent option for running async members off the JS thread.

    0.10.0release notes

  • Adds a macro for typed N-case unions.

    0.10.0release notes

Tooling 1

  • Test and example directories are pruned from the scan walk.

    0.10.0release notes

expo-modules-macros 0.95 changes

New APIs and options 1

  • Accepts free-form Any argument types in @JS bindings.

    0.9.0release notes

Behavior and default changes 1

  • Answers canImport for curated SDK frameworks based on the target platform.

    0.9.0release notes

Tooling 3

  • Extends scan-modules output with autolinking metadata.

    0.9.0release notes

  • Evaluates #if conditions against a platform and defines.

    0.9.0release notes

  • Merges the scanner CLI into the macro plugin executable.

    0.9.0release notes

expo-modules-macros 0.81 changes

Behavior and default changes 1

  • Async @JS bindings now decode before the asynchronous boundary using two-phase emission.

    0.8.0release notes

expo-modules-macros 0.72 changes

Behavior and default changes 2

  • Async @JS return values are encoded on the JS thread.

    0.7.0release notes

  • Static shared-object members are bound to the _decorateSharedObject(constructor:) hook.

    0.7.0release notes

expo-modules-macros 0.67 changes

Breaking changes 2

  • Removed the unused appContext from synthesized JSI hooks.

    0.6.1release notes

  • Converts @JS bindings through JavaScriptCodable instead of dynamic types.

    0.6.0release notes

Behavior and default changes 2

  • Async @JS members are stamped with @JavaScriptActor.

    0.6.2release notes

  • Converts @Record JS-object fields through JavaScriptCodable.

    0.6.0release notes

Tooling 1

Fixes and other changes 2

  • The async @SharedObject receiver is unwrapped from an owning this.

    0.6.2release notes

  • Fixed invalid switch-expression code generation for omittable trailing arguments.

    0.6.1release notes

expo-modules-macros 0.52 changes

Behavior and default changes 1

  • Members of @SharedObject are bound directly into the JS object via _decorateSharedObject.

    0.5.0release notes

Fixes and other changes 1

  • Implicitly-unwrapped optional types are normalized before being spliced into expressions.

    0.5.0release notes

expo-modules-macros 0.42 changes

Behavior and default changes 1

  • Synchronous @JS bindings now emit unowned-this closures.

    0.4.0release notes

Tooling 1

  • Adds a CLI for scanning Swift source for Expo module macros.

    0.4.0release notes

expo-modules-macros 0.34 changes

Breaking changes 1

New APIs and options 1

  • Adds an accessor macro for typed module and shared-object events.

    0.3.0release notes

Behavior and default changes 2

  • Arity checks use ranges and throw ArgumentsRangeMismatch.

    0.3.0release notes

  • The module name is synthesized as _jsName.

    0.3.0release notes

expo-modules-macros 0.24 changes

Performance 1

  • Primitive-only @JS bindings no longer capture the unused appContext.

    0.2.1release notes

Behavior and default changes 3

  • Properties marked with @JS are bound directly into the JS object via _decorateModule.

    0.2.2release notes

  • Boundary types for @JS and @Record are checked for conformance at compile time.

    0.2.1release notes

  • @JS functions are bound directly into the JS object via _decorateModule.

    0.2.0release notes

expo-modules-macros 0.110 changes

Breaking changes 2

  • Autolinking has been removed.

    0.1.0release notes

  • Synthesized definition methods use synthesized instead of exposed.

    0.1.0release notes

New APIs and options 5

Behavior and default changes 2

  • @Record properties are synthesized even when they lack @Field.

    0.1.0release notes

  • Sync members marked with @JS are automatically stamped with @JavaScriptActor.

    0.1.0release notes

Tooling 1