P2P Auto Sync
Overview
GoSuki’s P2P Auto Sync provides real-time, peer-to-peer synchronization of all bookmark metadata (including tags) across any number of devices without third-party tools. This feature is exclusive to Gosuki+ owners and Patreon Gosuki+ tier supporters.
Key Features
- Real-time sync across all connected devices
- Full metadata preservation: URLs, titles, descriptions, tags and any metadata that will be added in the future.
- Zero configuration for basic setup
- Roaming mode: nodes can operate offline for extended periods, including when the sync master is unavailable, and will automatically synchronize changes upon reconnection
- Easy to run as a self-hosted container
Setup Guide
Add the following to your config.toml
:
Master Device:
While synchronization occurs in a peer-to-peer fashion, a master node is required to relay messages. The master node does not affect the synchronization process, and is only responsible for relaying network messages. Any node can be designated as the master node.
[p2p-sync]
sync-master = true # Must be set to true
master-node = "localhost" # Set to empty "" or `localhost`
master-listen = "0.0.0.0" # Address to listen on as sync-master (defaults to 0.0.0.0)
alias = "workstation" # (optional) name to recognize this node
Important
You should only select a single master sync node to avoid unnecessary extra synchronization traffic on your network.
Client Devices:
[p2p-sync]
sync-master = false # Must be false on clients (default)
master-node = "192.168.1.5" # Point to master device's IP or network hostname
alias = "my-laptop"
- You can now run your nodes in any order. All your bookmarks are accessible on all nodes.
Notes
- Port Requirement: Ensure
port 2026
is open in your master sync node - Network Access: All devices must be on the same local network or have direct connectivity to the master node
- Feel free to use any VPN or overlay network to connect your nodes such as tailscale or wireguard
- Tag Synchronization: Unlike the Syncthing workaround, P2P Auto Sync preserves all tags across devices as well as any other metadata such as the source browser/module that created or modified the tag.
Mobile Devices:
P2P sync does natively support mobile devices, and it is rarely automatically supported by other bookmark services.
Solution:
Setup Syncthing
Follow the syncthing guide to setup a shared folder between your mobile devices and some device runs Gosuki. For this example let’s call it ~/Shares/gosuki
.
On a Gosuki Node
Configure the html-autoimport
module in ~/.config/gosuki/config.toml
:
[html-autoimport]
paths = ["~/Shares/gosuki"]
Manual export from mobile
Occasionally export all your bookmarks on your mobile browsers using the builtin export function into the shared syncthing folder. Syncthing will synchronize the html file which will be captured by the gosuki node where html-autoimport
has been setup.
Note
HTML Exports do not support tags, however if you put #tags
in the title of your bookmarks they will be detected by gosuki when auto-imported.
Example
graph LR A["workstation (master)"] <--> B[Laptop 1] M(Mobile) -. manual exported .-> S(Syncthing) S <-- shared folder ---> C A <--> C[Laptop 2] B <--> C classDef master fill:#6366f1,stroke:#3730a3,stroke-width:2px,font-weight:bold; classDef device fill:#e0e7ff,stroke:#6366f1,stroke-width:1.5px; classDef syncthing fill:#00c48c,stroke:#008b4d,stroke-width:1.5px,font-weight:bold; class A master class B,C device class S syncthing
In this setup, three nodes are interconnected in a peer-to-peer (p2p) configuration. Laptop2 has
html-autoimport
enabled and leverages Syncthing to manually sync exported bookmarks from mobile devices.The result is a unified, consistent state of bookmarks across all connected devices—except on mobile devices, which retain their own isolated state.
On mobile, you can access the WebUI of any gosuki node, for example:
http://laptop2.lan:2025
.These nodes can be connected through any network topology. For instance, using Tailscale ensures seamless synchronization across your home and mobile devices—no central server required.
For enhanced fault tolerance, you could enable
html-autoimport
on all gosuki devices that share the Syncthing folder. The synchronization algorithm will eventually converge to a consistent state, eliminating duplicates through automatic reconciliation.
How It Works
- Master node starts listening using the
sync-master=true
parameter
- Client nodes connect to each other through master gateway
master-node
- All nodes start relaying synchronization messages in a peer-to-peer fashion
- All bookmark changes (additions/modifications) than happen on any node are:
- Relayed to all nodes connected to master
- Each node merges with existing data using conflict resolution logic
- Propagated to all connected nodes until all bookmarks eventually converge
Troubleshooting
Run gosuki with the command gosuki --debug=warn,sync=trace
for a detailed log.
Issue | Solution |
---|---|
Sync not starting | Verify master-node IP is reachable from client devices |
Connection refused | Check firewall allows port 2026 |
“No master node found” | Ensure sync-master=true on the intended master node |
- Note: All devices must be running GoSuki v1.2+ with P2P sync enabled in config.