Penny logoP
v0.0.15

Penny

Serverless for your servers.

A reverse proxy that starts your apps on demand and kills them when idle. Ten side projects, one VPS, zero waste.

$
curl -LsSf https://github.com/frectonz/penny/releases/download/0.0.15/penny-installer.sh | sh
penny.toml
["myapp.example.com"]
address = "127.0.0.1:3001"
command = "node server.js"
health_check = "/"
["api.example.com"]
address = "127.0.0.1:8080"
command = "./api-server"
health_check = "/health"
["blog.example.com"]
address = "127.0.0.1:4000"
command = "hugo server"
health_check = "/"

How It Works

Request lifecycle

Each request resets the idle timer. Traffic keeps the app alive. Silence kills it.

How penny worksBROWSERREQUESTPENNY PROXYRouting trafficWaking server...Health check ✓Proxying trafficIdle timeout reachedPPROXYmyapp.example.comSLEEPINGSTARTING...RUNNINGSTOPPEDwait_periodSERVERREQUEST ARRIVESPENNY STARTS APPTRAFFIC PROXIEDIDLE → KILLED

Built-in

Everything you need

On-Demand Start/Stop

Apps start on first request and stop after idle timeout.

Adaptive Wait

Idle timeout adjusts based on traffic patterns.

Auto TLS

Automatic HTTPS via Let's Encrypt. Zero config.

Cold Start Pages

Show a loading page while your app wakes up.

Related Warm-up

Pre-warm related apps when traffic arrives.

Dashboard

Built-in metrics, uptime tracking, and logs.

Systemd

One command to install as a systemd service.

Dokku

Works with Dokku containers out of the box.

Get running in seconds

Quick Start

1penny.toml
["myapp.example.com"]
address = "127.0.0.1:3001"
wait_period = "10m"
health_check = "/"
command = "node server.js"
2terminal
$ penny serve penny.toml

That's it. Requests start the app, traffic keeps it alive, silence kills it.