Release Notes 5.0.x

5.0.6

  • Upgraded Node.js to v24.14.1 (2026-03-24)

  • Upgraded V8 to v14.7.173.18 (2026-04-07)

  • Upgraded Visual Studio 2026 to v18.4.3

  • Added builtInModuleResolution flag to NodeRuntimeOptions to switch between Javet's module resolver and Node.js's built-in module resolver for static import statements

  • Fixed join() in JavetProxyPluginArray and JavetProxyPluginList to default to "," separator when called with no arguments, matching the JavaScript spec (previously defaulted to "")

  • Fixed with() in JavetProxyPluginArray and JavetProxyPluginList to support negative indices (e.g. arr.with(-1, value) replaces the last element), matching the JavaScript spec

  • Fixed copyWithin() in JavetProxyPluginArray and JavetProxyPluginList to distinguish between an omitted end parameter (copies to the end of the array) and an explicit end of 0 (copies nothing)

  • Fixed keys() in JavetProxyPluginArray and JavetProxyPluginList to return an Array Iterator (V8VirtualIterator) instead of a plain array, consistent with entries() and values()

  • Fixed reduceRight() in JavetProxyPluginArray and JavetProxyPluginList to register the callback context with the correct name "reduceRight" instead of "reduce"

  • Added toLocaleString() to JavetProxyPluginArray and JavetProxyPluginList, delegating to the native Array.prototype.toLocaleString with support for optional locale and options arguments

  • Added return() and throw() methods to V8VirtualIterator implementing the optional iterator protocol methods for early termination and error signaling

  • Added Symbol.toStringTag support to V8VirtualIterator returning "Iterator"

  • Fixed fill() in JavetProxyPluginArray and JavetProxyPluginList to distinguish between an omitted end parameter (fills to the end) and an explicit end of 0 (fills nothing)

  • Fixed splice() in JavetProxyPluginList to remove all elements from start to the end when deleteCount is omitted (e.g. list.splice(0) removes everything), matching the JavaScript spec (previously removed nothing)

  • Fixed toSpliced() in JavetProxyPluginArray and JavetProxyPluginList to remove all elements from start to the end when deleteCount is omitted, matching the JavaScript spec

  • Added ES2025 Set methods to JavetProxyPluginSet: difference(), intersection(), union(), symmetricDifference(), isSubsetOf(), isSupersetOf(), isDisjointFrom()

  • Fixed entries() in JavetProxyPluginSet to capture the snapshot at call time instead of at property access time, consistent with values()

  • Added toString(radix) polyfill to JavetProxyPluginDefault for BigInteger, Long (via BigInt.prototype.toString), Byte, Double, Float, Integer, Short (via Number.prototype.toString)

  • Added toString() polyfill to JavetProxyPluginDefault for Boolean (via Boolean.prototype.toString) and Character (via valueOf)

  • Added Symbol.toPrimitive registration to JavetProxyPluginDefault for Boolean, Byte, Character, Double, Float, Integer, Long, Short, String

  • Fixed Symbol.toPrimitive in BaseJavetProxyPlugin to handle Byte and Character for all hint types (number, default, boolean), preventing incorrect string concatenation in arithmetic expressions

