
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, and Proxmox LXC 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
You can install Sablier using one of the following methods:
Choose one of the Docker images and run it with a sample configuration file:
docker run -p 10000:10000 -v /var/run/docker.sock:/var/run/docker.sock sablierapp/sablier:1.14.0
[!TIP] Verify the image signature to ensure authenticity:
bash gh attestation verify --owner sablierapp oci://sablierapp/sablier:1.14.0
Grab the latest binary from the releases page and run it:
./sablier --help
[!TIP] Verify the binary signature to ensure authenticity:
bash gh attestation verify sablier-1.10.3-linux-amd64.tar.gz -R sablierapp/sablier
git clone git@github.com:sablierapp/sablier.git
cd sablier
make
# Output will change depending on your distro
./sablier_draft_linux-amd64

Deploy 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 update
Install 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=5s
Here 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 mimic
[!TIP] Sablier can automatically stop containers at startup using the
--provider.auto-stop-on-startupflag, which will stop all containers withsablier.enable=truelabels.
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=docker
Call 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: ready
Sablier 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 mimic
After the session duration (20 seconds in this example), Sablier will automatically stop the container.
# Wait 20 seconds, then check
docker ps -a | grep mimic
The 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.yml
provider:
# Provider to use to manage containers (docker, swarm, kubernetes, podman, proxmox_lxc)
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 (default empty)
custom-themes-path:
# 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 base URL (scheme + host + optional port).
# For Jaeger: http://jaeger:4318
# For Grafana Tempo: http://tempo:4318
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.0
Environment variables follow the same structure as the configuration file and are prefixed with SABLIER_. For example:
strategy:
dynamic:
custom-themes-path: /my/path
becomes
SABLIER_STRATEGY_DYNAMIC_CUSTOM_THEMES_PATH=/my/path
To list all available arguments:
sablier --help
# or
docker run sablierapp/sablier:1.14.0 --help
Command-line arguments follow the same structure as the configuration file. For example:
strategy:
dynamic:
custom-themes-path: /my/path
becomes
sablier start --strategy.dynamic.custom-themes-path /my/path
Sablier 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 sablier tag
By default, Sablier stops (or pauses) workloads when a session expires and restarts them on the next request. Scale mode is an alternative: instead of stopping a container, Sablier throttles its CPU and memory to a minimal idle allocati
$ claude mcp add sablier \
-- python -m otcore.mcp_server <graph>