Sync client
Cross-platform desktop sync (Linux, Windows, macOS) with a system tray and on-demand window. Selective bidirectional sync for folders you choose.
Features
- Tray / menu bar app - runs in the background after sign-in
- Lightweight GUI opens on demand (no webview loaded in tray-only mode)
- Whole-file sync via tus (same protocol as the web app)
- Optional launch at login
Authentication
Sign in through the client UI. The server issues a long-lived device token
(Bearer). Tokens are revocable in the web app (Settings → devices) or by an admin.
Idle expiry defaults to 90 days without API use (DEVICE_TOKEN_IDLE_DAYS;
0 = never).
Sync behavior
- Selective - pick which remote folders sync locally.
- Bidirectional for selected folders.
-
Conflicts - when both sides changed: Keep local / Keep remote / Keep
both. “Keep both” stores a renamed conflict copy on the remote (e.g.
filename (conflict from device).ext). No silent overwrites.
Usage
- First launch opens the window for sign-in.
- After sign-in, the app is tray-only; use Open Frachtschiff in the tray.
- Closing the window hides the UI; sync keeps running.
- Quit from the tray to stop syncing and exit.
Config paths
| OS | Config directory |
|---|---|
| Linux | ~/.config/frachtschiff/ |
| macOS | ~/Library/Application Support/frachtschiff/ |
| Windows | %AppData%\frachtschiff\ |
Config is YAML (config.yaml). Sync cursors live in state.json in
the same directory.
Building from source
Requires Go (CGO) and platform webview dependencies:
- Linux: GTK / WebKitGTK / AppIndicator packages
- macOS: Xcode CLI tools
- Windows: WebView2 runtime
make build-client
./client/bin/frachtschiff
Packaging helpers: make package-client-linux,
make package-client-darwin. See the upstream client README for details.