Skip to main content
Flashcard AI is a local-first application. All data is stored as JSON files on your device. Google Drive sync is optional and only copies the deck and session data — never images or credentials.

Desktop files (Python / .NET)

All files are written to the same directory as the app executable (or app.py when running from source).
FileContents
decks.jsonAll decks and their flashcard data
settings.jsonApp settings: api_keys, theme, quizlet_format
quiz_sessions.jsonActive quiz session progress, keyed by deck_id
token.jsonGoogle OAuth token, created on first Drive sign-in
token.json is created automatically when you sign in to Google Drive. settings.json is created on first save. Neither file is present until the relevant feature is used.

Mobile files (Android)

The Android app uses React Native AsyncStorage instead of the filesystem:
  • Deck list
  • Quiz session map (keyed by deck_id)
  • Google Drive sync local state
To move decks from desktop to mobile, export decks.json from the desktop app and import it on the mobile app, or use Google Drive sync.

Data model

Flashcard

FieldTypeDescription
card_idstringUnique identifier (UUID)
questionstringThe question text
optionsarray of stringAnswer options (e.g. ["A. ...", "B. ..."])
correct_answersarray of stringCorrect option labels (e.g. ["A"] or ["A", "C"])
question_typestring"single_choice" or "multiple_choice"
image_pathstringAbsolute local path to the source image
notesstringOptional notes; set by AI when answer was inferred
statusintegerStudy progress: 0 unseen, 1 learning, 2 mastered

Deck

FieldTypeDescription
deck_idstringUnique identifier (UUID)
namestringDeck display name
cardsarrayList of Flashcard objects
created_atstringISO 8601 timestamp of creation
updated_atstringISO 8601 timestamp of last save
source_folderstringFolder path used when the deck was scanned
descriptionstringOptional description

QuizSession

FieldTypeDescription
deck_idstringReferences the parent deck
session_idstringUnique session identifier
question_orderarray of integerShuffled list of card indices (positions in cards array) for this session
current_indexintegerPosition in question_order
answersobjectMap of card_id to the user’s answer
correct_countintegerRunning correct answer count
wrong_countintegerRunning wrong answer count
started_atstringISO 8601 timestamp
updated_atstringISO 8601 timestamp of last save

settings.json structure

The settings file is created automatically on first save. Default values when the file does not yet exist:
{
  "api_keys": [],
  "theme": "dark",
  "quizlet_format": "full"
}
FieldTypeDefaultDescription
api_keysarray of string[]List of Gemini API key strings used for scanning
themestring"dark"UI theme ("dark" or "light")
quizlet_formatstring"full"Default Quizlet export format ("simple", "full", "compact", or "safe")

decks.json example

[
  {
    "deck_id": "abc-123",
    "name": "Networking Exam",
    "created_at": "2026-01-15T10:00:00",
    "updated_at": "2026-01-20T14:30:00",
    "source_folder": "C:/scans/networking",
    "description": "",
    "cards": [
      {
        "card_id": "card-456",
        "question": "Which layer of the OSI model handles routing?",
        "options": ["A. Data Link", "B. Network", "C. Transport"],
        "correct_answers": ["B"],
        "question_type": "single_choice",
        "image_path": "C:/scans/networking/slide_05.png",
        "notes": "",
        "status": 2
      }
    ]
  }
]

Notes on specific fields

image_path stores the absolute local path to the source scan image at the time the card was created. These paths are device-specific and are not uploaded to Google Drive during sync. If you move your image folder, the path reference becomes stale, but the question and answer data is unaffected. status tracks your study progress per card:
ValueMeaning
0Unseen — not yet reviewed
1Learning — marked wrong at least once
2Mastered — marked correct
updated_at on a deck is refreshed automatically on every save. During Google Drive Smart Merge, the deck with the newer updated_at timestamp wins, so the most recently modified device takes precedence.
To back up your decks, copy decks.json to a safe location. This single file contains all your deck and card data. quiz_sessions.json contains in-progress session state and can be omitted from backups if needed.
To reset the app to a clean state, delete decks.json, quiz_sessions.json, and settings.json. The app recreates them with defaults on next launch. Delete token.json as well to sign out of Google Drive.

Gemini API keys

Add and manage API keys for AI scanning.

Google Drive setup

Configure Drive sync for multi-device access.

Build docs developers (and LLMs) love