Skip to main content

Changelog

This page highlights what's new. The full, version-by-version record (including patch releases) lives in CHANGELOG.md on GitHub.

Latest release

The current line upgrades the engine and turns the viewer into a full editing surface:

  • PDF.js 6.x bundled (up from the 5.x line); existing component APIs are unchanged. The PDF.js 6 modern build raises the browser floor: Safari needs PDF.js's legacy build, which this package doesn't ship.
  • Built and tested on Angular 22 (ng-packagr 22 / TypeScript 6); the peer range stays wide at >=10.
  • Annotation editing & eSign: highlight, text, draw, stamp, plus opt-in signature and comment editors. getAnnotations()/setAnnotations() persistence and download-with-edits via getDocumentAsBlob().
  • Forms: [(formData)] two-way binding and programmatic field access.
  • Search, page organization, and read aloud with sentence highlighting.
  • AI assistant: your own OpenAI-compatible endpoint, with clickable page citations. The library never calls an AI service on its own.
  • Custom toolbar, sidebar & overlays, content protection with watermarks, authenticated loading, true dark page rendering, and four new events (onSidebarViewChanged, onLayersChanged, onNamedAction, onDocumentProperties).

Behavior changes to check when upgrading: showAnnotations now defaults to true; external PDF links open in a new tab by default (externalLinkTarget, with allow-popups added to the iframe sandbox); zoomChange emits named presets (page-fit, page-width, auto) instead of raw numbers for preset zooms.

v25: the ground-up rewrite

After years of incremental change, v25 rebuilt the component on modern Angular. The visible differences:

  • One event-driven action path. Every method waits for a five-level readiness signal instead of polling with timeouts, which removed the race conditions that came from calling methods before the PDF finished loading.
  • Angular templates instead of HTML strings for spinners, error states, and chrome, so custom UI keeps its bindings and goes through Angular's sanitizer.
  • A typed, Promise-based API end to end.

It is a major release with breaking changes. The renamed inputs and methods:

OldNew
[startDownload][downloadOnLoad]
[startPrint][printOnLoad]
[errorHtml] / setErrorHtml()[customErrorTpl]
[spinnerHtml] / setSpinnerHtml()[customSpinnerTpl]

Template inputs replaced the HTML-string properties, several inputs were renamed for clarity, and some event payloads changed shape. The migration guide walks through the upgrade from v20.