Bringing your existing flashcard library into Discito
If you've been using a spaced-repetition app on iPhone, you've already built something valuable: a personal review history, a set of decks that fit how you study, and — most importantly — the muscle memory of showing up daily and tapping Again / Hard / Good / Easy. That work is real, and you shouldn't have to throw any of it away to try a different app.
This guide walks through exactly how to bring your existing .apkg library into Discito, what carries over, what doesn't, and how to round-trip back to the open .apkg format whenever you want. There is no lock-in. There is no proprietary format. If Discito turns out not to be for you, you can take everything back with one tap.
Before you start: what carries over
Discito uses the open .apkg file format that the spaced-repetition ecosystem has used for years. The full-fidelity import path covers:
- Notes and cards — every Q&A, cloze, basic-with-reverse, and image-occlusion card
- Embedded media — images and audio files, byte-exact
- Deck hierarchy — nested decks preserve their parent/child structure
- Tags — all card-level tags, including hierarchical
::-separated tags - Review history — every Again / Hard / Good / Easy you've ever logged
- FSRS scheduling state — difficulty, stability, due dates, suspension flags
- Cloze ordinals — multi-cloze cards keep their sibling structure
If you had SM-2 scheduling state instead of FSRS (older decks, or decks created before FSRS became the default), Discito's import pipeline converts SM-2 → FSRS-6 using the same memory_state_from_sm2 routine the open spaced-repetition community uses. The conversion is bit-exact with the fsrs-rs reference implementation. Your scheduling won't suddenly diverge.
Step 1: Export your library to .apkg
The simplest path is to export from a desktop spaced-repetition app on a Mac or PC, because desktop apps typically expose more export options than their mobile counterparts. On iPhone, you can usually export single decks from your current app directly, but a desktop export lets you capture everything in one shot.
From a desktop spaced-repetition app:
- Open the app and find File → Export (or your app's equivalent)
- Set the export format to .apkg (sometimes labeled "Deck Package")
- Choose All Decks, or pick a single deck if you'd rather migrate one at a time
- Make sure Include scheduling information is checked — this is what preserves your review history
- Make sure Include media is checked if your cards have images or audio
- Save the
.apkgfile somewhere you can hand to your iPhone — AirDrop, iCloud Drive, Dropbox, email to yourself
From a mobile app on iPhone:
- Long-press (or open) the deck you want to export
- Look for the Export action
- Choose the .apkg format and confirm scheduling + media are included
- Share the resulting
.apkgfile to Files, iCloud Drive, or wherever you'd like to stage it
A large library — 20,000+ cards with media — can produce a .apkg file in the 200-500 MB range. That's normal. Discito's importer streams the zstd-compressed payload rather than loading the whole thing into memory, so your iPhone won't run out of RAM even on bigger archives.
Step 2: Get the .apkg file onto your iPhone
Any of the usual paths works:
- AirDrop from a Mac — easiest if you exported on desktop
- iCloud Drive — save the file from desktop, then open it from the Files app on iPhone
- Email or Messages — for archives under iCloud's attachment size limits
- Files app from any cloud provider — Dropbox, Google Drive, OneDrive
When iOS sees an .apkg file, it'll offer a Share Sheet with Discito as one of the destination apps. You can also open Discito first, tap the Import button on the Today tab, and pick the file from there.
Step 3: Preview and confirm the import
Before Discito touches anything in your library, the import sheet shows you a preview:
- How many decks the archive contains
- How many cards in each deck
- How many media files (images + audio)
- Which scheduling format Discito detected (FSRS-6, FSRS-5, or SM-2 → FSRS-6 conversion)
- Whether the archive looks valid end-to-end
If you're importing a large library for the first time, this is the right moment to make a decision: do you want to merge everything into your existing Discito decks, or land the import inside a new top-level deck so you can review the result first? Both options are on the import sheet. The default is land in a new deck, which is the safe choice.
Tap Import and watch the progress bar. The commit pipeline runs on a background queue, batched into chunks so the UI stays responsive. If you cancel mid-import, Discito drops everything that hadn't committed and leaves your existing library untouched. There is no half-imported state to clean up.
Imports are atomic at the batch level. Cancel mid-flight, and you're back exactly where you started — no orphaned cards, no stale media blobs, no manual cleanup.
Step 4: Spot-check the result
Once the import completes, open the imported deck and tap a few cards. Things to verify:
- Images render — both inline in QA cards and on Image Occlusion masks
- Audio plays — tap the speaker icon on any audio card; Discito uses
AVAudioPlayerfor embedded audio - Cloze cards work — multi-cloze notes should produce one sibling card per
{{c1::...}}ordinal - Due dates look right — Today's review count should roughly match what your previous app was showing
- Tags filter correctly — pull up the tag chip row on Deck Detail and check that filtering finds the expected cards
If something looks off — a missing image, a card that didn't render — open an issue or email [email protected] with the deck name and the kind of card. Real-world .apkg archives have edge cases the synthetic test fixtures don't cover, and we want to know.
What about review history?
Every Again / Hard / Good / Easy you logged, going back to whenever that card was created, comes across as a Review entity in Discito's Core Data store. The FSRS-6 optimizer (Pro feature) can train against this history immediately — no need to re-bank reviews on Discito's side before it has enough data.
For most users, this means the per-user weight optimizer is usable from day one of using Discito, not after months of fresh reviews. If you've got 5,000+ reviews in your history, the optimizer has plenty to chew on.
The round-trip: exporting back to .apkg
Discito's export pipeline produces .apkg files that conform to the open format and round-trip cleanly with any compatible reader. We test this automatically against the open-source reference Python validator on every build.
To export a deck:
- Long-press the deck on Today or open Deck Detail and tap the overflow menu
- Pick Share Deck…
- Choose .apkg — the CSV option is also there if you'd rather flat-export
- Share the resulting file wherever you'd like — AirDrop, Files, Mail
The exported archive round-trips cleanly: every note, every card, every cloze ordinal, every image, every audio file, every tag, every scheduling field comes out the other end intact and portable to any FSRS-aware app that reads the format.
(CSV export is part of Discito Lite — free forever. .apkg export is part of Discito Pro, with one free trial on the Lite tier so you can verify the round-trip works on your own deck before deciding.)
What about cloud sync from your previous app?
Discito doesn't sync to any third-party cloud service. We use Apple's CloudKit for cross-device sync, which has different trade-offs:
- Free and unlimited, in your iCloud account
- End-to-end encrypted via Advanced Data Protection if you turn that on
- Only works on Apple devices — iPhone, iPad, Mac, eventually Apple Watch
- No third-party server sees your review data, ever
If you actively study on Windows, Linux, or Android, and you want those devices to keep getting updates as you study, a cross-platform cloud sync service may still be the right tool for you and Discito isn't a one-to-one replacement. If your study life is iPhone-and-maybe-Mac, CloudKit is going to feel less like a sync setting and more like a thing that just works.
Credits and gratitude
This entire migration path exists because of the work of the Open Spaced Repetition project, which built the FSRS family of scheduling algorithms and the reference implementations Discito ports. The scheduling math is theirs. Discito's contribution is an iOS-native shell around that work, with on-device AI features layered on top.