More formally, an ECMAScript engine is, at least in part, a "conforming implementation" of the ECMAScript programming language specified by the ECMA-262 international standard.[1]
Many implementations of ECMAScript engines are available, which differ based on the platforms they are intended to support, their level of conformance, and other implementation-specific characteristics. This article attempts to provide a relatively comprehensive list of engines that execute ECMAScript code.
The uses of the listed engines vary widely; some of these are engines intended for browsers that can run ECMAScript code on websites that include ECMAScript, like V8 (used in both Google Chrome and Node.js) and SpiderMonkey; some are intended for specific platforms (like Tamarin, Espruino, Rhino, Nashorn, and GraalJS).
Browser engines
Web browsers that support JavaScript embed JavaScript engines in order to support JavaScript-enabled web pages. Different browsers use different engines, although there are now multiple browsers based on Chromium which use V8 as their JavaScript engine.
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.[2]
KJS: The engine used in Konqueror, and one component of KHTML, a predecessor to JavaScriptCore.
Obsolete browsers and engines
Some engines either power JavaScript in obsolete browsers (like Internet Explorer), or have subsequently been replaced (as the engine has in Opera, with its move to Chromium).
GNU Guile features an ECMAScript interpreter as of version 1.9
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.
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]
Jint: Javascript interpreter with integrated engine for .NET
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]
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 and Ladybird projects.[30] Initially it was an AST interpreter, but has been upgraded to a bytecode-based one.[31] At some point, the lead developer Andreas Kling added just-in-time compilation (for x86-64 architecture), but he later changed his mind and removed the mechanism,[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.