Express-style API
Routing, middlewares and handlers are plain Lua, with the API you already know from Express and Fastify.
Lua ergonomics • Rust-powered HTTP
An Express-style web framework for Lua, powered by Rust. Ship familiar routing, middlewares and handlers while a native core handles fast HTTP I/O.
local ludi = require("ludi")
local app = ludi.new()
app:get("/users/:id", function(req, res)
res:json({ id = req.params.id })
end)
app:listen(3000, function()
print("Listening on http://localhost:3000")
end)Terminal window
$ luarocks install ludi
$ lua app.luaLudi keeps the application layer small and expressive while Rust handles the transport layer, parsing, limits and sockets.
Express-style API
Routing, middlewares and handlers are plain Lua, with the API you already know from Express and Fastify.
Rust core
A native module built on hyper + tokio does the HTTP heavy lifting: fast parsing, limits and socket I/O.
No extra runtime
No OpenResty, no nginx, no separate runtime — just require("ludi") and run
your app with any Lua interpreter.
Middlewares
Global and per-route middleware chains with explicit next(),
express-style.