Getting Started
The ready-made viewer gives you a complete PDF experience with a small integration surface. Pick your stack in the sidebar; this page and every example will stay on that integration.
Installation#
Vanilla JavaScript can load the viewer directly from a CDN. Framework projects install their dedicated adapter with pnpm.
<script type="module">
import EmbedPDF from 'https://cdn.jsdelivr.net/npm/@embedpdf/snippet@2/dist/embedpdf.js';
</script>Add your first viewer#
Give the viewer a PDF URL and a height. The adapter handles the engine, plugins, toolbar, and document lifecycle for you.
<div id="pdf-viewer" style="height: 500px"></div>
<script type="module">
import EmbedPDF from 'https://cdn.jsdelivr.net/npm/@embedpdf/snippet@2/dist/embedpdf.js';
const viewer = EmbedPDF.init({
type: 'container',
target: document.getElementById('pdf-viewer'),
src: 'https://snippet.embedpdf.com/ebook.pdf',
});
</script>Built-in stamps#
The Insert tab’s stamps panel loads the standard rubber stamps from
@embedpdf/default-stamps the first time it opens — one Acrobat-compatible
PDF per locale, shipped as a lazy chunk of your own build (the CDN snippet
carries it in its folder), in the language negotiated from the viewer’s
locale and the browser’s. Nothing is fetched from a third party. The
stamps option decides where that library comes from:
stamps: {
defaultLibrary: false;
} // no built-in library, no request (air-gapped)
stamps: {
defaultLibrary: 'https://your.cdn/stamps/{locale}/stamps.pdf';
} // self-hostA self-hosted URL is used exactly as given. Libraries a user creates — stamps made from selected annotations, PDFs imported into the panel — are kept in the browser across reloads. For the whole picture — the engine’s WebAssembly, workers, CSP — see Self-hosting & air-gapped deployments.
Where to go next#
- Configure the toolbar and available viewer controls.
- Listen to the ready event when you need access to the plugin registry.
- Switch to the Headless docs when you want to build the entire interface yourself.
Your feedback goes directly to the documentation team.