Skip to content

Raspberry Pi

SyncBins runs well on a Raspberry Pi 4 or 5 with 2 GB RAM or more and 64-bit Raspberry Pi OS (Bookworm or later). Published images on GHCR include linux/arm64 alongside linux/amd64 — Docker on the Pi pulls the correct architecture with no special tag.

Use the same flow as Quick start with Docker — preferably the deploy zip from GitHub Releases so you do not need to clone the App repo on the device.

  • Raspberry Pi OS 64-bit
  • Docker Engine and the Compose plugin
  • A public domain with DNS → your Pi or homelab HTTPS with mkcert (required for phone pairing — plain http://192.168.x.x breaks Web Crypto on iOS)
  1. On the Pi, download and unzip syncbins-deploy-*.zip from GitHub Releases.

  2. Configure env:

    Terminal window
    cp .env.example .env
    .env
    DOMAIN=box.yourdomain.com
    BLOB_URL_SECRET=… # openssl rand -hex 32
    SYNCBINS_IMAGE_TAG=0.1.0-alpha.1 # match the release you downloaded
  3. Start:

    Terminal window
    docker compose pull
    docker compose up -d
    docker compose logs -f syncbins
  4. Open your HTTPS URL and complete onboarding immediately (first device claims the server).

Terminal window
docker compose exec syncbins uname -m
# expect: aarch64
Terminal window
curl -s "https://${DOMAIN}/api/health"
# {"ok":true,"version":"…"}
  • Prefer docker compose pull from GHCR — do not build the image on the Pi unless you are patching source (first build can take 30+ minutes).

  • If the container is OOM-killed under load, cap Node heap in docker-compose.yml:

    environment:
    NODE_OPTIONS: "--max-old-space-size=768"
  • Keep local disk storage (default) — no extra cloud services on a small board.

DeviceFit
Pi 5 / Pi 4 (2 GB+)Recommended for Docker self-host
Pi 3 (64-bit OS)Possible; 1 GB RAM is tight — use Docker, avoid building from source
Pi 2 and olderNot supported

Only if Docker is not an option. You need Node.js 20+ and build tools for better-sqlite3:

Terminal window
sudo apt update
sudo apt install -y build-essential python3 git
# Install Node 20+ (Nodesource, nvm, or fnm)
git clone https://github.com/SyncBins/App.git syncbins
cd syncbins
npm ci
npm run rebuild:native
npm run build

Set production paths (example):

Terminal window
export LISTEN_HOST=0.0.0.0
export LISTEN_PORT=8080
export SQLITE_PATH=/var/lib/syncbins/syncbins.db
export LOCAL_BLOB_DIR=/var/lib/syncbins/blobs
export BLOB_URL_SECRET="$(openssl rand -hex 32)"
export DOMAIN=box.yourdomain.com
mkdir -p /var/lib/syncbins/blobs
npm run start --workspace @syncbins/server

Put Caddy or nginx in front for HTTPS. See TLS & domains.

If you patch the App repo and need a local image:

Terminal window
docker buildx build --platform linux/arm64 -f docker/Dockerfile -t syncbins:local .

Prefer release images from GHCR for day-to-day use.