Self-hosted apps built with Lua

13 open-source, self-hostable apps written primarily in Lua.

Last reviewed Oct 11, 2026 · 628 words

Lua is almost never the whole story. It is a small embeddable language, so the self-hosted apps filed under it are usually a host program written in C or C++ with Lua doing the logic on top: Kong and Apache APISIX run Lua inside Nginx, Snikket and Metronome are XMPP servers in the Prosody family, and half the bucket is game content for engines like Luanti. For the operator that is good news. You get a compiled core for speed and plain-text Lua you can actually read when something misbehaves.

What Lua means for the person running it

You rarely install Lua yourself. The gateways ship as Docker images, Kubernetes manifests or Helm charts with their runtime bundled, and the XMPP and game servers come as packages or binaries. Memory is driven by the host program and your traffic, not by Lua: the directory estimates 512 MB for Kong, APISIX and ntopng, and 128 MB for Metronome IM.

Reading the code is where Lua shines. Plugins and server modules are short, dynamically typed scripts, and a sysadmin with no Lua background can usually follow a Kong plugin or a Prosody-style module well enough to debug it. Dependency pain is low too, because the interesting dependencies live in the host program, which arrives prebuilt.

The API gateways: Kong and APISIX

AppStars (approx.)NeedsDifficulty (directory)
Kong Gateway44,000Postgres, typicallyMedium
Apache APISIX17,000etcdMedium
ntopng8,200Traffic to watchMedium

Kong Gateway is the biggest Lua project in the catalogue: an API gateway built on Nginx with rate limiting, auth and a large plugin ecosystem. The catalogue's caveats are that it typically wants Postgres, the configuration curve is steep, and some plugins are enterprise-only. APISIX does the same job with hot-reloadable plugins and a built-in dashboard, and stores its configuration in etcd. The APISIX vs Kong comparison is the right place to choose between them.

Both are API gateways, not homelab reverse proxies. If you just want HTTPS in front of a few containers, Caddy or Traefik from the proxy category will be far less work.

ntopng is filed under Lua, though its packet-processing core is native code. It gives real-time network traffic analysis and flow collection, with the catalogue's warning that advanced features need a licence and resource use grows with traffic.

Is Snikket the easiest XMPP server to self-host?

For a family or small group, it is the easiest in this bucket. Snikket bundles an XMPP server with its own apps and invitation links, deploys with Docker, and the directory rates it Easy with a 512 MB estimate. Metronome IM, a Prosody fork, is lighter at 128 MB but is a niche project with a smaller community and expects you to configure XMPP yourself.

The rest of the bucket is games and an e-reader

VoxeLibre, Mineclonia, Repixture and the MineClone entries are Lua game content for Luanti (formerly Minetest) servers, mostly Easy to Medium and light on RAM. Zero-K is an RTS with self-hostable multiplayer, rated Hard at 2 GB, and Hedgewars runs small game servers. KOReader (about 30,000 stars) is an excellent e-ink reader, but it runs on your Kindle or Kobo, not on a server; its self-hosting link is OPDS catalogues and progress sync.

What I'd do

For most homelabs, the Lua app to run is Snikket, if you want private chat for the family. Reach for Kong or APISIX only when you have APIs to manage, and pick APISIX if you would rather run etcd than Postgres. Install KOReader on any e-reader you own.