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
| Browser | Minimum Version | Notes |
|---|---|---|
| Chrome | 109+ | Full support |
| Edge | 109+ | Chromium-based; same support as Chrome |
| Firefox | 115+ | Full support (ESR 115 is the minimum) |
| Safari | 16.4+ | Full support; requires macOS 13.3+ or iOS 16.4+ |
Mobile Browsers
| Browser | Minimum Version | Notes |
|---|---|---|
| Chrome Android | 109+ | Full support |
| Safari iOS | 16.4+ | Full support; all iOS browsers use WebKit |
| Samsung Internet | 21+ | Chromium-based |
| Firefox Android | 115+ | 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
| Runtime | Minimum Version | Notes |
|---|---|---|
| Node.js | 20.19.0+ | Full support for @trexolab/verifykit-core (headless verification) |
| Deno | 2.0+ | Supports WASM and Web Crypto; use npm specifiers for imports |
| Bun | 1.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.
| API | Used For |
|---|---|
WebAssembly | Running the signature verification engine |
fetch | AIA certificate fetching, revocation checking |
TextEncoder / TextDecoder | String encoding/decoding for WASM interop |
DecompressionStream | Decompressing PDF stream data (FlateDecode) |
crypto.subtle | SHA-256 hashing for file fingerprints |
structuredClone | Internal data handling |
Web Workers | PDF.js page rendering (off main thread) |
Canvas 2D | PDF page rendering |
Blob / URL.createObjectURL | File handling, download, print |
Polyfills
VerifyKit includes the following polyfill, which is loaded automatically:
Map.prototype.getOrInsertComputed— Required bypdfjs-dist5.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.
// 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-revocationwith a server-side proxy for revocation checking. - Web Worker scope: Safari does not support
importin 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
usePinchZoomhook. 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-corepackage works without Canvas (it only performs signature verification, not rendering). If you need server-side rendering, use a Canvas polyfill likecanvas(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.