Sync server for ActivityWatch — proof of concept for self-hosted use.
This implements a server-side sync endpoint for ActivityWatch, compatible with the existing bucket+event API.
Important: This project is designed for self-hosted, user-controlled infrastructure only.
ActivityWatch is built on the principle that you own your data. Raw activity data (app usage, window titles, keystrokes) is deeply personal. The intended use of this sync server:
- Run it yourself — on your own machine, VPS, or LAN
- Sync between your own devices — not through a third-party service
- Never send raw data to a hosted service you do not control
This is not intended to be run as a multi-tenant hosted service where a provider holds users's raw activity data. That would contradict ActivityWatch's core privacy model, where sync should be decentralized (via Syncthing, Dropbox, or self-hosted servers), not centralized.
If you want cloud sync, run this server on infrastructure you control — a home server, a private VPS, etc.
GET /api/0/info — server info
GET /api/0/sync/status — per-bucket sync status
GET /api/0/buckets — list buckets
POST /api/0/buckets/{bucket_id} — create/update bucket
GET /api/0/buckets/{bucket_id}/events — fetch events (with time range filter)
POST /api/0/buckets/{bucket_id}/events — upload events
Auth: Authorization: Bearer <api-key> header.
pip install aw-sync-server
aw-sync-server| Env var | Default | Description |
|---|---|---|
AW_SYNC_DB |
aw-sync.db |
SQLite database path |
AW_SYNC_HOST |
127.0.0.1 |
Bind address |
AW_SYNC_PORT |
5667 |
Port |
AW_SYNC_DEMO_KEY |
(random) | Demo user API key |
- ActivityWatch cloud sync issue (169 reactions)
- ActivityWatch privacy policy
- aw-sync (Rust, decentralized) — the official approach using file-based sync