Skip to content

Latest commit

 

History

History
583 lines (363 loc) · 27.1 KB

RELEASES.md

File metadata and controls

583 lines (363 loc) · 27.1 KB

cargo-cp-artifact

0.1.9 supports a breaking change in cargo that converts artifact names from kebab-case to snake_case.

Version 1.0.0

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::new takes a usize instead of a u32 (#988)
  • Made Context::global read a key and added Context::global_object (#987)
  • Deprecated feature flags were removed

Bug fixes

  • Fix unhandledRejection with JsPromise::to_future (#1008)
  • Typo in cargo-cp-artifact help (#998)
  • Typo in README (#1012)

Other

#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

Version 1.0.0-alpha.4

Patch to enable new features flags in docs.rs.

Version 1.0.0-alpha.3

Breaking Changes

  • Removed Managed trait

Improvements

  • Added JsBigInt (#963).
  • Added UTF-16 functions to JsString (#944).
  • Relaxed Send constraints (#979)
  • Lifecycle support for 32-bit (#977)
  • Added sys feature (#970)

Bug Fixes

  • Fix a scope leak in release builds (#952).

Docs

  • Examples added for many types ((#942)).

cargo-cp-artifact

0.1.8 fixes sending additional arguments on Windows (#972).

Version 1.0.0-alpha.2

Breaking Changes

neon::object::This

#918

Trait neon::object::This has been removed. This was primarily added for use with the declare_types! macro to generate classes. The macro was removed and This is no longer needed. Additionally, the This argument on JsFunction was found to be invalid because it asserted at compile time a type for this that could change at runtime. (Note that this was not unsound because the type would be checked by Node-API and result in a panic.)

JsFunction::this

#918

JsFunction::this was 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_value was added that does not perform a downcast.

Added Feature flag for external buffers

#937

Electron began using pointer compression on JavaScript values that is incompatible with external buffers. As a preventative measure, JsArrayBuffer::external and JsBuffer::external have been placed behind a feature flag that warns of Electron incompatibility.

Improvements

  • Lifetimes were relaxed on execute_scoped to allow valid code to compile. (#919)
  • Added a from_slice helper on TypedArray (#925)
  • JsTypedArray construction and type aliases (#909)

Bug Fixes

  • Fixed a panic on VM shutdown when using Channel (#934)
  • Type tags were added to JsBox to prevent undefined behavior when multiple native add-ons are used (#907)

Docs

  • Significantly improved documentation of TypedArray (#909)
  • Removed unused values in Channel docs (#925)

cargo-cp-artifact

0.1.7 includes a fix to unlink .node files before copying to address common code signing errors on macOS (#921).

Version 1.0.0-alpha.1

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::JsResultExt in favor of more general neon::result::ResultExt (#904)

Minor

  • Length APIs (argument, argument_ops, len) use usize instead of i32 (#889)
  • Deprecate feature flags for accepted RFCs (#872)
  • neon::meta::version returns semver@1 version instead of 0.9 (#912)

Features

  • Add Object.freeze and Object.seal (#891)
  • Futures RFC (#872) Implementation (#874)
    • Await JoinHandle from sending an event on a Channel
    • Adapt JsPromise to JsFuture
  • 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 TypedArray borrows (#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::external and JsBuffer::external (#897)

Docs

  • Fixed mistake in Object::get docs (#903)
  • Fixed link in README to migration guide (#895)

Internal

  • Moved cargo-cp-artirfact into the monorepo (#905)
  • Decreased the size of the Neon build matrix (#893)
  • Removed scope abstraction from legacy backend (#888)
  • Improved the monorepo structure of neon (#884)

Version 0.10.1

Fix a soundness hole in JsArrayBuffer::external and JsBuffer::external (#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

  • Expose the Finalize trait as neon::types::Finalize so that docs are visible
  • Improved docs and build scripts in create-neon to make release builds more discoverable (#771)
  • Update nan to fix an Electron 13 incompatibility (#778)

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 (#739).

The change may cause a performance regression in some pathological use cases (#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 (#752).

Docs

  • Document error causes for Channel::try_send docs (#767)
  • Document neon::object (#740)

Fixes

  • Fix usage of a removed API in legacy buffers (#769)

Version 0.8.3

  • Fix crash caused by non-thread safety in napi_threadsafefunction on early termination (#744)
  • Fix memory leak in Root (#750)

Version 0.8.2

  • More docs improvements
  • Added a deprecation warning to neon new (#722)

Version 0.8.1

  • Fix legacy-backend for Node 16 (#715)
  • Various docs improvements

Version 0.8.0

Fixes

  • as_slice and as_mut_slice properly handle a null pointer from an empty buffer (#681)
  • Global drop queue added to avoid panics on N-API 6+ when dropping a Root (#700)

Features

  • Added neon::reflect::eval (#692)
  • Added create-neon for creating an N-API project (#690)
  • Added details to the README.md generated by create-neon (#697)

Improvements

  • Switched N-API tests to cargo-cp-artifact (#687)
  • Added impl<T: Finalize> Finalize for Option<T> (#680)
  • Added a N-API migration guide (#685)

Housekeeping

  • Lint fixes (#609)
  • Lint CI enforcement and cargo fmt (#698)

Version 0.7.1

Features

  • Added JsDate to N-API backend (#639)
  • Implement JsBuffer::unitialized for N-API backend (#664)

Fixes

  • Do not panic if a Root is leaked after the event loop has stopped (#677)
  • Stubs for features that will not be implemented in the N-API backend are removed (#663)
  • Fix doc URL link (#663)

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 (#631). This API is strictly more powerful and allows users to return both JavaScript and Rust values from try_catch closures.

N-API

  • N-API symbols are now loaded dynamically (#646)
  • Build process for N-API is greatly simplified by leveraging dynamic loading (#647)

Version 0.5.3

Bug Fixes

Upgrade node-gyp (#623)

  • Fix Windows Node 15
  • Fix Apple M1

Features

Added neon::main macro as a replacement for register_module! (#636)

Known Issues

Builds occassionally fail with Windows, Node 15 and npm 7 (#642)

Version 0.5.2

CLI

Added support for additional arguments passed to cargo build. Resolves #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

  • Fix stack overflow in DowncastError Display impl (#606)

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

  • Pass async_context to node::MakeCallback (#498)
  • Cache bust neon if node version changes (#388)
  • Fix debug builds in windows (#400)
  • Fix cross compiling architectures (#491)
  • Fix neon new hanging on Windows (#537)

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)