Quick start with Docker
Self-hosters run the same server as syncbins.com — one Node/Fastify process serving the React app, REST API, and WebSocket relay. The web UI is identical; only who runs the box and where blobs live differs.
Pick your path
Section titled “Pick your path”Best for development or testing on your machine. No .env file required.
From the App repo root:
npm run dev:composeOpen http://localhost:5173. The UI proxies /api and /ws to the server container. Data persists under App/server/data/ (SQLite + blobs/).
Stop with Ctrl+C or npm run dev:compose:down.
One compose stack: SyncBins + Caddy for Let’s Encrypt TLS.
Prerequisites
Section titled “Prerequisites”- A VPS, homelab PC, or Raspberry Pi 4/5 (64-bit OS) with Docker
- A domain (e.g.
box.yourdomain.com) pointing at the box — or homelab HTTPS on a LAN - Ports 80/443 open for ACME (public domain) or mkcert (LAN)
-
Get the compose bundle — either download
syncbins-deploy-*.zipfrom GitHub Releases (recommended on a Pi), or clone the App repo:Terminal window git clone https://github.com/SyncBins/App.gitcd App/dockercp .env.example .envRelease zips include
docker-compose.yml,Caddyfile, and.env.exampleready to run. -
Set two required values in
.env:docker/.env DOMAIN=box.yourdomain.comBLOB_URL_SECRET=… # openssl rand -hex 32Leave
STORAGE_KIND=localunless you want cloud blobs. -
Start the stack:
Terminal window docker compose up -ddocker compose logs -f syncbins -
Open your URL and complete onboarding — same wizard as hosted syncbins.com. The first device to finish setup becomes the bootstrap device (generates the recovery phrase and master key).
-
Verify health:
curl -s https://box.yourdomain.com/api/health→{"ok":true,"version":"0.0.0"}- Settings → Server: green status, latency shown
./data/syncbins.dband./data/blobs/exist on the host
Compose files live in App/docker/ (docker-compose.yml, Caddyfile, .env.example). See the App docker README for bind-mount layout.
What you don’t need to configure
Section titled “What you don’t need to configure”For a standard single-user self-hosted box:
| Topic | Default | Action |
|---|---|---|
| Storage | Local disk (./data/blobs) | Nothing — works out of the box |
| Tenancy | Single tenant | Keep TENANT_MODE=single |
| Stripe / billing | Off | Ignore Stripe env vars |
| R2 / Azure | Off | Only if you opt into cloud blobs |
You are not expected to paste a wall of env vars into a Settings screen. Production needs domain + secret; cloud storage is an optional appendix.
Optional: cloud blob storage
Section titled “Optional: cloud blob storage”If local disk isn’t enough, set STORAGE_KIND=r2 or STORAGE_KIND=azure and the credentials from Choosing storage. Restart the container. No UI change required.