Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

neon-cli

neon-bindings20.5kSEE LICENSE IN LICENSE-*0.10.1TypeScript support: included

Build and load native Rust/Neon modules.

readme

The Neon Command-Line Tool

Automatically create and build Neon modules.

For more information, see the Neon home page!

changelog

Version 0.10.1

Fix a soundness hole in JsArrayBuffer::external and JsBuffer::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 JsArrayBuffer or JsBuffer that references data without the 'static lifetime.

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)
}

Version 0.10

See the Neon 0.10 Migration Guide for more details about new features and breaking changes.

Features

Minor Improvements

Fixes

Internal Improvements

Version 0.9.1

Version 0.9.0

Performance

Channel, formerly EventQueue, 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), calling cx.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

EventQueue and EventQueueError have been renamed to Channel and ChannelError respectively 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

Fixes

Version 0.8.3

Version 0.8.2

Version 0.8.1

Version 0.8.0

Fixes

Features

Improvements

Housekeeping

Version 0.7.1

Features

Fixes

Version 0.7.0

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 panic message will inform the user.

Threadsafe Functions

A prerelease version of EventQueue for calling into the main JavaScript thread from Rust threads can be enabled with the event-queue-api feature flag. The API is considered unstable and may change in the future until the RFC is merged.

Version 0.6.0

The cx.try_catch(..) API has been updated to return T: Sized instead of T: 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 from try_catch closures.

N-API

Version 0.5.3

Bug Fixes

Upgrade node-gyp (https://github.com/neon-bindings/neon/pull/623)

  • Fix Windows Node 15
  • Fix Apple M1

Features

Added neon::main macro as a replacement for register_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)

Version 0.5.2

CLI

Added support for additional arguments passed to cargo build. Resolves https://github.com/neon-bindings/neon/issues/471.

neon build --release -- --features awesome

N-API

Version 0.5.1

Performance

  • smallvec is used for collecting arguments and yields a small performance gain when calling JsFunction

Broader Support

Thanks to @staltz, neon now builds for both iOS and Android with nodejs-mobile.

Version 0.5.0

Re-publish

Versions 0.4.1 and 0.4.2 included a breaking change in neon-runtime. At the time, this was considered acceptable because neon-runtime is considered an internal crate and not part of the public API. However, it was discovered, after publishing, that neon-serde, a commonly used crate in the neon ecosystem, contained a direct dependency on neon-runtime. In order to best support users, versions 0.4.1 and 0.4.2 were "yanked" and re-published as 0.5.0.

Additionally, the team is working with the authors of neon-serde to remove the dependency on neon-runtime to prevent future issues.

Bug Fixes

Version 0.4.2

Unpublished / Yanked

Bug Fixes

  • Fix memory leak and race condition in EventHandler

Version 0.4.1

Unpublished / Yanked

Features

Try Catch

Added the cx.try_catch API of RFC 29. This feature is behind the try-catch-api feature flag.

Bug Fixes

CI Improvements

The Neon Project now uses Github Actions thanks to @lhr0909! As part of this change, CI now runs on all of our supported platforms (macOS, Windows, linux) and Node versions.

Version ✨0.4✨ 🎉

EventHandler API

The EventHandler API is a new feature for scheduling work on the javascript main thread from other threads. Big thanks to @geovie for the RFC and implementation.

This feature is currently unstable and gated by a event-handler-api feature flag.

Improvements

  • New project template updated for Rust 2018

Bug Fixes

  • Workaround for nodejs/node-gyp#1933
  • Docs build fixed
  • Temporarily disable static tests which keep breaking CI

N-API

  • Context/Isolate threading
  • Scopes
  • Strings
  • Primitive values (numbers, undefined, null, boolean)

Version 0.3.3

Hot fix for neon build in projects with many dependencies.

Version 0.3.2

