Hoq Sync
Folders kept in step across your computers, encrypted before they leave each one.
What it does
Hoq Sync keeps a folder the same on each of your computers. Files are split into content-defined chunks, each sealed with XChaCha20-Poly1305 under a key that only your devices hold. The coordinator and relays carry sealed chunks and a sealed change log, and never receive a key that opens them.
Devices reach each other first through a relay over TLS on port 443, inside a Noise IK session between the two devices. The relay then introduces them, and they try direct paths: TCP, QUIC over UDP with hole punching, and a port forwarded by the router through PCP, NAT-PMP or UPnP. If a direct path drops, traffic falls back to the relay. A web-only setting keeps everything on port 443.
Edits on two computers at once are resolved with version vectors. The losing version is kept beside the file as name.sync-conflict-<date>-<device>, as Syncthing names them. Hoq Sync runs on Linux and macOS today and is not yet open to customers.
In numbers
Specifications
| File encryption | XChaCha20-Poly1305 per chunk, with sizes padded (Padmé) to hide exact lengths. Change records, including paths, are sealed the same way. |
|---|---|
| Who holds the keys | A random 256-bit key per folder, made on the device that creates it. The server stores it only wrapped to each member device's X25519 public key. |
| Chunk names | A chunk's id is a BLAKE3 keyed hash under the folder key, so the server cannot test whether you hold a known file. |
| Device-to-device protocol | Noise_IK_25519_ChaChaPoly_BLAKE2s, end to end between your devices, inside TLS WebSockets on port 443 when relayed. |
| Direct paths | TCP, QUIC over UDP with hole punching, and router port mapping by PCP, NAT-PMP or UPnP IGD. Each can be turned off, leaving web traffic only. |
| Chunking | Content-defined chunks of 256 KiB to 4 MiB, about 1 MiB on average, so an edit re-sends only nearby chunks. |
| Conflicts | Version vectors decide; the other version is kept as name.sync-conflict-<date>-<device>.ext. |
| Platforms | Linux (systemd user service) and macOS (launchd agent). Windows is planned. |
| Ignore rules | A .hoqignore file in gitignore syntax, synced like any other file. |
Features
12 features, all in beta. Listed from the product's code and documentation; each row shows the day it was last checked.
| Create and join | Make a synced folder from a directory and join it on another of your computers. | |
| Share to a device | Give another of your computers a folder by wrapping its key to that device. | |
| Conflict copies | Keeps the losing side of a simultaneous edit as a named conflict copy. | |
| Cross-OS names | Handles NFC/NFD names, case-only collisions and names Windows refuses. | |
| Ignore file | Skips paths listed in .hoqignore. |
| Relay over 443 | Devices meet through a relay over TLS WebSockets, end-to-end encrypted with Noise. | |
| Direct connections | Devices introduced by the relay connect directly over TCP when they can. | |
| Hole punching | QUIC over UDP reaches devices behind NAT without a forwarded port. | |
| Router port mapping | Asks the router to forward the direct port by PCP, NAT-PMP or UPnP. | |
| Web only | One setting turns off direct paths and UDP, leaving TLS on 443 only. |
| Pair with Hoq ID | Adds a computer to your account by a device sign-in that you approve. | |
| Background service | Installs itself as a systemd user service on Linux or a launchd agent on macOS. |
Works with
- Hoq TermBoth sign devices in through Hoq ID and run end-to-end Noise sessions through Hoq relays.
Your data
| Where it is kept | On your own computers. Hoq stores device public keys, wrapped folder keys and the sealed change log, none of which it can open. |
|---|---|
| Getting it out | Your files are ordinary files in an ordinary folder on each computer. |
| If you leave | not published |
APIs and standards
- hoq-sync command line: pair, status, devices, folders, create, share, join, run, direct, service
- Relay protocol: WebSocket over TLS 1.3 on port 443, Noise IK inside
- Standard: Noise Protocol Framework (IK)
- Standard: XChaCha20-Poly1305
- Standard: BLAKE3
- Standard: X25519
- Standard: QUIC
- Standard: STUN
- Standard: PCP
- Standard: NAT-PMP
- Standard: UPnP IGD
- Standard: WebSocket
Compared
| Checked 2026-11-01 | Hoq Sync | Syncthing | Dropbox |
|---|---|---|---|
| Platforms | Linux and macOS; Windows planned | macOS, Windows, Linux, FreeBSD, Solaris, OpenBSD and others1 | not published2 |
| Where files are stored | Only on your computers | Only on your computers1 | Dropbox servers2 |
| Client-side encryption by default | Yes, XChaCha20-Poly1305 with keys only your devices hold | Untrusted (encrypted) devices are optional and marked beta3 | Dropbox doesn't offer client-side encryption; end-to-end encryption is an add-on2 |
| Relayed traffic | End-to-end encrypted with Noise; relays run by Hoq | End-to-end encrypted; public relays or your own4 | not applicable2 |
| What a relay or untrusted peer can see | Padded sizes, timing and IP addresses; never names, paths or contents | Folder ID and label, approximate file sizes, IP addresses, device IDs and traffic volume3 | not applicable2 |
| Transport | TLS WebSocket on 443 with Noise inside; direct TCP and QUIC | TLS with perfect forward secrecy1 | TLS between apps and Dropbox servers2 |