Security & Privacy

"Local-only" isn't a slogan.
Here's exactly how it works.

You're trusting F2F-Folio with your full financial picture. That deserves more than a tagline — this page explains the actual mechanisms: where your data lives, how it's encrypted, and what F2F-Folio does and does not send over the network.

🖥️

Everything stays on your machine

F2F-Folio has no backend server, no user accounts, and no cloud sync. Your holdings, transactions, and CSV imports are parsed and stored entirely on your own computer. There is no database anywhere for us — or anyone else — to query.

📡

Zero telemetry, ever

No analytics SDK, no crash reporter, no usage tracking, no "anonymous" pings home. This is stated explicitly in the app's own EULA, not just marketing copy. F2F-Folio does make other network calls — price lookups, and broker syncs if you set one up — but every one is something you asked for. The full list is below, including the parts most companies leave out.

🔑

You hold the only key

When you turn on PIN lock, the encryption key is derived from your PIN and never written to disk — it lives in memory only for the session. Nobody, including Fire2Freedom, can decrypt your data without your PIN. There is no password-reset backdoor, because there is no server-side copy to reset.

How PIN lock actually protects your data

Five concrete steps, from the moment you set a PIN to the moment your dashboard renders.

1

Optional PIN lock

PIN protection is opt-in — skippable during onboarding if you don't want it. When enabled, your PIN never leaves your device and is never transmitted anywhere.

2

Key derivation — PBKDF2

Your PIN is run through PBKDF2 with SHA-256 and 600,000 iterations (the OWASP-2023 floor for PBKDF2-SHA256), salted with a fresh 16-byte random value per install. The iteration count is stored in a versioned config, so vaults created on an earlier build are transparently re-stretched to the current count the next time you unlock. This is the same class of key-stretching used by password managers — it makes brute-forcing the PIN computationally expensive even if someone got hold of your local data file. If you prefer a longer passphrase to a numeric PIN, that is supported too.

3

Encryption — AES-256-GCM

Holdings and transactions are encrypted with AES-256-GCM, an authenticated cipher — it detects tampering, not just confidentiality. A fresh 12-byte IV is generated on every single write, so no two encrypted blobs ever reuse the same nonce. Done via the browser's native Web Crypto API (crypto.subtle), not a hand-rolled implementation.

4

Verifier, not your PIN, is stored

What's saved to disk is a salt plus an encrypted verifier token — never the PIN itself and never the raw derived key. After 5 failed unlock attempts, the app locks itself out rather than allowing unlimited guesses.

5

Atomic decrypt on unlock

Enter your correct PIN and holdings/transactions are decrypted together, in memory, before the dashboard renders anything — there's no partial-data flash or intermediate unencrypted write to disk.

What leaves your machine — and what doesn't

DataLeaves your machine?
Holdings, transactions, imported CSVsNever
PIN / derived encryption keyNever
Notes, goals, manual entriesNever
Usage analytics / crash reportsNot collected — none exist
Security ticker symbols (for price lookup)Yes — to Yahoo Finance and OpenFIGI (0.53 and earlier: Stooq as a fallback too)
Ticker symbols, when Yahoo is unreachable0.54 and later: never relayed. 0.53 and earlier: via a public CORS relay, which sees the symbols only
Broker credentials (IBKR Flex token, T212 API key)Only ever to that broker — never to any relay
Statements pulled from a broker syncDownloaded to your machine, never uploaded anywhere
License keyNever — verified offline on your machine (Ed25519)

Security FAQ

What happens if I forget my PIN?+

Because the key only ever exists in your session's memory and is never stored anywhere — not on your disk, not on a server — there is no "reset password" flow that can recover encrypted data without the PIN. The app's Forgot PIN option lets you wipe and start fresh, but it cannot decrypt old data. This is the direct tradeoff of true local-only encryption: nobody holds a spare key, including us.

Is PIN lock required?+

No — it's entirely optional and can be skipped during onboarding. PIN lock protects your data at rest (in case someone else uses your computer); it is independent from Privacy Mode, which just visually masks numbers on-screen and resets every time you reload.

Does F2F-Folio talk to the internet at all?+

Yes, for a handful of things you asked it to do — and here is the complete list. Price data: Yahoo Finance and OpenFIGI (to turn an ISIN into a ticker); versions up to 0.53 also use Stooq as a fallback. Broker sync, only if you set one up: Interactive Brokers and Trading 212, contacted directly. That is everything. No usage analytics, no crash reports, no background sync, and no license server — your key is verified offline on your own machine from its Ed25519 signature, so activation works with the network unplugged. One detail most companies would not print: in versions up to 0.53, when a price lookup cannot reach Yahoo directly, it can fall back through a public CORS relay (allorigins.win, corsproxy.io, codetabs.com, thingproxy.freeboard.io); version 0.54 and later never do this. That relay sees which ticker symbols you are pricing — not your quantities, your holdings, or any credential. Broker syncs never use that path: your IBKR Flex token travels only to IBKR, and if the direct route fails the sync fails rather than routing your credential through anyone else. You can verify all of this yourself — the app is not sandboxed against inspection.

Where exactly is my data stored?+

Locally, on your own machine, in a vault folder inside your own user account — never on our servers. Up to 5 prior versions are kept automatically and are restorable in-app. With PIN lock enabled, that local data is AES-256-GCM encrypted at rest; without it, it's stored in plain form, which is why we recommend PIN lock if you share the computer with anyone.

How does the 7-day trial work, and can it be reset?+

The trial start date is tracked locally, redundantly: in the app's vault and in one further OS-level marker outside the app's own folder, so deleting the app's data doesn't reset it either. None of this reaches a server, identifies you to us, or is used for anything except remembering when your trial started; nothing changes about what leaves your machine (see above). Like any offline trial, someone determined enough to actively work around it always could — this is meant to prevent an accidental reset, not defeat deliberate tampering.

Is the encryption implementation open to review?+

F2F-Folio is closed-source today, but the exact algorithms in use — AES-256-GCM, PBKDF2-SHA256 at 600,000 iterations, native Web Crypto APIs — are named plainly here and in the app's own EULA rather than left as a vague "bank-level encryption" claim. If independent auditability matters to your decision, treat that as an open question, not something we're claiming today.

What if I switch computers?+

The header's Backup button exports everything — holdings, transactions, and profile — as a single JSON file you can carry over to a new laptop, a work machine, or just keep as an offline copy. Restoring is the same drag-and-drop import flow you already use for CSVs. One thing to know: the exported file itself is plain, readable JSON, not encrypted — even if you have PIN lock turned on, only the copy stored in the app is encrypted at rest. Treat the exported file the way you'd treat a bank statement PDF: fine on a USB stick or your own cloud drive, not somewhere public.

Does F2F-Folio keep running after I close its window?+

No — closing the window quits the app. Your data is saved to disk automatically as you work, so nothing is lost; just open F2F-Folio again to pick up where you left off.

Try F2F-Folio free →

Free forever for core tracking (primary member) — Pro unlocks the rest for €49 one-time