{"slug": "microquickjs", "name": "MicroQuickJS", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "", "recommenders": 6, "commenters": 15, "warners": 1, "score": 5.271, "rising": -1.96, "first": "2025-12-23", "latest": "2026-02-27", "why": "provides a useful sandbox in that you can robustly limit both the memory and time allowed", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 6, "neutral": 7, "compare": 3, "warn": 1}, "spark": [0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "provides a useful sandbox in that you can robustly limit both the memory and time allowed", "kind": "", "icon": false, "domain": null, "github_repo": "github.com/bellard/mquickjs", "official_url": "https://github.com/bellard/mquickjs", "pricing": "", "aliases": ["MicroQuickJS"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 742088912, "item_id": 46380557, "url": "https://news.ycombinator.com/item?id=46380557", "by": "fcoury", "date": "2025-12-24", "version": null, "stance": "recommend", "quote": "if anyone plan on embedding it like I do", "excerpt": "Just published a rust wrapper if anyone plan on embedding it like I do: https://github.com/fcoury/mquickjs-rs", "context": "", "use_case": "", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 742033649, "item_id": 46377103, "url": "https://news.ycombinator.com/item?id=46377103", "by": "TimTheTinker", "date": "2025-12-24", "version": null, "stance": "recommend", "quote": "I for one would be would be very interested in a Redbean[0] implementation with MicroQuickJS instead of Lua", "excerpt": "I for one would be would be very interested in a Redbean[0] implementation with MicroQuickJS instead of Lua, though I lack the resources to create it myself. [0] https://redbean.dev/ - the single-file distributable web server built with Cosmopolitan as an \u03b1c\u03c4\u00b5\u03b1lly p\u03b4r\u03c4\u03b1bl\u03b5 \u03b5x\u03b5c\u00b5\u03c4\u03b1bl\u03b5", "context": "", "use_case": "", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 741950160, "item_id": 46371885, "url": "https://news.ycombinator.com/item?id=46371885", "by": "kettlecorn", "date": "2025-12-23", "version": null, "stance": "recommend", "quote": "It's pretty handy for things like untrusted user authored JS scripts", "excerpt": "Sandboxing. Figma for example used QuickJS, the prior version of the library this post is about, to sandbox user authored Javascript plugins: https://www.figma.com/blog/an-update-on-plugin-security/ It's pretty handy for things like untrusted user authored JS scripts that run on a user's client.", "context": "", "use_case": "Sandboxed embedded JavaScript", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 741898144, "item_id": 46368634, "url": "https://news.ycombinator.com/item?id=46368634", "by": "Imustaskforhelp", "date": "2025-12-23", "version": null, "stance": "recommend", "quote": "Simon although I find it interesting.", "excerpt": "Simon although I find it interesting. And I respect you in this field. I still feel like the reason people call out AI usage or downvote in this case is that in my honest opinion, it would be also more interesting to see people actually write the code and more so (maintain) it as well and create a whole community/github project around microquickjs wasm itself I read this post of yours https://simonwillison.net/2025/D", "context": "", "use_case": "", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 741893728, "item_id": 46368358, "url": "https://news.ycombinator.com/item?id=46368358", "by": "simonw", "date": "2025-12-23", "version": null, "stance": "recommend", "quote": "provides a useful sandbox in that you can robustly limit both the memory and time allowed", "excerpt": "Forget about the AI bit. Do you think it's interesting that MicroQuickJS can be used from Python via FFI or as a compiled module, and can also be compiled to WebAssembly and called from Node.js and Deno and from Pyodide running in a browser? ... and that it provides a useful sandbox in that you can robustly limit both the memory and time allowed, including limiting expensive regular expression evaluation? I included ", "context": "", "use_case": "sandboxed JavaScript execution", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}]}], "caveats": [{"label": "", "summary": "", "quotes": [{"id": 741934320, "item_id": 46370895, "url": "https://news.ycombinator.com/item?id=46370895", "by": "Reubend", "date": "2025-12-23", "version": null, "stance": "warn", "quote": "a lot of String functions I use are missing too", "excerpt": "Good catch. I didn't realize that there was a longer list of restrictions below the section called \"Stricter mode\", and it seems like a lot of String functions I use are missing too.", "context": "", "use_case": "", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}]}], "who": [], "tags": [], "use_cases": ["javascript runtime", "sandboxed embedded javascript", "embedded javascript engine", "sandboxed js execution", "embedded javascript", "sandboxed javascript execution"], "compared": [{"slug": "quickjs", "name": "QuickJS", "co": 6, "switched_from": 0, "switched_to": 0}, {"slug": "claude-code", "name": "Claude Code", "co": 4, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=46367224", "title": "Fabrice Bellard Releases MicroQuickJS", "mentions": 18}, {"url": "https://news.ycombinator.com/item?id=46318080", "title": "The Port I couldn't Ship", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=47184049", "title": "Let's Discuss Sandbox Isolation", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47015330", "title": "Vim 9.2 Released", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46574276", "title": "Don't fall into the anti-AI hype", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46394867", "title": "Rob Pike got spammed with an AI slop \"act of kindness\"", "mentions": 1}], "sentiment_by_month": {"2025-11": {}, "2025-12": {"recommend": 6, "neutral": 5, "compare": 2, "warn": 1}, "2026-01": {"neutral": 1}, "2026-02": {"compare": 1, "neutral": 1}, "2026-03": {}, "2026-04": {}, "2026-05": {}, "2026-06": {}, "2026-07": {}, "2026-08": {}, "2026-09": {}, "2026-10": {}}, "versions": [], "version_unnamed": 0, "family_ref": null, "runs_on": null, "lines": [], "quotes": [{"id": 754961682, "item_id": 47185105, "url": "https://news.ycombinator.com/item?id=47185105", "by": "simonw", "date": "2026-02-27", "version": null, "stance": "neutral", "quote": "I have one for MicroQuickJS too", "excerpt": "I disagree with this section about WebAssembly: > But the practical limitation is language support. You cannot run arbitrary Python scripts in WASM today without compiling the Python interpreter itself to WASM along with all its C extensions. For sandboxing arbitrary code in arbitrary languages, WASM is not yet viable. There are several versions of the Python interpreter that are compiled to WASM already - Pyodide ha", "context": "", "use_case": "", "switched_from": "", "story": "Let's Discuss Sandbox Isolation"}, {"id": 752266849, "item_id": 47016678, "url": "https://news.ycombinator.com/item?id=47016678", "by": "jitl", "date": "2026-02-14", "version": null, "stance": "compare", "quote": "quickjs/mquickjs are good at embedding but nowhere close to luajit in terms of speed", "excerpt": "quickjs/mquickjs are good at embedding but nowhere close to luajit in terms of speed. (i have some experience with quickjs https://github.com/justjake/quickjs-emscripten) as an aside i\u2019m curious how quickjs/mquickjs compares to mruby in speed and size. something to ponder", "context": "", "use_case": "", "switched_from": "", "story": "Vim 9.2 Released"}, {"id": 745315076, "item_id": 46582192, "url": "https://news.ycombinator.com/item?id=46582192", "by": "simonw", "date": "2026-01-11", "version": null, "stance": "neutral", "quote": "which started as a port of MicroQuickJS", "excerpt": "I wouldn't call these flawless but here you go: - https://github.com/simonw/denobox is a new Python library that gives you the ability to run arbitrary JavaScript and WASM in a sandbox provided by Deno, because it turns out a Python library can depend on deno these days. I built that on my phone in bed yesterday morning. - https://github.com/simonw/pwasm is a WebAssembly runtime written in pure Python with no depende", "context": "", "use_case": "", "switched_from": "", "story": "Don't fall into the anti-AI hype"}, {"id": 742427649, "item_id": 46401728, "url": "https://news.ycombinator.com/item?id=46401728", "by": "simonw", "date": "2025-12-27", "version": null, "stance": "neutral", "quote": "using MicroQuickJS as initial inspiration", "excerpt": "The hardest problem in computer science in 2025 is showing an AI cynic an example of LLM usage that they find impressive. How about this one? I had Claude Code run from my phone build a dependency-free JavaScript interpreter in Python, using MicroQuickJS as initial inspiration but later diverging from it on the road to passing its test suite: https://static.simonwillison.net/static/2025/claude-code-microjs/index.html", "context": "", "use_case": "", "switched_from": "", "story": "Rob Pike got spammed with an AI slop \"act of kindness\""}, {"id": 742120288, "item_id": 46382518, "url": "https://news.ycombinator.com/item?id=46382518", "by": "simonw", "date": "2025-12-24", "version": null, "stance": "neutral", "quote": "MicroQuickJS has 7, kind of", "excerpt": "MicroQuickJS has 7, kind of: https://github.com/bellard/mquickjs/tree/main/tests Though if you look in those files some of them run a ton of test functions and assertions. My new Python library executes copies of the tests from that mquickjs repo - but those only count as 7 of the 400+ other tests.", "context": "", "use_case": "", "switched_from": "", "story": "The Port I couldn't Ship"}, {"id": 742088912, "item_id": 46380557, "url": "https://news.ycombinator.com/item?id=46380557", "by": "fcoury", "date": "2025-12-24", "version": null, "stance": "recommend", "quote": "if anyone plan on embedding it like I do", "excerpt": "Just published a rust wrapper if anyone plan on embedding it like I do: https://github.com/fcoury/mquickjs-rs", "context": "", "use_case": "", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 742033649, "item_id": 46377103, "url": "https://news.ycombinator.com/item?id=46377103", "by": "TimTheTinker", "date": "2025-12-24", "version": null, "stance": "recommend", "quote": "I for one would be would be very interested in a Redbean[0] implementation with MicroQuickJS instead of Lua", "excerpt": "I for one would be would be very interested in a Redbean[0] implementation with MicroQuickJS instead of Lua, though I lack the resources to create it myself. [0] https://redbean.dev/ - the single-file distributable web server built with Cosmopolitan as an \u03b1c\u03c4\u00b5\u03b1lly p\u03b4r\u03c4\u03b1bl\u03b5 \u03b5x\u03b5c\u00b5\u03c4\u03b1bl\u03b5", "context": "", "use_case": "", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 742016561, "item_id": 46376035, "url": "https://news.ycombinator.com/item?id=46376035", "by": "simonw", "date": "2025-12-24", "version": null, "stance": "neutral", "quote": "the big unlock was the test suite from MicroQuickJS", "excerpt": "Funny to see this show up today since coincidentally I've had Claude code running for the past ~15 hours attempting to port MicroQuickJS to pure dependency-free Python, mainly as an experiment in how far a porting project can go but also because a sandboxed (memory constrained, to us time limits) JavaScript interpreter that runs in Python is something I really want to exist. I'm currently torn on whether to actually ", "context": "", "use_case": "", "switched_from": "", "story": "The Port I couldn't Ship"}, {"id": 742012288, "item_id": 46375768, "url": "https://news.ycombinator.com/item?id=46375768", "by": "kiririn", "date": "2025-12-24", "version": null, "stance": "compare", "quote": "", "excerpt": "I\u2019m always surprised people pick Lua when Pawn exists. I think I\u2019d even still choose it over MicroQuickJS https://www.compuphase.com/pawn/pawn.htm", "context": "", "use_case": "", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 741976752, "item_id": 46373547, "url": "https://news.ycombinator.com/item?id=46373547", "by": "julenx", "date": "2025-12-24", "version": null, "stance": "neutral", "quote": "", "excerpt": "Thanks for sharing! The link to the PR looks like a wrong paste. I found https://github.com/simonw/tools/pull/181 which seems to be what was intended to be shared instead.", "context": "", "use_case": "", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 741953152, "item_id": 46372072, "url": "https://news.ycombinator.com/item?id=46372072", "by": "throwaway290", "date": "2025-12-23", "version": null, "stance": "neutral", "quote": "", "excerpt": "The most important thing about any new JS runtime in 2025, how do I use it from JS? /s", "context": "", "use_case": "JavaScript runtime", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 741950160, "item_id": 46371885, "url": "https://news.ycombinator.com/item?id=46371885", "by": "kettlecorn", "date": "2025-12-23", "version": null, "stance": "recommend", "quote": "It's pretty handy for things like untrusted user authored JS scripts", "excerpt": "Sandboxing. Figma for example used QuickJS, the prior version of the library this post is about, to sandbox user authored Javascript plugins: https://www.figma.com/blog/an-update-on-plugin-security/ It's pretty handy for things like untrusted user authored JS scripts that run on a user's client.", "context": "", "use_case": "Sandboxed embedded JavaScript", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 741942128, "item_id": 46371383, "url": "https://news.ycombinator.com/item?id=46371383", "by": "simonw", "date": "2025-12-23", "version": null, "stance": "neutral", "quote": "Got it down from 229KB to 148KB!", "excerpt": "Nice. Got it down from 229KB to 148KB! Thanks for the tips. https://github.com/simonw/research/pull/5 Thats now live on https://tools.simonwillison.net/microquickjs", "context": "", "use_case": "", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 741938992, "item_id": 46371187, "url": "https://news.ycombinator.com/item?id=46371187", "by": "bmc7505", "date": "2025-12-23", "version": null, "stance": "neutral", "quote": "I wonder if mqjs would make it feasible to massively parallelize JavaScript on the GPU", "excerpt": "Interesting. I wonder if mqjs would make it feasible to massively parallelize JavaScript on the GPU. I\u2019m looking for a way to run thousands of simultaneous JS interpreters, each with an isolated heap and some shared memory. There are some research projects [1, 2] in this direction, but they are fairly experimental. [1]: https://github.com/SamGinzburg/VectorVisor [2]: https://github.com/beehive-lab/ProtonVM", "context": "", "use_case": "", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 741934320, "item_id": 46370895, "url": "https://news.ycombinator.com/item?id=46370895", "by": "Reubend", "date": "2025-12-23", "version": null, "stance": "warn", "quote": "a lot of String functions I use are missing too", "excerpt": "Good catch. I didn't realize that there was a longer list of restrictions below the section called \"Stricter mode\", and it seems like a lot of String functions I use are missing too.", "context": "", "use_case": "", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 741916240, "item_id": 46369765, "url": "https://news.ycombinator.com/item?id=46369765", "by": "sfpotter", "date": "2025-12-23", "version": null, "stance": "neutral", "quote": "", "excerpt": "C's support for modularity is actually rather strong. This PDF gives a good overview of the basic techniques available: http://www.metamodulaire.org/Computing/modular-c.pdf It may not be immediately obvious how to approach modularity since it isn't directly accomplished by explicit language features. But, once you know what you're doing, it's possible to write very large programs with good encapsulation, that span ma", "context": "", "use_case": "Embedded JavaScript engine", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 741915888, "item_id": 46369743, "url": "https://news.ycombinator.com/item?id=46369743", "by": "simonw", "date": "2025-12-23", "version": null, "stance": "compare", "quote": "The MicroQuickJS one loads 303 KB (120 KB transferred).", "excerpt": "If anyone wants to try out MicroQuickJS in a browser here's a simple playground interface for executing a WebAssembly compiled version of it: https://tools.simonwillison.net/microquickjs It's a variant of my QuickJS playground here: https://tools.simonwillison.net/quickjs The QuickJS page loads 2.28 MB (675 KB transferred). The MicroQuickJS one loads 303 KB (120 KB transferred).", "context": "", "use_case": "", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 741910433, "item_id": 46369402, "url": "https://news.ycombinator.com/item?id=46369402", "by": "simonw", "date": "2025-12-23", "version": null, "stance": "compare", "quote": "MicroQuickJS may be interesting as a smaller alternative", "excerpt": "I want to build features - both client- and server-side - where users can provide JavaScript code that I then execute safely. Just having a WebAssembly engine available isn't enough for this - something has to take that user-provided string of JavaScript and execute it within a safe sandbox. Generally that means you need a JavaScript interpreter that has itself been compiled to WebAssembly. I've experimented with Qui", "context": "", "use_case": "Sandboxed JS execution", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 741906689, "item_id": 46369168, "url": "https://news.ycombinator.com/item?id=46369168", "by": "cxr", "date": "2025-12-23", "version": null, "stance": "compare", "quote": "it's not a full implementation of even ES5, and it's incompatible in several ways.", "excerpt": "That's been possible with Moddable/Kinoma's XS engine, which is standards compliant with ES6 and beyond. <https://www.moddable.com/faq#comparison> If you take a look at the MicroQuickJS README, you can see that it's not a full implementation of even ES5, and it's incompatible in several ways. Just being able to run JS also isn't going to automatically give you any bindings for the environment.", "context": "", "use_case": "embedded JavaScript", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 741906336, "item_id": 46369146, "url": "https://news.ycombinator.com/item?id=46369146", "by": "MobiusHorizons", "date": "2025-12-23", "version": null, "stance": "neutral", "quote": "I certainly understand not shipping the js date library especially in an embedded environment", "excerpt": "I was surprised by this one that only showed up lower in the document: - Date: only Date.now() is supported. [0] I certainly understand not shipping the js date library especially in an embedded environment both for code-size, and practicality reasons (it's not a great date library), but that would be an issue in many projects (even if you don't use it, libraries yo use almost certainly do. https://github.com/bellard", "context": "", "use_case": "", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 741898144, "item_id": 46368634, "url": "https://news.ycombinator.com/item?id=46368634", "by": "Imustaskforhelp", "date": "2025-12-23", "version": null, "stance": "recommend", "quote": "Simon although I find it interesting.", "excerpt": "Simon although I find it interesting. And I respect you in this field. I still feel like the reason people call out AI usage or downvote in this case is that in my honest opinion, it would be also more interesting to see people actually write the code and more so (maintain) it as well and create a whole community/github project around microquickjs wasm itself I read this post of yours https://simonwillison.net/2025/D", "context": "", "use_case": "", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 741893728, "item_id": 46368358, "url": "https://news.ycombinator.com/item?id=46368358", "by": "simonw", "date": "2025-12-23", "version": null, "stance": "recommend", "quote": "provides a useful sandbox in that you can robustly limit both the memory and time allowed", "excerpt": "Forget about the AI bit. Do you think it's interesting that MicroQuickJS can be used from Python via FFI or as a compiled module, and can also be compiled to WebAssembly and called from Node.js and Deno and from Pyodide running in a browser? ... and that it provides a useful sandbox in that you can robustly limit both the memory and time allowed, including limiting expensive regular expression evaluation? I included ", "context": "", "use_case": "sandboxed JavaScript execution", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 741883408, "item_id": 46367713, "url": "https://news.ycombinator.com/item?id=46367713", "by": "simonw", "date": "2025-12-23", "version": null, "stance": "recommend", "quote": "MicroQuickJS looked like a very strong contender on that front", "excerpt": "Clarification added later: One of my key interests at the moment is finding ways to run untrusted code from users (or generated by LLMs) in a robust sandbox from a Python application. MicroQuickJS looked like a very strong contender on that front, so I fired up Claude Code to try that out and build some prototypes. I had Claude Code for web figure out how to run this in a bunch of different ways this morning - I have", "context": "", "use_case": "sandboxing untrusted code from Python", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}, {"id": 741877953, "item_id": 46367372, "url": "https://news.ycombinator.com/item?id=46367372", "by": "baudaux", "date": "2025-12-23", "version": null, "stance": "recommend", "quote": "So I need to do the same for MicroQuickJS", "excerpt": "I easily managed to build quickJS to WebAssembly for running in https://exaequOS.com . So I need to do the same for MicroQuickJS !", "context": "", "use_case": "", "switched_from": "", "story": "Fabrice Bellard Releases MicroQuickJS"}]}