Local-first storage

Your library, reading positions, notes, highlights, search index and knowledge graph are stored on your device. Local data lives in a SQLite database. Everything already cached remains readable offline, and no account is required for any of it.

Local libraryOn
Offline readingOn
Account required for local readingOff
Cloud syncOptional
Local AI modelsSupported
User-controlled AI keysOn

What each sync option means

These are genuinely different arrangements. They are listed separately, with what protects the data in each case, because treating them as interchangeable would misrepresent where your reading goes. In particular: two of them are end-to-end encrypted and one is not, and that difference is stated rather than blurred.

Local only

The default. One device, nothing leaves it. No account, no server, no network dependency for reading.

Nothing is transmitted, so there is nothing in transit to protect.

Online Sync

Pro

The browser extension, the desktop app and the phone stay in step through FlowReader’s own service, in close to real time and without you doing anything. This is the one that makes a second device feel like the same library.

Protected by account authentication, TLS in transit, and per-user server rules that make one account’s data unreadable to another. It is not end-to-end encrypted: the service can technically read what it stores. If that matters to you, use folder or Dropbox sync instead.

Dropbox

Devices sync through your own Dropbox account. Slower to converge than Online Sync, and it needs Dropbox on each machine, but no FlowReader server is ever involved.

End-to-end encrypted with a passphrase you choose and only you hold: AES-256-GCM, keys derived with PBKDF2 at 600,000 iterations. Dropbox stores a file it cannot read. Lose the passphrase and the data is unrecoverable. That is what the guarantee costs.

Local folder

Devices sync through a folder you control: an iCloud Drive or Google Drive folder, a network share, anything your own file-sync tool already handles.

The same end-to-end encryption as Dropbox sync, over whichever transport you chose. FlowReader never sees the folder or the passphrase.

What syncs, and what never does

With sync enabled, these travel between your devices:

  • Reading positions, so you stop on the laptop and continue on the phone mid-paragraph
  • The archive itself: items, collections, tags and reading status
  • Highlights, notes and annotations
  • Reader settings, presets and custom themes
  • News sites, feed subscriptions and feed settings
  • Smart Rules and reading statistics
  • Enough cached content to reopen a saved item on a device that never downloaded it

These never leave the device on any provider:

  • AI provider credentials: never synced, on any provider
  • Search indexes and other derived data, which each device rebuilds itself
  • Transient state: import progress, background queues, open panels

Credentials you supply

AI features run on your own provider credentials, or on a local model through Ollama or LM Studio. Keys are stored locally, in the system keychain on desktop, and are never synced. There is no app-owned AI key that reads your archive. When a server-side Flow output needs AI, your key is client-encrypted so that only the Flow runtime can decrypt it. Deterministic collection and compatible signals do not require a key.

Untrusted content

Newsletters, feeds and extracted web pages are treated as untrusted input and are sanitized on ingestion. When archive or web content re-enters an AI prompt, it is fenced as untrusted data rather than instructions. Network tool use requires explicit consent per origin, and outbound URLs are subject to a strict policy.

Export and deletion

You can export your complete library, annotations and reading data at any time, in JSON, OPML and FlowCollection bundles. Local data can be deleted from Settings. If sync is enabled, remote data and the account can also be deleted.

The data export screen, where the library, annotations and reading data are exported from the device.
Export runs entirely on your device.

Reporting a vulnerability

Do not open a public issue for a suspected vulnerability. Send a private report with the affected version, runtime, reproduction steps, impact and any suggested mitigation. Do not include production credentials or user content. Maintainers acknowledge a complete report within five business days, classify severity, and coordinate remediation and a disclosure timeline. Reports involving active credential theft or remote code execution should be marked urgent.

Report a vulnerability

FlowReader does not claim any security certification, external audit, zero-knowledge architecture, guaranteed encryption property, data-residency commitment, or regulatory compliance. Nothing on this page should be read as one.