Napwake docs
Non-prod environments that sleep when nobody's using them, and wake when someone does.
Pauses idle Kubernetes workloads in staging, preview and dev, and wakes them on the first request.
It never deletes a workload or its data.
See what’s idle first
Section titled “See what’s idle first”A team that works 10 hours a day, five days a week, uses staging 50 of 168 hours. The other 70%, it’s idle. kubectl napwake scan shows your cluster’s own number before you install anything.
kubectl napwake scan- It runs with your kubeconfig and installs nothing in the cluster.
- It shows what's idle right now as rooms lit for nobody, and what each costs at your nodes' list prices.
- With Prometheus, it replays the last week of each workload's CPU and rollouts, and says what pausing would have freed.
One file to send your team. It loads nothing from elsewhere and prints to PDF.
Four doors
Section titled “Four doors”autoResume ahead of demand woke it. Its replicas are restored and its dependencies woken.idleAfter, and no forecast of demand, it pauses again.kubectl napwake status says what to fix.How it works
Section titled “How it works”Label a Deployment, StatefulSet or namespace napwake.dev/managed: "true" and Napwake creates a ManagedWorkload for it, with its settings from annotations. Then it keeps an activity clock: CPU, deploys, activity annotations, and Prometheus.
- Awake · running
Running
Activity clock: CPU, deploys, activity annotations, Prometheus
- No activity for
idleAfter, and no forecast of demand - Asleep · paused
Paused
Scaled to zero, its Services routed to the doorman
- A request, an activity annotation, or
autoResumeahead of demand - Waking up · resuming
Resuming
Replicas restored, dependencies woken
Pods Ready, held requests passed through
What it does
Section titled “What it does”Opt in with a label
Label a workload or namespace
napwake.dev/managed: "true". Settings are annotations in your Git, so Argo CD and Flux work as today.Activity clock
Napwake records each workload's last activity: CPU over
cpuThreshold, a deploy, an activity annotation or a Prometheus query. AfteridleAfterwith none, it pauses. No learning period.Demand forecasting
A Holt-Winters double seasonal model learns each workload's day and week from up to four weeks of Prometheus. It scores itself from week two and acts when accurate enough:
eager,balancedorcautious. It re-learns after drift, never from a holiday.Safe by default
Napwake never pauses what it can't measure. A confident forecast can hold a pause off.
dryRunpauses nothing and shows what would. Anyone else's scale-up is a wake. If a GitOps tool undoes a pause, Napwake tells you how to fix it.Cost tracking
Napwake tracks each workload's cost, what pausing frees, and what came off the bill, from each node pool's spare capacity. Freed capacity is money once an autoscaler removes nodes.
kubectl napwake nodesshows what keeps them. How to let them go.Metrics and alerts
Prometheus metrics for operator health, lifecycle transitions, wakes on request and forecast confidence, with alerting rules.
Quick example
Section titled “Quick example”apiVersion: apps/v1kind: Deploymentmetadata: name: my-api namespace: dev labels: napwake.dev/managed: "true" annotations: napwake.dev/dry-run: "true" napwake.dev/idle-after: "1h"Napwake watches my-api and records each time it’s active: CPU above cpuThreshold (10% of its requests by default), a deploy, or an activity annotation, and, with a Prometheus query, its request rate. In dry-run it only measures. Once you run kubectl napwake enable my-api -n dev, it pauses the Deployment after an hour with no activity, and wakes it when a request reaches its Service.
For every setting, see Opting in. For settings annotations don’t cover, write a ManagedWorkload yourself.

