Free and open-source software that starts workloads on demand and stops them after a period of inactivity.
It integrates with reverse proxy plugins (Traefik, Caddy, Nginx, Envoy, etc.) to intercept incoming requests, wake up sleeping workloads, and display a waiting page until they're ready.
Whether you're running on a resource-constrained device like a Raspberry Pi, managing a QA environment used only once a week, or reducing cloud costs by scaling idle workloads to zero — Sablier is built for you.
Key features:
- On-demand start/stop for Docker, Kubernetes, Podman, Proxmox LXC, systemd, Nomad and AWS ECS workloads
- Customizable waiting UI with themes while workloads warm up
- Webhook notifications when instances start or stop
- Prometheus metrics for monitoring session and workload activity
- OpenTelemetry tracing for end-to-end request observability
- Stop or pause strategies to maximize resource reclamation on constrained hardware
- Scale mode: throttle CPU and memory when idle instead of stopping, for zero-cold-start workloads
- Anti-affinity: make a workload back off automatically while another group is active, to avoid GPU/RAM contention
- Installation
- Quick Start
- Configuration
- Providers
- Scale Mode
- Webhooks
- Observability
- Performance
- Usage with Reverse Proxies
- Community
- Support
- Sponsor
You can install Sablier using one of the following methods:
- Use the Docker image
- Use the binary distribution
- Compile your binary from the sources
- Use the Helm Chart
- Docker Hub: sablierapp/sablier
- GitHub Container Registry: ghcr.io/sablierapp/sablier
With Docker Compose — copy this into a compose.yaml and run docker compose up -d:
services:
sablier:
image: sablierapp/sablier:1.19.1 # x-release-please-version
command:
- start
- --provider.name=docker
ports:
- "10000:10000"
volumes:
- /var/run/docker.sock:/var/run/docker.sockWith docker run — using a sample configuration file (sablier.yaml):
docker run -p 10000:10000 -v /var/run/docker.sock:/var/run/docker.sock sablierapp/sablier:1.19.1Tip
Verify the image signature to ensure authenticity:
gh attestation verify --owner sablierapp oci://sablierapp/sablier:1.19.1Grab the latest binary from the releases page and run it:
./sablier --helpTip
Verify the binary signature to ensure authenticity:
gh attestation verify sablier-1.10.3-linux-amd64.tar.gz -R sablierapp/sabliergit clone git@github.com:sablierapp/sablier.git
cd sablier
make
# Output will change depending on your distro
./sablier_draft_linux-amd64Deploy Sablier to your Kubernetes cluster using the official Helm chart for production-ready deployments.
Add the Sablier Helm repository:
helm repo add sablierapp https://sablierapp.github.io/helm-charts
helm repo updateInstall Sablier:
helm install sablier sablierapp/sablier📚 Full Documentation | 💻 Chart Repository
Note
This quick start demonstrates Sablier with the Docker provider.
For other providers, see the Providers section.
Run your container with Sablier labels:
docker run -d --health-cmd "/mimic healthcheck" -p 8080:80 --name mimic \
--label sablier.enable=true \
--label sablier.group=demo \
sablierapp/mimic:v0.3.3 \
-running -running-after=5s \
-healthy=true -healthy-after=5sHere we run sablierapp/mimic, a configurable web-server for testing purposes.
Caution
You should always use a healthcheck with your application that needs to be scaled to zero.
Without a healtheck, Sablier cannot distinguish a started container from a container ready to receive incoming requests.
Stop the container to simulate a scaled-down state:
docker stop mimicTip
Sablier can automatically stop containers at startup using the --provider.auto-stop-on-startup flag, which will stop all containers with sablier.enable=true labels.
Start the Sablier server with the Docker provider:
docker run --name sablier \
-p 10000:10000 \
-v /var/run/docker.sock:/var/run/docker.sock \
sablierapp/sablier:1.10.5 \
start --provider.name=dockerCall the Sablier API to start a session for the demo group:
curl -v http://localhost:10000/api/strategies/blocking\?group\=demo\&session_duration\=20s
* Request completely sent off
< HTTP/1.1 200 OK
< X-Sablier-Session-Status: readySablier will start the mimic container automatically for 20 seconds..
Tip
Check out the Usage with Reverse Proxies section to integrate Sablier with Traefik, Caddy, Nginx, and more.
docker ps | grep mimicAfter the session duration (20 seconds in this example), Sablier will automatically stop the container.
# Wait 20 seconds, then check
docker ps -a | grep mimicThe container should be stopped.
There are three ways to configure Sablier:
Configuration sources are evaluated in the order listed above with later methods overriding earlier ones.
If no value is provided for a given option, a default value is used.
At startup, Sablier searches for a configuration file named sablier.yml (or sablier.yaml) in:
/etc/sablier/$XDG_CONFIG_HOME/$HOME/.config/.(the working directory)
You can override this using the configFile argument.
sablier --configFile=path/to/myconfigfile.ymlprovider:
# Provider to use to manage containers (docker, swarm, kubernetes, podman, proxmox_lxc, systemd, nomad, ecs)
name: docker
# Reject requests for containers/services that don't have the Sablier enable label
reject-unlabeled-requests: false
# Verify that the Sablier enable label is present when an instance expires
verify-enabled-on-expiration: false
docker:
# Strategy to use when stopping containers (stop or pause)
strategy: stop
server:
# The server port to use
port: 10000
# The base path for the API
base-path: /
metrics:
# Enable Prometheus metrics endpoint
enabled: true
storage:
# File path to save the state (default stateless)
file:
sessions:
# The default session duration (default 5m)
default-duration: 5m
# The expiration checking interval.
# Higher duration gives less stress on CPU.
# If you only use sessions of 1h, setting this to 5m is a good trade-off.
expiration-interval: 20s
logging:
level: info
strategy:
dynamic:
# Custom themes folder, will load all .html files recursively.
# A missing folder is not an error, only the built-in themes are served then.
custom-themes-path: /etc/sablier/themes
# Show instances details by default in waiting UI
show-details-by-default: true
# Default theme used for dynamic strategy (default "hacker-terminal")
default-theme: hacker-terminal
# Default refresh frequency in the HTML page for dynamic strategy
default-refresh-frequency: 5s
blocking:
# Default timeout used for blocking strategy (default 1m)
default-timeout: 1m
webhooks:
endpoints:
# Notify an uptime-monitoring service every time an instance starts or stops.
# - url: https://uptime.example.com/api/push/xxxxxxxx
# headers:
# Authorization: "Bearer <token>"
# events:
# - started
# - stopped
tracing:
# Set enabled: true to export OpenTelemetry traces.
enabled: false
# exporterType selects the trace backend: "otlphttp" (default) or "stdout".
exporterType: otlphttp
# endpoint is the OTLP collector URL. Without a path, traces are sent to /v1/traces;
# a path is used as is.
# For Jaeger: http://jaeger:4318
# For Grafana Tempo: http://tempo:4318
# For VictoriaTraces: http://victoriatraces:10428/insert/opentelemetry/v1/traces
endpoint: http://localhost:4318
# serviceName is the logical name that appears in the tracing backend.
serviceName: sablier
# samplingRate controls the fraction of requests traced (0.0 – 1.0).
samplingRate: 1.0Environment variables follow the same structure as the configuration file and are prefixed with SABLIER_. For example:
strategy:
dynamic:
custom-themes-path: /my/pathbecomes
SABLIER_STRATEGY_DYNAMIC_CUSTOM_THEMES_PATH=/my/pathTo list all available arguments:
sablier --help
# or
docker run sablierapp/sablier:1.19.1 --helpCommand-line arguments follow the same structure as the configuration file. For example:
strategy:
dynamic:
custom-themes-path: /my/pathbecomes
sablier start --strategy.dynamic.custom-themes-path /my/pathSablier integrates seamlessly with Docker Engine to manage container lifecycle based on demand.
Features:
- Connects to the Docker socket
- Starts/Stops containers
- Compatible with Docker Compose
Sablier supports Docker Swarm mode for managing services across a cluster of Docker engines.
Features:
- Connects to the Docker socket (Manager node)
- Scales services to 0 and back
- Compatible with Docker Stack
Sablier works with Podman, the daemonless container engine, providing the same dynamic scaling capabilities as Docker.
Features:
- Connects to the Podman socket
- Starts/Stops containers
- Supports rootless containers
Sablier provides native Kubernetes support for managing deployments, scaling workloads dynamically.
Features:
- Connects to the Kubernetes API
- Scales Deployments and StatefulSets to 0 and back
- Supports in-cluster and out-of-cluster configuration
Sablier supports Proxmox VE for managing LXC containers on demand via the Proxmox API.
Features:
- Connects to the Proxmox VE API with token authentication
- Starts/Stops LXC containers
- Discovers containers by
sabliertag
Sablier integrates with systemd to manage units on demand, including per-user services when needed.
Features:
- Connects to the systemd D-Bus
- Starts/stops explicitly opted-in systemd units
- Supports system or user instances











