Skip to content

lamina

lamina creates, reads, edits and saves PDFs. One Rust core does the work. It runs natively, and as WebAssembly in browsers, Node, Deno, Bun and Cloudflare Workers. It takes bytes and gives back bytes: it doesn’t touch the file system or the network, and it reads no clock.

  • lamina is the Rust crate: Document::open_bytes, Builder, saving and jobs you can cancel.
  • @lamina/pdf is the TypeScript API over the WebAssembly build. After one await init(), every call is synchronous, and the API is the same in every runtime.
Area What you get Guide
Generate Pages, text with shaping, bidi and line breaking, embedded and subset fonts, the standard 14, vectors, colour, images, tagged PDF Fonts and text, Images and vectors
Navigate Links, named destinations, outlines, page labels, Info and XMP metadata Links, outlines and metadata
Edit Ops in transactions, undo and redo, incremental or full saves that respect signatures Open, edit and save
Read safely Repair of damaged files as warnings, resource limits, strict mode, passwords (R2–R6) Encrypted files, Limits
Errors One coded error and warning shape on every surface Errors and warnings

Each code block on this site is one of the repository’s tested example files, loaded when the site is built, so the code shown is the code that runs. Every example produces the same bytes in Rust and in each JavaScript runtime. Browse them in the examples gallery.

Pick your runtime: browser or bundler, Node, Deno, Bun, Cloudflare Workers or Rust.