A lightweight, modular JavaScript engine written in Rust with a focus on embeddability and data-oriented design.
Nova is a JavaScript engine implemented in Rust, designed to be embedded into Rust applications as a library. It focuses on being lightweight and modular, with an architecture that closely follows the ECMAScript specification while using data-oriented design principles. The engine provides a Rust API for executing JavaScript code within a Rust runtime environment.
Rust developers who need to embed JavaScript execution capabilities into their applications, particularly those prioritizing small memory footprints and easy integration over maximum performance.
Developers choose Nova for its embeddability, clean Rust API, and innovative data-oriented design that differs from traditional JavaScript engines. It offers a memory-efficient alternative for use cases where full-featured engines like V8 are unnecessary.
JS engine lolz
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Minimizes heap allocations for common JavaScript patterns, optimizing for TypeScript-typed code to reduce memory usage in embedded environments.
Provides a clean Rust API with WTF-8 string encoding, making it easy to embed for one-off script runs or call-and-return use cases without complex setup.
Uses data-oriented design with homogeneous arenas and heap compaction to improve cache locality and memory efficiency, as highlighted in the architecture docs.
Leverages Rust's reborrowing mechanics for a safepoint garbage collector that integrates safely with the borrow checker, reducing memory safety risks.
Prioritizes memory footprint over speed; the README admits performance is acceptable but not fast and is not a high priority, making it unsuitable for compute-intensive tasks.
Lacks key ECMAScript features like RegExp lookaheads/lookbehinds and Promise subclassing, with the README noting non-compliance in regex implementation.
Array implementation does not support sparse storage, so creating large arrays allocates memory for all elements, wasting resources in edge cases.
Cannot execute WebAssembly, limiting use in environments that require both JavaScript and WASM, as explicitly stated in the shortcomings.