# Format support ## Version 0.1.0 support matrix | Input or feature | Status | Tested evidence and boundary | | ---------------------------------- | ---------------------- | ------------------------------------------------------------------------------------------------- | | Desktop revision-store `.one` | Supported subset | Real 34,904-byte Joplin golden; three pages | | FSSHTTP-packaged `.one` | Unsupported | Header is detected and rejected with a controlled diagnostic | | Unknown/legacy `.one` variants | Unsupported | File type and format GUIDs are validated before traversal | | `.onepkg`, single CAB, LZX | Supported subset | Real Joplin package: LZX `0x1203`, three CFDATA blocks, seven entries, five sections, seven pages | | CAB LZX `0x1303` | Supported extraction | Byte-for-byte rust-cab MIT unit fixture, two text entries | | CAB without compression | Supported extraction | Byte-for-byte rust-cab MIT unit fixture | | CAB MSZIP | Supported extraction | rust-cab single-block fixture plus a generated two-block dictionary-chain fixture | | CAB Quantum | Unsupported | Metadata is recognized; extraction fails with `cab-compression-unsupported` | | Multi-cabinet CAB / spanning files | Unsupported | Header flags and spanning folder indexes are rejected | | `.onetoc2` package entries | Listed only | Files are identified, but notebook hierarchy and section order are not interpreted | | Standalone `.onetoc2` | Unsupported in the app | The picker accepts only `.one` and `.onepkg` | “Supported subset” is intentionally narrower than “all files with this extension.” A successful open requires the tested desktop OneStore structures and content graph nodes. Malformed offsets, counts, references, CAB checksums, paths, compressed data, and unsupported variants produce bounded diagnostics or a controlled failure. The default LZX limit accepts CAB window sizes through 8 MiB, but compatibility claims are fixture-backed only for window bits 18 (`0x1203`) and 19 (`0x1303`). MSZIP validates the `CK` prefix, limits each compressed block to 32 KiB + 12, decodes into a fixed-size output buffer, requires the declared output length, and carries at most 32 KiB of history between blocks in one folder. The MSZIP tests establish CAB extraction behavior; no redistributable MSZIP-compressed OneNote export is currently present, so they do not establish producer-specific `.onepkg` compatibility. Trailing CAB data is ignored with a warning. Reserved CAB areas are bounded and skipped. CAB names are decoded as strict UTF-8; unmarked valid UTF-8 receives a warning, while invalid non-ASCII legacy-code-page names are rejected rather than guessed. ## Extracted OneNote data The desktop section path currently returns: - section display name; - page ID, title, created/updated timestamp when available, and page level; - visible Unicode/extended-ASCII rich text as plain text and a text preview; - diagnostics tied to an offset, structure, or page where available. It does not preserve visual position, rich-text formatting, list formatting, tables, images, ink, equations, embedded files, audio/video, active links, page versions/conflicts, or exports. Unsupported content objects remain visible as diagnostics instead of being silently presented as parsed. Within a supported `.onepkg`, each `.one` entry is parsed independently. Malformed or unsupported sections are marked failed/unsupported while other sections remain available. Package navigation is temporary normalized-path order until `.onetoc2` interpretation is implemented. ## Test fixtures The exact hashes, source revisions, licences, expected page names, and CAB structures are recorded in [`tests/fixtures/README.md`](../tests/fixtures/README.md). Tests use no private notebooks and do not treat a synthetic archive as proof of Microsoft OneNote export compatibility.