Repository navigation
Description
Lua 5.2 was released in 2011, and had its last patch released in 2015. It was the default behind pkgs.lua before #569839.
#569839 has landed: lua and lua5 are now convenience aliases for lua5_5_compat, and luaPackages aliases lua55Packages. Existing package dependencies were made explicit as lua5_2_compat or lua52Packages, so changing the aliases did not migrate those consumers.
This tracker covers those remaining package migrations, unused-input removals, and Lua module compatibility fixes. Completion can also mean deliberately following another interpreter, or removing an obsolete package; it does not mean every package must use Lua 5.5. Check a box only when the corresponding Nixpkgs change has landed. An upstream fix or a prerequisite module fix alone does not complete a consumer migration.
The suggestions listed here (ex. "lua (5.2) → drop") were generated by AI; please do not blindly accept the written conclusions
It’s just meant to be a starting point for the package maintainers. Anyone making a PR must test the code and understand the changes made.
Status and remaining-work descriptions were reconciled on 2026-10-27 against Nixpkgs master 847a58f3686a, live PR states, upstream PRs and commits, and LuaRocks releases. These tracker updates were assisted by Codex (GPT-6.1) and Claude Code (Claude Opus 5.5); no package builds or runtime tests were rerun for the tracker edits.
Remove the Lua input
These are unused-input candidates, not automatic drops. The before/after output and dependency-history audit covers x86_64-linux only. Per-package verification is still needed, especially for optional features, system-versus-vendored Lua, and other platforms.
-
alephone(lua(5.2) → drop): Builds its vendored Lua 5.2. no maintainer alephone: drop unused lua input #571424 -
animeko(lua5_2→ drop (verify)): Only for autoPatchelf of VLC libs that get deleted;meta.broken. cc @pokon548 -
bam(lua5_3→ drop): Builds its vendored Lua 5.3. cc @7c6f434c -
desmume(lua(5.2) → drop): Lua is disabled in the meson build. no maintainer -
duckmarines(lua(5.2) → drop): LÖVE game; runs on LuaJIT. no maintainer -
ete-unwrapped(lua5_4→ drop): No Lua in the source. cc @ashleyghooper @drupol fix in ete-unwrapped: 0-unstable-2025-08-17 -> 0-unstable-2026-06-21 #570416 -
freeciv(lua5_3→lua5_4+--enable-sys-lua=yes(lua5_5with Freeciv 3.3)): 3.2 wants exactly 5.4, else silently builds its bundled copy. cc @nbp -
fsuae(lua(5.2) → drop): Uses its own Lua 5.2; off by default. cc @c4patino -
hawkthorne-journey(lua(5.2) → drop): LÖVE game; runs on LuaJIT. cc @liberodark {skyemu,hawkthorne-journey,pdns-recursor}: drop unused lua input #570799 -
libresprite(lua(5.2) → drop): No Lua in the source. cc @fgaz -
lutris(lua(5.2) → investigate): Removing Lua changes the FHS runtime environment. The DeSmuME runner checked in the output-comparison audit has no Lua inDT_NEEDED, but runtime loading is unverified; test the runner before choosing a drop or another ABI. cc @Steinhagen -
mrrescue(lua(5.2) → drop): LÖVE game; runs on LuaJIT. no maintainer -
openscenegraph(lua(5.2) → drop or restore system Lua):luaSupportis off by default; even when enabled,OSG_USE_LOCAL_LUA_SOURCEselects bundled Lua 5.2.3. Decide whether to use system Lua, and preserve or explicitly migrate the override interface. cc @aanderse @7c6f434c -
oxwm(lua5_4→ drop): Builds its vendored Lua 5.4.8. cc @tonybanters -
pdns-recursor(lua(5.2) → droplua): Uses LuaJIT, also in buildInputs. cc @rnhmjoj {skyemu,hawkthorne-journey,pdns-recursor}: drop unused lua input #570799 -
pktgen(lua5_3→ drop):enable_luais off. cc @abuibrahim @stepbrobd pktgen: fix gcc16 build and drop unused inputs #570823 -
proxmark3(lua(5.2) →lua5_4): Only findslua5.4, else builds its bundled copy. cc @nyanotech @emilytrau -
radare2(lua(5.2) → drop unused input): radare2 6.x has no Lua bindings. RemovingluaBindings/luaalso changes the override andconfig.radareinterfaces; preserve compatibility or document the migration. cc @NixOS/redis -
skyemu(lua(5.2) → drop): Builds its vendored Lua 5.4.7. cc @liberodark {skyemu,hawkthorne-journey,pdns-recursor}: drop unused lua input #570799 -
swiften(lua(5.2) → drop): Only Sluift uses Lua, and it is not installed. The before/after installed outputs were equivalent apart from build nondeterminism; patching out Sluift is not required for this drop. cc @Twey -
teeworlds(lua5_3→ drop): The CMake build doesn't use Lua. cc @Luflosi -
the-powder-toy(lua5_2 (+ luajit)→ droplua5_2): Uses LuaJIT, also in buildInputs. cc @siraben -
unvanquished(lua(5.2) → drop): Only the game logic uses Lua, and it isn't built. cc @NixOS/redis -
widelands(lua(5.2) → drop): Builds its vendored Eris (a Lua 5.3 fork). cc @7c6f434c @jcumming -
wordgrinder(lua52Packages→ drop unused refs or restore system Lua): The current Makefile ignoresLUA_INCLUDE/LUA_LIBand uses bundled Lua 5.1. Choose whether to drop those inputs or select system Lua throughLUA_PACKAGE; the latter changes the output and needs testing. TheLUA_CPATHwrapper is also unused. cc @matthiasbeyer
Fix the Lua version used today
These are already wrong, independent of Lua 5.5.
-
dit(lua(5.2) →lua5_3): Only uses a system Lua ≤ 5.3, else builds its bundled copy. cc @davidak -
ibus-engines.pinyin(lua(5.2) → patchlua/base.lua, thenlua5_5): Already broken on 5.3+; ibus-libpinyin has the fix. cc @azuwis ibus-engines.pinyin: use lua 5.5 #571975 -
icesl(lua(5.2) → update to 2.5.3 and switch tolua5_1): Tested. Current hashes fail; the binary needs the 5.1 ABI. cc @mgttlinger
Ready for Lua 5.5
Upstream supports 5.5 in the packaged version, or it was tested working.
-
deps-fnl(luaPackages(5.2) → newer Lua/Fennel): Covered by the separate Fennel packaging in treewide: Packagefennelseparately from luarocks packages, replacingluaPackages.fennel#572037; the PR still needs a rebase and fixes for dependent packages that lose the propagated interpreter. cc @emily-lavender -
doublecmd(lua(5.2) →lua5_5): 1.2.9 supports 5.5. no maintainer doublecmd: use Lua 5.5 #570599 -
expat(luaPackages(5.2) →lua55Packages): Only for a passthru test; luaexpat supports 5.5. no maintainer expat: test against lua55Packages.luaexpat #571435 -
fcitx5-lua(lua5_3→lua5_5): 5.0.18 supports 5.5. cc @poscat0x04 fcitx5-lua: use Lua 5.5 #570587 -
fennel-ls(luaPackages(5.2) →lua5_5+lua55Packages): Tested. Upstream tests pass. cc @luftmensch-luftmensch @yisraeldov fennel-ls: use Lua 5.5 #570705 -
fnlfmt(luaPackages(5.2) →lua5_5+lua55Packages): Tested. Upstream tests pass. cc @chiroptical fnlfmt: use Lua 5.5 #570704 -
haproxy(lua5_4→lua5_5): 3.4.0 supports 5.5; also updateLUA_LIB/LUA_INC. cc @vifino haproxy: use Lua 5.5 #570529 -
imapfilter(lua(5.2) →lua5_5) imapfilter: upgrade lua version #570522 -
kakounePlugins.quickscope-kak(lua5_3→lua5_5): Tested. Identical output. cc @eraserhd kakounePlugins.quickscope-kak: use Lua 5.5 #570976 -
libmodsecurity(lua(5.2) →lua5_5): 3.0.15 supports 5.5. cc @Izorkin libmodsecurity: use Lua 5.5 #570589 -
lighttpd(lua5_1→lua5_5): 1.4.83 supports 5.5; the 5.1 pin is obsolete. cc @bjornfor @brechtcs lighttpd: use Lua 5.5 for mod_magnet #570531 -
luarocks / luarocks-nix(luaPackages(5.2) →lua55Packages): 3.13.0 supports 5.5, but the top-level tools still uselua52Packages. Changing the updater's default interpreter can downgrade or stop resolving CSV rows withoutluaversion; compare a full regeneration before switching. cc @mrcjkb @teto-
luarocks: luarocks: use Lua 5.5 by default #574651 -
luarocks-nix: Switch the generator only after all 189 CSV rows regenerate with no failed rows, fallback output, invalid Nix or version downgrades, while preserving support in older Lua package sets and LuaJIT.- Updater validation and failed-row reporting: luarocks-packages-updater: reject invalid output and report failed updates #574856
-
cqueuesinterpreter-specific installation: luaPackages.cqueues: install for the selected Lua interpreter #574857 - Upstream source-fetch error handling: nix: propagate source fetch failures nix-community/luarocks-nix#43; Nixpkgs still pins
luarocks-nixat3a9f4bf(2026-03-31) and needs a bump to include it. ldbusLua 5.5 compatibility and rockspec: daurnimator/ldbus@0af5e5b; Nixpkgs now packages source that includes it (75de901, luaPackages: update on 2026-10-24 #578168), but thescm-0rockspec published on LuaRocks still requireslua < 5.5, soldbusstays disabled on Lua 5.5 until the rockspec is re-uploaded.stdlibcallable-environment regression: debug: preserve call-backed functable environments lua-stdlib/lua-stdlib#111 (41.x branch, not released yet); canonicalstd.normalizefix: fix: preserve call function environments in functors lua-stdlib/normalize#2, included instd.normalize3-1, which Nixpkgs now packages (luaPackages: update on 2026-10-24 #578168).stdlib42-1 requiresstd.normalize4 and moves several modules into separate packages; the CSV pinsstdlibto 41.2.2.markdownloop-variable fix: Fix incompatibility with Lua 5.5 mpeterv/markdown#8vstructloop-variable fix: lua 5.5 - for loop variables are now const ToxicFrog/vstruct#42; release backport: Backport lua 5.5 support, for loop variables are now const ToxicFrog/vstruct#43- Other rockspec and release blockers still need resolving before the generator switch.
-
-
luarocks-packages-updater(lua5_1 … lua5_4→ addlua5_5): Puts every interpreter on PATH. cc @teto luarocks-packages-updater: make Lua 5.5 available #574650 -
lux-cli(lua5_4→lua5_5): lux-lib 0.32.0 supports 5.5. cc @mrcjkb @ALameLlama lux-cli: move lua to checkInputs, bump lua to 5.5 #570643 -
mask(lua(5.2) →lua5_5): Only used in a trivial test. cc @Defelo mask: use lua 5.5 #570541 -
mpvScripts.mpv-webm(luaPackages(5.2) →lua55Packages): Tested. Identical output. cc @pbsds mpvScripts.mpv-webm: build with Lua 5.5 MoonScript #570974 -
nvimpager(lua51Packages.busted→neovim-unwrapped.lua.pkgs.busted): Keep tests aligned with Neovim's interpreter, including its Lua 5.1 fallback, rather than migrating them to Lua 5.5. cc @lucc nvimpager: use lua version from neovim for tests #570635 -
osrm-backend(lua(5.2) →lua5_5, dropluabind): 26.4.0 supports 5.5;luabindis unused. cc @erictapen -
pragtical(lua5_4→lua5_5): Only ppm uses PUC Lua, and it prefers 5.5. cc @suhr @TomaSajt pragtical: build ppm with Lua 5.5 #574008 -
python3Packages.hyprland-config(lua5_4→lua5_5): Prefers 5.5, likehyprland. cc @sophronesis python3Packages.hyprland-config: use Lua 5.5 #570973 -
rehex(lua53Packages→lua55Packages): 0.64.0 supports 5.5 (rehex: 0.63.4 -> 0.64.0 #506702). cc @markus1189 @wegank rehex: use Lua 5.5 #573039 -
rspamd(lua(5.2) →lua5_5): 4.2.1 supports 5.5; only affects non-LuaJIT builds. cc @avnik @fpletz @nlewo rspamd: use Lua 5.5 for non-LuaJIT builds #570975 -
sanjuuni (passthru test)(lua5_2→lua5_5): The test can't fail; useassert(loadfile(…)). cc @tomodachi94 -
slade(lua(5.2) →lua5_5): 3.2.12 supports 5.5. cc @Gliczy slade: use Lua 5.5 #570588 -
slade-unstable(lua(5.2) →lua5_5): Same as slade. cc @Gliczy slade: use Lua 5.5 #570588 -
ultrastardx(lua(5.2) →lua5_5): 2026.9.0 supports 5.5. cc @diogotcorreia @philocalyst ultrastardx: use lua 5.5 #570535 -
urn(lua(5.2) →lua5_5): Tested. Self-compiles on 5.5. no maintainer; test-only upstream MR: https://gitlab.com/urn/urn/-/merge_requests/114 -
vim-full(lua(5.2) →lua5_5): 9.2.1001 supports 5.5. cc @equirosa @philiptaron vim-full: use Lua 5.5 #570530 -
vtm(lua5_4→lua5_5): 5.4 is a minimum; upstream vendors 5.5. cc @3JlOy-PYCCKUi vtm: use Lua 5.5 #570706 -
wireplumber(lua5_4→lua5_5): 0.5.14 supports 5.5. cc @K900 @qweered wireplumber: use Lua 5.5 #570527 -
wireshark(lua5_4→lua5_5): 4.6.9 supports 5.5. cc @bjornfor @fpletz wireshark: use Lua 5.5 #570528 -
xournalpp(lua5_3→lua5_5): Supports 5.5; plugins passluac -p. cc @iedame @sikmir xournalpp: use Lua 5.5 #570707 -
z-lua(lua52Packages→lua55Packages): 1.8.25 supports 5.5; un-hardcodelib/lua/5.2. no maintainer z-lua: use Lua 5.5 #574007
Supported upstream in a newer version
Some entries need a package update or backport before switching to Lua 5.5; see each entry for the remaining work.
-
conky(lua5_4→ update +lua5_5): Now at 1.25.3 with Lua 5.5; the 5.4 assert and pin were removed. cc @dguibert conky: 1.22.3 -> 1.25.3, use Lua 5.5 #571361 -
corsix-th(lua(5.2) → bump ≥ 0.70, thenlua5_5): 0.70.0 supports 5.5. cc @hughobrien @matteo-pacini corsix-th: 0.69.2 -> 0.70.1, use Lua 5.5 #571365 -
fityk(lua(5.2) →lua5_5+ backport): 1.3.2's configure excludes 5.5; backport the upstream Lua discovery fix. no maintainer fityk: use Lua 5.5 #574005 -
g3proxy(lua5_4→ keep pending upstream support): Neither the packaged 1.12.3 nor 1.12.4 (g3proxy: 1.12.3 -> 1.12.4 #547818) has alua55Cargo feature; it exists only on upstream master, so switching requires a future release or a backport, not just switching the input. cc @RaitoBezarius -
ibus-engines.libpinyin(lua(5.2) → bump ≥ 1.16.6, thenlua5_5): Fixed in 1.16.6. cc @linsui ibus-engines.libpinyin: 1.16.5 -> 1.16.6, use Lua 5.5 #571364 -
ipe(lua(5.2) →lua5_5+ backported script fixes): 7.2.30 now uses Lua 5.5; the loop-variable fix is backported and extended toupdate-styles.lua, without requiring a 7.3.1 update. no maintainer ipe: fix build with GCC 16, use Lua 5.5 #571362 -
luastatus(lua(5.2) →lua5_5): 0.6.0 already finds the generic Lua pkg-config name; a version update is not required for the tested switch. cc @kashw2 luastatus: use Lua 5.5 #571359 -
mle(lua5_4→lua5_5): The existingpostPatchremoves thelua5.4header prefix and versioned linker name; those substitutions do not need changing for the current 1.8.1 source. cc @adsr mle: use Lua 5.5 #571360 -
modsecurity_standalone(lua(5.2) → bump ≥ 2.9.13, thenlua5_5): 2.9.13 supports 5.5; off by default. no maintainer modsecurity_standalone: 2.9.12 -> 2.9.15, use Lua 5.5 #571363 -
unnethack(lua5_4→ update to 6.0.16, thenlua5_5): The release includes upstream's Lua 5.5 fix; no backport is needed. Save/bones compatibility changes are documented in the PR. no maintainer unnethack: 6.0.14 -> 6.0.16, use Lua 5.5 #574006 -
vis(lua(5.2) → backport support lua 5.5... martanne/vis#1300, thenlua5_5): Fixed by the linked PR. cc @RamKromberg vis: 0.9 -> 0.9-unstable-2026-10-03, modernize, use Lua 5.5 #569960 (includes the Lua 5.5 switch) -
vlc(keeplua5_2_compatfor 3.0.x): The HTTP interface callsmath.pow; the fmc.lua fix is not relevant because that script is not installed. Track newer Lua through VLC 4 (vlc4: init at 3.0.24-unstable-2026-10-07 #558714, usinglua5_5_compat). cc @nick-linux8
Likely works: test-build with Lua 5.5
These were candidates from source review. Builds and checks of the actual Lua integration are still required; package-specific blockers and upstream fixes are noted below.
-
apacheHttpd(lua(5.2) →lua5_5): Any Lua ≥ 5.1; off by default. cc @arcayr -
apk-tools(lua5_3→lua5_5+-Dlua_version=5.5):lua-zlibnow supports newer Lua; retain the optional Lua integration and verify it with the matching module set. no maintainer (lua-zlibfixed in luaPackages.lua-zlib: unmark broken on Lua 5.4 and newer #571063) -
asc(lua(5.2) →lua5_5): No upper bound; scripts passluac -p. cc @7c6f434c -
asterisk (all variants)(lua(5.2) →lua5_5): No upper bound. cc @auntieNeo @DerTim1 @yorickvP -
bozohttpd(lua(5.2) →lua5_5): NetBSD builds it with 5.4. cc @liclac -
cadzinho(lua5_4→lua5_5): Installed scripts passluac -p. cc @sikmir -
celestia(lua(5.2) →lua5_5(orlua5_4)): Unversionedfind_package(Lua). cc @returntoreality @pancaek -
collectd(lua(5.2) →lua5_5): Any Lua ≥ 5.1. cc @bjornfor -
devilspie2(lua(5.2) →lua5_5): Falls back to the genericlua. no maintainer devilspie2: use lua5_5 #571430 -
dnsdist(lua(5.2) →lua5_5): Any Lua ≥ 5.1. cc @jojosch -
domino-chain(lua(5.2) →lua5_5): Themes passluac -p. cc @fgaz -
domoticz(lua5_3→lua5_4(5.5 plausible)): 5.3 is a minimum. cc @nuxeh @LennyPenny -
eiskaltdcpp(lua(5.2) →lua5_5): Unversionedfind_package(Lua). no maintainer -
elinks(lua(5.2) →lua5_5): No version restriction. cc @iblech -
emacsPackages.lua(lua(5.2) →lua5_5): Followslua.luaversion. cc @nagy -
flycast(lua(5.2) →lua5_5): 5.2 is a minimum. cc @tallesCoelho -
freeswitch(lua(5.2) →lua5_5): Falls back to the genericlua. cc @MikaelFangel -
frr(lua53Packages.lua→lua5_4(then 5.5)): Any Lua ≥ 5.3; docs say 5.3. cc @woffs @thillux -
geeqie(lua5_3→lua5_5): Any Lua ≥ 5.3. cc @pSub @markus1189 -
gittyup(lua5_4→lua5_5): Unversionedfind_package(Lua). cc @FliegendeWurst @phijor -
gnuplot(lua(5.2) →lua5_5): Trieslua.pcfirst; off by default. no maintainer -
gpick(lua(5.2) →lua5_5): Any Lua ≥ 5.2. cc @VergeDX -
grafx2(lua(5.2) →lua5_5+ upstream fixes): The Lua discovery and installed sample-script fixes are upstream; a Nixpkgs backport/update and runtime verification are still pending. no maintainer; upstream https://gitlab.com/GrafX2/grafX2/-/merge_requests/396 -
gravit: Removed rather than migrated to Lua 5.5. no maintainer gravit: drop #571717 -
grilo-plugins(lua5_4→lua5_5): Any Lua ≥ 5.3. cc @NixOS/gnome grilo-plugins: use lua 5.5 #583191 -
gswatcher(lua5_4→lua5_5): Any Lua ≥ 5.4. cc @pluiedev -
highlight(lua(5.2) →lua5_5): All files passluac -p; big rebuild. no maintainer -
librime-lua(lua(5.2) →lua5_4(or 5.5)): User scripts make 5.4 safer. cc @jian-lin @xddxdd -
libtas(lua5_4→lua5_5): Falls back to the genericlua. cc @skyrina -
libucl(lua(5.2) →lua5_5): No upper bound; off by default. cc @jpotier -
luabind(lua5_1→ test-build): Move withsoiandicesl. no maintainer -
lunarml(lua5_3→lua5_4(then 5.5)): Check phase only. cc @toastal @ratsclub -
lutok(lua(5.2) → update to 0.6.3 +lua5_4): 0.4 is stale; gates atf and kyua. cc @reckenrode -
lxi-tools(lua(5.2) →lua5_5): Any Lua ≥ 5.1. cc @vq -
megaglest(lua(5.2) → test-build): CMake already lists 5.5. cc @matejc -
mgba(lua(5.2) →lua5_5): CMake's FindLua knows 5.5. cc @Gliczy -
midimonster(lua5_4→lua5_5): Falls back to the genericlua. cc @keldu -
mmex(lua(5.2) →lua5_5): 5.5.0 reported working. no maintainer -
monotone(lua(5.2) →lua5_5+ test patch): A test assigns to aforvariable. cc @7c6f434c -
mympd(lua5_4→lua5_5): 5.4 is a minimum. cc @doronbehar mympd: use Lua 5.5 #572508 mympd: 26.0.0 -> 26.1.0 #572884; upstream Lua dump callback fix: Fix: Handle the empty final Lua dump callback jcorporation/myMPD#1573 -
nbfc-linux(lua5_4→lua5_5): Falls back to the genericlua. cc @Celibistrial @bohanubis -
neomutt(lua(5.2) →lua5_5): Tries the genericluafirst; off by default. cc @erikryb @RaitoBezarius @ethancedwards8 -
onscripter(lua5_1→ test-build / keep): Games target 5.1. cc @midchildan -
orthanc(lua(5.2) →lua5_4(or 5.5)): Upstream uses 5.4. no maintainer -
osm2pgsql(lua(5.2) →lua5_5): Unversionedfind_package(Lua). cc @NixOS/geospatial osm2pgsql,tilemaker: use lua5_5 #571454 -
owntracks-recorder(lua(5.2) →lua5_5): Usespkg-config lua. cc @aionescu -
pdns(lua(5.2) →lua5_5): Any Lua ≥ 5.1. cc @Mic92 @NickCao -
pinsel(lua(5.2) →lua5_5): Usespkg-config lua. no maintainer -
roccat-tools(lua(5.2) →lua5_5): Any Lua ≥ 5.1. no maintainer -
rocqPackages.mathcomp(lua(5.2) →lua5_5): Only for a doc script. cc @vbgl @jwiegley @CohenCyril -
rpm(lua5_4→lua5_5): 5.2 is a minimum. no maintainer -
rtorrent(lua5_4_compat→lua5_5): No upper bound; off by default. cc @thiagokokada -
slurm(lua(5.2) →lua5_5): Any Lua ≥ 5.1. cc @markuskowa @edwtjo -
snis-unwrapped(lua5_2→lua5_5(orlua5_4)): Falls back to the genericlua. cc @cyclic-pentane -
texworks(lua(5.2) →lua5_5): CMake's FindLua knows 5.5. cc @dotlambda -
tilemaker(lua(5.2) →lua5_5): Upstream already builds against 5.5 headers. cc @NixOS/geospatial osm2pgsql,tilemaker: use lua5_5 #571454 -
tio(lua(5.2) →lua5_5): Falls back to the genericlua. no maintainer tio: use Lua 5.5 #572513 -
tym(lua5_3→lua5_5(orlua5_4)): Tries the genericluafirst. cc @wesleyjrz @kashw2 -
uhttpd(lua5_1→ test-build / keep): LuCI scripts need 5.1. cc @haylinmoore -
weechat(lua5_3→lua5_4safe,lua5_5likely): Verify scripting with the selected interpreter;weechat-matrix-bridgewas removed in weechatScripts.weechat-matrix-bridge: drop #570683 and no longer needs a coordinated migration. cc @wahjava -
weston(lua5_4_compat→lua5_5): 5.4 is a minimum;_compatis unneeded. cc @alyssais -
xmoto(lua(5.2) →lua5_5): Bundled levels passluac -p. cc @7c6f434c @pSub
Move up to Lua 5.4
The packaged versions have Lua 5.5 blockers. Some now have upstream fixes linked below; a Nixpkgs update or backport and verification are still needed.
-
diod(lua5_1→lua5_4): configure caps below 5.5. cc @rnhmjoj; upstream Lua 5.5 support: build: support Lua 5.5 configuration files chaos/diod#174 -
dovecot(lua5_3→lua5_4now, orlua5_5+ backport/update): 2.4.5 still calls 2-arglua_newstate; upstream fixed Lua 5.5 state creation in dovecot/core@e74cf9d, which is not in a release yet. A Nixpkgs backport/update and verification of the enabled Lua integration are still pending. cc @dasJ @fpletz @helsinki-Jo @Jappie3 @Prince213 -
freebsd.libifconfig(lua(5.2) →lua5_4): FreeBSD uses 5.4; a template breaks on 5.5. cc @rhelmot @artemist (upstream libifconfig: Fix SFP table generation with Lua 5.5 freebsd/freebsd-src#2473) -
instead(lua(5.2) →lua5_4):stead.luabreaks on 5.5. The upstream fix targets 3.6.0, so the packaged 3.5.2 needs an update before it can be backported. cc @pSub; upstream Lua 5.5 support: lua: fix lua 5.5 engine compatibility instead-hub/instead#117 -
ja2-stracciatella(lua5_3→lua5_4): sol2 blocks 5.5;meta.broken. Upstream patched its vendored sol2 (sol: fix compilation with lua 5.5 ja2-stracciatella/ja2-stracciatella#2431), but Nixpkgs builds against the systemsol2, so the fix belongs there. no maintainer -
llvmPackages.lldb(lua5_3→lua5_4): Docs support 5.3 and 5.4. cc @NixOS/llvm -
lsyncd(lua5_2_compat→lua5_4):lsyncd.luabreaks on 5.5. cc @bobvanderlinden; upstream Lua 5.5 support: Fix build with Lua 5.5 lsyncd/lsyncd#745 -
notion(lua(5.2) →lua5_4, orlua5_5+ backport/update): The packaged 4.0.4 needs upstream's Lua 5.5 detection and manual-generation fixes, which are not in a release yet (4.0.5 predates them). cc @raboof @NotAShelf; upstream fix: support Lua 5.5 detection and manual generation raboof/notion#392 -
openmw(lua(5.2) →lua5_4orlua5_1): Only aarch64-linux; elsewhere LuaJIT. cc @marius851000 @SigmaSquadron -
openrussian-cli(lua5_3→lua5_4):openrussian.luabreaks on 5.5. cc @vs49688 -
prosody(lua(5.2) →lua5_4): 13.0.x caps at 5.4; dropluabitop. cc @toastal @mirror230469 @SuperSandro2000 -
qosmic(lua(5.2) → backport, thenlua5_4): 1.6.0 breaks on 5.3+. Upstream master has the Lua 5.1 to 5.4 compatibility fix (bitsed/qosmic@0da980d1601d) and Lua 5.5 discovery, but there has been no release since 1.6.0 in 2017. cc @raboof (upstream build: support Lua 5.5 discovery bitsed/qosmic#48) -
sol2(lua(5.2) →lua5_4(or patch)): Hard-errors on 5.5. cc @mrcjkb
Still on Lua 5.2, with no newer Lua upstream
These packages use Lua 5.2 today, and their packaged versions support only Lua 5.2 or older, or LuaJIT, so none of them can move to Lua 5.5 without patching. Completion means a deliberate choice: keep Lua 5.2, switch to LuaJIT where upstream accepts it, or patch the package. Together with VLC 3.0.x, these decide whether Lua 5.2 can be removed from Nixpkgs; mpv-unwrapped is likely the most widely used. Neovim is not listed: it uses LuaJIT, or Lua 5.1 where LuaJIT is unavailable, so it does not depend on Lua 5.2. These entries were checked against the packaged sources at Nixpkgs master 0657ebd01dc3; no packages were built.
-
cardpeek(lua5_2→ keep, orlua5_3_compat(untested)): 0.8.4 (2015), the latest release, callsluaL_checkint, which Lua 5.3 keeps only in compatibility mode, and its EMV script callsbit32, which Lua 5.4 removed. Unreleased upstream master ports the C calls to Lua 5.3 (L1L1/cardpeek@d0653e73af) but still usesbit32. cc @liclac -
enlightenment.efl(lua5_2_compat→ keep, orluajit): 1.28.1'slua-interpreteroption isluajitorlua, and theluapath accepts only Lua 5.1 or 5.2. Nixpkgs enableseluaand the Lua bindings. cc @matejc @romildo @NixOS/enlightenment -
lite(lua52Packages.lua→ keep, or patch for newer Lua): Nixpkgs replaces the vendored Lua 5.2 with system Lua. On Lua 5.3 and newer,data/core/statusview.luapasses a float tostring.format("%d%%", …), which raises an error whenever the file-position percentage is not a whole number. This was found by reading the source; lite itself was not run on newer Lua. 1.11 (2020) is the latest release, with no upstream commits since 2021; the maintained forklite-xlalready useslua5_4. no maintainer -
mpv-unwrapped(lua5_2_compat→ keep, orluajit): 0.41.0 accepts the genericlua.pconly at>=5.1.0, <5.3.0, thelua52/lua51names, or LuaJIT; Lua 5.3 and newer are not accepted. LuaJIT follows Lua 5.1 semantics with some 5.2 extensions, so user scripts andmpvScriptsneed testing before a switch. cc @uninsane @fpletz @SchweGELBin -
pioneer(lua5_2→ keep): Upstream master still requires exactly Lua 5.2 for system Lua (find_package(Lua 5.2 EXACT)) and otherwise builds its bundled Lua 5.2.2. Building the bundled copy would remove the Nixpkgs dependency, not Lua 5.2 itself. no maintainer
Consumer migrations after Lua module fixes
-
awesome(lua5_2_compat→ investigate newer Lua):lgiis fixed, butldocpulls inmarkdown, which is disabled for Lua ≥ 5.4. Preserve the generated documentation while resolving that build-tool dependency; the consumer migration remains unverified. no maintainer (lgifixed in luaPackages.lgi: support Lua 5.4 and 5.5 #571064); upstream Markdown source fix: Fix incompatibility with Lua 5.5 mpeterv/markdown#8 (a compatible release/rockspec is still needed) -
nelua(lua52Packages.luacheck→lua55Packages.luacheck): The luacheck startup blocker is fixed; switch and verify the check dependency. no maintainer (luacheckfixed in luaPackages.luacheck: fix startup with Lua 5.5 #571062) -
weechatScripts.weechat-matrix-bridge: Removed rather than migrated; its former interpreter mismatch is no longer actionable. no maintainer weechatScripts.weechat-matrix-bridge: drop #570683 -
writers.writeLua / writeLuaBin(lua5_2_compat+lua52Packages→ newer Lua): The luacheck blocker is fixed, but the helper still binds Lua 5.2. Update the interpreter and library-set bindings together, or deliberately split the API; verify library loading and rejection of invalid Lua. cc @NixOS/lua (luacheckfixed in luaPackages.luacheck: fix startup with Lua 5.5 #571062); default migration writers.writeLua: use Lua 5.5 #574652; library loading writers.makeLuaWriter: honor libraries #574653
Lua ecosystem
-
lua55Packages.luacheck: Backported the unreleased Lua 5.5 loop-variable fix, resolvingstandards.lua:134: attempt to assign to const variable 'field_name'(Release with Lua 5.5 Support lunarmodules/luacheck#140, attempt to assign to const variable 'field_name' when lua55 lunarmodules/luacheck#147). cc @NixOS/lua luaPackages.luacheck: fix startup with Lua 5.5 #571062 -
sol23.5.0 hard-errors onLUA_VERSION_NUM > 504(upstream PR Add lua 5.5 support ThePhD/sol2#1723 is still open). cc @NixOS/lua - Resolve newer-Lua module blockers: cc @NixOS/lua
-
lgi(≥ 5.4; blocks awesome, libpeas2) luaPackages.lgi: support Lua 5.4 and 5.5 #571064 -
lua-zlib(≥ 5.4) luaPackages.lua-zlib: unmark broken on Lua 5.4 and newer #571063 -
luaffi: correct the legacy broken marker and packageluaffi-tklseparately luaPackages.luaffi: fix broken marker #571428 luaPackages.luaffi-tkl: init at 1.0.5-2 #571427; upstream luaffi-tkl parser/test fixes: fix(parser): pop only the constants table after a constant assignment Tekenlight/luaffifb#6, fix(test): only check __ipairs when the interpreter honors it Tekenlight/luaffifb#7, test: run the native int64 test on Lua 5.4 and later Tekenlight/luaffifb#8 -
cqueues(≥ 5.5; blocks pinnacle) luaPackages.cqueues: 20200726.52-0 -> 20261006.52-0 #571065 -
luaposix(≥ 5.5): 37.0-1 supports Lua 5.5 luaPackages.luaposix: 36.3-1 -> 37.0-1 #573037; bit32 dependency fix: luaPackages.luaposix: propagate bit32 only on Lua 5.1 #572340; upstream support: Advertise support for lua 5.5 luaposix/luaposix#402 -
luadbi/luadbi-sqlite3(≥ 5.5; blocks prosody with DBI) luaPackages.luadbi*: support Lua 5.5 #572339; drop theallowLua55override once upstream publishes rockspecs allowing 5.5: Upload 0.7.5-2 rockspecs allowing Lua 5.5 mwild1/luadbi#85
-
-
luaffisegfaults on interpreter exit (also on 5.2 and 5.3): Legacyluaffiremains distinct fromluaffi-tkl. Nixpkgs now packagesluaffi-tkl1.0.5-3, which includes the upstream parser/test fixes; validating a replacement/alias and its consumers remains a follow-up. cc @NixOS/lua luaPackages.luaffi: fix broken marker #571428 luaPackages.luaffi-tkl: init at 1.0.5-2 #571427 luaPackages: update on 2026-10-19 #574101
Activity
doronbehar commentedon Oct 5, 2026
If so many of these packages support lua5.5 without any further changes, why not switch the default lua for everyone to 5.5, and let stuff break and fix only if needed?
Skyb0rg007 commentedon Oct 5, 2026
The summaries here are entirely AI generated (as I noted at the top). I don’t think it’s a good idea to merge a treewide update without some human testing and confirmation.
Edit: the other reason is that I’m changing
pkgs.luainto an alias, not just changing the assignment. So I can’t just “makepkgs.lua5.5 and see what breaks” because nixpkgs derivations can’t depend on aliases.ultrastardx: use lua 5.5
lucc commentedon Oct 5, 2026
For nvimpager:
Yes, busted is a test only dependency but my reasoning is that it loads and tests the lua code that should be executed by lua 5.1 at runtime (inside neovim). It seems that neovim will not change their lua version (see
:help lua-compat).For that reason I would argue not to switch.
Should I annotate the nix code to explain this?
khaneliman commentedon Oct 5, 2026
That makes sense. Keeping the tests compatible with Neovim’s Lua 5.1 interface seems preferable to switching them to 5.5.
Could we use
neovim-unwrapped.lua.pkgs.bustedinstead? Neovim recommends LuaJIT on supported platforms, and this would follow the interpreter selected by our Neovim package, including its plain Lua 5.1 fallback.Skyb0rg007 commentedon Oct 5, 2026
Makes sense to me, though I think neovim uses luajit (at least on Linux).
That would be very helpful to make sure no one tries to bump it to lua5_6 in a few years.
pbsds commentedon Oct 5, 2026
Disclaimer: My only insight into the current lua status is what i learned from this post on lobse.rs: https://hisham.hm/2026/08/04/the-lua-community-needs-to-learn-to-move-on/
I'm inclined to just try and do this, and then later convert the
luaattribute to an alias maybe. However we are in the process of stabilizing a new release, perhaps we should hold of on this until after branch-off?In the meanwhile, package-wise migrations i think is the way to go. 👍
slade: use Lua 5.5
Skyb0rg007 commentedon Oct 5, 2026
This was actually triggered due to #569726, so I don't think trying to complete this before the release is a terrible idea.
Though that thread (and #323083) goes over a lot of the issues in doing so.
Yep, and I think per-package migrations is the right move even in the future.
The issue with nixpkgs and that blog post is that
lua51Packagesandlua55Packagesare constructed from the same sources, so we can't support older Lua versions in the same way.nvimpager: use lua version from neovim for tests
whispersofthedawn commentedon Oct 6, 2026
i've just merged #570699, which unchecks some of the boxes up at the top by reverting #570393. someone other than an LLM needs to do the verification that this mass removal doesn't cause issues. for anyone who wants to reland this change, i'll say the same thing i said in that revert pr:
for whoever wants to reland this: i highly recommend looking at diffoscope for these sorts of changes (unused dependency removals). the easiest way to ensure a dependency is actually unused is to compare the outputs before and after, which diffoscope is great for. if you can do this and see that for each of these, removing lua makes no change to the output (besides self-referencing store paths), you've demonstrated an extremely strong property and there is very little risk of regressions from this change. (there are also removals that might be correct that do cause a difference in output, but of course you still need to be able to explain why they're correct.)
also, if you want to remove an unused dependency, please aim to understand why it was present in the first place. for example, even if you can show there is no difference in
diffoscopeoutput, it might be the case that someone added theluadependency to avoid using a vendored lua, and that's no longer working. the correct course of action might be to switch from a vendored lua to a nixpkgs lua. we don't want to go breaking down Chesterton's fence without knowing why it was put there in the first place.11 remaining items
ipe: use Lua 5.5
modsecurity_standalone: use Lua 5.5
nvimpager: use lua version from neovim for tests
kakounePlugins.quickscope-kak: use Lua 5.5
ipe: use Lua 5.5
modsecurity_standalone: use Lua 5.5
corsix-th: use Lua 5.5
ibus-engines.libpinyin: use Lua 5.5
luastatus: use Lua 5.5
rspamd: use lua5_5 for non-LuaJIT builds
libmodsecurity: use Lua 5.5
rehex: use Lua 5.5
conky: use Lua 5.5
fcitx5-lua: use Lua 5.5
lucc commentedon Nov 3, 2026
About
markdown:It seems that the upstream repo is inactive. There are lingering issues and PRs discussing lua compatibility. We could include patches from there.
But our only consumer of the lua markdown package seems to be ldoc (I checked
pkgs/development/lua-modules/generated-packages.nixandpkgs/development/lua-modules/overrides.nix; ldoc itself is only used by awesome WM and the sile typesetter). And the ldoc project also noticed the stale and incompatible upstream: lunarmodules/ldoc#437So we could also wait for the ldoc people to finish their fork and switch to it. (Hopefully that happens soon enough for the NixOS release)
Or we could mark the consumers as "broken on lua 5.5" to make it easier or clearer for users how to steer clear of the build failure.
What would be the best solution?