The PDF engine behind The Yellow App.
Read, edit, compress, redact, repair and convert PDFs inside your own app, on your users’ devices. Written in Rust, always cutting edge, improving every week. No cloud, no per-page fees.
// with PagewerkEngine.xcframework in your target
// once, at launch: checked offline, no phone-home
let status = setLicense(key: "EL1.…")
// everything runs on the device
let small = try compress(input: pdf, level: .strong)
let merged = try mergeFiles(files: [contract, annex])
let report = try privacyReport(input: pdf)
let locked = try protectFile(input: merged, password: pw)using Pagewerk;
// once, at launch: checked offline, no phone-home
var status = Engine.SetLicense("EL1.…");
// everything runs on the device
var small = Engine.Compress(pdf, CompressLevel.Strong);
var merged = Engine.MergeFiles(new[] { contract, annex });
var report = Engine.PrivacyReport(pdf);
var locked = Engine.ProtectFile(merged, pw);const base = "https://cdn.pagewerk.app/engine/0.1.0-e9147c0/";
const { load } = await import(base + "pagewerk.js");
// the key is bound to your domain; without one, results carry the mark
const engine = await load({ base, license: "EL1.…" });
// runs in a worker in the browser; the file never leaves it
const { files, report } = await engine.run("compress", {
files: [{ name: "contract.pdf", bytes }],
options: { level: "strong" },
});// the same surface as the pagewerk-ffi crate; the crate is published later
let status = set_license("EL1.…".into());
let small = compress(pdf, CompressLevel::Strong)?;
let merged = merge_files(vec![contract, annex])?;
let report = privacy_report(pdf)?;
let locked = protect_file(merged, pw)?;Why build on Pagewerk Engine
No servers to run or pay forEvery operation runs on your users’ devices. Your cloud bill for PDF work is zero.Why: the engine is a library, not a service.
Nothing to explain to your privacy teamDocuments never leave the device, so there is no data processing agreement and no upload to secure.Why: the engine contains no network code at all.
One integration for every platformShip the same features with the same results on iOS, Android, macOS, Windows, Linux and the web.Why: one Rust core with bindings for each platform.
Costs you can planLicensed per app or domain, not per page or document.Why: nothing is metered, because nothing runs on our side.
It keeps getting betterPagewerk itself runs on this engine, so every fix and every new format reaches you with the next release.Why: we build it for our own product first.
Safe with hostile filesDamaged and malicious PDFs are repaired or refused, not executed.Why: memory-safe Rust and continuous fuzz testing.
What it does
| Area | Capabilities | Status |
|---|---|---|
| Pages | merge, split, rotate, reorder, delete, extract, insert, crop, page numbers, watermarks, bookmarks | PRODUCTION |
| Size | compression in three levels, render-checked, never returns a larger file | PRODUCTION |
| Security | AES-256 encryption with permissions, unlock, true redaction, privacy report and cleaning | PRODUCTION |
| Robustness | repair of damaged files, PDF 2.0 including Brotli streams | PRODUCTION |
| Forms & signing | fill forms with their date and number formats, flatten, place signatures and images | PRODUCTION |
| Text | searchable text layer from your OCR results, text and images to PDF | PRODUCTION |
| PDF → Office | PDF to Word (.docx) | PRODUCTION |
| PDF to Excel (.xlsx, CSV), PDF to PowerPoint (.pptx) | BETA | |
| Office → PDF | Word, Excel and PowerPoint to PDF, including password-protected files | COMING |
| Workflows | chain any of the above and run it on many files | PRODUCTION |
Production: Pagewerk’s own apps use it today. Beta: works, still being measured. Coming: not in the engine yet.
Where it runs
AppleiOS, iPadOS, macOS
Swift · XCFrameworkWindowsx64, Arm64
C# · .NETAndroidArm64, x86_64
Kotlin · AAR · comingLinux & serversx64, Arm64
Rust crate · laterWeball modern browsers
WebAssemblyGetting started for each platform: Docs.
Licensing
- Try it. The full engine, free for evaluation. Files it writes carry a visible “evaluation” mark.
- Get a key. A licence key bound to your app’s bundle ID or your web domain, signed by us.
- Ship. The engine checks the key offline at launch. The mark disappears. No server, no tracking, no surprise shutdowns.
Licences on requestfor your app, your platforms and your domains
- tell us what you are building
- we reply with an offer
Proven in our own app
Pagewerk for iPhone, iPad and Mac runs on exactly this engine. What works for The Yellow App works for yours.
Talk to us
Tell us what you are building, which platforms you need and roughly how many users you expect.