Skip to main content
BentoPDF builds to a static dist/ folder that can be served from any platform capable of hosting static files. You can either build from source or download a pre-built dist-{version}.zip from GitHub Releases.
All platforms must send these headers for Word, Excel, and PowerPoint conversions to work:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
Without them, SharedArrayBuffer is unavailable and LibreOffice WASM will fail to initialize. Verify after deploying:
// Run in browser DevTools console — should return true
console.log(window.crossOriginIsolated)

Building from source

git clone https://github.com/alam00000/bentopdf.git
cd bentopdf
npm install
npm run build
# Output is in dist/
Vercel offers the simplest deployment experience for static sites.

Connect repository

1

Fork the repository

Fork alam00000/bentopdf to your GitHub account.
2

Import to Vercel

Go to vercel.com/new, select your forked repository, and configure the project:
SettingValue
Framework PresetVite
Build Commandnpm run build
Output Directorydist
Install Commandnpm install
3

Add environment variables (optional)

Under Environment Variables, add any of the following:
VariableDescription
SIMPLE_MODESet to true for a minimal tool-only UI
VITE_BRAND_NAMECustom brand name
VITE_BRAND_LOGOLogo path relative to public/
VITE_FOOTER_TEXTCustom footer text
VITE_DEFAULT_LANGUAGEDefault UI language (e.g. fr, de)
4

Deploy

Click Deploy and wait for the build to complete.

Required vercel.json

Create vercel.json in the project root to add the COOP/COEP headers and configure SPA routing:
vercel.json
{
  "rewrites": [{ "source": "/(.*)", "destination": "/index.html" }],
  "headers": [
    {
      "source": "/(.*)",
      "headers": [
        { "key": "Cross-Origin-Embedder-Policy", "value": "require-corp" },
        { "key": "Cross-Origin-Opener-Policy", "value": "same-origin" },
        { "key": "Cross-Origin-Resource-Policy", "value": "cross-origin" }
      ]
    },
    {
      "source": "/libreoffice-wasm/soffice.wasm.gz",
      "headers": [
        { "key": "Content-Type", "value": "application/wasm" },
        { "key": "Content-Encoding", "value": "gzip" }
      ]
    },
    {
      "source": "/libreoffice-wasm/soffice.data.gz",
      "headers": [
        { "key": "Content-Type", "value": "application/octet-stream" },
        { "key": "Content-Encoding", "value": "gzip" }
      ]
    }
  ]
}

Build docs developers (and LLMs) love