Native Shell
Native Shell: AI-generated UI, native in your app, on every platform. Apps on iOS, Android, macOS, Windows and Linux, GPUI apps and web pages load signed, sandboxed TSX modules at run time and draw th
Read, inspect and edit Apple Pages, Numbers and Keynote documents in pure TypeScript — zero dependencies, byte-fidelity round trips, measured not guessed.
Translation pending
Developer toolsTypeScript · JavaScriptGitHub @den-frie-viljeOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Read and write Apple Pages, Numbers and Keynote documents in pure TypeScript. Zero runtime dependencies, byte-identical round trips, no Mac required.
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Open, edit, and save Apple Pages, Numbers, and Keynote documents—anywhere JavaScript runs. Pure TypeScript, zero runtime dependencies, no Mac required. You work with paragraphs, cells, and slides; the bytes take care of themselves.
Docs: https://den-frie-vilje.github.io/cupertino-files/
npm install cupertino-files
import { readFileSync, writeFileSync } from "node:fs";
import { PagesDocument, NumbersDocument } from "cupertino-files";
const doc = PagesDocument.load(new Uint8Array(readFileSync("report.pages")));
doc.replaceText("2024", "2025");
doc.appendParagraph("Conclusion", "Heading 1");
writeFileSync("report-2025.pages", doc.save());
const sheet = NumbersDocument.load(new Uint8Array(readFileSync("budget.numbers")));
const table = sheet.tables()[0]!;
table.setCell(1, 1, 143_800);
table.setFormula(1, 2, "=B2*1.25", { value: 179_750 });
writeFileSync("budget.numbers", sheet.save());
Everything you don't touch is preserved byte-for-byte (how). Works in Node 22 or later and modern browsers, ESM-only. Bytes in, bytes out.
The format is undocumented; this library is an ongoing
reverse-engineering of it, measured from real documents.
docs/COVERAGE.md is the always-current answer to
"does it do X?". The short version:
=SUM(A1:A5), =Other::B2); 363 functionsNumbersDocument.blank() and friends: a fresh A4 document or 16:9 deck, no template file neededdoc.audit() names the faults a person otherwise finds by opening the document, and save() refuses an archive missing a required fieldDeeper detail, per capability and with the evidence: the capability matrix · what each open question waits on · the format itself.
npx -y cupertino-files dump info file.pages inspects; export file.key prints Markdown (--format csv a table); import notes.md deck.key builds a document; call runs any editing tool from the shellnpx -y cupertino-files mcp: an MCP server whose tools create, edit, format, and export documents, plus a Claude Code skill in the packageMore in For AI agents and the API reference.
npm install && npm test # unit + fixture suite; never launches an app
npm run test:e2e # macOS only: drives the real apps
Contributions are warmly welcome—CONTRIBUTING.md shows the way, and docs/BLOCKERS.md lists questions where a few minutes with a Mac genuinely helps. Test fixtures are real Apple-written documents from open-source test suites and public repositories (attribution).
Built on the shoulders of iWorkFileFormat, keynote-parser, numbers-parser and WorkKit.
An independent project, not affiliated with or endorsed by Apple Inc. Apple, iWork, Pages, Numbers, and Keynote are trademarks of Apple Inc., used only to name the formats this library interoperates with. It contains no Apple code and declines encrypted documents by design; details in docs/LEGAL.md.
MIT © Ole Kristensen