All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Add pre-generated bindings for
riscv64gc-unknown-linux-gnuandriscv64a23-unknown-linux-gnu
- Added
TypedArray<U8Clamped>support forUint8ClampedArray, obtainable viaTypedArray::from_objectand matched byis_typed_arraylike other typed array classes
- Fixed
rquickjs-syshost build failing during cross-compilation by reusing bundled bindings for the host target instead of running bindgen with a mismatchedlibclang#709
- Updated
phf,phf_sharedandphf_generatorto 0.14
- Fixed
Constructor::new_prototypeleaking a reference cycle that abortedJS_FreeRuntimewith agc_obj_listassertion failure
- Added import attributes to the Loader trait #601
- Added half support (f16) for Float16Array # 662
Value::new_big_intnow returnsResult<Value>so QuickJS allocation failures are surfaced to the caller #585
- Added
#[qjs(prop)]method attribute to declare a JS data property on a class prototype. Unlike#[qjs(get)], which generates an accessor and requires aFromJs<Self>receiver,propis evaluated at class registration time and emits a plain data descriptor (matching Web IDL semantics for@@toStringTag,@@species, etc.). Honoursrename,configurable,enumerable, and a newwritableflag (which also gateswritableonprop). - Added
FromJsandIntoJsderive macros for plain-data structs - Added
RQUICKJS_SYS_NO_WASI_SDKenv variable that skips downloading and setting up the WASI SDK when set to1#648 - Added
Object::new_protofor creating objects with a custom or null prototype #572 - Added
Symbol::new,Symbol::with_description, andSymbol::new_globalfor creating local and global symbols from Rust #672 - Added
ArrayBufferSourcetrait andArrayBuffer::from_source/from_source_shared/from_source_immutablesafe constructors for wrapping external, caller-owned buffers, with built-in impls forVec<u8>,Box<[u8]>,Arc<[u8]>,Arc<Vec<u8>>, and (behind thebytesfeature)bytes::Bytes - Add pre-generated bindings for
armv7-unknown-linux-gnueabihf - Add pre-generated bindings for
powerpc64-unknown-linux-gnu
- Bump MSRV to 1.87
- Updated
AsyncContext::async_withto use async closure syntax #602
- Deprecated
async_with!macro #602
- Fixed
Property::configurable()/.writable()/.enumerable()not emittingJS_PROP_HAS_*flags, so redefining an existing property silently kept its old attributes #693 - Fixed QuickJS rope strings (
JS_TAG_STRING_ROPE) not being recognized as strings, causingtype_of(),is_string(), andas_string()to fail on large concatenated strings - Fixed interrupt handler causing GC assertion failure due to missing
JS_DupContexton error context fromJS_ExecutePendingJob#664 - Fixed cross-thread stack overflow false positives in parallel mode by updating stack baseline before QuickJS C entry points
- Fixed promise polling not returning Ready variant when exception occurs
- Fixed promise future aborting on stale pending exceptions by only bailing on uncatchable errors (e.g. interrupt handler)
- Fixed iterators to use correct IteratorPrototype chain
- Fixed a latent ABI layout vulnerability in
JS_NewPromiseCapabilityFFI boundary by replacing tuple with strictly compatible array #[rquickjs::class]now rejects fields whose type implementsJsClasswith a clear compile error; such fields silently dropped nested mutations because the generated getter cloned the value. Wrap the field inClass<'js, T>instead #532- Added missing
Traceimplementations forConstructor,Promise,Proxy,ArrayBuffer, andTypedArray; addedJsLifetimeforProxy; re-exportedConstructorat the crate root - Fixed
#[qjs(static, rename = PredefinedAtom::...)]methods failing when the target symbol exists as a non-writable property onFunction.prototype(e.g.Symbol.hasInstance) by defining properties directly on the constructor instead of going through the prototype chain #315 - Fixed
#[qjs(static, get/set)]accessors being placed on the class prototype instead of the constructor #478 - Fixed
Runtime::set_max_stack_sizecrashing on large values (e.g.usize::MAX) by clamping to avoid a pointer underflow inside QuickJS's stack limit check #437
- Added
Proxyobject ##570 - Allow setting filename as an eval option ##536
- Add Iterable allow JS to iterate over Rust iterator ##564
- Add JsIterator to iterate over Javascript Iterator ##564
- Add more trait implementations like AsRef for CString ##558
- Fix wasm32 build #548
- Allow
rquickjs-coreto build withno_std##455 - Add
PromiseHookbindings ##453 - Add
Module::writeoptions to enable features likeJS_WRITE_OBJ_STRIP_SOURCEandJS_WRITE_OBJ_STRIP_DEBUG##443 and ##518 - Allow building with sanitizer ##425
- Add
set_host_promise_rejection_trackertoAsyncRuntime##452 - Add linux arm64 support to
syscrate ##445 - Implement
TraceforAtom##517 - Add
disable-assertionsfeature to disable runtime assertions in quickjs ##535 - Add
JS_TAG_SHORT_BIG_INTtag to support short BigInt ##458 and ##519
- Bump MSRV to 1.82 ##531
- Update to 2024 edition ##473
- Export
DriveFuture##491 - Switch to
dlopen2for native module loading ##513
- Fix base objects intrinsic not being enabled in async context ##442
- Fix namespace resolution for JsLifetime in derive macro ##429
- Fix ownership of ctx pointers to be more ergonomic and fix cleanup bugs ##433
- Fix rename option in qjs attribute ##428
- Strip llvm suffix for
*-pc-windows-gnullvmtarget ##506
- Switching to quickjs-ng from quickjs as base engine #369
This change should bring better performances and features, we are aware that it is bigger in intruction sizes.
We would eventually like to support the "original" quickjs engine again in the future, but we use new functions now that are only available in the -ng version.