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 initexpo-modules-macros 0.213 changes
Behavior and default changes 1
Generated @Record code now emits decode and encode witnesses.
Tooling 1
The plugin is now built and published for Linux.
Fixes and other changes 1
Reports @JS members that share a JS name on one object.
expo-modules-macros 0.204 changes
New APIs and options 1
The scanner wrapper accepts a timeout option.
Tooling 1
scan-exports reports platforms, deprecations, access levels, and default values.
Fixes and other changes 2
Closure types are reported in @Record properties and @Event and @Union payloads.
@JS functions and setters that return nothing are bound through the Void overload.
expo-modules-macros 0.193 changes
Behavior and default changes 3
The conformance assertion now accepts non-copyable types.
@JS now allows free-form Any return values and properties.
scan-exports now reports nested types.
expo-modules-macros 0.183 changes
Breaking changes 1
Drops ownership specifiers from parameters and rejects
inoutandisolated.
Behavior and default changes 1
Binds backticked member names under their bare JavaScript names.
Fixes and other changes 1
Reports backticked names without their backticks.
expo-modules-macros 0.172 changes
Behavior and default changes 1
The macros emit a borrowing constructor this.
Fixes and other changes 1
The macros emit function-form undefined/null.
expo-modules-macros 0.163 changes
Behavior and default changes 1
Supports closure arguments in @JS functions and initializers.
Tooling 1
Reports a module's classes in scan-exports.
Fixes and other changes 1
Maps numeric Swift types to JS primitives in scan-exports.
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.
expo-modules-macros 0.142 changes
Breaking changes 2
The package was renamed to expo-modules-macros.
The binary was renamed to ExpoModulesMacros.
expo-modules-macros 0.132 changes
Behavior and default changes 1
Accepts free-form Any property types, allowing @Record properties to use those types.
Fixes and other changes 1
Silences the optional-to-Any coercion warning in free-form encodes using @Record.
expo-modules-macros 0.124 changes
Fixes and other changes 4
Resolves ref type nodes against the scanned surface.
Reports @Event members in scan-exports, making them visible in scanned exports.
Reports Enumerable enums in scan-exports, making them visible in scanned exports.
Reports @Union types in scan-exports, making them visible in scanned exports.
expo-modules-macros 0.115 changes
Breaking changes 1
Reports each scanned module's platforms instead of filtering by one.
New APIs and options 3
Adds a macro that binds a view to its props type.
Adds a TypeScript wrapper around the scanner CLI.
Adds a macro that synthesizes PropName and PropSet.
Behavior and default changes 1
Async bindings emit try only for throwing @JS members.
expo-modules-macros 0.103 changes
New APIs and options 2
Adds a
.concurrentoption for running async members off the JS thread.Adds a macro for typed N-case unions.
Tooling 1
Test and example directories are pruned from the scan walk.
expo-modules-macros 0.95 changes
New APIs and options 1
Accepts free-form Any argument types in @JS bindings.
Behavior and default changes 1
Answers canImport for curated SDK frameworks based on the target platform.
Tooling 3
Extends scan-modules output with autolinking metadata.
Evaluates #if conditions against a platform and defines.
Merges the scanner CLI into the macro plugin executable.
expo-modules-macros 0.81 changes
Behavior and default changes 1
Async @JS bindings now decode before the asynchronous boundary using two-phase emission.
expo-modules-macros 0.72 changes
Behavior and default changes 2
Async @JS return values are encoded on the JS thread.
Static shared-object members are bound to the _decorateSharedObject(constructor:) hook.
expo-modules-macros 0.67 changes
Breaking changes 2
Removed the unused appContext from synthesized JSI hooks.
Converts @JS bindings through JavaScriptCodable instead of dynamic types.
Behavior and default changes 2
Async @JS members are stamped with @JavaScriptActor.
Converts @Record JS-object fields through JavaScriptCodable.
Tooling 1
Adds the scan-exports CLI subcommand.
Fixes and other changes 2
The async @SharedObject receiver is unwrapped from an owning
this.Fixed invalid switch-expression code generation for omittable trailing arguments.
expo-modules-macros 0.52 changes
Behavior and default changes 1
Members of @SharedObject are bound directly into the JS object via _decorateSharedObject.
Fixes and other changes 1
Implicitly-unwrapped optional types are normalized before being spliced into expressions.
expo-modules-macros 0.42 changes
Behavior and default changes 1
Synchronous @JS bindings now emit unowned-this closures.
Tooling 1
Adds a CLI for scanning Swift source for Expo module macros.
expo-modules-macros 0.34 changes
Breaking changes 1
The
Name(...)DSL entry is dropped.
New APIs and options 1
Adds an accessor macro for typed module and shared-object events.
Behavior and default changes 2
Arity checks use ranges and throw
ArgumentsRangeMismatch.The module name is synthesized as
_jsName.
expo-modules-macros 0.24 changes
Performance 1
Primitive-only @JS bindings no longer capture the unused appContext.
Behavior and default changes 3
Properties marked with @JS are bound directly into the JS object via _decorateModule.
Boundary types for @JS and @Record are checked for conformance at compile time.
@JS functions are bound directly into the JS object via _decorateModule.
expo-modules-macros 0.110 changes
Breaking changes 2
Autolinking has been removed.
Synthesized definition methods use synthesized instead of exposed.
New APIs and options 5
Classes marked with @ExpoModule automatically conform to AnyModule.
Adds the @ExpoModule macro for module declarations.
Adds the @JS macro for declaring JavaScript-facing members.
Adds the @Record macro.
Adds the @SharedObject macro.
Behavior and default changes 2
@Record properties are synthesized even when they lack @Field.
Sync members marked with @JS are automatically stamped with @JavaScriptActor.
Tooling 1
Adds tool support for x86_64.