Repository navigation
Backup Format
Source of truth: this wiki page.
Settings → Your data → Back up now saves the whole app as one file,
fluenough-backup-<yyyy-mm-dd>.fnbackup (#470). Restore from a file reads
such a file back.
The file is a plain zip of small UTF-8 text files, so a backup outlives the app the way the review log does: any unzip tool opens it. The app writes its entries stored, not compressed, and reads stored or deflated entries, so a backup unzipped and zipped again by hand still restores. No encryption, no zip64, no multi-disk archives.
A backup never holds deck files, nor anything that restricts a profile. After a restore the languages it lists download again.
| File | What it holds |
|---|---|
manifest.json |
What the file is; read first. Required. |
log.jsonl |
The review log, leech actions and fitted parameters, byte for byte the file Export review log writes (Log-Format). |
settings.json |
Every setting, as a JSON object of string keys to string values, except the reviewer's. |
reviewer.json |
The reviewer's settings, the same way: review_decks, rater_code (the access code; owner, 2026-10-11), review_intro_shown, reviews. |
downloads.json |
{"languages": ["bn", "hi"]}: the languages whose decks were on the phone. |
A part that is missing reads as empty, and a setting that is not there takes its default. A file or key the app does not know is ignored.
{"format":"fluenough-backup","version":1,"appVersion":"0.5.0","schemaVersion":7,"createdAt":"2026-09-28T13:10:00.000Z","kind":"you","reviews":6,"parts":["log.jsonl","settings.json","reviewer.json","downloads.json"]}| Field | Notes |
|---|---|
format |
Always fluenough-backup. A file without it is not a backup. |
version |
The backup format, 1. An app refuses a file whose version is newer than it reads, names the app that made it, and changes nothing. |
appVersion |
The app version that made it. |
schemaVersion |
The database schema then. Informational only: every part is read by its own format, never as table rows, so a backup survives migrations. |
createdAt |
ISO 8601, in UTC. |
kind |
What made it: you (Back up now), update (an app update began to download), restore (the copy of what a restore replaced), file (a file restored from, kept as it was read). Unknown reads as you. |
forVersion |
For an update backup, the version being downloaded. |
reviews |
How many reviews log.jsonl holds, so Recent backups can say without reading the log. |
parts |
The other files in the zip. |
The app keeps backups in its own storage, which an update leaves alone: the five newest of any kind, of which at most the three newest made by an update. Each can be downloaded or restored from Recent backups.
A restore reads and checks the whole file, and shows what it holds, before
anything changes. It replaces the progress and settings the learner has,
after asking, and keeps a copy of them first. Replacing the append-only
review log is the one logged exception to AGENTS.md rule 9 (owner,
2026-10-17: "Logged exception"): in one transaction, the database empties
reviews and leech_actions, writes the backup's, and appends to
restores when it happened, which backup it was and the name of the copy
kept first. A failure leaves the app as it was.
See also: Contributing · Home
1. Learner guides
- Learner Guide
- Getting Started
- Today and Daily Lessons
- Drills and Skills
- Courses and Paths
- Proficiency Levels
- Scripts and Readings
- Readings ISO 15919
- Speaking and Listening
- Progress and Stats
- Profiles and Settings
- Backup and Restore
- Reporting a Problem
2. Deck building guides
- Deck Building Guide
- Deck Format
- Romanising Indic Languages
- Deck Licences and Quoted Books
- Deck Tools
3. Review guides
4. Translation guide
5. Building on iOS
6. Roadmap
7. Sources and attributions
8. Contribution and agentic coding