MCPcopy
hub / github.com/sablierapp/sablier

github.com/sablierapp/sablier @v1.14.0 sqlite

repository ↗ · DeepWiki ↗ · release v1.14.0 ↗
954 symbols 4,778 edges 206 files 307 documented · 32%
README

Sablier Banner

Go Report Card Discord OpenSSF Scorecard

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.

Demo

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


Installation

You can install Sablier using one of the following methods:

Use the Docker image

Helm

Docker Pulls Docker Image Size (tag)

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

Use the binary distribution

Helm

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

Compile your binary from the sources

git clone git@github.com:sablierapp/sablier.git
cd sablier
make
# Output will change depending on your distro
./sablier_draft_linux-amd64

Use the Helm Chart

Helm

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


Quick Start

[!NOTE] This quick start demonstrates Sablier with the Docker provider.

For other providers, see the Providers section.

1. Start your container to scale to zero

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.

2. Stop the Container

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-startup flag, which will stop all containers with sablier.enable=true labels.

3. Start Sablier

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

4. Request a Session

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.

5. Verify the Container is Running

docker ps | grep mimic

6. Wait for Session Expiration

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.


Configuration

📚 Full Documentation

There are three ways to configure Sablier:

  1. In a configuration file
  2. As environment variables
  3. As command-line arguments

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.

Configuration File

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

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

Arguments

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

Providers

Docker

Docker

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

📚 Full Documentation


Docker Swarm

Docker Swarm

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

📚 Full Documentation


Podman

Podman

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

📚 Full Documentation


Kubernetes

Kubernetes

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

📚 Full Documentation


Proxmox LXC

Proxmox

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

📚 Full Documentation

Scale Mode

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

Extension points exported contracts — how you extend this code

Provider (Interface)
(no doc) [6 implementers]
pkg/sablier/provider.go
Recorder (Interface)
Recorder is the surface that Sablier core and the API handlers call into when an event happens. The Noop implementation [3 …
pkg/metrics/recorder.go
Sablier (Interface)
go:generate go tool -modfile=../../tools.mod mockgen -package apitest -source=api.go -destination=apitest/mocks_sablier. [3 …
internal/api/api.go
Interface (Interface)
Any type that implements heap.Interface may be used as a min-heap with the following invariants (established after Init
pkg/tinykv/heap.go
ShutdownFunc (FuncType)
ShutdownFunc flushes and stops the TracerProvider gracefully.
pkg/tracing/setup.go
Workload (Interface)
(no doc)
pkg/provider/kubernetes/workload_scale.go
Store (Interface)
go:generate go tool -modfile=../../tools.mod mockgen -package storetest -source=store.go -destination=../store/storetest [4 …
pkg/sablier/store.go
GroupsProvider (Interface)
GroupsProvider exposes the current configured groups (group name -> instance names). [2 implementers]
pkg/metrics/collector.go

Core symbols most depended-on inside this repo

Errorf
called by 207
pkg/tracing/grpclog.go
EXPECT
called by 184
pkg/store/storetest/mocks_store.go
Fatalf
called by 87
pkg/tracing/grpclog.go
Get
called by 66
pkg/tinykv/tinykv.go
InstanceInspect
called by 63
pkg/sablier/provider.go
Get
called by 59
pkg/sablier/store.go
Error
called by 55
pkg/sablier/errors.go
Fatal
called by 50
pkg/tracing/grpclog.go

Shape

Function 517
Method 306
Struct 116
Interface 10
TypeAlias 4
FuncType 1

Languages

Go100%

Modules by API surface

pkg/tinykv/tinykv.go39 symbols
pkg/sablier/instance_request_test.go24 symbols
pkg/tinykv/tinykv_test.go21 symbols
pkg/metrics/recorder.go20 symbols
pkg/sablier/group_watch_test.go19 symbols
pkg/theme/bundle_test.go18 symbols
pkg/metrics/prom_test.go17 symbols
pkg/webhook/dispatcher_test.go16 symbols
pkg/provider/providertest/mock_provider.go16 symbols
pkg/tracing/grpclog.go15 symbols
pkg/sablier/sablier_test.go14 symbols
pkg/sablier/running_hours_watch_test.go14 symbols

Dependencies from manifests, versioned

dario.cat/mergov1.0.2 · 1×
github.com/Azure/go-ansitermv0.0.0-2025010203350 · 1×
github.com/Microsoft/go-winiov0.6.2 · 1×
github.com/bahlo/generic-list-gov0.2.0 · 1×
github.com/beorn7/perksv1.0.1 · 1×
github.com/buger/gotermv1.0.4 · 1×
github.com/bytedance/gopkgv0.1.4 · 1×
github.com/bytedance/sonicv1.15.1 · 1×
github.com/bytedance/sonic/loaderv0.5.1 · 1×

For agents

$ claude mcp add sablier \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact