01 / See the risk

An unambiguous preflight.

Run the scan before your sync client does. Sidecars and lock bytes are explained in plain language, with stable exit codes for automation.

recorded fixture
Exit 2 · do not sync

02 / Make the handoff

Export through SQLite, not around it.

The online backup API reads a consistent snapshot while your app can keep running. The staged copy must pass integrity_check before it is published.

  1. 1
    Snapshot

    SQLite’s supported backup mechanism captures one consistent point in time.

  2. 2
    Verify

    The new database passes integrity check and gets a SHA-256 digest.

  3. 3
    Transfer

    Sync the backup and JSON manifest—not the live database and sidecars.

03 / Put it on the path

Three commands. One safety boundary.

inspect only

Scan a sync root

sqlite-sync-guard scan ~/Sync

Reads headers, sidecar names, and lock regions. It never connects to SQLite.

explicit write

Export a snapshot

sqlite-sync-guard export app.db -o ./handoff

Writes a verified .backup.sqlite3 plus a digest-bearing manifest.

client guard

Write ignore rules

sqlite-sync-guard ignore ~/Sync --client syncthing

Owns one marked block. Existing rules stay intact; repeated runs are idempotent.

Built for scripts, too.

Add --json anywhere. Exit 0 is safe, 2 is unsafe, and 1 means the check was incomplete.

Before the next sync

Make the safe copy obvious.

One static binary. Bundled SQLite. No service, account, or network required.