Joulenap is a self-hosted web UI + scheduler that runs your Proxmox VE backups to a Proxmox Backup Server that stays powered off — waking it only when it's time, then putting it back to sleep.
A dedicated Proxmox Backup Server (PBS) is the right way to keep backups on separate hardware — the 3-2-1 rule. But a backup job runs for a few minutes a night, and leaving a second machine powered on 24/7 wastes energy. Proxmox's built-in scheduled backups assume the target is always reachable, so they can't drive a “wake, back up, sleep” cycle.
Joulenap is the missing piece: a small always-on service on your LAN that owns its own schedule, wakes the PBS over Wake-on-LAN at the scheduled time, runs the backup, applies retention and garbage collection, powers the PBS back down, and notifies you. Every run is logged step by step, can be stopped mid-flight, and can feed your homelab dashboard or Grafana. The name says it — a joule saved, while your backup server takes a nap. 💤
It talks to Proxmox VE and PBS through their APIs (using scoped tokens) and uses a single SSH command only for the PBS power-off, which has no API. Crucially, it modifies nothing on your Proxmox host — no cron, no systemd timers, no scripts on the node. Everything lives in one small container or LXC you run beside Proxmox.
At the scheduled time, Joulenap runs the whole cycle end to end and logs every step:
Sends a Wake-on-LAN magic packet to the sleeping PBS on your LAN.
Polls the PBS until it's reachable, with retries and a timeout — if it never comes up, the run aborts and notifies you.
Triggers vzdump via the PVE API for the guests you selected, to the PBS storage, and follows the task to completion.
Applies your retention policy and, if enabled, runs garbage collection and a quick verify of the new backups while the PBS is awake. A scheduled full-verify cycle is available too.
On success, SSHes a clean shutdown to the PBS. On failure it leaves the box on so you can inspect it.
Sends the result — success or failure, with durations and sizes — on your chosen channels. If a backup window passed while Joulenap was down, or a run was interrupted, you're told at the next startup — the PBS is never silently left powered on.
ethtool -s <iface> wol g). Confirm the PBS actually wakes from a magic packet before relying on it.You don't need to prepare API tokens or SSH keys by hand — the built-in setup wizard can create scoped tokens and install the poweroff key for you.
Joulenap can trigger backups and power machines on and off, so treat it as privileged. It's designed to run on a trusted LAN/VPN, behind its login — not on the public internet. It prefers scoped API tokens over root passwords; if root credentials are supplied during setup, they're used once to provision a scoped token and then discarded. Secrets live only in the container's data directory, never in the repo.