{"slug": "luajit", "name": "LuaJIT", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "", "recommenders": 3, "commenters": 22, "warners": 4, "score": 1.507, "rising": -0.98, "first": "2025-11-24", "latest": "2026-08-17", "why": "It's still a great backend, even for a statically typed language, and the FFI and debugger features are very useful.", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 3, "neutral": 13, "compare": 3, "warn": 4}, "spark": [0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "It's still a great backend, even for a statically typed language, and the FFI and debugger features are very useful.", "kind": "", "icon": true, "domain": "luajit.org", "github_repo": null, "official_url": "https://luajit.org", "pricing": "", "aliases": ["LuaJIT"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 772969552, "item_id": 48310597, "url": "https://news.ycombinator.com/item?id=48310597", "by": "Rochus", "date": "2026-05-28", "version": null, "stance": "recommend", "quote": "It's still a great backend, even for a statically typed language, and the FFI and debugger features are very useful.", "excerpt": "Cool. It's still a great backend, even for a statically typed language, and the FFI and debugger features are very useful. Mono is yet another great backend which in addition supports multiple threads and has the higher performance, but with a (slightly) higher footprint. I have used both in different projects (see e.g. https://github.com/rochus-keller/Oberon or https://github.com/rochus-keller/Luon), and currently I", "context": "builds language compilers", "use_case": "compiler backend", "switched_from": "", "story": "The Green Side of the Lua"}, {"id": 769901553, "item_id": 48118847, "url": "https://news.ycombinator.com/item?id=48118847", "by": "strenholme", "date": "2026-05-13", "version": null, "stance": "recommend", "quote": "I could increase performance by using LuaJIT", "excerpt": "Agreed, it made a lot more sense to write MaraDNS in C in 2001 though. The main advantage of writing in C over Rust here in 2026 is that C has two different Lua interpreters, and there isn\u2019t a port of Lua to Rust yet; [1] yes, there are ways to use the C version of Lua in Rust, but that\u2019s different. If I were to write a new server today, I could very well write it in Go, then use GopherLua for the Lua engine: https:/", "context": "", "use_case": "", "switched_from": "", "story": "CERT is releasing six CVEs for serious security vulnerabilities in dnsmasq"}, {"id": 766708320, "item_id": 47919270, "url": "https://news.ycombinator.com/item?id=47919270", "by": "krapp", "date": "2026-04-27", "version": null, "stance": "recommend", "quote": "and LuaJIT, which has plugins that improve the performance of strings and tables", "excerpt": "I absolutely do think more people need to use Lua, especially for config. The language does have some rough edges (what language doesn't) but I always suggest Lua tables whenever a thread about JSON and its discontents comes around. It's minimalistic, it allows for comments, you don't have to quote strings. You do have to avoid the temptation to add logic. That said I'm probably too old school but I really still pref", "context": "", "use_case": "", "switched_from": "", "story": "Lua can be a cool HTML templating engine"}]}], "caveats": [{"label": "", "summary": "", "quotes": [{"id": 773875104, "item_id": 48367194, "url": "https://news.ycombinator.com/item?id=48367194", "by": "bandrami", "date": "2026-06-02", "version": null, "stance": "warn", "quote": "LuaJIT in particular still has build problems on WoA", "excerpt": "I just got one of the lighter Snapdragon surface laptops and the software ecosystem is still hit and miss. LuaJIT in particular still has build problems on WoA and that's unfortunately upstream of a lot of stuff I use day-to-day. The NPU is apparently neat if you're into LLMs (it can allegedly run gemma) but that's not my thing.", "context": "", "use_case": "", "switched_from": "", "story": "MacBook Pro Rival with the Nvidia Powered Surface Laptop Ultra"}, {"id": 772050848, "item_id": 48253178, "url": "https://news.ycombinator.com/item?id=48253178", "by": "krapp", "date": "2026-05-23", "version": null, "stance": "warn", "quote": "LuaJIT is frozen at Lua 5.1 with some extensions for 5,2", "excerpt": "My suggestions, none of which are particularly simple but it's C, you get what you get with a language that doesn't even know what strings and arrays are: 0) use Lua with LuaJIT. It has very good C interop and native hashmaps. Downside - Lua has its own rough edges and LuaJIT is frozen at Lua 5.1 with some extensions for 5,2 1) SDL3 has a hashmap implementation with its properties API, and a general purpose hashmap t", "context": "", "use_case": "", "switched_from": "", "story": "PHP's Oddities"}, {"id": 752282400, "item_id": 47017650, "url": "https://news.ycombinator.com/item?id=47017650", "by": "lloeki", "date": "2026-02-14", "version": null, "stance": "warn", "quote": "Isn't LuaJIT kind of a dead end?", "excerpt": "Isn't LuaJIT kind of a dead end? Also Ruby has been getting quite fast since YJIT (and now ZJIT): https://railsatscale.com/2023-08-29-ruby-outperforms-c/", "context": "", "use_case": "", "switched_from": "", "story": "Vim 9.2 Released"}, {"id": 741985952, "item_id": 46374122, "url": "https://news.ycombinator.com/item?id=46374122", "by": "snvzz", "date": "2025-12-24", "version": null, "stance": "warn", "quote": "Still waiting[0][1] for proper RISC-V support.", "excerpt": "Still waiting[0][1] for proper RISC-V support. 0. https://github.com/LuaJIT/LuaJIT/issues/628 1. https://github.com/LuaJIT/LuaJIT/pull/1267", "context": "", "use_case": "", "switched_from": "", "story": "Lua 5.5"}]}], "who": [{"by": "Rochus", "context": "builds language compilers", "url": "https://news.ycombinator.com/item?id=48310597", "date": "2026-05-28"}], "tags": [], "use_cases": ["compiler backend", "jit compiler optimizer", "ffi c interop"], "compared": [{"slug": "lua", "name": "Lua", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "mono", "name": "Mono", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "quickjs", "name": "QuickJS", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=46354674", "title": "Lua 5.5", "mentions": 4}, {"url": "https://news.ycombinator.com/item?id=48367907", "title": "Why Janet?", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=48262160", "title": "The Green Side of the Lua", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=47015330", "title": "Vim 9.2 Released", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=49310128", "title": "Xorshift Generators", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=49165164", "title": "Lde 0.10.0 \u2013 LuaJIT written, all in one, package manager and runtime", "mentions": 1}], "sentiment_by_month": {"2025-11": {"neutral": 1}, "2025-12": {"neutral": 5, "warn": 1}, "2026-01": {"neutral": 1}, "2026-02": {"neutral": 1, "compare": 1, "warn": 1}, "2026-03": {}, "2026-04": {"recommend": 1}, "2026-05": {"recommend": 2, "warn": 1}, "2026-06": {"warn": 1, "compare": 2, "neutral": 2}, "2026-07": {"neutral": 1}, "2026-08": {"neutral": 2}, "2026-09": {}, "2026-10": {}}, "versions": [], "version_unnamed": 0, "family_ref": null, "runs_on": null, "lines": [], "quotes": [{"id": 789422624, "item_id": 49338914, "url": "https://news.ycombinator.com/item?id=49338914", "by": "delduca", "date": "2026-08-17", "version": null, "stance": "neutral", "quote": "I use LuaJIT.", "excerpt": "Good to know. I use LuaJIT. But in any case I reverted that, befitting the overhead from my solution to Lua\u2019s native was big.", "context": "", "use_case": "", "switched_from": "", "story": "Xorshift Generators"}, {"id": 786642644, "item_id": 49165165, "url": "https://news.ycombinator.com/item?id=49165165", "by": "oncelock", "date": "2026-08-04", "version": null, "stance": "neutral", "quote": "written entirely from scratch in LuaJIT using FFI", "excerpt": "After months of work, I'm happy to release `0.10.0`. It comes with LuaJIT v3's new syntax, parallel installs, <1ms startup time, and a full Windows compiler suite allowing you to compile luarocks packages effortlessly. > What is lde? It is your *l*ua *d*evelopment *e*nvironment that ensures *l*ua is *d*one *e*asy. It provides a package manager that can run your code, bundle it to a single lua file, or to a portable e", "context": "", "use_case": "", "switched_from": "", "story": "Lde 0.10.0 \u2013 LuaJIT written, all in one, package manager and runtime"}, {"id": 785525536, "item_id": 49095346, "url": "https://news.ycombinator.com/item?id=49095346", "by": "purplesyringa", "date": "2026-07-29", "version": null, "stance": "neutral", "quote": "but not under LuaJIT", "excerpt": "That's interesting! On my PC it reproduces under Lua 5.5 (`log_a x > log_b x`), but not under LuaJIT (`log_a x = log_b x`). I took a look at LuaJIT's implementation (https://github.com/LuaJIT/LuaJIT/blob/faaf663340347a78b22ed94c63c24fe090bd9784/src/lib_math.c#L58) and noticed that it always uses the `ln x / ln a` formula -- or, rather, `log_2 x / log_2 a`, which is just as correct I guess. Have you perhaps misinterpr", "context": "", "use_case": "", "switched_from": "", "story": "Log is non-monotonic in PHP and Lua"}, {"id": 778692256, "item_id": 48668266, "url": "https://news.ycombinator.com/item?id=48668266", "by": "omoikane", "date": "2026-06-24", "version": null, "stance": "neutral", "quote": "Looks like LuaJIT is catching up, but calling these \"syntax extensions\" is confusing.", "excerpt": "Lua 5.3 (2015-01-12) added the bitwise operators: https://www.lua.org/versions.html#5.3 https://www.lua.org/manual/5.3/manual.html#3.4.2 Looks like LuaJIT is catching up, but calling these \"syntax extensions\" is confusing. Is the intent to hold LuaJIT fixed against some earlier Lua version (I guess 5.1) and adopt newer syntax piecemeal? I welcome the compound assignment operators. Playdate's version of Lua also has t", "context": "", "use_case": "", "switched_from": "", "story": "LuaJIT 3.0 proposed syntax extensions"}, {"id": 774310176, "item_id": 48394386, "url": "https://news.ycombinator.com/item?id=48394386", "by": "shakna", "date": "2026-06-03", "version": null, "stance": "compare", "quote": "Luajit and SBCL are very much performance competitive with the JVM?", "excerpt": "Luajit and SBCL are very much performance competitive with the JVM? Why do you say that they're not? Random example benchmark: https://madnight.github.io/benchmarksgame/lisp.html", "context": "", "use_case": "", "switched_from": "", "story": "Elixir v1.20 released: now a gradually typed language"}, {"id": 774026304, "item_id": 48376644, "url": "https://news.ycombinator.com/item?id=48376644", "by": "radiator", "date": "2026-06-02", "version": null, "stance": "neutral", "quote": "I gather that some features will be added to 2.1 but others only to 3.0", "excerpt": "Relevant issue #1457 VM instrumentation for third-party tools https://github.com/LuaJIT/LuaJIT/issues/1457 was opened by Mike Pall as recently as three weeks ago. I gather that some features will be added to 2.1 but others only to 3.0.", "context": "", "use_case": "", "switched_from": "", "story": "Why Janet?"}, {"id": 773974688, "item_id": 48373418, "url": "https://news.ycombinator.com/item?id=48373418", "by": "veqq", "date": "2026-06-02", "version": null, "stance": "compare", "quote": "about 30% slower than Fennel on LuaJit", "excerpt": "In my tests, it's 5-10x Python for long running things (about 30% slower than Fennel on LuaJit) but for small things, because you can easily shift work to compile time, it beats normal Go: https://codeberg.org/veqq/verse-reader#performance", "context": "", "use_case": "", "switched_from": "", "story": "Why Janet?"}, {"id": 773875104, "item_id": 48367194, "url": "https://news.ycombinator.com/item?id=48367194", "by": "bandrami", "date": "2026-06-02", "version": null, "stance": "warn", "quote": "LuaJIT in particular still has build problems on WoA", "excerpt": "I just got one of the lighter Snapdragon surface laptops and the software ecosystem is still hit and miss. LuaJIT in particular still has build problems on WoA and that's unfortunately upstream of a lot of stuff I use day-to-day. The NPU is apparently neat if you're into LLMs (it can allegedly run gemma) but that's not my thing.", "context": "", "use_case": "", "switched_from": "", "story": "MacBook Pro Rival with the Nvidia Powered Surface Laptop Ultra"}, {"id": 772971617, "item_id": 48310726, "url": "https://news.ycombinator.com/item?id=48310726", "by": "Rochus", "date": "2026-05-28", "version": null, "stance": "compare", "quote": "V8 was significantly faster than LuaJIT", "excerpt": "V8 was significantly faster than LuaJIT when I did measurements in 2021 (see https://github.com/rochus-keller/Oberon/blob/master/testcases/Are-we-fast-yet/Are-we-fast-yet_results_linux.pdf). Sure there are microbenchmarks where LuaJIT performs equally well or even faster, but overall (geomean of factors) V8 was 2.5 times faster. This comes with a price though. If you're interested in performance, Mono was equally fas", "context": "", "use_case": "", "switched_from": "", "story": "The Green Side of the Lua"}, {"id": 772969552, "item_id": 48310597, "url": "https://news.ycombinator.com/item?id=48310597", "by": "Rochus", "date": "2026-05-28", "version": null, "stance": "recommend", "quote": "It's still a great backend, even for a statically typed language, and the FFI and debugger features are very useful.", "excerpt": "Cool. It's still a great backend, even for a statically typed language, and the FFI and debugger features are very useful. Mono is yet another great backend which in addition supports multiple threads and has the higher performance, but with a (slightly) higher footprint. I have used both in different projects (see e.g. https://github.com/rochus-keller/Oberon or https://github.com/rochus-keller/Luon), and currently I", "context": "builds language compilers", "use_case": "compiler backend", "switched_from": "", "story": "The Green Side of the Lua"}, {"id": 772050848, "item_id": 48253178, "url": "https://news.ycombinator.com/item?id=48253178", "by": "krapp", "date": "2026-05-23", "version": null, "stance": "warn", "quote": "LuaJIT is frozen at Lua 5.1 with some extensions for 5,2", "excerpt": "My suggestions, none of which are particularly simple but it's C, you get what you get with a language that doesn't even know what strings and arrays are: 0) use Lua with LuaJIT. It has very good C interop and native hashmaps. Downside - Lua has its own rough edges and LuaJIT is frozen at Lua 5.1 with some extensions for 5,2 1) SDL3 has a hashmap implementation with its properties API, and a general purpose hashmap t", "context": "", "use_case": "", "switched_from": "", "story": "PHP's Oddities"}, {"id": 769901553, "item_id": 48118847, "url": "https://news.ycombinator.com/item?id=48118847", "by": "strenholme", "date": "2026-05-13", "version": null, "stance": "recommend", "quote": "I could increase performance by using LuaJIT", "excerpt": "Agreed, it made a lot more sense to write MaraDNS in C in 2001 though. The main advantage of writing in C over Rust here in 2026 is that C has two different Lua interpreters, and there isn\u2019t a port of Lua to Rust yet; [1] yes, there are ways to use the C version of Lua in Rust, but that\u2019s different. If I were to write a new server today, I could very well write it in Go, then use GopherLua for the Lua engine: https:/", "context": "", "use_case": "", "switched_from": "", "story": "CERT is releasing six CVEs for serious security vulnerabilities in dnsmasq"}, {"id": 766708320, "item_id": 47919270, "url": "https://news.ycombinator.com/item?id=47919270", "by": "krapp", "date": "2026-04-27", "version": null, "stance": "recommend", "quote": "and LuaJIT, which has plugins that improve the performance of strings and tables", "excerpt": "I absolutely do think more people need to use Lua, especially for config. The language does have some rough edges (what language doesn't) but I always suggest Lua tables whenever a thread about JSON and its discontents comes around. It's minimalistic, it allows for comments, you don't have to quote strings. You do have to avoid the temptation to add logic. That said I'm probably too old school but I really still pref", "context": "", "use_case": "", "switched_from": "", "story": "Lua can be a cool HTML templating engine"}, {"id": 752282400, "item_id": 47017650, "url": "https://news.ycombinator.com/item?id=47017650", "by": "lloeki", "date": "2026-02-14", "version": null, "stance": "warn", "quote": "Isn't LuaJIT kind of a dead end?", "excerpt": "Isn't LuaJIT kind of a dead end? Also Ruby has been getting quite fast since YJIT (and now ZJIT): https://railsatscale.com/2023-08-29-ruby-outperforms-c/", "context": "", "use_case": "", "switched_from": "", "story": "Vim 9.2 Released"}, {"id": 752266850, "item_id": 47016678, "url": "https://news.ycombinator.com/item?id=47016678", "by": "jitl", "date": "2026-02-14", "version": null, "stance": "compare", "quote": "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": 750867056, "item_id": 46929191, "url": "https://news.ycombinator.com/item?id=46929191", "by": "phendrenad2", "date": "2026-02-07", "version": null, "stance": "neutral", "quote": "The main LuaJIT author (Mike Pall) is working on unrelated projects", "excerpt": "That github repo is just a mirror, and if you checked the official website you'd see: > Please note: The main LuaJIT author (Mike Pall) is working on unrelated projects and cannot accept bigger sponsorships at this time. But other community members may be open to sponsorship offers \u2014 please ask on the LuaJIT mailing list for any takers. Mailing list is here: https://luajit.org/list.html", "context": "", "use_case": "", "switched_from": "", "story": null}, {"id": 745631296, "item_id": 46601956, "url": "https://news.ycombinator.com/item?id=46601956", "by": "fsfod", "date": "2026-01-13", "version": null, "stance": "neutral", "quote": "LuaJIT has always had pluggable allocator system", "excerpt": "I think they just swapped out LuaJIT's modified built-it dlmalloc[1] with some standard allocator. Then just set some turning values of the allocator to make to more eager to return pages with no allocations left to the OS. LuaJIT has always had pluggable allocator system you can set at state construction time[2], it did have a restriction you could only use the built-it allocator for 64 bit builds if you don't use t", "context": "", "use_case": "", "switched_from": "", "story": "Deconstructing the LuaJIT Pseudo Memory Leak"}, {"id": 742088240, "item_id": 46380515, "url": "https://news.ycombinator.com/item?id=46380515", "by": "mananaysiempre", "date": "2025-12-24", "version": null, "stance": "neutral", "quote": "", "excerpt": "On the other end of the optimizer size spectrum, a surprising place to find a DSL is LuaJIT\u2019s \u201cFOLD\u201d stage: https://github.com/LuaJIT/LuaJIT/blob/v2.1/src/lj_opt_fold.c (it\u2019s just pattern matching, more or less, that the DSL compiler distills down to a perfect hash).", "context": "", "use_case": "JIT compiler optimizer", "switched_from": "", "story": "When Compilers Surprise You"}, {"id": 741985952, "item_id": 46374122, "url": "https://news.ycombinator.com/item?id=46374122", "by": "snvzz", "date": "2025-12-24", "version": null, "stance": "warn", "quote": "Still waiting[0][1] for proper RISC-V support.", "excerpt": "Still waiting[0][1] for proper RISC-V support. 0. https://github.com/LuaJIT/LuaJIT/issues/628 1. https://github.com/LuaJIT/LuaJIT/pull/1267", "context": "", "use_case": "", "switched_from": "", "story": "Lua 5.5"}, {"id": 741910544, "item_id": 46369409, "url": "https://news.ycombinator.com/item?id=46369409", "by": "Tharre", "date": "2025-12-23", "version": null, "stance": "neutral", "quote": "Not true, see \"Extensions from Lua 5.2\" here", "excerpt": "Not true, see \"Extensions from Lua 5.2\" here: https://luajit.org/extensions.html", "context": "", "use_case": "", "switched_from": "", "story": "Lua 5.5"}, {"id": 741909968, "item_id": 46369373, "url": "https://news.ycombinator.com/item?id=46369373", "by": "reactordev", "date": "2025-12-23", "version": null, "stance": "neutral", "quote": "", "excerpt": "No, real LuaJIT has some features from 5.2 and 5.3 https://luajit.org/extensions.html", "context": "", "use_case": "", "switched_from": "", "story": "Lua 5.5"}, {"id": 741909026, "item_id": 46369314, "url": "https://news.ycombinator.com/item?id=46369314", "by": "Fwirt", "date": "2025-12-23", "version": null, "stance": "neutral", "quote": "which is why LuaJIT is so popular. But LuaJIT is really just one guy\u2019s project.", "excerpt": "The Lua ecosystem is more like the Lisp ecosystem than Python. The language is small enough that there\u2019s a lot of stuff out there that\u2019s just\u2026 finished. Hasn\u2019t been updated in 10 years but still works. The LunarModules org tries to gather it up and keep it compatible. For an extended standard lib, the closest thing is probably Penlight. https://github.com/lunarmodules/Penlight If you want async IO, sockets, etc, chec", "context": "", "use_case": "", "switched_from": "", "story": "Lua 5.5"}, {"id": 740691232, "item_id": 46293202, "url": "https://news.ycombinator.com/item?id=46293202", "by": "not_a9", "date": "2025-12-16", "version": null, "stance": "neutral", "quote": "LuaJIT FFI actually has a similar feature.", "excerpt": "Fun fact: LuaJIT FFI actually has a similar feature. You can do funky things like detour hooking with this functionality too. https://luajit.org/ext_ffi_semantics.html", "context": "", "use_case": "FFI C interop", "switched_from": "", "story": "Creating C closures from Lua closures"}, {"id": 736569697, "item_id": 46035606, "url": "https://news.ycombinator.com/item?id=46035606", "by": "coderedart", "date": "2025-11-24", "version": null, "stance": "neutral", "quote": "Luajit is already popular and has plenty of benchmarks online.", "excerpt": "It seems to just be re-exposing existing lua runtimes, which makes the naming very unfortunate IMO. The underlying runtime Luau, for example, details its performance here https://luau.org/performance . Luajit is already popular and has plenty of benchmarks online.", "context": "", "use_case": "", "switched_from": "", "story": "Fast Lua runtime written in Rust"}]}