JavaScript
Runtimes
Runtimes are environments where JavaScript code executes, in or out of browsers.
- Browser
- V8 used by Google Chrome
- SpiderMonkey by Firefox
- JavaScriptCore by Apple Safari
- nodejs/node (0): The OG built on V8, still widely used by most
- denoland/deno (0): A reboot by Ryan Dahl (the creator of Node.js). Not entirely compatible with Node.js.
- oven-sh/bun (0)
Node.js | Deno | Bun | Browser | |
---|---|---|---|---|
Engine | V8 | V8 + Rust | JavaScriptCore (JSC) | V8 / JSC / SpiderMonkey |
Language | C++ | Rust | Zig | C++ / C |
TypeScript Support | ❌ (via transpiler) | ✅ (native) | ✅ (native) | ❌ (via bundler) |
Built-in Tools | ❌ | ✅ formatter, test, lint | ✅ bundler, transpiler, test | ❌ |
Permissions Security | ❌ | ✅ secure by default | ❌ | ✅ sandboxed |
Performance | Medium | Medium | Fast | Medium |
CommonJS vs. ES Modules (ESM)
CommonJS | ES Modules | |
---|---|---|
Import | const fs = require("fs"); | import fs from "fs"; |
Export | module.exports = { fs }; | export { fs }; |
All modern browsers, and Node.js 12+ now support ES Modules. CommonJS and extension .cjs
should be avoided in favor of ES Modules and extension .mjs
whenever possible.