VerifyKitv0.13.3
PDF Verification SDK|Read the docs

Verify PDF Digital Signatures.
Entirely Client-Side.

A JavaScript and TypeScript SDK for verifying digitally signed PDFs — powered by Rust/WASM in the browser, native on Node.js. The document never leaves the device. Zero runtime dependencies. PAdES conformance detection built in.

import { VerifyKitProvider, Viewer, WelcomeScreen,
  useVerification, defaultLayoutPlugin } from '@trexolab/verifykit-react'
import '@trexolab/verifykit-react/styles.css'

function App() {
  return (
    <VerifyKitProvider config={{ theme: { mode: 'system' } }}>
      <PdfViewer />
    </VerifyKitProvider>
  )
}

function PdfViewer() {
  const verification = useVerification()
  const [layout] = useState(() => defaultLayoutPlugin())

  if (!verification.fileBuffer) {
    return <WelcomeScreen onOpenFile={(f) => verification.load(f)} />
  }

  return (
    <Viewer
      fileBuffer={verification.fileBuffer}
      fileName={verification.fileName}
      plugins={[layout.plugin]}
      onOpenFile={(f) => verification.load(f)}
      initialState={{
        signatures: verification.signatures,
        verificationStatus: verification.status ?? undefined,
      }}
    />
  )
}

Every signature is checked eight ways. Each check reports its own status and its own reason, and together they produce the verdict — which is why a document can come back valid, altered, or untrusted rather than just failing.

Signed and all signatures are valid.
Verification checks8/8
  • Document Integrity

    Re-hashes the byte ranges the signature covers and compares them against the hash sealed inside it. This is the check that catches edits made after signing.

  • Cryptographic Signature

    Confirms the signature is mathematically valid against the signer's public key.

  • Signer's Identity

    One verdict on the signer, combining the certificate's validity period, its revocation state and its chain to a trusted root.

  • Revocation Status

    Checks the signing certificate against OCSP and CRL endpoints to confirm it has not been revoked.

  • Timestamp

    Validates the RFC 3161 timestamp token is present and cryptographically sound.

  • Algorithm Strength

    Enforces minimum cryptographic strength — RSA keys of 2048 bits or more, and SHA-1 scored the way Adobe scores it.

  • Certificate Chain

    Verifies the certificate chains to a trusted root CA from the built-in AATL store.

  • Key Usage / EKU

    Confirms the Key Usage and Extended Key Usage extensions permit document signing.

See all of this in the viewer
01

Zero Server Dependency

All crypto runs client-side in WASM — no backend of your own to build or scale, and your PDF is never uploaded. Only certificate lookups reach the network. No telemetry, no analytics, no beacon of any kind.

02

WASM-Powered

3.7x faster than JavaScript. The Rust/WASM core handles all cryptographic operations with zero npm runtime dependencies.

03

Built-in Trust Store

Ships with 134 embedded roots: 118 AATL plus the 16-certificate Indian CCA hierarchy. Certificate chain validation works out of the box.

04

Plugin Architecture

24 composable viewer plugins. Disable what you don't need, extend with custom plugins. Fully tree-shakeable.

05

PAdES Conformance

Detects B-B, B-T, B-LT, and B-LTA conformance levels. Full LTV and document timestamp support.

06

Framework Agnostic

First-class React support, plus a vanilla API that works with any framework or plain HTML via CDN — and the same API, returning the same results, on Node.js, Deno and Bun.

  • @trexolab/verifykit-core

    Rust/WASM verification engine. Zero-dependency cryptographic core.

    npm i @trexolab/verifykit-core
  • @trexolab/verifykit-react

    React components, hooks, and full PDF viewer with 24 plugins.

    npm i @trexolab/verifykit-react
  • @trexolab/verifykit-vanilla

    Framework-agnostic. Drop-in viewer via CDN or bundler.

    npm i @trexolab/verifykit-vanilla
  • @trexolab/verifykit-plugin-revocation

    Server-side CRL/OCSP proxy for online revocation checking.

    npm i @trexolab/verifykit-plugin-revocation

Legal & Compliance

Validate eIDAS qualified electronic signatures and ESIGN Act compliant documents. Verify PAdES conformance levels (B-B through B-LTA) for long-term archival. Ideal for contract management, notarization platforms, and regulatory document workflows.

Enterprise & Government

Integrate PDF signature verification into enterprise portals, government e-services, and document management systems. Support custom Certificate Authorities alongside the 134 built-in root certificates. Run headless verification in CI/CD pipelines.

Developer Tools & SaaS

Embed a complete PDF viewer with signature verification into your SaaS product. Drop in with a single CDN script tag or use the React component library with 24 composable plugins. Full theming, internationalization (7 locales), and accessibility support.

How do I verify a digitally signed PDF in the browser?+

