https://github.com/trynova/nova Skip to content Navigation Menu Toggle navigation Sign in * Product + GitHub Copilot Write better code with AI + Security Find and fix vulnerabilities + Actions Automate any workflow + Codespaces Instant dev environments + Issues Plan and track work + Code Review Manage code changes + Discussions Collaborate outside of code + Code Search Find more, search less Explore + All features + Documentation + GitHub Skills + Blog * Solutions By company size + Enterprises + Small and medium teams + Startups By use case + DevSecOps + DevOps + CI/CD + View all use cases By industry + Healthcare + Financial services + Manufacturing + Government + View all industries View all solutions * Resources Topics + AI + DevOps + Security + Software Development + View all Explore + Learning Pathways + White papers, Ebooks, Webinars + Customer Stories + Partners * Open Source + GitHub Sponsors Fund open source developers + The ReadME Project GitHub community articles Repositories + Topics + Trending + Collections * Enterprise + Enterprise platform AI-powered developer platform Available add-ons + Advanced Security Enterprise-grade security features + GitHub Copilot Enterprise-grade AI features + Premium Support Enterprise-grade 24/7 support * Pricing Search or jump to... Search code, repositories, users, issues, pull requests... Search [ ] Clear Search syntax tips Provide feedback We read every piece of feedback, and take your input very seriously. [ ] [ ] Include my email address so I can be contacted Cancel Submit feedback Saved searches Use saved searches to filter your results more quickly Name [ ] Query [ ] To see all available qualifiers, see our documentation. Cancel Create saved search Sign in Sign up Reseting focus You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert {{ message }} trynova / nova Public * Notifications You must be signed in to change notification settings * Fork 28 * Star 620 JS engine lolz trynova.dev/ License MPL-2.0 license 620 stars 28 forks Branches Tags Activity Star Notifications You must be signed in to change notification settings * Code * Issues 56 * Pull requests 10 * Actions * Projects 0 * Security * Insights Additional navigation options * Code * Issues * Pull requests * Actions * Projects * Security * Insights trynova/nova main BranchesTags [ ] Go to file Code Folders and files Name Name Last commit Last commit message date Latest commit History 427 Commits .cargo .cargo .github/workflows .github/workflows common common nova_cli nova_cli nova_vm nova_vm small_string small_string tests tests .editorconfig .editorconfig .gitignore .gitignore .gitmodules .gitmodules ARCHITECTURE.md ARCHITECTURE.md CONTRIBUTING.md CONTRIBUTING.md Cargo.toml Cargo.toml LICENSE.md LICENSE.md README.md README.md _typos.toml _typos.toml rust-toolchain.toml rust-toolchain.toml View all files Repository files navigation * README * MPL-2.0 license Nova - Your favorite javascript and wasm engine [?][?] This project is a Work In Progress, and is very far from being suitable for use [?][?] Nova is a JavaScript and WebAssembly engine written in Rust. The engine is exposed as a library with an API for implementation in Rust projects which themselves must serve as a runtime for JavaScript code. The execution model is currently greatly inspired by Kiesel and SerenityOS's LibJS. See the code for more details. The core of our team is on our Discord server. Talks Nova Engine - Building a DOD JS Engine in Rust @ Finland Rust-lang meetup 1/2024 Slides: Google Drive Presented at the Finland Rust-lang group's January meetup, 2024. Focus on how JavaScript engines work in general, and what sort of design choices Nova makes in this context. Nova JavaScript Engine - Exploring a Data-Oriented Engine Design @ Web Engines Hackfest 2024 Slides: Google Drive Presented at the Web Engines Hackfest, 2024. Focus on the details of why a data-oriented engine design is interesting, what sort of benefits it gives and what sort of costs it has. Explores the engine at a slightly deeper level. The talk was revisited at the TC39 June meeting, 2024. No video is available, but the slightly modified slides are. TC39 slides: Google Drive Architecture The architecture of the engine follows the ECMAScript specification in spirit, but uses data-oriented design for the actual implementation. Records that are present in the specification are likely present in the Nova engine as well and they're likely found in an "equivalent" file / folder path as the specification defines them in. Where the engine differs from the specification is that most ECMAScript types and specification Record types are defined "twice": They have one "heap data" definition, and another "index" definition. The heap data definition generally corresponds to the specification's definition, in some degree at least. The index definition is either a wrapper around u32 or a NonZeroU32. Most spec defined methods are defined on the index definitions (this avoids issues with borrowing). The only case when direct "Record type A contains Record type B" ownership is used is when there can be only one referrer to the Record type B. Heap structure - Data-oriented design Reading the above, you might be wondering why the double-definitions and all that. The ultimate reason is two-fold: 1. It is an interesting design. 2. It helps the computer make frequently used things fast while allowing the infrequently used things to become slow. Data-oriented design is all the rage on the Internet because of its cache-friendliness. This engine is one more attempt at seeing what sort of real-world benefits one might gain with this sort of architecture. If you find yourself interested in where the idea spawns from and why, take a look at the Heap README.md. It gives a more thorough walkthrough of the Heap structure and what the idea there is. Contributing So you wish to contribute, eh? You're very welcome to do so! Please take a look at the CONTRIBUTING.md. About JS engine lolz trynova.dev/ Topics javascript data-oriented-design javascript-engine Resources Readme License MPL-2.0 license Activity Custom properties Stars 620 stars Watchers 4 watching Forks 28 forks Report repository Contributors 14 * @aapoalas * @andreubotella * @MierenManz * @eliassjogreen * @sno2 * @load1n9 * @marc2332 * @ivandevp * @oscarotero * @lino-levan * @littledivy * @thegreatercurve * @Andoryuuta * @DonIsaac Languages * Rust 99.9% * JavaScript 0.1% Footer (c) 2024 GitHub, Inc. Footer navigation * Terms * Privacy * Security * Status * Docs * Contact * Manage cookies * Do not share my personal information You can't perform that action at this time.