Skip to content
ComPDF
New Release

Open-Source PDF SDK & AI Document Processing

Get the full self-hosted SDK and AI document processing on GitHub. One-click deploy to quickly build your document workflows.

Deployment

This guide covers the production build commands, the build pipeline, and the release output layout.

Build commands

ScriptCommandEffect
devpnpm --filter @compdfkit/webview devVite dev server (--host 0.0.0.0 --port 3032).
dev:corepnpm --filter @compdfkit/core build:watchRollup watch + sourcemaps for core.
buildpnpm --filter @compdfkit/webview buildvite buildpackages/webview/dist/.
build:corepnpm --filter @compdfkit/core build:prodRollup prod → webview.min.js + PDFWorker.js into webview/lib/.
build:webviewerpnpm --filter @compdfkit/core build:webviewerRollup webviewer config → webviewer.js + webviewer.global.js into webview/lib/.
build:releasenode scripts/build-release.mjsRuns build:corebuild:webviewerbuild, then assembles release/.

Per-package scripts

@compdfkit/webview: dev, build (vite build), preview, test:unit (vitest run --environment happy-dom --root src/), lint.

@compdfkit/core: clear (rimraf lib), build (rollup -c), build:watch, build:prod (cross-env NODE_ENV=production rollup -c), build:webviewer.

Build pipeline

The full release pipeline (build:release) runs three builds in order, then assembles the release folder:

build:core          → packages/webview/lib/webview.min.js, PDFWorker.js
build:webviewer     → packages/webview/lib/webviewer.js, webviewer.global.js
build (webview)     → packages/webview/dist/  (Vite)
scripts/build-release.mjs → release/

How core lands in packages/webview/lib/

  • packages/core/rollup.config.js (two bundles): src/worker/compdfkit_worker.js../webview/lib/PDFWorker.js (ES); src/index.js../webview/lib/webview.min.js (ES). terser with a reserved-names list (WASM-binding symbols like ComPDFKitJS, Rect that must not be mangled); Babel targets edge17/ff60/chrome67/safari10/ie10.
  • packages/core/rollup.webviewer.config.js: webviewer.js../webview/lib/webviewer.js (ES) + ../webview/lib/webviewer.global.js (UMD, global ComPDFKitViewer).

Vite config

packages/webview/vite.config.js:

  • base: './' (relative assets — important for iframe/S3 hosting).
  • Plugins: @vitejs/plugin-vue, unplugin-vue-components (auto-import), vite-svg-plugin for ./src/assets/icons/.
  • Alias @./src.
  • Dev server port 3000 in config (overridden to 3032 by the dev script).

packages/webview/lib/ contents

Build outputs + prebuilt engine assets: webview.min.js (+ .map), PDFWorker.js (+ .map), webviewer.js, webviewer.global.js, plus ComPDFKit.js, ComPDFKit.wasm, pdf.worker.min.js, DroidSansFallbackFull.ttf, THSarabunNew.ttf, font.ff, CMYK/, and legacy ComPDFKit1/2.*, index.js/wasm, pdfium.js/wasm.

Release layout

scripts/build-release.mjs copies into:

release/
├── @compdfkit/
│   ├── webviewer.global.js       # UMD embed entry (global ComPDFKitViewer)
│   └── webviewer.js              # ES embed entry
└── webviewer/
    ├── index.html
    ├── favicon.ico
    ├── assets/                    # Vite-built webview assets
    ├── locales/                   # translation-*.json (6 languages)
    ├── images/
    ├── example/Quick Start Guide for ComPDFKit Web Demo.pdf
    └── lib/
        ├── ComPDFKit.js
        ├── ComPDFKit.wasm
        ├── PDFWorker.js
        ├── DroidSansFallbackFull.ttf
        ├── pdf.worker.min.js
        └── CMYK/

Hosting

To deploy, serve the release/webviewer/ folder at a public URL and point the integrator's path option at it:

javascript
ComPDFKitViewer.init(
  { path: 'https://cdn.example.com/webviewer/', pdfUrl: '...', license: '...' },
  document.getElementById('viewer')
);
  • base: './' in the Vite config makes all asset paths relative, so the build works under any sub-path (iframe, S3, CDN).
  • The locales/ folder must be served alongside the assets (i18next-http-backend loads ./locales/translation-<lng>.json).
  • The lib/ folder (engine + WASM) must be served with the correct MIME types; .wasm should be served as application/wasm.

Testing & linting in CI

bash
pnpm --filter @compdfkit/webview test:unit   # Vitest + happy-dom
pnpm --filter @compdfkit/webview lint        # ESLint (.vue/.js/.jsx/.cjs/.mjs)

There is no monorepo-wide test runner. The core package has no test infrastructure beyond individual .test.js files run manually.