5.0.5

  • Upgraded Node.js to v24.14.0 (2026-02-24)

  • Upgraded V8 to v14.6.202.8 (2026-02-26)

  • Added snapshot support for Node.js mode via createSnapshot() and setSnapshotBlob() on NodeRuntimeOptions

  • Added getSnapshotBlob() and setSnapshotBlob() to JavetEngineConfig so that engine pools can be initialized with a pre-existing V8 snapshot

  • Fixed V8 inspector not delivering promise-based responses until the next request by pumping microtasks after dispatching protocol messages

  • Fixed V8 inspector breakpoints not being hit by enabling protocol message dispatch inside the pause message loop

  • Fixed V8 inspector not notifying contextDestroyed / contextCreated on context reset, preventing stale context references

  • Fixed V8 inspector pause flag (runningMessageLoop) to use std::atomic<bool> for correct cross-thread visibility on ARM/Android

  • Added "break on start" support via V8Runtime.createV8Inspector(name, waitForDebugger) and V8Inspector.waitForDebugger() using V8's kWaitingForDebugger session state

  • Added multiple inspector sessions support via V8Runtime.createV8Inspector() allowing multiple DevTools clients to connect to the same runtime simultaneously, with per-session message routing, independent V8Inspector lifecycle (IJavetClosable), and close() for graceful session disconnect

  • Changed V8Inspector to implement IJavetClosable instead of AutoCloseable

  • Migrated V8 inspector from deprecated v8Inspector->connect() to v8Inspector->connectShared() returning shared_ptr for safer concurrent session access

  • Removed cached V8Runtime.getV8Inspector() in favor of always creating new sessions via V8Runtime.createV8Inspector(name)

  • Added console API message forwarding via IV8InspectorListener.consoleAPIMessage() so that console.log(), console.warn(), console.error(), etc. are delivered to Java listeners without requiring Runtime.enable

  • Added V8 idle notifications (idleStarted() / idleFinished()) tied to explicit lock() / unlock() so the CPU profiler can accurately distinguish idle time from active execution

  • Added V8InspectorClient::resourceNameToUrl() override so DevTools shows clickable source URLs instead of raw resource names

  • Added IV8InspectorListener.installAdditionalCommandLineAPI(IV8ValueObject commandLineAPI) callback that receives the command-line API scope object, allowing listeners to install custom properties (e.g. $myHelper) available during Runtime.evaluate with includeCommandLineAPI: true

  • Added graceful inspector session shutdown via V8InspectorSession::stop() before destruction to disable debugger pausing and prevent callbacks during teardown

  • Set origin and auxData on V8ContextInfo so DevTools shows the inspector name as the security origin and identifies the context as default ({"isDefault":true})

  • Added direct session-level API methods on V8Inspector: schedulePauseOnNextStatement() / cancelPauseOnNextStatement() for programmatic pause, breakProgram() for immediate break, setSkipAllPauses() to temporarily disable all breakpoints, and evaluate() for direct expression evaluation returning a Javet V8Value without CDP JSON overhead

5.0.4

  • Upgraded Node.js to v24.13.0 (2026-01-13)

  • Upgraded V8 to v14.5.201.5 (2026-01-23)

5.0.3

  • Upgraded Node.js to v24.12.0 (2025-12-10)

  • Upgraded V8 to v14.4.258.16 (2025-12-19)

  • Upgraded Visual Studio 2022 to v17.14.23

  • Supported Temporal in V8 mode

  • Added isHarmonyTemporal(), setHarmonyTemporal() to NodeFlags

  • Added isEfficiencyModeEnabled(), isBatterySaverModeEnabled(), isMemorySaverModeEnabled() to V8Runtime

  • Added getPriority(), setPriority() to V8Runtime

5.0.2

  • Upgraded Node.js to v24.11.1 (2025-11-11)

  • Upgraded V8 to v14.3.127.14 (2025-11-14)

  • Upgraded Android NDK to r29

  • Added batchPush() to IV8ValueArray

  • Fixed bug in JavetObjectConverter when converting a large Java array or list

  • Added getGetPriorities(), getSetPriorities() to ClassDescriptor

  • Added cancelTerminateExecution(), isExecutionTerminating() to V8Runtime

5.0.1

  • Upgraded Node.js to v24.10.0 (2025-10-08)

  • Upgraded V8 to v14.2.231.5 (2025-10-08)

  • Tweaked build scripts for better performance for V8 mode

5.0.0

  • Upgraded Node.js to v24.8.0 (2025-09-10)

  • Upgraded V8 to v14.1.146.11 (2025-09-22)

  • Upgraded Visual Studio 2022 to v17.14.15

  • Upgraded Android NDK to r27d

  • Switched from MSVC to Clang on Windows for Node.js mode

  • Switched from GCC to Clang on Linux for V8 mode

  • Fixed an extra latency in holding a lock in V8GuardDaemon

  • Renamed isExperimentalPermission() to isPermission() in NodeFlags

  • Renamed setExperimentalPermission() to setPermission() in NodeFlags

  • Removed temporal

  • Known issue: getNearHeapLimitCallback(), setNearHeapLimitCallback() break in Node.js mode