The release target is Anki 26.05 (build e64c6b1a), collection schema 18, and the v3 scheduler. AnkiIO-generated legacy collection.anki2 APKG packages were imported through an isolated Anki 26.05 backend test. Basic and explicit scheduling state, nested content, and media were verified without opening a normal profile for writes.
| Capability | Support boundary |
|---|---|
| Native JSON v1 | Deterministic semantic round trips for the modeled graph; media bytes are not embedded |
| Legacy APKG read/write | Supported for modeled fields and accepted by the verified Anki 26.05 target |
| CrowdAnki-inspired JSON | Partial interchange; scheduling and several CrowdAnki-specific concepts are omitted |
| Modern collection.anki21b | Detected and rejected; not read or emitted |
| Live schema-18 collection writes | Unsupported |
| Scheduling/review history | Common scheduling fields supported; review-log and FSRS state are partial |
| Deck configuration | Safe defaults emitted; arbitrary presets are not preserved |
An IAnkiVersionAdapter describes evidence-backed capabilities. A matching version number alone is not proof that a new Anki release uses identical collection, scheduler, or package formats.
Treat every package as hostile. AnkiPackageLimits caps entry count, individual and aggregate uncompressed sizes, collection size, and compression ratio. The reader rejects duplicate entries, unsafe paths, malformed media maps, and unsupported collection representations before semantic import.
AnkiIO does not sanitize HTML, execute card JavaScript, render media, or provide malware scanning. Apply normal OS isolation and content scanning when processing untrusted packages.
Package APIs operate on caller-selected files and streams. Do not point temporary tooling at a normal profile database or collection.media directory. Local compatibility tests are opt-in and use uniquely generated workspaces:
Repeat the isolated acceptance suite after every Anki update before broadening the documented compatibility range.