neon-macros
Procedural macros supporting Neon
1.1.1
13M downloads/mo
#2726 most downloaded on crates.io
neon-bindings/neon
What this package is like to depend on
Last release 8 months ago
05 Dec 2025
Ships fairly regularly
a new release about every 4 months
Nearly every release is documented
notes for 14 of 15 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
23 releases · first in 2020
1 release in the last 12 months
see the full history below
Release timeline
23 releases · Nov 2020 to Dec 2025Releases
latest 23-
1.2.0-alpha.005 Dec 2025 pre-release -
1.1.123 May 2025 -
1.1.023 May 2025Release notes
Open source →Continued Commitment to Compatibility
Our strong commitment to compatibility since the 1.0 release remains unchanged. New functionality that has not yet stabilized is published under feature flags, so the only breaking changes that we expect to publish are those that affect the unstable features, or, as always, safety bugfixes.
Version 1.1.1
Hotfix for Node-API versions lower than 5 (https://github.com/neon-bindings/neon/pull/1106).
Version 1.1.0
New Features
Bugfixes
- Fix panic when borrowing empty buffer or typed array (https://github.com/neon-bindings/neon/pull/1058)
- Fix build script behavior based on cargo diagnostics format change (https://github.com/neon-bindings/neon/pull/1039)
Version 1.1.0-alpha.2
Breaking Changes (unstable features only)
- Convert snake_case to camelCase when exporting functions (https://github.com/neon-bindings/neon/pull/1084)
- Remove
FromArgsimpl onT: TryFromJsand addcx.{arg, arg_opt}(https://github.com/neon-bindings/neon/pull/1096)
Other
- Relax lifetime constraints on
With(https://github.com/neon-bindings/neon/pull/1086) - Add
JsBox::{deref, as_inner}to get long-lived reference to JsBox contents (https://github.com/neon-bindings/neon/pull/1087) - Add extractors for TypedArrays (https://github.com/neon-bindings/neon/pull/1089)
- Add extractors for common container types (https://github.com/neon-bindings/neon/pull/1091)
Version 1.1.0-alpha.1
Breaking Changes (unstable features only)
TryIntoJsandTryFromJstakeCxinstead of genericContext(https://github.com/neon-bindings/neon/pull/1062)
Bugfixes
- Fix panic when borrowing empty buffer or typed array (https://github.com/neon-bindings/neon/pull/1058)
Other
- More reliable checking for
Resulttypes in#[export](https://github.com/neon-bindings/neon/pull/1057) - Allow users to take
Cxinstead of genericContext(https://github.com/neon-bindings/neon/pull/1048) - Introduce
WithforTryIntoJs(https://github.com/neon-bindings/neon/pull/1059) - Add tokio async runtime support to
#[export](https://github.com/neon-bindings/neon/pull/1055) - Add
TryIntoJsandTryFromJsfor common container types (https://github.com/neon-bindings/neon/pull/1066) - Allow
Cxin exported functions (https://github.com/neon-bindings/neon/pull/1068)
Version 1.1.0-alpha.0
Bugfixes
- Fix build script behavior based on cargo diagnostics format change (https://github.com/neon-bindings/neon/pull/1039)
Other
- Added Extractors API (https://github.com/neon-bindings/neon/pull/1024)
- Added
#[export]macro (https://github.com/neon-bindings/neon/pull/1025) - Added
npm init neon --lib(https://github.com/neon-bindings/neon/pull/1014 and https://github.com/neon-bindings/neon/pull/1041)
-
1.1.0-alpha.202 May 2025 pre-releaseRelease notes
Open source →Version 1.1.0-alpha.2
Breaking Changes (unstable features only)
- Convert snake_case to camelCase when exporting functions (#1084)
- Remove
FromArgsimpl onT: TryFromJsand addcx.{arg, arg_opt}(#1096)
Other
-
1.1.0-alpha.107 Oct 2024 pre-releaseNothing published for this version
-
1.1.0-alpha.031 May 2024 pre-releaseNothing published for this version
-
1.0.023 Feb 2024Release notes
Open source →Commitment to Compatibility
The release of Neon 1.0 marks our commitment to backwards-compatibility: starting with 1.0.0, Neon users can be confident that future upgrades to Neon 1.x versions should never require code changes (with the possible exception of safety bugfixes, which we expect to be rare). We also do not anticipate releasing new major versions often and do not have any plans to do so for now.
Breaking Changes
- Remove the generic parameter from
JsFunction(#989) JsArray::newtakes ausizeinstead of au32(#988)- Made
Context::globalread a key and addedContext::global_object(#987) - Deprecated feature flags were removed
Bug fixes
- Fix
unhandledRejectionwithJsPromise::to_future(#1008) - Typo in
cargo-cp-artifacthelp (#998) - Typo in README (#1012)
Other
- Relaxed error behavior on missing Node-API symbols. Neon will panic on first use instead of aborting the process at module load time.
- Bumped dependency versions
- Changed to edition 2021
- Updated support matrix to Node 18, 20, and 21
Release notes
Open source →Commitment to Compatibility
The release of Neon 1.0 marks our commitment to backwards-compatibility: starting with 1.0.0, Neon users can be confident that future upgrades to Neon 1.x versions should never require code changes (with the possible exception of safety bugfixes, which we expect to be rare). We also do not anticipate releasing new major versions often and do not have any plans to do so for now.
Breaking Changes
- Remove the generic parameter from
JsFunction(https://github.com/neon-bindings/neon/pull/989) JsArray::newtakes ausizeinstead of au32(https://github.com/neon-bindings/neon/pull/988)- Made
Context::globalread a key and addedContext::global_object(https://github.com/neon-bindings/neon/pull/987) - Deprecated feature flags were removed
Bug fixes
- Fix
unhandledRejectionwithJsPromise::to_future(https://github.com/neon-bindings/neon/pull/1008) - Typo in
cargo-cp-artifacthelp (https://github.com/neon-bindings/neon/pull/998) - Typo in README (https://github.com/neon-bindings/neon/pull/1012)
Other
https://github.com/neon-bindings/neon/pull/1010
- Relaxed error behavior on missing Node-API symbols. Neon will panic on first use instead of aborting the process at module load time.
- Bumped dependency versions
- Changed to edition 2021
- Updated support matrix to Node 18, 20, and 21
- Remove the generic parameter from
-
1.0.0-alpha.414 Apr 2023 pre-release -
1.0.0-alpha.314 Apr 2023 pre-releaseRelease notes
Open source →Breaking Changes
- Removed
Managedtrait
Improvements
- Added
JsBigInt(#963). - Added UTF-16 functions to
JsString(#944). - Relaxed
Sendconstraints (#979) - Lifecycle support for 32-bit (#977)
- Added
sysfeature (#970)
Bug Fixes
- Fix a scope leak in release builds (#952).
Docs
- Examples added for many types ((#942)).
cargo-cp-artifact0.1.8fixes sending additional arguments on Windows (#972).Release notes
Open source →Breaking Changes
- Removed
Managedtrait
Improvements
- Added
JsBigInt(https://github.com/neon-bindings/neon/pull/963). - Added UTF-16 functions to
JsString(https://github.com/neon-bindings/neon/pull/944). - Relaxed
Sendconstraints (https://github.com/neon-bindings/neon/pull/979) - Lifecycle support for 32-bit (https://github.com/neon-bindings/neon/pull/977)
- Added
sysfeature (https://github.com/neon-bindings/neon/pull/970)
Bug Fixes
- Fix a scope leak in release builds (https://github.com/neon-bindings/neon/pull/952).
Docs
- Examples added for many types ((https://github.com/neon-bindings/neon/pull/942)).
cargo-cp-artifact0.1.8fixes sending additional arguments on Windows (https://github.com/neon-bindings/neon/pull/972). - Removed
-
1.0.0-alpha.211 Nov 2022 pre-releaseRelease notes
Open source →Breaking Changes
neon::object::ThisTrait
neon::object::Thishas been removed.Thiswas primarily added for use with thedeclare_types!macro to generate classes. The macro was removed andThisis no longer needed. Additionally, theThisargument onJsFunctionwas found to be invalid because it asserted at compile time a type forthisthat could change at runtime. (Note that this was not unsound because the type would be checked by Node-API and result in apanic.)JsFunction::thisJsFunction::thiswas changed to perform a downcast and be fallible. This is in line with similar APIs (e.g.,Object::get). Additionally, an infallible version,JsValue::this_valuewas added that does not perform a downcast.Added Feature flag for external buffers
Electron began using pointer compression on JavaScript values that is incompatible with external buffers. As a preventative measure,
JsArrayBuffer::externalandJsBuffer::externalhave been placed behind a feature flag that warns of Electron incompatibility.Improvements
- Lifetimes were relaxed on
execute_scopedto allow valid code to compile. (#919) - Added a
from_slicehelper onTypedArray(#925) JsTypedArrayconstruction and type aliases (#909)
Bug Fixes
- Fixed a panic on VM shutdown when using
Channel(#934) - Type tags were added to
JsBoxto prevent undefined behavior when multiple native add-ons are used (#907)
Docs
- Significantly improved documentation of
TypedArray(#909) - Removed unused values in
Channeldocs (#925)
cargo-cp-artifact0.1.7includes a fix to unlink.nodefiles before copying to address common code signing errors on macOS (#921).Release notes
Open source →Breaking Changes
neon::object::Thishttps://github.com/neon-bindings/neon/pull/918
Trait
neon::object::Thishas been removed.Thiswas primarily added for use with thedeclare_types!macro to generate classes. The macro was removed andThisis no longer needed. Additionally, theThisargument onJsFunctionwas found to be invalid because it asserted at compile time a type forthisthat could change at runtime. (Note that this was not unsound because the type would be checked by Node-API and result in apanic.)JsFunction::thishttps://github.com/neon-bindings/neon/pull/918
JsFunction::thiswas changed to perform a downcast and be fallible. This is in line with similar APIs (e.g.,Object::get). Additionally, an infallible version,JsValue::this_valuewas added that does not perform a downcast.Added Feature flag for external buffers
https://github.com/neon-bindings/neon/pull/937
Electron began using pointer compression on JavaScript values that is incompatible with external buffers. As a preventative measure,
JsArrayBuffer::externalandJsBuffer::externalhave been placed behind a feature flag that warns of Electron incompatibility.Improvements
- Lifetimes were relaxed on
execute_scopedto allow valid code to compile. (https://github.com/neon-bindings/neon/pull/919) - Added a
from_slicehelper onTypedArray(https://github.com/neon-bindings/neon/pull/925) JsTypedArrayconstruction and type aliases (https://github.com/neon-bindings/neon/pull/909)
Bug Fixes
- Fixed a panic on VM shutdown when using
Channel(https://github.com/neon-bindings/neon/pull/934) - Type tags were added to
JsBoxto prevent undefined behavior when multiple native add-ons are used (https://github.com/neon-bindings/neon/pull/907)
Docs
- Significantly improved documentation of
TypedArray(https://github.com/neon-bindings/neon/pull/909) - Removed unused values in
Channeldocs (https://github.com/neon-bindings/neon/pull/925)
cargo-cp-artifact0.1.7includes a fix to unlink.nodefiles before copying to address common code signing errors on macOS (https://github.com/neon-bindings/neon/pull/921). - Lifetimes were relaxed on
-
1.0.0-alpha.111 Jul 2022 pre-releaseRelease notes
Open source →Pre-release of a major milestone for Neon. 1.0.
Breaking Changes
Major
- Removed the legacy backend; only Node-API is supported going forward (#881)
- Removed
neon::result::JsResultExtin favor of more generalneon::result::ResultExt(#904)
Minor
- Length APIs (
argument,argument_ops,len) useusizeinstead ofi32(#889) - Deprecate feature flags for accepted RFCs (#872)
neon::meta::versionreturnssemver@1version instead of0.9(#912)
Features
- Add
Object.freezeandObject.seal(#891) - Futures RFC (#872) Implementation (#874)
- Await
JoinHandlefrom sending an event on aChannel - Adapt
JsPromisetoJsFuture
- Await
- API for thread-local data (i.e., instance data) (#902)
- Add Object::call_with() convenience method to call a method on an object (#879)
Bug Fixes
- Relax the lifetime constraints on
TypedArrayborrows (#877) - Allowing missing symbols at load time to support bun (#914)
- Prevent a panic when an async event is called after the JavaScript runtime has stopped (#913)
- Fix a soundness hole in
JsArrayBuffer::externalandJsBuffer::external(#897)
Docs
Internal
Release notes
Open source →Pre-release of a major milestone for Neon. 1.0.
Breaking Changes
Major
- Removed the legacy backend; only Node-API is supported going forward (https://github.com/neon-bindings/neon/pull/881)
- Removed
neon::result::JsResultExtin favor of more generalneon::result::ResultExt(https://github.com/neon-bindings/neon/pull/904)
Minor
- Length APIs (
argument,argument_ops,len) useusizeinstead ofi32(https://github.com/neon-bindings/neon/pull/889) - Deprecate feature flags for accepted RFCs (https://github.com/neon-bindings/neon/pull/872)
neon::meta::versionreturnssemver@1version instead of0.9(https://github.com/neon-bindings/neon/pull/912)
Features
- Add
Object.freezeandObject.seal(https://github.com/neon-bindings/neon/pull/891) - Futures RFC (https://github.com/neon-bindings/neon/pull/872) Implementation (https://github.com/neon-bindings/neon/pull/874)
- Await
JoinHandlefrom sending an event on aChannel - Adapt
JsPromisetoJsFuture
- Await
- API for thread-local data (i.e., instance data) (https://github.com/neon-bindings/neon/pull/902)
- Add Object::call_with() convenience method to call a method on an object (https://github.com/neon-bindings/neon/pull/879)
Bug Fixes
- Relax the lifetime constraints on
TypedArrayborrows (https://github.com/neon-bindings/neon/pull/877) - Allowing missing symbols at load time to support bun (https://github.com/neon-bindings/neon/pull/914)
- Prevent a panic when an async event is called after the JavaScript runtime has stopped (https://github.com/neon-bindings/neon/pull/913)
- Fix a soundness hole in
JsArrayBuffer::externalandJsBuffer::external(https://github.com/neon-bindings/neon/pull/897)
Docs
- Fixed mistake in
Object::getdocs (https://github.com/neon-bindings/neon/pull/903) - Fixed link in README to migration guide (https://github.com/neon-bindings/neon/pull/895)
Internal
- Moved
cargo-cp-artirfactinto the monorepo (https://github.com/neon-bindings/neon/pull/905) - Decreased the size of the Neon build matrix (https://github.com/neon-bindings/neon/pull/893)
- Removed scope abstraction from legacy backend (https://github.com/neon-bindings/neon/pull/888)
- Improved the monorepo structure of neon (https://github.com/neon-bindings/neon/pull/884)
-
0.10.123 May 2022Release notes
Open source →Fix a soundness hole in
JsArrayBuffer::external
andJsBuffer::external(#897).Thanks to @Cassy343 for finding the issue!
In previous versions of Neon, it was possible to create a
JsArrayBufferorJsBufferthat references data without the'staticlifetime.pub fn soundness_hole(mut cx: FunctionContext) -> JsResult<JsArrayBuffer> { let mut data = vec![0u8, 1, 2, 3]; // Creating an external from `&mut [u8]` instead of `Vec<u8>` since there is a blanket impl // of `AsMut<T> for &mut T` let buf = JsArrayBuffer::external(&mut cx, data.as_mut_slice()); // `buf` is still holding a reference to `data`! drop(data); Ok(buf) }
Release notes
Open source →Fix a soundness hole in
JsArrayBuffer::externalandJsBuffer::external(https://github.com/neon-bindings/neon/pull/897).Thanks to @Cassy343 for finding the issue!
In previous versions of Neon, it was possible to create a
JsArrayBufferorJsBufferthat references data without the'staticlifetime.pub fn soundness_hole(mut cx: FunctionContext) -> JsResult<JsArrayBuffer> { let mut data = vec![0u8, 1, 2, 3]; // Creating an external from `&mut [u8]` instead of `Vec<u8>` since there is a blanket impl // of `AsMut<T> for &mut T` let buf = JsArrayBuffer::external(&mut cx, data.as_mut_slice()); // `buf` is still holding a reference to `data`! drop(data); Ok(buf) } -
0.10.007 Mar 2022Nothing published for this version
-
0.9.126 Aug 2021Release notes
Open source →- Expose the
Finalizetrait asneon::types::Finalizeso that docs are visible - Improved docs and build scripts in
create-neonto make release builds more discoverable (https://github.com/neon-bindings/neon/pull/771) - Update
nanto fix an Electron 13 incompatibility (https://github.com/neon-bindings/neon/pull/778)
- Expose the
-
0.9.026 Jul 2021Release notes
Open source →Performance
Channel, formerlyEventQueue, are now cloneable. Clones share a backing queue to take advantage of an optimization in Node threadsafe functions. Additionally, when specifying Node API 6 or higher (napi-6), callingcx.channel()will return a shared queue (https://github.com/neon-bindings/neon/pull/739).The change may cause a performance regression in some pathological use cases (https://github.com/neon-bindings/neon/issues/762).
Deprecation
EventQueueandEventQueueErrorhave been renamed toChannelandChannelErrorrespectively to clarify their function and similarity to Rust channels. The types are available as deprecated aliases (https://github.com/neon-bindings/neon/pull/752).Docs
- Document error causes for
Channel::try_senddocs (https://github.com/neon-bindings/neon/pull/767) - Document
neon::object(https://github.com/neon-bindings/neon/pull/740)
Fixes
- Fix usage of a removed API in legacy buffers (https://github.com/neon-bindings/neon/pull/769)
- Document error causes for
-
0.8.302 Jun 2021Release notes
Open source →- Fix crash caused by non-thread safety in napi_threadsafefunction on early termination (https://github.com/neon-bindings/neon/pull/744)
- Fix memory leak in
Root(https://github.com/neon-bindings/neon/pull/750)
-
0.8.218 May 2021Release notes
Open source →- More docs improvements
- Added a deprecation warning to
neon new(https://github.com/neon-bindings/neon/pull/722)
-
0.8.130 Apr 2021Release notes
Open source →- Fix
legacy-backendfor Node 16 (https://github.com/neon-bindings/neon/pull/715) - Various docs improvements
- Fix
-
0.8.023 Mar 2021Release notes
Open source →Fixes
as_sliceandas_mut_sliceproperly handle anullpointer from an empty buffer (https://github.com/neon-bindings/neon/pull/681)- Global drop queue added to avoid panics on N-API 6+ when dropping a
Root(https://github.com/neon-bindings/neon/pull/700)
Features
- Added
neon::reflect::eval(https://github.com/neon-bindings/neon/pull/692) - Added
create-neonfor creating an N-API project (https://github.com/neon-bindings/neon/pull/690) - Added details to the
README.mdgenerated bycreate-neon(https://github.com/neon-bindings/neon/pull/697)
Improvements
- Switched N-API tests to
cargo-cp-artifact(https://github.com/neon-bindings/neon/pull/687) - Added
impl<T: Finalize> Finalize for Option<T>(https://github.com/neon-bindings/neon/pull/680) - Added a N-API migration guide (https://github.com/neon-bindings/neon/pull/685)
Housekeeping
- Lint fixes (https://github.com/neon-bindings/neon/pull/609)
- Lint CI enforcement and
cargo fmt(https://github.com/neon-bindings/neon/pull/698)
-
0.7.104 Feb 2021Release notes
Open source →Features
- Added
JsDateto N-API backend (https://github.com/neon-bindings/neon/pull/639) - Implement
JsBuffer::unitializedfor N-API backend (https://github.com/neon-bindings/neon/pull/664)
Fixes
- Do not panic if a
Rootis leaked after the event loop has stopped (https://github.com/neon-bindings/neon/pull/677) - Stubs for features that will not be implemented in the N-API backend are removed (https://github.com/neon-bindings/neon/pull/663)
- Fix doc URL link (https://github.com/neon-bindings/neon/pull/663)
- Added
-
0.7.005 Jan 2021Release notes
Open source →N-API
Version Selection
Neon supports a large number of different Node versions which may have different N-API requirements. Neon now supports selecting the minimum required N-API version required by a module. For example, for N-API Version 4:
neon = { version = "0.7", default-features = false, features = ["napi-4"] }If the Neon module is loaded in an older version of Node that does not support that N-API version, a
panicmessage will inform the user.Threadsafe Functions
A prerelease version of
EventQueuefor calling into the main JavaScript thread from Rust threads can be enabled with theevent-queue-apifeature flag. The API is considered unstable and may change in the future until the RFC is merged. -
0.6.009 Dec 2020Release notes
Open source →The
cx.try_catch(..)API has been updated to returnT: Sizedinstead ofT: Value(https://github.com/neon-bindings/neon/pull/631). This API is strictly more powerful and allows users to return both JavaScript and Rust values fromtry_catchclosures.N-API
- N-API symbols are now loaded dynamically (https://github.com/neon-bindings/neon/pull/646)
- Build process for N-API is greatly simplified by leveraging dynamic loading (https://github.com/neon-bindings/neon/pull/647)
-
0.5.324 Nov 2020Release notes
Open source →Bug Fixes
Upgrade
node-gyp(https://github.com/neon-bindings/neon/pull/623)- Fix Windows Node 15
- Fix Apple M1
Features
Added
neon::mainmacro as a replacement forregister_module!(https://github.com/neon-bindings/neon/pull/636)Known Issues
Builds occassionally fail with Windows, Node 15 and npm 7 (https://github.com/neon-bindings/neon/issues/642)