Skip to content

Configure a fleet ​

synkd reads project config from synkd.json (or legacy sinkd.json).

Minimal example ​

json
{
  "name": "synkd-chat",
  "port": 8787,
  "host": "127.0.0.1",
  "parties": {
    "main": {
      "entry": "./src/chat.ts",
      "export": "Chat",
      "className": "ChatDO"
    }
  },
  "auth": {
    "token": "dev-token",
    "adminToken": "dev-admin"
  },
  "tenantId": "default",
  "cors": true,
  "storageDir": ".synkd/rooms"
}

Important fields ​

FieldPurpose
partiesMap of party key → source entry and export
auth.tokenGuest lobby shared secret
auth.adminTokenOperator Console and /v1
auth.jwtSecretOptional HS256 JWT verification
auth.originsOptional browser Origin allowlist
tenantIdAlways default in v1
storageDirNode SQLite room files
port / hostNode listen address

Environment overrides ​

Prefer SYNKD_* names. Deprecated SINKD_* names still work if the new name is unset.

Common flags:

VariableEffect
SYNKD_LOG_LEVELLog verbosity
SYNKD_LOG_JSON=1Structured JSON logs
SYNKD_SITEPublic hostname for TLS Caddy compose

Multi-tenant note ​

v1 is a single fleet with tenantId = "default". Non-default tenants on the control API return 501 until a later release. Plan for one fleet per trust boundary. See Security.

What to do next ​

PartyKit-compatible rooms on infrastructure you run.