
Fabrice Bellard—the developer behind QEMU, FFmpeg, and TinyCC—released MicroQuickJS yesterday, a JavaScript engine that runs on microcontrollers with as little as 10KB of RAM. This makes JavaScript viable for embedded systems, IoT devices, and edge computing hardware where it was previously impractical. The entire engine requires just 100KB of ROM (ARM Thumb-2 code), a fraction of what browser engines like V8 or SpiderMonkey demand.
JavaScript dominates web and backend development, but memory requirements locked it out of embedded systems. With 18 billion IoT devices projected by end of 2025, MicroQuickJS enables millions of web developers to enter the embedded space without learning C or C++. That gap between web developers (millions) and embedded developers (thousands) just got smaller.
The 10x Developer Delivers Again
Bellard’s track record validates why developers pay attention when he releases code. QEMU made CPU emulation fast. FFmpeg standardized video encoding for the internet. TinyCC proved C compilation could be tiny. JSLinux ran Linux in a browser. Now MicroQuickJS makes JavaScript work on devices with less RAM than a 1990s calculator.
The Hacker News community’s reaction (632 points, 249 comments in 24 hours) captured the sentiment: “Whenever someone says there’s no such thing as a 10x programmer, I point them to Fabrice and they usually change their mind.” His GitHub repository gained over 1,000 stars within a day. This isn’t incremental improvement—it’s computer science fundamentals applied to solve constraints others accept as immovable.
Related: Meta Uses Steam Deck Linux Scheduler on Servers: BPF Win
How 10KB JavaScript Engine Works
MicroQuickJS achieves its minimal footprint through architectural innovations. A tracing garbage collector replaces reference counting. UTF-8 string storage saves space. The VM doesn’t use the CPU stack—critical for microcontrollers where stack space is scarce. The trade-off is ES5-level compatibility with stricter mode enforcement.
Modern JavaScript features like async/await, promises, and arrow functions don’t make the cut. The engine supports ES5 plus select extensions: for...of loops, typed arrays, and mathematical functions like Math.imul and Math.clz32. Stricter mode forbids error-prone constructs: no with keyword, no array holes, no value boxing, and only global eval (not direct).
Here’s what embedding looks like:
// Conceptual C API usage
JS_Context *ctx = JS_NewContext(runtime, memory_buffer);
JS_Eval(ctx, "let temp = readSensor(); if (temp > 75) { alert(); }", "<input>");
JS_FreeContext(ctx);
The memory comparison tells the story. V8 and SpiderMonkey require megabytes of RAM—nonstarters for microcontrollers. QuickJS needs hundreds of KB. MicroQuickJS runs in 10KB RAM plus 100KB ROM. That 5x+ reduction opens device categories that couldn’t run JavaScript before: ultra-low-power sensors, battery-operated IoT devices, industrial automation controllers.
Why Embedded JavaScript Matters Now
Edge computing is shifting processing from cloud to device. AI integration at the edge, low-power computing demands, and IoT security concerns all favor local processing. JavaScript on microcontrollers enables rapid prototyping and familiar tooling for the massive web developer population.
The embedded JavaScript ecosystem already includes alternatives: Espruino (runs in under 8KB RAM, more mature), JerryScript from Samsung (foundation of iot.js), and Duktape (ES5 engine focused on portability). MicroQuickJS enters as the freshest option from a developer whose reputation precedes him.
Use cases span ESP32 and Arduino programming, smart home devices (thermostats, lights, locks), edge AI processing for local inference, and industrial sensors for factory automation. Web developers can now prototype IoT applications in JavaScript, then optimize critical paths in C if needed. The learning curve from web to embedded just got less steep.
The Trade-Offs Are Real
ES5-only compatibility means most modern npm packages won’t work. Production maturity is unknown—the engine launched yesterday. No real-world deployments have validated stability or identified edge cases. Early adoption risk is high.
Developers flagged limitations in the Hacker News discussion: only Date.now() supported (no full Date API), limited RegExp capabilities, single-threaded execution only. For projects requiring ES6+ features, Moddable XS offers newer standards at the cost of larger memory footprint. For performance-critical real-time systems, C or Rust remain the better choice.
Bellard’s methodology emphasizes clean code with minimal dependencies. Developers noted that studying his QuickJS implementation inspired them to adopt single-file architecture patterns. This isn’t just efficient engineering—it’s educational code that demonstrates computer science principles without framework bloat.
Key Takeaways
- Fabrice Bellard proves 10x developers exist through impossible optimizations—MicroQuickJS makes JavaScript viable for microcontrollers with 10KB RAM, continuing his pattern from QEMU, FFmpeg, and TinyCC
- Architectural innovations (tracing garbage collector, UTF-8 strings, no CPU stack usage) achieve 5x+ memory reduction over QuickJS, opening embedded JavaScript to device categories previously locked to C/C++
- The gap between millions of web developers and thousands of embedded developers narrows—JavaScript on ESP32, Arduino, and IoT devices lowers the barrier for rapid prototyping and familiar tooling
- Trade-offs are honest: ES5 compatibility only, maturity unknown (released yesterday), npm packages mostly incompatible—choose based on actual constraints, not hype. Espruino and Moddable XS offer mature alternatives for different use cases
- With 18 billion IoT devices projected by end of 2025 and edge computing shifting processing to devices, embedded JavaScript fills a critical gap where memory efficiency matters more than modern language features










