The firstengines forJavaScript were mereinterpreters of thesource code, but all relevant modern engines usejust-in-time compilation for improved performance.[1] JavaScript engines are typically developed byweb browser vendors, and every major browser has one. In a browser, the JavaScript engine runs in concert with therendering engine via theDocument Object Model andWeb IDL bindings.[2] However, the use of JavaScript engines is not limited to browsers; for example, theV8 engine is a core component of theNode.jsruntime system.[3] They are also calledECMAScript engines, after the official name of the specification. With the advent ofWebAssembly, some engines can also execute this code in the samesandbox as regular JavaScript code.[4][3]
The first JavaScript engine was created byBrendan Eich in 1995 for theNetscape Navigatorweb browser.[5] It was a rudimentaryinterpreter for the nascent language Eich invented.[6] (This evolved into theSpiderMonkey engine, still used by theFirefox browser.[5])Google debuted itsChrome browser in 2008, with theV8 JavaScript engine that was faster than its competition.[7][8] The key innovation wasjust-in-time compilation (JIT), whichMozilla had also been working on for SpiderMonkey.[9] Because of V8's performance, the other browser vendors needed to overhaul their engines for JIT.[10]Apple developed theNitro engine for itsSafari browser, which had 30% better performance than its predecessor.[11] Mozilla then leveraged portions of Nitro to improve SpiderMonkey.[12] Since 2017, these engines have added support forWebAssembly.[4]
Engine | Description |
---|---|
V8 | A JavaScript engine used inGoogle Chrome and otherChromium-based browsers (such asMicrosoft Edge). Also used inNode.js,Deno, and V8.NET. |
SpiderMonkey | A JavaScript engine in MozillaGecko applications, includingFirefox. The engine currently includes the IonMonkey compiler and OdinMonkey optimization module, has previously included the TraceMonkey compiler (first JavaScript JIT) and JägerMonkey. |
JavaScriptCore | A JavaScript interpreter and JIT originally derived fromKJS. It is used in theWebKit project, applications such asSafari, and theBun runtime. Also known as Nitro, SquirrelFish, and SquirrelFish Extreme.[13] |
KJS | The engine used inKonqueror, and one component ofKHTML, a predecessor to JavaScriptCore. |
JScript | The engine that is used inInternet Explorer for versions up to IE9, and one component of theMSHTML (Trident)browser engine. |
Chakra (JScript9) | AJScript engine used inInternet Explorer. It was first previewed atMIX 10 as part of the Internet Explorer 9 Platform Preview.[14] |
Chakra | AJavaScript engine used inMicrosoft Edge [Legacy].[15] |
Linear B | The ECMAScript engine of theOpera web browser versions 7.0 to 9.50, exclusive. |
Futhark | The ECMAScript engine of theOpera web browser versions 9.50 to 10.10. |
Carakan | A JavaScript engine developed byOpera Software ASA, included in the10.50 release of theOpera web browser, until switching toV8 with Opera 15 (released in 2013).[16][17][18] |
Graal.js | An ECMAScript compliant JavaScript engine forGraalVM which supports language interoperability that can also execute Node.js applications. |
Rhino | One of several JavaScript engines fromMozilla, using theJava platform. |
Nashorn | A JavaScript engine used inOracleJava Development Kit (JDK) from Java versions 8-14.[19] Now available as a standalone library which can be used with Java 11 and higher.[20] |
JScript .NET | A.NET FrameworkJScript engine used inASP.NET based onCommon Language Runtime andCOM Interop. Support was dropped with.NET Core andCoreCLR so its future looks questionable forASP.NET Core. |
Tamarin | AnActionScript and ECMAScript engine used inAdobe Flash. |
GNU Guile | features an ECMAScript interpreter as of version 1.9 |
iv | ECMAScript Lexer / Parser / Interpreter / VM / method JIT written in C++.[21] |
CL-JavaScript | Can compile JavaScript to machine language on Common Lisp implementations that compile to machine language.[22] |
BESEN | A complete JIT-compiling implementation of ECMAScript Fifth Edition written in Object Pascal.[23] |
Hermes | developed byFacebook forReact Native mobile apps[24] Can also be used independent from React Native. |
Continuum | Aself-interpreter that supports older drafts of the ECMAScript 2015 specification.[25] Uniquely, the engine is implemented in ECMAScript 3, which made it possible to run ES2015 in browsers as old as IE6.[26] |
InScript | An obsoleteproprietary library used foriCab 2 and 3. |
Jint | Javascript interpreter with integrated engine for .NET |
Narcissus | JavaScript implemented in JavaScript (ameta-circular evaluator), intended to run in another JavaScript engine, of theoretical and educational nature only. |
JS-Interpreter | A lightweight JavaScript interpreter implemented in JavaScript with step-by-step execution. |
QtScript | Originally developed by Trolltech, now owned byThe Qt Company. It provides QObject integration with JavaScriptCore. |
V4 (QJSEngine) | Qt's newer ECMAScript engine, powering QML and QtQuick. ES6-compliant and under active development atThe Qt Company. V4 is JIT compiled.[27] |
YAJI | An ECMAScript engine based on the FESI implementation by Jean-Marc Lugrin in 1999, using theJava platform, currently being developed to support the latest standards (ECMAScript spec. 262, v5.1).[28][29][30] |
Microvium | JavaScript engine for microcontrollers, supporting a restricted subset of the ECMAScript specification, using less than 16 kB of flash memory and 64 B of RAM while idle.[31] |
Duktape | A small footprint, easily embeddable Ecmascript E5/E5.1 engine.[32] |
XS JavaScript Engine | An ECMAScript 2020-compliant engine for microcontrollers with limited resources.[33][34] XS is maintained by Moddable as part of the Moddable SDK and was formerly part of theKinoma Platform.[35] |
Jsish | An ES5.1 subset interpreter with builtin SQLite, JSON, WebSocket, and ZVFS support.[36] |
Espruino | A very small footprint interpreter specifically formicrocontrollers. Can run in less than 8 kB of RAM by executing from source (rather thanbytecode). |
MuJS | A lightweight ECMAScript interpreter library, designed for embedding in other software to extend them with scripting capabilities. Originally developed forMuPDF.[37] |
mJS | Restricted JavaScript engine. Used for Internet of Things (IoT). |
Tiny-JS | A minimal JavaScript interpreter written in C++. |
JerryScript | A lightweight JavaScript engine by Samsung for microcontrollers with less than 64 KB RAM. |
njs | A lightweight JavaScript interpreter optimized for web server scripting and fastest VM context creation; used innginx.[38] |
quickjs | A lightweight ECMAScript 6 interpreter byFabrice Bellard and Charlie Gordon; it features a compiler to produce binary executable from .js. |
engine262 | A JavaScript engine written in JavaScript for development and exploration. It is primarily used to validate the ECMAScript specification. |
Boa | A JavaScript engine written inRust.[39][40] |
ScriptEase | An old proprietary engine last updated in 2003. Only notable for its use in theJames Webb Space Telescope.[41] |
LibJS | JavaScript engine of theSerenityOS andLadybird projects.[42] Initially it was an AST interpreter, but has been upgraded to a bytecode-based one.[43] |
Kiesel | JavaScript engine by Linus Groh written inZig.[44][45][46] |