Skip to main content
Support

Browse by category

All categories
Changelog

PDF Editor changelog

All 10 entries, newest first. Click an entry to read it, or go back to the full changelog for the other areas.

changedOne consistent editor across PDF and every file viewer

The PDF Editor and all seven file viewers (STL, OBJ, PLY, GLB, 3MF, STEP, DXF) now share a single editor shell, so the layout, toolbars, and mobile behaviour are identical wherever you are.

What changed

  • Unified shell — open the PDF Editor or any 3D/CAD viewer and the chrome is the same: top bar, mode switches, right-rail panels, and command menu sit in the same place every time. Learn one, know them all.
  • Mobile editor bar — phones get a canonical bottom bar and a slide-up Modes sheet instead of a cramped desktop toolbar. Measure and section controls float as top bars so they don't hide behind the app header.
  • Bigger touch targets — sample, splash, and dismiss buttons now meet the 44px minimum for comfortable tapping.

Bug fixes

  • Fixed a hydration error (React #418) that could flash or misrender tool pages on first load.
  • Gerber toolbar collapses to icons on narrower screens instead of overflowing.
  • STL manifold badge no longer overlaps the status pill; closed accordion headers no longer crush on small screens.
fixedSTEP engine fixes — units, product names, arc surfacing, crash on every real file

The Rust-side STEP engine got three structural improvements followed by a critical bugfix that surfaced during code review. The first three add real-world file support that was previously broken; the fourth fixes a crash that was hitting every production STEP file with a header section.

  • Imperial and bare-metre units now respected — files declaring INCH (conversion-based) or bare METRE (no SI prefix) were rendering at the wrong scale because the tessellator assumed millimetres. The engine now scans the unit context once per file and scales every vertex to mm. Mixed-unit contexts (e.g. cm for accuracy plus mm for geometry) resolve to the geometry unit.
  • PRODUCT names with NULL descriptions now load — files emitted with a NULL description on the PRODUCT entity (very common — e.g. JDC4_.stp) used to silently drop the whole entity, so assembly tree nodes fell back to generic "Mesh 1, Mesh 2…" names. They now surface the actual product names.
  • Arc parametric data surfaced for 1-click radius — STEP CIRCLE entities are now extracted into a parallel array of centre, normal, and radius, ready to power a 1-click radius measurement on arc edges (instead of the current 3-click flow). Snap targets land in world-space aligned to the visible geometry.
  • Crash on every real file fixed — the unit and arc scanners assumed the first ENDSEC; was the data-section terminator; in practice that's the HEADER terminator, which sat earlier in the byte stream and produced an invalid slice range that crashed the engine. The scanners now search forward from the data section, are wrapped in a panic guard so future regressions surface as clean parse errors, and the tessellation tolerance now scales with the unit factor so sub-cm fillets on METRE-unit files don't trip the mesher.
changedCAD viewer polish session — pan tool, explode, navigation primitives, transitions

Big polish push across the 3D viewers focused on closing day-one usability gaps versus the desktop CAD tools they replace. Every viewer now ships the same nav toolset, the same keyboard shortcuts, and smooth view transitions.

  • Pan tool — chip in every 3D viewer's top toolbar; while active, left-drag pans and right-drag keeps orbit (matches Autodesk and Onshape).
  • Home view — explicit Home button restores the camera to the view that was framed when the file loaded, not a static default. Iso-views and cube-clicks tween for 300 ms instead of hard-snapping.
  • Bookmarks menu — five saveable named camera views with save / restore / rename / clear, plus quick jumps to the seven standard cube views. The storage hook already existed; every viewer now has a UI for it.
  • Tree search — tree-driven panels (assembly tree, 3MF parts, OBJ groups, glTF nodes) get a name-filter input above the list when there are more than five nodes.
  • STEP explode — the explode slider already worked for 3MF; now the STEP viewer has the same chip plus an E shortcut.
  • Per-snap-type glyphs — measurement snap markers now report whether the snap landed on a vertex, an edge midpoint, or a face centroid, instead of always reading "vertex".
  • Polygon picking polish — area mode now shows running area on the cursor coach, a dashed ghost outline of the in-progress polygon, and a pulsing yellow "close-ring" marker over the first vertex when the cursor gets close enough to close the loop.
  • Zoom window — marquee-drag a rectangle on the canvas, release, and the camera tweens to frame that region. Single-use (auto-disables after the zoom), matching Autodesk and Onshape.
  • Display controls — three new runtime presets (background: theme/dark/light/gradient; lighting: studio/outdoor/three-point/soft; render quality: low/auto/high).
  • Face selection + flood-fill — click a face, the viewer flood-fills coplanar triangles into a translucent cyan highlight, then exposes "Fit to selection" in the right-click context menu so you can frame just that face.
  • Right-click context menu — Fit to selection, Home view, Start measure, Clear selection — available on the canvas of every 3D viewer.
  • Reduced-motion respect — when the OS reports prefers-reduced-motion, view transitions snap instead of tweening.
addedCAD viewers: walk-through mode, markup overlay, Autodesk-grade measure

The 3D viewers (STEP, STL, 3MF, OBJ, PLY, GLB) picked up a wave of features that close the gap with Autodesk Viewer and Onshape. You can now walk through a 3D model first-person, annotate it on top of the canvas, and measure with four tools instead of two — across every supported format.

  • First-person walk mode — toggle "Walk (WASD)" from the command palette in any 3D viewer. Move with WASD, look around by holding the mouse, descend or rise with Q/E. Walk speed automatically scales with model size so a warehouse and a tiny part both feel natural.
  • Markup overlay everywhere — every 3D viewer now has the rectangle, sticky-note, and arrow annotation tools that previously only existed on the STEP viewer. Annotations are remembered per file.
  • Measure UX rebuild — a new top toolbar (in place of the old right-rail accordion) carries four measurement modes: distance, angle, radius, and area. Distance and area gain an along-surface mode that follows curved geometry instead of cutting in straight lines. Each measurement gets a floating leader-line label on the canvas that tracks the camera as you orbit; click the label to delete the entry.
  • Undo, retry, escape — Cmd/Ctrl+Z undoes the last measurement, Backspace pops the last pick mid-polygon (so a misclick during a 5-point area no longer means restarting), and Esc cancels the in-flight pick buffer without losing committed entries.
  • Section box fix — the dotted "stippling" pattern that appeared on section-box faces at default slider extremes is gone. Clip planes now skip extreme bounds entirely and are nudged slightly off the surface on partial crops.
fixedTheme toggle on every editor page

Editor pages (PDF Editor, Gerber Viewer, Compare PDF) were missing the light/dark toggle in the editor header. You had to leave the editor and go back to a regular page to flip themes. The toggle now lives in the editor header alongside the Support button, persists your choice across navigations, and uses a smooth cross-fade transition.

addedPDF Editor — real in-place text editing, finallyOpen PDF Editor

The PDF editor's edit-text mode is no longer a polite lie. Until this week, clicking a word and typing a replacement drew a white rectangle over the original glyphs and stamped new ones on top — the same trick most online "PDF editors" use. Saved files preserved the original byte stream underneath, the new text didn't match the original font, and anything wider than the original word overflowed adjacent text. Same problem Adobe charges $20/month to solve.

This week's wave swaps that cover-and-overlay hack out for a real text-edit engine built on pdfium-wasm — the same C++ library that powers Chromium's PDF viewer, compiled to run in your browser. Edits rewrite the underlying content stream. The original font, color, position, and matrix are preserved. Adjacent text shifts to make room. Long edits wrap at the right margin and push following paragraphs down. The 600 KB engine loads lazily on the first edit, never on page load.

What changed for users

  • Click a word, type, save. That's it. The click lands a caret where you pressed — no more drag-rectangle picker that didn't quite know which characters you meant.
  • Font, color, and position survive the edit. Edit "John Doe" → "Jane Smith" on a contract, the rendered text stays in the same Helvetica / Times / Calibri / Roboto / whatever, same color, same baseline. No more black text appearing where the original was navy.
  • Adjacent text on the same line gets out of the way. Type a longer word into the middle of a line and the rest of the line shifts right. Same model as Acrobat Pro on a single-line edit. (Full paragraph reflow — wrap to next line + push following paragraphs down when an edit makes a paragraph taller — landed in the engine but doesn't reliably trigger on real-world PDFs yet. Tracked for v1.3.)
  • CJK, Cyrillic, Greek, smart quotes now work. Old engine threw on any glyph the original font's subset didn't ship. New engine swaps in NotoSans (Latin / Cyrillic / Greek / Vietnamese superset) when the original font can't render your new characters. Sans-serif edits stay sans-serif; serif stays serif; bold stays bold; italic stays italic.
  • Toast warning when reflow clips off the page. Acrobat clips silently. We tell you.

Editor UX polish

  • Click-to-edit replaces drag-to-select in the edit-text mode. Single click on a text run picks that run; caret lands at the click position. Mirrors Acrobat exactly.
  • Subtle dashed cyan underline appears under text you're editing in the preview. The preview can't load the PDF's actual embedded font into the browser without significant glue, so font family + metrics are an approximation — the underline marks the preview as "approximate". The saved file uses the real font.
  • Preview now reads pdfjs's font family hint — a serif source PDF previews in serif, sans-serif in sans-serif, instead of always falling back to Helvetica.
  • Cover-rect cleanup: the white box that hides the original glyphs is now sized to whichever is wider (original glyph extent vs new text), with descender padding so the dots from g/p/y/; don't peek past the edge.

Engineering notes (skip if you don't care)

  • pdfium-wasm (@embedpdf/pdfium, MIT, ~2 MB gz) runs in a dedicated Web Worker, loaded via the project's existing wasm-cache (IndexedDB blob cache with SHA-256 verification). First edit pays the load; subsequent edits in the same session are instant.
  • Same-line shift uses FPDFPageObj_Transform translates on every text object whose pre-mutation top-Y matched the edited line.
  • Wrap detection: when a shifted sibling's new right edge crosses pageWidth − 36 pt (half-inch margin heuristic), it wraps to (leftMargin, baselineY − lineHeight). Line-height is detected from the nearest line below, falling back to fontHeight × 1.2.
  • Font fallback chain: PDF base-14 fonts first (Helvetica / Times / Courier with bold + italic variants), NotoSans for everything else. Bytes lazy-fetched from public/fonts/ only when an edit actually introduces glyphs the original subset can't ship.
  • Bypassed @embedpdf/engines and called the raw FPDF* / PDFiumExt_* symbols directly. The high-level wrapper hides the raw doc pointer behind a private cache, which we need exposed for FPDFText_SetText (per-object op). Direct calls also drop ~2 MB of unused engine surface (annotations, render, redact, image convert).

Known limits (tracked for v1.3)

  • Paragraph reflow doesn't trigger reliably on real-world PDFs yet. The wrap-to-next-line + push-paragraphs-down logic ships and works on synthetic fixtures, but real PDFs hit edge cases in line detection that suppress the trigger. Single-line shift works in practice; multi-line reflow needs a rebuild against a real-PDF corpus.
  • Edit-text font picker still only exposes Helvetica / Times / Courier in the toolbar. The save path embeds full NotoSans bold + italic variants when needed, but the picker doesn't let you choose them at edit time.
  • Bundle hit: pdfium adds ~2 MB gz. Only loaded on the first edit, never on page load — sessions that just view PDFs pay nothing. Acceptable per the editor's role as the flagship tool.
  • Calibri / Roboto / Open Sans fall back to NotoSans (Regular / Bold / Italic / BoldItalic, picked from the original font's weight + italic angle). Visually close for body copy, not pixel-perfect for headings.
  • Mid-word break on overflow: only whole sibling text objects wrap. A single text object that spans the right margin still overflows. Workaround: edit it in two pieces.
  • No cross-page overflow: content pushed past the page bottom clips. Toast warns; user fixes manually. Acrobat clips silently in the same scenario.

Files don't leave the device. The editor still runs entirely in-browser; pdfium adds no network calls except the one-time WASM + font fetches (same-origin, cached forever after).

changedEditor splash and Gerber Viewer progress polishedOpen Gerber Viewer

A small polish pass on the PDF Editor and Gerber Viewer loading flow:

  • The Gerber Viewer progress bar now reflects real parse progress instead of sitting at the slice midpoint and jumping at the end. The in-card splash and the canvas overlay also now use the same progress copy, so the wording can't drift between the two surfaces.
  • Drag-and-drop highlight on the PDF Editor splash no longer flickers at 60Hz while the cursor hovers — cleaner visual feedback when staging a file to open.
addedPDF Editor v1.1 — Watermark, Bates, Markdown, true redaction & moreOpen PDF Editor

A second wave landed on the in-browser PDF editor — eight new doc-scope tools, two new export formats, true legal-grade redaction, an Adobe-style Move tool, and a heavy interaction-polish round on top of the v1 ship.

New tools

  • Watermark mode: text or image stamp with live preview on the active page. Position grid, opacity, rotation, tile pattern, font + size + color picker. Apply commits and bakes into every page on save.
  • Bates numbering: legal-discovery sequence stamps. Configurable prefix / suffix / start number / digit count / corner / margin / font + size + color.
  • Header & Footer: per-page tokens ({page}, {pages}, {date}), independent left / center / right alignment for header and footer, optional odd / even split for double-sided print docs.
  • Crop pages: numeric-precision crop with mm / inch / pt unit picker, link-all-sides toggle, dashed-cyan preview overlay so users see exactly what stays before saving.
  • Bookmarks editor: read existing /Outlines via pdfjs, write back via pdf-lib's low-level dict + array refs. Add, rename, indent, delete, point at any page.
  • Metadata editor: title, author, subject, keywords, creator, producer, creation + modification dates. Pre-fills with current values; Apply rewrites the /Info dict.

New export formats

  • PDF → Excel (.xlsx): detects tables on every page via the existing pdf-table-detect heuristic, writes one sheet per detected table. Empty fallback so the user always gets a file.
  • PDF → Markdown (.md): heading detection by font-size delta, list detection by bullet glyph + indent, tables reuse the same engine as Excel and render as pipe tables. Built for AI / RAG / docs-as-code workflows that Adobe doesn't ship at all.

Legal-grade redaction

  • True byte-level redact: every page that has a redact-rect op is rasterised at 200 DPI on save and the page's content stream is replaced with a single full-page image draw. The original text is gone in the saved bytes — not just a black overlay on top. Pages without redaction stay vector.
  • PII auto-detect: regex catalog with validators (Luhn for credit cards, mod-97 for IBAN, plus SSN / email / phone). Click Auto-detect in Redact mode, review matches grouped by kind with checkboxes, apply. Coords project through vp.convertToViewportPoint so the redact rect lines up on cropped or rotated pages.

Editor UX

  • Move tool (Adobe Hand): toolbar mode for click-and-drag panning with a dedicated grab cursor. Space-hold + middle-mouse remain as momentary overrides. Pan now suppresses the page-jumper dispatch so a small drag doesn't yank multiple pages.
  • Zoom range bumped to 8× so blueprints and floor plans can be inspected pixel-by-pixel. Page edges are now reachable via horizontal scroll at high zoom (align-items: safe center flips the stage to start-align when content is wider than the viewport).
  • Edit-text drag-select: drag a rect over text to select only the characters under the rect (Acrobat / Sejda pattern). Tap fallback still picks a whole word for quick edits.
  • Bigger BB corner handles: 12 px squares with 14 px hit tolerance, easier to grab on touchpads.
  • Right pane redesign: single-active accordion with Bates / Header & Footer / Crop / Bookmarks / Metadata / File info sections. Open section claims the remaining height and scrolls internally so long forms never get clipped. History pinned at the bottom at fixed height.
  • Status bar tip: Ctrl+scroll = zoom · Move tool / Space = drag always visible.
  • More shapes (annotate): ellipse and line tools added next to rectangle / freehand / arrow.

Search + edit-text precision

  • Search highlight projects through vp.convertToViewportPoint so coords align on cropped, rotated, or non-zero-MediaBox pages. Centers on each next / prev match instead of stopping at page top. New scrollbar marker column shows every match in the doc — click any tick to jump.
  • Underline / strike / highlight snap is per-character now, not per-text-item — dragging over a single word inside a long line snaps to the word, not the line.

Loft Tools site

  • Updated changelog + roadmap pages with categorised entries and Google-Keep-style task cards. Click a roadmap card to expand its full task list.

The editor lives at /tools/pdf-tools/pdf-editor. Files never leave your device.

addedPDF Editor — Adobe-grade editing in your browserOpen PDF Editor

Loft's first epic app. Full PDF editor with eight modes wired end-to-end. Files never leave your device — every byte of the edit, the OCR, the redaction runs locally.

  • Edit existing text: click a word on any page, replacement input opens below the original with the source highlighted in cyan, type the new text, Enter commits. White cover + new glyphs land at save time.
  • Add text: click anywhere on a page to drop a text box. Adobe-style font-size stepper (−/+/editable readout) and a Sans / Serif / Mono picker that maps to pdf-lib's StandardFonts (zero shipped font bytes).
  • Sign: capture once via type or upload, click anywhere on any page to stamp. Each placement auto-selects so you can immediately drag-position or resize.
  • Annotate: highlight, underline, strikethrough, rectangle, freehand, arrow. Black / red / blue defaults, per-tool color swatches, stroke width control.
  • Select: click any annotation, drag to move, drag a corner to resize, Delete to remove. Photoshop-style History timeline panel on the right lets you jump to any prior state.
  • Redact: drag-to-redact draws a black opaque box; save bakes a white-then-black cover into the byte stream (Adobe-canonical look).
  • Fill forms: AcroForm fields highlighted in Firefox-yellow auto-fill style. Click + type, save flattens values into the document. Empty-state banner when the PDF has no fillable fields.
  • OCR: one-click language picker → engine runs locally (Tesseract or PP-OCRv5 via ONNX Runtime Web) → result replaces the active doc as a searchable PDF with an invisible text layer.
  • Export: PNG, JPG, or TXT. Single page direct-download, multi-page → ZIP via JSZip.
  • Continuous scroll: virtualized stack with a ±1 render buffer plus IntersectionObserver, page dims pre-resolved at doc-open so the page jumper lands accurately on long / mixed-size docs.
  • Find (⌘F): whole-document text search, prev / next cycles individual matches, yellow rect highlights wrap each matched substring (not the whole line).
  • Save: File System Access API on Chromium → in-place overwrite after first prompt. Safari / Firefox fall back to download.
  • Undo / redo: every edit becomes an event-sourced op, materialised into the rendered state at save time. Drag-move and delete-annotation flow through the same undo stack.

The editor lives at /tools/pdf-tools/pdf-editor. It replaces nothing — the standalone PDF tools (compress, merge, split, sign-pdf, redact-pdf, annotate-pdf, ocr-pdf, etc.) all stay shipped as the fast-path for single-action use cases.

addedPDF Editor v1.1 — Watermark, Bates, true redaction, more formatsOpen PDF Editor

Six new document-scope tools, two new export formats, legal-grade redaction, and an Adobe-style Move tool landed on the PDF editor the same week as v1.

New tools

  • Watermark mode: text or image stamp with live preview on the active page. Position grid, opacity, rotation, tile pattern, font / size / colour. Bakes into every page on save.
  • Bates numbering: legal-discovery sequence stamps with configurable prefix, suffix, start number, digit count, corner, margin, font, size, colour.
  • Header & Footer: per-page {page}, {pages}, {date} tokens; independent left / center / right alignment; optional odd / even split for double-sided print.
  • Crop pages: numeric-precision crop with mm / inch / pt picker, link-all-sides toggle, dashed-cyan preview of what stays.
  • Bookmarks editor: read existing outlines, add, rename, indent, delete, point at any page.
  • Metadata editor: title, author, subject, keywords, creator, producer, dates — pre-filled with current values.

New export formats

  • PDF → Excel (.xlsx): detects tables per page, writes one sheet per table.
  • PDF → Markdown (.md): heading detection by font-size delta, list and table detection; built for AI / RAG / docs-as-code workflows that Adobe doesn't ship at all.

Legal-grade redaction

  • True byte-level redact: every page with a redact rect is rasterised at 200 DPI on save and its content stream is replaced. The original text is gone from the saved bytes.
  • PII auto-detect: regex catalogue with validators (Luhn for credit cards, mod-97 for IBAN, plus SSN / email / phone). Scan the doc, review matches grouped by kind, apply.

Editor UX

  • Move tool (Adobe Hand) — click-and-drag panning, dedicated grab cursor, Space-hold and middle-mouse as momentary overrides.
  • Zoom bumped to 8× for blueprints and floor plans; page edges are now reachable at high zoom.
  • Edit-text drag-select: drag a rect to select only the characters under it (Acrobat pattern); tap still picks a whole word.
  • Bigger BB corner handles (12 px squares, 14 px hit tolerance) — easier to grab on touchpads.
  • Right pane redesign: single-active accordion plus pinned History timeline at the bottom.
  • Search precision: highlights project correctly through cropped and rotated pages; underline / strike / highlight snap is per-character, not per-line.