VerifyKit lets you verify digitally signed PDFs entirely in the browser using JavaScript and WebAssembly. Install the npm package, add the React viewer or vanilla JS drop-in to your page, and load a signed PDF — signatures are verified automatically through an 8-point pipeline covering document integrity, cryptographic validity, signer identity, revocation, timestamps, algorithm strength, certificate chain trust, and key usage. No server upload required.

Does it show the green checkmark like Adobe Acrobat?+

Yes. After verification the viewer draws the status icon directly on the signature field inside the PDF — a green checkmark for valid, a red cross for invalid, a yellow question mark for unknown — in the same place Acrobat draws it, and reflecting the verdict that signature actually got rather than the placeholder the signing tool left in the file. It works with the signature appearance styles produced by Acrobat and the common signing tools; where a field cannot carry a status icon, VerifyKit leaves it as it is instead of drawing something misleading.

What does the 8-point verification pipeline check?+

Every signature is checked across eight independent dimensions: (1) Document Integrity — detects any post-signing tampering, (2) Cryptographic Signature — validates the CMS/PKCS#7 signature, (3) Signer's Identity — one verdict combining the certificate's validity period, revocation state and chain trust, (4) Revocation Status — checks CRL/OCSP endpoints, (5) Timestamp — validates RFC 3161 timestamp tokens, (6) Algorithm Strength — enforces RSA 2048+ and scores SHA-1 the way Adobe does, (7) Certificate Chain — verifies trust to one of 134 embedded roots (118 Adobe AATL, 16 Indian CCA), (8) Key Usage / EKU — confirms the certificate permits document signing.

Can I verify PDF signatures in Node.js without a browser?+

Yes. The @trexolab/verifykit-core package provides a headless API that runs in Node.js 20+, Deno, and Bun with zero DOM dependencies. Use createVerifier() and verify() to process signed PDFs server-side — ideal for batch processing, CI/CD pipelines, automated compliance checks, and API-driven validation workflows.

What is PAdES and does VerifyKit detect conformance levels?+

PAdES (PDF Advanced Electronic Signatures) is the European standard (ETSI EN 319 142) for electronic signatures in PDF. VerifyKit detects four conformance levels: B-B (basic signature), B-T (with trusted timestamp), B-LT (with embedded validation data for offline verification), and B-LTA (with archival timestamps for 10+ year validity). This is essential for eIDAS compliance and long-term document archival.

Is my PDF data safe? Does it get uploaded anywhere?+

PDF bytes never leave your device. Every cryptographic operation runs inside a WebAssembly sandbox, and there is no telemetry and no analytics of any kind. Two things do reach the network, and neither carries document content. AIA certificate chasing fetches missing intermediate certificates from the URLs embedded in the chain; it is on unless you pass enableAIA: false. Online revocation checking sends the signer's certificate to a CRL or OCSP responder, and comes only with the optional revocation plugin. Switch both off and verification is fully offline, using nothing but what is already inside the PDF — which is what PAdES B-LT and B-LTA signatures embed that data for.

What frameworks and browsers are supported?+

VerifyKit supports React 19+ with a full component library and hooks, vanilla JavaScript via CDN or bundler (compatible with Vue, Angular, Svelte, or plain HTML), and headless Node.js/Deno/Bun. Browser support includes Chrome 109+, Firefox 115+, Safari 16.4+, and Edge 109+. The Rust/WASM core is 3.7x faster than pure JavaScript alternatives.

Can I use my own Certificate Authority for verification?+

Yes. VerifyKit ships with 134 root certificates built into the WASM binary: 118 from the Adobe Approved Trust List (AATL) and the 16-certificate Indian CCA hierarchy. You can extend this with your own root CAs using merge mode (adds alongside the built-ins) or replace mode (uses only your CAs). This supports enterprise deployments with internal PKI, government CAs, and custom trust hierarchies.

How do I integrate VerifyKit with my existing application?+

For React apps: install @trexolab/verifykit-react, wrap your app with VerifyKitProvider, and add the Viewer component. For any website: add a single CDN script tag with @trexolab/verifykit-vanilla and call VerifyKit.create(). For server-side: install @trexolab/verifykit-core and use the headless API. All packages work with npm install — no native add-ons or build tool configuration needed.

Is VerifyKit suitable for eIDAS and ESIGN Act compliance?+

VerifyKit implements the cryptographic verification checks required for eIDAS (EU 910/2014) and ESIGN Act (US) compliance. It supports PAdES conformance detection (B-B through B-LTA), qualified certificate validation, CRL/OCSP revocation checking, and long-term archival verification. Combined with the 8-point verification model, it provides the technical foundation for legally binding electronic signature workflows.

Start Verifying PDF Signatures Today

Get up and running in under 5 minutes. Install via npm, add the React component or CDN script, and verify your first PDF.