For AI agents: the complete documentation index is available at https://docs.flashnerd.com/llms.txt, the full documentation bundle is available at https://docs.flashnerd.com/llms-full.txt, and this page is available as Markdown at https://docs.flashnerd.com/reference/flashnerd-format/validation.md.
Skip to main content

Validate a file and download examples

Check both the file's structure and its intended import destination. A JSON schema checks an individual record. The app checks the package, destination, and product limits. Review generated questions and answers for accuracy before studying them.

Comprehensive example

Download comprehensive.flashnerd to inspect two decks and five cards covering all 11 field types, folders, tags, media, SRS, all preset types, portable preferences, schedules, and history.

This archive is format demonstration data, including synthetic progress and settings. Inspect its records before importing; settings and preferences can affect your app, and turning on Include study progress imports the demonstration history. Keep Override existing off when inspecting a separate copy. Its tiny PNG and short silent WAV illustrate packaging, not useful study media. For new learning material, use the record definitions and omit study schedules and history.

For an existing deck, obtain its own Download Starter Template in the app instead of treating this example as a universal cards-only file. See Cards-only files.

Editable sources

The following files match the corresponding archive members. Keep the displayed paths when packaging them. A full JSON example on a reference page is expanded for reading; use these JSONL sources, or compact each record onto a single physical line.

Comprehensive package

Each JSONL file may contain multiple records. Keep all referenced companion records when extracting a smaller example. The dependency table explains which files can stand alone. manifest.json may be omitted after edits; the importer ignores it.

Checks before importing

  1. Open the file as a ZIP and inspect its root. It must contain recognized paths such as content/decks/decks.jsonl, not my-folder/content/decks/decks.jsonl.
  2. Parse every JSONL line as one JSON object. Check UTF-8, duplicate keys, escaped string newlines, and exact enum spelling.
  3. Resolve every relationship inside the archive. Match card value keys to field IDs and their types. Follow the separate destination-template rules for cards-only files.
  4. Check field-specific structures: rich text uses Delta arrays; cloze uses UTF-16 ranges; image occlusion uses normalized rectangles. Review inherited versus overridden settings.
  5. Include the actual referenced image/audio bytes under the exact media/<filename> paths. Open the files to check that they are usable media.
  6. Stay within the package limits, including the 20,000-card deck cap and 10,000-record JSONL file limit.
  7. Use the appropriate import preview, review warnings and sample cards, and confirm their content before saving.

An AI's statement that it checked a file is not proof of a completed app import. Ask it to report which checks it actually ran.

JSON schemas

These JSON schema files help editors and AI tools construct individual ordinary records. Download the related schemas together, preserving their filenames; their references resolve to sibling files.

Schema default values document behavior; a schema validator does not insert those values into a record. Missing and explicit null are different unless the property allows null. Unknown properties are allowed by these schemas and ignored on import; they do not add app features or survive a later export.

The schemas describe individual record structures and limits on names, fields, and tags. Their string lengths count Unicode code points without trimming; see package limits for differences from package validation and app behavior. They cannot establish correct cross-file IDs, duplicate JSON keys, folder depth, matching template types, valid cloze ranges or rectangles, ZIP integrity, or complete settings semantics. field_settings.schema.json and deck modeSettings only describe objects; use field settings and deck settings for supported properties. Date and date-time formats require a validator with format checking enabled.

card.schema.json requires ordinary cards' deckId. It does not validate cards-only files, which omit deckId and require the selected destination template. Do not add a fake deckId to satisfy that schema. Check a cards-only file through the selected deck's Add Card preview. The shared field-definition schema permits omitted preset-field IDs, but deck fields and referenced TTS targets require explicit IDs.

Common failures

SymptomWhat to check
Invalid ZIP or unsupported formatGenerate a real unencrypted ZIP using STORE or DEFLATE. Renaming JSON or a different archive format is insufficient.
Empty package or no importable recordsCheck exact root paths and .jsonl suffixes. A manifest, unused media, empty files, or an empty preferences object do not supply content.
JSON parse errorKeep one complete object per physical JSONL line. Remove comments, enclosing arrays, duplicate keys, and whitespace-only lines.
Missing deck, tag, folder, or presetSupply explicitly identified companion records in the same archive; names or existing app records cannot replace them.
Unknown field or incompatible typeUse field IDs rather than labels. For an existing deck, use its own starter and preserve its types.
Incompatible templateDistinguish missing template definitions from valid omitted card values. Full-archive Add Card needs matching source and destination templates.
Invalid rich text, cloze, or masksUse structured Delta arrays, UTF-16 [start,end) ranges, and normalized rectangles. Anki {{c1::text}} syntax is not a Flashnerd cloze range.
Blank image/audio after importInclude real media under the exact path and case. Missing media is recoverable; remote URLs and base64 strings do not attach files.
Cards-only file rejected from HomeOpen the intended deck and use Add Card. Omit all deck files and card deckId properties in this mode.
Duplicate cards after reimportAnonymous cards and copy imports create new records. Updating requires stored IDs from an export and deliberate override.
Unable to load study progressReview schedule/history references, dates, and state constraints. The app may retain content while omitting all imported progress/history; see progress compatibility.

For errors during the app workflow, see import troubleshooting.