AnkiIO 1.0.2
Build, validate, import, and export Anki-compatible decks from .NET
Loading...
Searching...
No Matches
Formats, compatibility, and safety

Verified compatibility

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.

Hostile package handling

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.

Never write a live profile

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:

$env:ANKI_LOCAL_COMPATIBILITY = "1"
dotnet test --filter Category=LocalAnkiCompatibility

Repeat the isolated acceptance suite after every Anki update before broadening the documented compatibility range.