VerifyKitv0.5.1

Browser Support

VerifyKit targets modern browsers and runtimes that support WebAssembly and the Web Crypto API. This page lists minimum versions, required APIs, and known limitations.


Desktop Browsers

BrowserMinimum VersionNotes
Chrome109+Full support
Edge109+Chromium-based; same support as Chrome
Firefox115+Full support (ESR 115 is the minimum)
Safari16.4+Full support; requires macOS 13.3+ or iOS 16.4+

Mobile Browsers

BrowserMinimum VersionNotes
Chrome Android109+Full support
Safari iOS16.4+Full support; all iOS browsers use WebKit
Samsung Internet21+Chromium-based
Firefox Android115+Full support

Note: On iOS, all browsers (including Chrome and Firefox) use the WebKit engine. Safari iOS 16.4+ is the effective minimum for all iOS browsers.


Server-Side Runtimes

RuntimeMinimum VersionNotes
Node.js20.19.0+Full support for @trexolab/verifykit-core (headless verification)
Deno2.0+Supports WASM and Web Crypto; use npm specifiers for imports
Bun1.0+Supports WASM; compatible with the core package

The headless @trexolab/verifykit-core package works in all three runtimes. The React viewer (@trexolab/verifykit-react) requires a browser environment with DOM, Canvas, and Web Workers.


Required Web APIs

VerifyKit depends on the following browser APIs. All are available in the minimum browser versions listed above.

APIUsed For
WebAssemblyRunning the signature verification engine
fetchAIA certificate fetching, revocation checking
TextEncoder / TextDecoderString encoding/decoding for WASM interop
DecompressionStreamDecompressing PDF stream data (FlateDecode)
crypto.subtleSHA-256 hashing for file fingerprints
structuredCloneInternal data handling
Web WorkersPDF.js page rendering (off main thread)
Canvas 2DPDF page rendering
Blob / URL.createObjectURLFile handling, download, print

Polyfills

VerifyKit includes the following polyfill, which is loaded automatically:

  • Map.prototype.getOrInsertComputed — Required by pdfjs-dist 5.5+. This is a Stage 2 TC39 proposal not yet available in any browser. The polyfill is bundled and applied on import.

No other polyfills are required when targeting the minimum browser versions listed above.


PDF.js Worker Compatibility

VerifyKit pins a specific version of pdfjs-dist for the viewer. The PDF.js worker script must match this version exactly.

  • Use the legacy build of the worker (pdfjs-dist/legacy/build/pdf.worker.min.mjs) for maximum browser compatibility. The legacy build transpiles newer JavaScript syntax for older engines.
  • The non-legacy worker requires more recent browser versions and may not work in Safari 16.4 or Firefox ESR 115.
tsx
// Recommended: use the legacy worker
<VerifyKitProvider config={{
  workerUrl: 'https://unpkg.com/pdfjs-dist@5.5.207/legacy/build/pdf.worker.min.mjs',
}}>

Note: Do not upgrade pdfjs-dist independently of VerifyKit. The worker and main library must be the same version.


Known Limitations

Safari

  • OCSP/CRL via CORS: Safari's CORS handling is stricter than Chrome/Firefox. Direct OCSP and CRL fetches from the browser are blocked. Use the @trexolab/verifykit-plugin-revocation with a server-side proxy for revocation checking.
  • Web Worker scope: Safari does not support import in classic workers. The PDF.js worker must be loaded as a module worker or from a URL, which VerifyKit handles automatically.

Firefox

  • Private browsing mode: In private browsing, some storage APIs may be restricted. This does not affect verification but may impact the recent-files feature if it uses local storage.

Mobile Browsers

  • Memory constraints: Large PDFs (100+ pages, high-resolution scans) may cause memory pressure on mobile devices. Consider warning users or limiting file sizes in mobile-targeted applications.
  • Touch gestures: Pinch-to-zoom is supported via the usePinchZoom hook. Text selection on touch devices may behave differently than on desktop.

Node.js

  • No Canvas: Node.js does not include a Canvas implementation. The headless @trexolab/verifykit-core package works without Canvas (it only performs signature verification, not rendering). If you need server-side rendering, use a Canvas polyfill like canvas (node-canvas).
  • No Web Workers: PDF rendering in Node.js does not use workers. This is not relevant for headless verification.

Internet Explorer

Internet Explorer is not supported. VerifyKit requires WebAssembly, ES2022+ features, and module syntax, none of which are available in IE.