4.4 KiB
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 use no private
notebooks and do not treat a synthetic archive as proof of Microsoft OneNote
export compatibility.