File formatsWorksSource available
Target: Apple iWork formats (Pages, Numbers, Keynote)

Reverse engineering Apple Pages, Numbers and Keynote files into a TypeScript library

Platform
Node 22+ and modern browsers
Outcome
Works

Evidence at a glance

Based on the linked sources. The author's reported result and independent confirmation are separate checks.

AI involvement
Reported models: Claude Fable 5.1, Claude Fable 5. Tools: TypeScript, Protocol Buffers. The writeup below describes the work attributed to AI.
Reported result
Works. This is the directory's source-based outcome classification.
Independent confirmation
Not reported.
Human work and limitations
The repository belongs to the den-frie-vilje organization and the commit log shows one main human committer. The README says tables are inserted from a neutral Apple-made donor, filter rules are read-only, and some questions are still open.

What was done

cupertino-files is an ongoing reverse engineering of the undocumented iWork formats, measured from real documents. Nearly every commit carries a Claude trailer, mostly naming Claude Fable 5.1.

Apple's iWork formats are undocumented, and this library is described by its author as an ongoing reverse engineering of them, measured from real documents. The result is a pure TypeScript package with no runtime dependencies that opens, edits and saves Pages, Numbers and Keynote files in Node 22 or modern browsers, without a Mac.

The README says everything you do not touch is preserved byte for byte. For Pages it lists text edits, named styles, sections, headers, images, tables, comments and footnotes. For Numbers it lists reading and writing every value type, authored formulas with 363 functions, merges, conditional rules and sheet structure. Keynote support covers slides, layouts, transitions, builds and presenter notes. Charts, new blank documents, export to Markdown or CSV and an audit that names faults before save are also described. Password-protected documents and the old iWork 09 XML format are detected and declined rather than mis-parsed.

Open questions are tracked in docs/BLOCKERS.md and capabilities in docs/COVERAGE.md. The commit log shows Claude trailers on nearly every commit (Claude Fable 5.1 on 103, Fable 5 on 40, plus 51 naming Claude), and the repository has agent files.

Reproduce it

setup

Run npm install cupertino-files and try the examples in the README against your own .pages or .numbers file. Fixtures in the repository are sample documents used for tests.

Community

Ask a question, share what worked, or follow the next milestone.

Your library