Your own Chrome & Edge sync server. Bookmarks, passwords, settings — synced between your devices, stored only on your machine.
- Bookmarks, passwords, autofill, history, tabs, extensions and settings synced between your Chrome / Edge installs.
- Data stays on your hardware. No Google account, no Microsoft account.
- Single binary, single SQLite file. Back it up by copying one file.
- Runs on Linux, macOS, Windows, Docker, or one click on Lazycat.
docker compose up -dData persists in a named Docker volume. The image is published at ghcr.io/loyalpartner/selfsync.
Grab a release for your platform from GitHub Releases — Linux (x86_64 / aarch64), Windows, macOS (Intel / Apple Silicon). Unpack and run selfsync-server.
If you run a Lazycat box, search "SelfSync" in your AppStore, or open it directly at https://appstore.<your-box>.heiyu.space/#/shop/detail/cloud.lazycat.app.chromesync (replace <your-box> with your device name).
Note
selfsync has no login screen — anything that can reach the port can read your synced data. Run it on your home LAN, NAS, or homelab. To access it from outside your network, put it behind Tailscale, WireGuard, or Cloudflare Zero Trust.
Launch your browser pointed at the server, sign in with any account, and turn sync on. No export/import needed — your local data uploads automatically.
google-chrome-stable --sync-url=http://127.0.0.1:8080
microsoft-edge --sync-url=http://127.0.0.1:8080Edge note: if multiple people share one selfsync instance with Edge, their data merges into one profile (Edge doesn't tell the server which account is signed in). For separate Edge users, run a separate instance per person. Chrome users on the same instance are kept separate automatically.
Most Linux Chromium / Chrome packages (Arch chromium, AUR google-chrome, Manjaro, etc.) ship a launcher wrapper that reads extra flags from a config file, so you don't have to type --sync-url every time. Write one line to whichever applies:
- Chromium:
~/.config/chromium-flags.conf - Google Chrome:
~/.config/chrome-flags.conf - Microsoft Edge:
~/.config/microsoft-edge-flags.conf - Flatpak: same filenames under
~/.var/app/<app-id>/config/
--sync-url=http://127.0.0.1:8080
Restart the browser. Distros that ship no launcher wrapper (e.g. Debian's official google-chrome deb) ignore this file — use a .desktop override or your own wrapper script instead.
With the device plugged in via ADB:
adb shell am set-debug-app --persistent com.android.chrome
adb shell 'echo "chrome --sync-url=http://<host>:8080" > /data/local/tmp/chrome-command-line'
adb shell am force-stop com.android.chromeReplace <host> with your selfsync host (LAN IP, NAS hostname, or Tailscale name). After Chrome relaunches, open chrome://sync-internals and confirm Sync Service URL shows your address. No APK rebuild needed.
| Variable | Default | Description |
|---|---|---|
SELFSYNC_ADDR |
127.0.0.1:8080 |
TCP address to bind |
SELFSYNC_DB |
selfsync.db |
SQLite database path |
RUST_LOG |
selfsync_server=info,http=info |
Log filter (tracing-subscriber syntax) |
In the Docker image the defaults are overridden to 0.0.0.0:8080 and /data/selfsync.db.
Rust 1.85+, cargo build --release. Protocol details, HTTP routes, schema, and contributor notes live in docs/architecture.md. Common gotchas in docs/faq.md.
Copyright (C) 2026 Lee <loyalpartner@163.com>. Licensed under GPL-3.0-or-later.