Installation
Getting started
The web app is available at app.sable.moe and gets updated on frequently, as soon as a feature is deemed stable.
Native desktop and mobile builds are still being worked on in #88. For now, use the web app directly, or install it as a Progressive Web App (PWA) on your phone.
Self-hosting
You have a few options for self hosting, you can:
- Run the prebuilt docker container.
- Deploy on a site like GitLab Pages. Jae has a guide here.
- Build it yourself.
Docker
Prebuilt images are published to ghcr.io/sableclient/sable.
latesttracks the currentdevbranch image.X.Y.Ztags are versioned releases.X.Ytags float within a release line.- Pushes to
devalso publish a short commit SHA tag.
Run the latest image with:
docker run --rm -p 8080:8080 ghcr.io/sableclient/sable:latest
Then open http://localhost:8080.
If you want to override the bundled config.json, mount your own
file at /app/config.json:
services:
sable:
image: ghcr.io/sableclient/sable:latest
ports:
- '8080:8080'
volumes:
- ./config.json:/app/config.json:roBuild it yourself
To build and serve Sable yourself with nginx, clone this repo and build it:
pnpm i # Installs all dependencies
pnpm run build # Compiles the app into the dist/ directory
After that, you can copy the dist/ directory to your server and serve it.
-
In the
config.json, you can modify the default homeservers, feature rooms/spaces, toggle the account switcher, and toggle experimental simplified slilding sync support. -
To deploy on subdirectory, you need to rebuild the app youself after updating the
basepath inbuild.config.ts.- For example, if you want to deploy on
https://sable.moe/app, then setbase: '/app'.
- For example, if you want to deploy on
Injecting config at build time
If you build Sable in a CI/CD pipeline, you can inject config.json overrides without
editing the file directly. Set the CLIENT_CONFIG_OVERRIDES_JSON environment variable to
a JSON object before running pnpm run build; the build script will deep-merge it into the
bundled config.json.
export CLIENT_CONFIG_OVERRIDES_JSON='{"defaultHomeServer": "matrix.example.com"}'
pnpm run build
Set CLIENT_CONFIG_OVERRIDES_STRICT=true to make the build fail hard if the JSON is
malformed (useful in CI where silent failures are dangerous).
Feature flag and experiment configuration
The experiments block in config.json lets server operators define feature flags with
optional percentage-based rollout. Each key is a free-form experiment name; the value
controls who gets it.
{
"experiments": {
"myFeature": {
"enabled": true,
"rolloutPercentage": 50,
"variants": ["treatment-a", "treatment-b"],
"controlVariant": "control"
}
}
}| Field | Type | Description |
|---|---|---|
enabled | boolean | Master switch; false means no users receive the experiment |
rolloutPercentage | number (0–100) | Percentage of users bucketed into the experiment |
variants | string[] | Names for each treatment arm |
controlVariant | string | The variant name given to users outside the rollout |
Bucketing is deterministic and stable: the same user always receives the same variant for a given experiment key. You can see your current variant assignments in Settings → Developer Tools → Features & Experiments.