These are new generation ECMAScript engines for web browsers, all implementing
just-in-time compilation (JIT) or variations of that idea. The performance benefits for just-in-time compilation make it much more suitable for web applications written in
JavaScript.
SpiderMonkey: A JavaScript engine in Mozilla
Gecko applications, including
Firefox. 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 from
KJS. It is used in the
WebKit project and applications such as
Safari. Also known as Nitro, SquirrelFish, and SquirrelFish Extreme.[7]
iv, ECMAScript Lexer / Parser / Interpreter / VM / method JIT written in C++.[9]
CL-JavaScript: Can compile JavaScript to machine language on Common Lisp implementations that compile to machine language.[10]
BESEN: A complete JIT-compiling implementation of ECMAScript Fifth Edition written in Object Pascal.[11]
Hermes: developed by
Facebook for
React Native mobile apps[12] Can also be used independent from React Native.
Graal.js: An ECMAScript compliant JavaScript engine for
GraalVM which supports language interoperability that can also execute Node.js applications.
Runtime interpreter engines
The following engines use runtime interpreters, which do not compile into native machine code and generally run more slowly:
Continuum: A
self-interpreter that supports older drafts of the ECMAScript 2015 specification.[13] Uniquely, the engine is implemented in ECMAScript 3, which made it possible to run ES2015 in browsers as old as IE6.[14]
Futhark: The ECMAScript engine of the
Opera web browser versions 9.50 to 10.10.
Jint: Javascript interpreter with integrated engine for .NET
KJS: The engine used in
Konqueror, and one component of
KHTML, a predecessor to JavaScriptCore.
Linear B: The ECMAScript engine of the
Opera web browser versions 7.0 to 9.50, exclusive.
Narcissus: JavaScript implemented in JavaScript (a
meta-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 by
The 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 at
The Qt Company. V4 is JIT compiled.[15]
YAJI: An ECMAScript engine based on the FESI implementation by Jean-Marc Lugrin in 1999, using the
Java platform, currently being developed to support the latest standards (ECMAScript spec. 262, v5.1).[16][17][18]
Microvium: JavaScript engine for microcontrollers, supporting a restricted subset of the ECMAScript specification, using less than 16kB of flash memory and 64B of RAM while idle.[19]
Duktape: A small footprint, easily embeddable Ecmascript E5/E5.1 engine.[20]
XS JavaScript Engine: An ECMAScript 2020-compliant engine for microcontrollers with limited resources.[21][22] XS is maintained by Moddable as part of the Moddable SDK and was formerly part of the
Kinoma Platform.[23]
Jsish: An ES5.1 subset interpreter with builtin SQLite, JSON, WebSocket, and ZVFS support.[24]
Espruino: A very small footprint interpreter specifically for
microcontrollers. Can run in less than 8 kB of RAM by executing from source (rather than
bytecode).
MuJS: A lightweight ECMAScript interpreter library, designed for embedding in other software to extend them with scripting capabilities. Originally developed for
MuPDF.[25]
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 in
nginx.[26]
QuickJS: A lightweight ECMAScript 6 interpreter by
Fabrice Bellard and Charlie Gordon.
engine262: A JavaScript engine written in JavaScript for development and exploration. It is primarily used to validate the ECMAScript specification.
ScriptEase: an old proprietary engine last updated in 2003. Only notable for its use in the
James Webb Space Telescope.[29]
LibJS: JavaScript engine of the SerenityOS project.[30] Initially it was only an AST interpreter, but has in parallel developed a byte code generator and interpreter. As of June 30th 2023 the byte code runtime is close to feature parity, and scored 86.4% on the test262 test suite.[31] At some point, the developer
Andreas Kling was working on porting it to
Just-in-time compilation, but he later changed his mind[32], citing development/debugging issues while also saying that he is interested to see how far utility and usability of the engine can go without it.
These are new generation ECMAScript engines for web browsers, all implementing
just-in-time compilation (JIT) or variations of that idea. The performance benefits for just-in-time compilation make it much more suitable for web applications written in
JavaScript.
SpiderMonkey: A JavaScript engine in Mozilla
Gecko applications, including
Firefox. 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 from
KJS. It is used in the
WebKit project and applications such as
Safari. Also known as Nitro, SquirrelFish, and SquirrelFish Extreme.[7]
iv, ECMAScript Lexer / Parser / Interpreter / VM / method JIT written in C++.[9]
CL-JavaScript: Can compile JavaScript to machine language on Common Lisp implementations that compile to machine language.[10]
BESEN: A complete JIT-compiling implementation of ECMAScript Fifth Edition written in Object Pascal.[11]
Hermes: developed by
Facebook for
React Native mobile apps[12] Can also be used independent from React Native.
Graal.js: An ECMAScript compliant JavaScript engine for
GraalVM which supports language interoperability that can also execute Node.js applications.
Runtime interpreter engines
The following engines use runtime interpreters, which do not compile into native machine code and generally run more slowly:
Continuum: A
self-interpreter that supports older drafts of the ECMAScript 2015 specification.[13] Uniquely, the engine is implemented in ECMAScript 3, which made it possible to run ES2015 in browsers as old as IE6.[14]
Futhark: The ECMAScript engine of the
Opera web browser versions 9.50 to 10.10.
Jint: Javascript interpreter with integrated engine for .NET
KJS: The engine used in
Konqueror, and one component of
KHTML, a predecessor to JavaScriptCore.
Linear B: The ECMAScript engine of the
Opera web browser versions 7.0 to 9.50, exclusive.
Narcissus: JavaScript implemented in JavaScript (a
meta-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 by
The 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 at
The Qt Company. V4 is JIT compiled.[15]
YAJI: An ECMAScript engine based on the FESI implementation by Jean-Marc Lugrin in 1999, using the
Java platform, currently being developed to support the latest standards (ECMAScript spec. 262, v5.1).[16][17][18]
Microvium: JavaScript engine for microcontrollers, supporting a restricted subset of the ECMAScript specification, using less than 16kB of flash memory and 64B of RAM while idle.[19]
Duktape: A small footprint, easily embeddable Ecmascript E5/E5.1 engine.[20]
XS JavaScript Engine: An ECMAScript 2020-compliant engine for microcontrollers with limited resources.[21][22] XS is maintained by Moddable as part of the Moddable SDK and was formerly part of the
Kinoma Platform.[23]
Jsish: An ES5.1 subset interpreter with builtin SQLite, JSON, WebSocket, and ZVFS support.[24]
Espruino: A very small footprint interpreter specifically for
microcontrollers. Can run in less than 8 kB of RAM by executing from source (rather than
bytecode).
MuJS: A lightweight ECMAScript interpreter library, designed for embedding in other software to extend them with scripting capabilities. Originally developed for
MuPDF.[25]
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 in
nginx.[26]
QuickJS: A lightweight ECMAScript 6 interpreter by
Fabrice Bellard and Charlie Gordon.
engine262: A JavaScript engine written in JavaScript for development and exploration. It is primarily used to validate the ECMAScript specification.
ScriptEase: an old proprietary engine last updated in 2003. Only notable for its use in the
James Webb Space Telescope.[29]
LibJS: JavaScript engine of the SerenityOS project.[30] Initially it was only an AST interpreter, but has in parallel developed a byte code generator and interpreter. As of June 30th 2023 the byte code runtime is close to feature parity, and scored 86.4% on the test262 test suite.[31] At some point, the developer
Andreas Kling was working on porting it to
Just-in-time compilation, but he later changed his mind[32], citing development/debugging issues while also saying that he is interested to see how far utility and usability of the engine can go without it.