Skip to content

Lua ergonomics • Rust-powered HTTP

Ludi

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.

  • Lua-first APIplain handlers
  • Native corehyper + tokio
  • Zero runtimeno nginx needed
app.lua
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.lua

Built for Lua developers who want modern web ergonomics.

Section titled “Built for Lua developers who want modern web ergonomics.”

Ludi 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.