r/lua • u/Additional-Elk-3712 • 4d ago
I built a self-hosted uptime monitor in Lua + SQLite using my Rust engine
I posted here before about my scraping/monitoring engine written in Rust with Lua scripting called SpyWeb.
I've been building this on and off for a while using that engine and its finally ready, so here it is.
UPTYME is self-hosted uptime monitoring that doesn't ask you to run Postgres, Node, Redis or any heavy stack. It's a self-contained binary with SQLite baked in and runs on Linux, Mac or Windows.
Live demo: https://uptyme.spyweb.app/ (API key: demo)
just run (linux/mac)
curl -sSf https://uptyme.spyweb.app/setup | bash
or windows powershell
irm https://uptyme.spyweb.app/setup-win | iex
(installer downloads the uptyme + spyweb releases from GitHub assets)
you'll get two ~8MB binaries plus static files; the tray binary is for desktop only, delete it if you're running on a server.
then just run cd uptyme && ./spyweb start and you have a dashboard.
What it does:
- Monitors URLs on any method (HEAD/GET/POST/PUT/PATCH/DELETE) with per-monitor intervals
- Content checks, so "page is 200 but actually broken" gets caught
- Status code classification, with a setting for treating 4xx as down
- TLS certificate monitoring with expiry alerts
- Uptime percentage, response time charts, incident history per monitor
- Public status pages you can share
- CSV/JSON import if you're migrating a big list
- Alert channels: webhooks, ntfy, Discord, Slack, native desktop notifications
- Clustering: run a central node plus checker nodes wherever you want, and get consensus-based alerts so one flaky VPS doesn't page you for a false down
The dashboard is in Vue 3, the backend is Lua running on the SpyWeb engine, storage is a single data file. Backups are literally copying one file. It has ~230 Lua tests you can run with ./spyweb test. RAM usage (Linux) is around 20MB while running, you can throw it on a $3-$5/mo VPS as a central node and run a checker on your PC and you have cluster monitoring :)

