Security

Private by design. Encrypted when it travels.

Larksail keeps your library on your computer. If you turn on sync, it’s encrypted on your device before it leaves, and only your devices hold the keys.

  • Works without an account
  • No analytics, no remote code
  • End-to-end encrypted sync
  • Sync is optional, in preview

01 The baseline

Safe before you sign in to anything.

Most of what keeps your data safe isn’t encryption — it’s the data never leaving. That’s how Larksail works out of the box.

02 Sync

End to end, or not at all.

Sync is opt-in and part of Pro. Records are encrypted on your device with the browser’s own WebCrypto, stored as ciphertext, and opened only on devices you’ve approved.

  1. 01 · This device

    You save a tab

    Trip to Kyoto 12 tabs · note: book the 9:40 train
  2. 02 · Encrypt, on the device

    AES-256-GCM

    vault key · fresh nonce bound to vault / table / id
  3. 03 · Larksail’s server

    Stores ciphertext only

    AWq8Hc0t1mZr9kX2vQ… can’t read · can’t search · can’t merge
  4. 04 · Your other computer

    Decrypts, locally

    Trip to Kyoto 12 tabs · note: book the 9:40 train
One synced record, start to finish. The server keeps and returns encrypted bytes, plus what it needs to route them: which vault and record, when it changed and how big it is.

03 Keys

Your devices hold the keys. We hold boxes.

The model is the one password managers use for single sign-on: sign-in says who you are, trusted devices unlock the data.

04 Spec sheet

The algorithms, in one table.

Standard, well-studied primitives from the browser’s WebCrypto — nothing invented here beyond how the pieces are framed.

What Algorithm Detail
Records AES-256-GCM Each record encrypted under its vault key, with a fresh 96-bit random nonce every time.
Binding AES-GCM associated data Each ciphertext is bound to its vault, table and record id — moved or swapped by the server, it fails to decrypt.
Images AES-256-GCM Board images and covers sync as encrypted blobs, bound to vault, kind and id, tagged with the key version.
Device keys X25519 One pair per browser; the private key is non-extractable and never leaves the device.
Account keys X25519 The private key exists on the server only sealed for your trusted devices and the recovery key.
Key sealing X25519 → HKDF-SHA-256 → AES-256-GCM A fresh ephemeral key pair per sealed box; what the box is for is bound in, so one can’t pass for another.
Recovery key 256-bit random Crockford base32, 52 characters. Turned into a wrapping key with HKDF-SHA-256.
Pairing code SHA-256 Six digits derived from the new device’s public key, compared on both screens before approving.
Implementation WebCrypto The browser’s built-in cryptography only. No third-party crypto library, no homemade primitives.
Format Versioned Every payload starts with a format byte, so the scheme can evolve without guesswork.

05 The server

What we can see, and what we can’t.

The sync service runs on Cloudflare Workers with a Neon Postgres database. It routes and stores encrypted records; it can’t read, search or merge them — merging happens on your devices.

The server sees

  • Your email address, to sign you in
  • Your devices: a name like “Chrome on macOS”, their public keys, when each was last seen
  • Per record: which vault and table it’s in, its id, a version number, when it changed and from which device
  • How big each encrypted record and image is
  • Sealed key boxes it has no key to open

Only your devices see

  • Titles, addresses and favicons of saved tabs
  • Collection and space names, notes, tags and highlights
  • The images on your board
  • Your recovery key, or any private key
  • Everything that doesn’t sync at all: the archive, saved page copies, full-page snapshots and AI chats

Honest status: sync is a preview

Sync is off by default and still in preview — it may change, and it isn’t a backup. The encryption design and code are getting an outside security and cryptography review before sync launches for everyone. Until then, keep your own backups (Settings → Data), and read our privacy policy for the full list of what leaves your device and when.

Report a vulnerability

Found something? Tell us first.

If you believe you’ve found a security problem in the extension, the sync service or this site, email us. Please give us a chance to fix it before you share it publicly. Every report is read by the people who build Larksail.

  1. What and whereThe extension version (Settings → General), the browser, or the address on the sync service.
  2. How to reproduce itSteps, a proof of concept, or a short video — whatever shows it best.
  3. What it could lead toYour take on the impact helps us fix the worst things first.
  4. Stay on your own dataTest with your own accounts and devices; don’t access or change anyone else’s.