Sync Reliability Suite

SyncLedger

Push a folder to the machine across the room, over your own HTTP server.

Free right now — no account, no card

Get SyncLedger free Windows & Mac · one file, nothing to install

Preview

1 interface design, then a screenshot of it running. Drag, scroll or use the arrows.

Interface design SyncLedger, 1 of 1
Screenshot SyncLedger running on Windows today

Free while we’re in preview

Get SyncLedger

Push a folder to the machine across the room, over your own HTTP server.

The Mac button is for Apple Silicon. On an older Intel Mac, get this one instead.

One file, both ways. Double-click it for the window. Run the same file from a command prompt with arguments and it behaves as the command-line tool, because the engine is inside it. Nothing else to download and nothing to keep beside it.

Early preview. The window has been built and run, but not yet on a real Windows PC or Mac, so expect rough edges. The engine underneath it is fully tested.

  • One file — no installer
  • Reaches only what you point it at
  • Source code published below

Free while in preview. It isn’t signed yet, so Windows or macOS will ask you to confirm the first time you open it. At launch, SyncLedger is included in every plan along with the rest of the range.

Both halves are this one binary

On the machine that should receive the files:

syncledger serve /srv/incoming `--port` 8080 `--token` SECRET

On yours:

syncledger push ./project `--remote` http://nas.local:8080 `--token` SECRET `--apply`

No third-party server, no cloud account, nothing to install. Both sides of the protocol are written with Go’s net/http, so one copy of this program syncs against another copy of itself.

Only the differences travel

Push fetches the remote’s manifest, hashes every local file with SHA-256, and uploads only what’s new or genuinely different. Files whose remote copy already matches are skipped, so re-running after a good transfer is a fast no-op and an interrupted one resumes where it stopped. Pull is the same thing pointed the other way.

Crash-safe, and logged

Uploads land via a temp file and an atomic rename, so a crash mid-upload never leaves a corrupt file at the real name. Every applied transfer appends a line to the ledger with path, size, hash, direction and timestamp. Dry runs write nothing to it.

Know what you are running

Plain HTTP with a shared secret in the X-Sync-Token header, checked on every request including the manifest. That’s real access control and it is not TLS. Run it on a network you trust. HTTPS, accounts and watch mode are all roadmap.

Reading on the job itself

Advanced & technical details Command-line builds, source code, checksums and a recorded session — for developers and IT teams

A working CLI prototype of the network-reliability half of the job: a real authenticated HTTP sync server plus push/pull clients that compare SHA-256 manifests to transfer only new-or-changed files, skip already-matching ones (resumable), and record every transfer to an append-only ledger. Continuous background sync and conflict resolution are still on the roadmap.

Naming status

Working name only — brand verdict **RENAME** (High). Collision: Sync Ledger / SyncLedgers. Rename before launch.

What it draws on

Existing paid software whose best ideas shaped this program: GoodSync, Syncovery, SyncBackPro, ViceVersa Pro.

Command line

There is nothing extra to install. The program you download is the command-line tool as well: give it arguments instead of double-clicking it and it runs as one, with its output on your terminal. The standalone builds below are the same engine on its own, for machines where you would rather not ship a window at all.

syncledger - network sync to/from a remote SyncLedger server (HTTP)

Usage:
  syncledger serve <dir> --port 8080 --token SECRET
  syncledger push  <localdir> --remote http://host:port --token SECRET --ledger ledger.jsonl [--apply]
  syncledger pull  <localdir> --remote http://host:port --token SECRET --ledger ledger.jsonl [--apply]
  syncledger help

Commands:
  serve   Run an HTTP server exposing <dir> for sync (manifest/file endpoints).
  push    Upload new/changed local files to the remote server.
  pull    Download new/changed remote files to the local directory.

Flags:
  --port <n>       Port for "serve" to listen on (default 8080).
  --remote <url>   Base URL of a running "syncledger serve" instance.
  --token <secret> Shared secret sent as the X-Sync-Token header. Required
                    on all three commands; requests with a missing or wrong
                    token are rejected by the server with 401 Unauthorized.
  --ledger <path>  JSON-lines audit log file to append transfer records to
                    (push/pull only). Default: ledger.jsonl in <localdir>.
  --apply          Actually perform the transfer. Without it, push/pull
                    only print the sync plan (dry run) and change nothing.

Protocol (implemented with net/http, stdlib only):
  GET  /manifest         -> {"files":[{"path","size","sha256"},...]}
  GET  /file?path=REL    -> raw bytes of that file
  PUT  /file?path=REL    -> request body is written as that file's content

Run "syncledger <command> -h" for command-specific help.

Recorded from the shipped binary, not written by hand.

Source

Every file the program is built from:

console.go · console_test.go · guided.go · main.go

SHA-256 checksums · build instructions & scope notes · full build plan