Bug fixes and Small Features

  • Disable node module registration on test build, allowing cargo test to be used on neon modules
  • Added support for alternate CARGO_TARGET_DIR locations (e.g., workspaces)
  • Added macros to neon::prelude to improve ergonomics in Rust 2018
  • Link win_delay_hook when building with electron-build-env, fixing Windows Electron
  • Fixed missing __cxa_pure_virtual on Linux
  • Copy native files into OUT_DIR and build there to fix cargo publish and follow best practices
  • Eliminated mem::uniitialized() usage, reducing warnings and fixing an instance of undefined behavior

Potentially Breaking

The macOS link arguments were moved from neon-cli to neon-build. This is more idiomatic, but makes neon-build required for macOS builds where it was unnecessary before.

Since neon-build has been included in the project template since 0.1 this change was not deemed significant enough to warrant a major revision.

N-API

Neon 0.3.2 lays the groundwork for the next major revision. Development of Neon against an ABI stable Node API (N-API) will occur on main.

  • Added legacy-runtime and n-api feature flags for toggling neon runtime
  • Moved the legacy runtime to nodejs-sys crate
  • Stubbed required n-api implementation
  • Added feature flag to neon-cli to help configuring n-api projects

Version 0.3.1

  • Build v0.3 project templates by default in the CLI

Version 0.3

Breaking Changes

Bug Fixes

Improvements

Version ✨0.2✨ 🎉

See the Neon 0.2 Migration Guide for documentation on migrating your projects from the Neon 0.1.x series to Neon 0.2, and please let us know if you need help!

  • Release automation (#318)
  • New ArrayBuffer views API -- see RFC 5 (#306)
  • VM 2.0 -- see RFC 14 (#306)
  • New JsString constructor -- see RFC 21 (#322)
  • Eliminated JsInteger, JsVariant, callee() -- see RFC 22 (#323)
  • Renamed Key to PropertyKey and its method names -- see RFC 22 (#323)
  • Module reorganization -- see RFC 20 (#324)
  • New JsError API -- see RFC 23 (#325)
  • Eliminated ToJsString API -- see RFC 22 (#326)
  • Eliminated NEON_NODE_ABI env var -- see RFC 22 (#327)
  • Default to release builds -- see RFC 22 (#328)
  • Made Buffer construction safe by default (#329, #331)
  • Made Throw not implement std::error::Error to avoid accidental suppression, thanks to @kjvalencik (#334)
  • Fixed a bug causing unnecessary rebuilds, thanks to @kjvalencik (#343)
  • Fixed a soundness bug in the Task API, thanks to @kjvalencik (#335)

Version 0.1.23

Version 0.1.22

  • Reinstate JsInteger (although it's deprecated) for now, to be removed in 0.2. (#279)

Version 0.1.21

Version 0.1.20

  • Background task API (#214).
  • Fixes to Windows builds (#221, #227), thanks to @hone's tenacious troubleshooting.

Version 0.1.19

Version 0.1.18

Version 0.1.17

Version 0.1.16

Version 0.1.15 (2017-05-21)

  • Better Electron support in CLI's build process.
  • Better support for Electron via the artifacts file (neon-bindings/neon-cli#52).

Version 0.1.14 (2017-04-02)

  • Ensure failing tests break the build (#191)
  • Catch Rust panics and convert them to JS exceptions (#192)
  • Implement Error for Throw (#201)
  • Clean up the CLI and allow neon build to optionally take module names (neon-bindings/neon-cli#48).

Version 0.1.13 (2017-02-17)

  • More robust build scripts for neon-runtime, fixing Homebrew node installations (see #189)

Version 0.1.12 (2017-02-16)

Version 0.1.11 (2016-08-08)

Version 0.1.10 (2016-05-11)

Incompatible Changes

  • The JsTypeError type is gone, and replaced by the more general JsError type.
  • neon::js::error::JsTypeError::throw(msg) is now neon::js::error::JsError::throw(neon::js::error::kind::TypeError, msg)