SwiftConvert is a Manifest V3 browser extension that intercepts file uploads on any website and converts or compresses them client-side before they leave the page. If a site only accepts PNG, you can still pick a JPEG or HEIC—SwiftConvert converts it automatically. Optional image compression fits files under detected size limits so oversized uploads stop failing silently.
Web forms reject the wrong MIME type or files that are too large, even when a quick conversion would work. Users bounce between uploaders, converters, and the original site. SwiftConvert removes that loop by doing the conversion in the browser, at the moment of upload, across sites and frameworks.
Content scripts hook file pickers, drag-and-drop, and programmatic uploads. A converter registry (with chaining) routes files to Canvas, WASM, or ffmpeg depending on type. Complex work runs in a sandboxed extension iframe so host-page CSP cannot block HEIC, PDF, DOCX, or A/V pipelines. A Tools UI also supports manual convert/compress with download and drag-out.
Chrome MV3 service worker for settings; MAIN-world page hooks for framework-agnostic interception; isolated-world bridge for UI and messaging; convert-host iframe for privileged WASM/workers. Smart accept expansion shows only site-accepted types plus formats SwiftConvert can convert—without treating expanded accept as the site’s true target (a regression we diagnosed and fixed).
JavaScript (ES6+), HTML5, CSS3, Chrome Extension APIs, content scripts, service workers, postMessage RPC, WebAssembly (libheif-js), Web Workers (pdf.js, ffmpeg packaged workers), HTML5 Canvas, mammoth.js, JSZip, ffmpeg.wasm. Built under strict MV3 CSP (no unsafe-eval, no blob: workers on extension pages).
Host CSP blocked early script injection—solved with MAIN-world content scripts and an extension convert host. MV3 rejected blob: workers and eval-based HEIC stacks—replaced with packaged workers and libheif WASM. Expanding accept for the file picker accidentally skipped conversion until original accept was restored. Duplicate drop delivery required a single-path handoff. Shipping A/V meant lazy-loading a large WASM module without breaking store package size or CSP.
Auto-convert and auto-compress with detect-first size limits; field badges; activity notices; before/after preview slider; Settings/Tools split; conversion graph spanning images, HEIC, PDF, DOCX (visual HTML render), office best-effort, and audio/video (including audio→video with black frames). Cross-browser manifest support for Chrome and Firefox.
All conversion happens on-device. Files are not uploaded to a SwiftConvert server. Settings live in chrome.storage; the privacy policy documents permissions and contact via GitHub Issues.
Shipped as open source (MIT) at v1.0.0 with Chrome Web Store and Firefox AMO packaging, official README, PRIVACY.md, listing copy, and a release ZIP. Primary support is Chromium; Firefox loads via MV3 with background.scripts.