Skip to content
hushvert

Add file conversion to your app, without uploading the file

hushvert's conversion engine is an open-source JavaScript SDK. Images, HEIC, audio, archives and PDF operations run in your users' browsers with WebAssembly, so the file never touches a server, yours or ours.

npm install @hushvert/engine

See it run

Drop an image below. The SDK converts it to WebP in your browser - no upload, no server, running the exact code on the right. Watch your network tab: nothing leaves.

Drop an image to convert it to WebP

PNG, JPG, WebP, AVIF or HEIC. It never leaves your browser.

import { convertFile } from '@hushvert/engine'

const webp = await convertFile(
  file,
  { from: 'png', to: 'webp', module: 'images' },
)
// runs in the browser; nothing uploaded

Why client-side conversion

  • No upload to secure. Every other conversion API receives the file by definition. This one does not, so for sensitive documents there is no retention policy, no data-processing agreement, and no breach surface for the conversion step.
  • No per-conversion cost. Work runs on your users' CPUs, not your servers. Conversion volume does not show up on your compute bill.
  • Verifiable, not promised. Open the network tab during a conversion and watch nothing leave. The privacy claim is something your users can check, which is rare and worth a lot.

Quickstart

import { configureEngine, convertFile } from '@hushvert/engine'

// Once at startup: point the engine at your served wasm worker assets.
configureEngine({ /* ffmpeg, libarchive, pdfjs asset URLs */ })

// Runs in the browser; the blob never left the device.
const blob = await convertFile(
  file,
  { from: 'heic', to: 'jpg', module: 'images' },
  (pct) => console.log(`${pct}%`),
)

Full setup, the asset-serving step, and the format list are in the repository README.

What it converts

Image interchange (PNG, JPG, WebP, AVIF, JXL) plus HEIC, BMP and TIFF decode; archive packing and listing (zip, tar, tar.gz); PDF merge, image-to-PDF, and PDF pages out as images; and audio plus small video via ffmpeg compiled to WebAssembly. The package ships TypeScript source and works with webpack, Vite and friends.

Heavy formats (on the roadmap)

Office documents to PDF, PDF to Word, and large video genuinely cannot run in a browser; they need a server. A hosted, usage-metered API for those, self-serve with an API key, is on the roadmap. Star the repo to follow it. Everything a browser can do is in the free SDK today.

Common questions

Does the file get uploaded to a server?
No. @hushvert/engine runs the conversion in the user's browser with WebAssembly in Web Workers. For every format the browser can handle, the file never leaves the device, which you can confirm in the network tab. That removes the upload entirely, rather than securing it.
What is the license and the cost?
The SDK is MIT-licensed and free, published on npm as @hushvert/engine. Conversions run on your users' CPUs, so there is no per-conversion server bill to anyone.
What about office documents, PDF to Word, or large video?
Those genuinely cannot run in a browser, so they need a server. A hosted, usage-metered API for those heavy formats is on the roadmap; watch the repo to follow it. The client-side SDK covers everything a browser can do today.
Why does client-side conversion matter for my app?
If your product handles sensitive files (health, legal, finance, HR), keeping conversion on the user's device removes a whole category of risk: no upload to secure, no retention policy, no data-processing agreement for the conversion step, and a privacy claim your users can verify themselves.