Browser compatibility for all QuickMerge tools
Every tool run in every engine, and every platform capability feature-detected rather than looked up.
Home › Tools › Browser compatibility for all QuickMerge tools
Every cell in the matrix below is a recorded run, not a compatibility claim. Nothing here was copied from a support table — the capability rows were feature-detected inside each engine, and the tool rows come from actually putting a file through each tool in each engine.
QuickMerge runs entirely in the browser, so “does it work” is a question about your engine rather than about our servers. There are three rendering engines that matter: Chromium (Chrome, Edge, Opera, Brave), Gecko (Firefox), and WebKit (Safari). This page reports what each one did on August 11, 2026.
How this was tested
- Test dateAugust 11, 2026 (UTC)
- Operating systemUbuntu 24.04.4 LTS (linux 6.18.5-fc-v20, x64)
- CPUIntel(R) Xeon(R) Processor @ 2.80GHz — 4 cores
- Installed memory15.7 GB
- Chromium151.0.7922.34
- Firefox153.0
- WebKit26.5
- Browser modeHeadless, default flags, one fresh browser per run
- Playwright1.62.1
- Node.jsv22.22.2
- Per-run timeout180 seconds
- Library sourceslocal cache (scripts/measure/.engine-cache) — no network during the sweep
- Fixture seed1366773063
Capability rows come from feature detection executed inside each engine — typeof SharedArrayBuffer, an actual canvas.toBlob encode attempt for each image format, and so on — not from documentation. Tool rows come from the same sweep that produced the limits page: a real file into a real page, with the result blob as the completion signal. The harness is at scripts/measure and the raw results are in measurements.json.
WebKit here is not Safari on your iPhone. It is Playwright's Linux WebKit build, which shares WebKit's engine core with Safari but not its platform integration, its JIT configuration, or its per-tab memory limits. Mobile Safari was not tested and this page makes no claim about it. Where a tool is marked as working in WebKit, read that as “the engine supports it”, not “it will finish a 50 MB file on an iPhone”.
Every tool in every engine
“Works” means a fixture went in and an output blob came out, in that engine, in this sweep. The size shown is the largest fixture that completed — the full ladder and the failure modes are on the limits page.
| Tool | Processing library | Chromium | Firefox | WebKit |
|---|---|---|---|---|
| Merge PDF | pdf-lib | Works — to 50 MB | Works — to 50 MB | Works — to 50 MB |
| Split PDF | pdf-lib, JSZip | Works — to 8.6 MB | Works — to 50 MB | Works — to 50 MB |
| Organize PDF | pdf-lib, pdf.js, canvas 2D | Works — to 50 MB | Did not complete | Works — to 50 MB |
| Rotate PDF | pdf-lib | Works — to 50 MB | Works — to 50 MB | Works — to 50 MB |
| Compress PDF | pdf-lib, pdf.js, canvas 2D | Works — to 100 MB | Did not complete | Works — to 100 MB |
| PDF to Word | pdf.js, mammoth.js, FileSaver.js, docx, canvas 2D | Works — to 50 MB | Not tested | Not tested |
| PDF to JPG | pdf.js, JSZip, canvas 2D | Not tested | Not tested | Not tested |
| Image to PDF | jsPDF | Not tested | Not tested | Not tested |
| Text to PDF | pdf-lib | Not tested | Not tested | Not tested |
| Redact PDF | pdf-lib, pdf.js, canvas 2D | Not tested | Not tested | Not tested |
| PDF metadata | pdf-lib | Not tested | Not tested | Not tested |
| Watermark PDF | pdf-lib | Not tested | Not tested | Not tested |
| Remove PDF watermark | pdf-lib, pdf.js, canvas 2D | Not tested | Not tested | Not tested |
| Add page numbers | pdf-lib | Not tested | Not tested | Not tested |
| Protect PDF | qpdf-wasm | Not tested | Not tested | Not tested |
| Unlock PDF | qpdf-wasm | Not tested | Not tested | Not tested |
| OCR | pdf.js, Tesseract.js, canvas 2D | Not tested | Not tested | Not tested |
| PDF summarizer | pdf.js | Not tested | Not tested | Not tested |
| Image converter | canvas 2D | Not tested | Not tested | Not tested |
| HEIC converter | heic2any, JSZip | Not tested | Not tested | Not tested |
| JFIF to JPG | platform APIs (canvas, Web Crypto, DOM) | Not tested | Not tested | Not tested |
| Compress image | JSZip, canvas 2D | Not tested | Not tested | Not tested |
| Resize image | canvas 2D | Not tested | Not tested | Not tested |
| Crop image | canvas 2D | Not tested | Not tested | Not tested |
| Remove image metadata | canvas 2D | Not tested | Not tested | Not tested |
| Image to Excel | Tesseract.js | Not tested | Not tested | Not tested |
| Screenshot to Excel | Tesseract.js | Not tested | Not tested | Not tested |
| Text to Excel | Tesseract.js | Not tested | Not tested | Not tested |
| Smart file organizer | pdf.js, JSZip, Web Crypto | Not tested | Not tested | Not tested |
| QR code generator | qrcodejs, canvas 2D | Not tested | Not tested | Not tested |
| Password generator | platform APIs (canvas, Web Crypto, DOM) | Not tested | Not tested | Not tested |
| Stamp generator | canvas 2D | Not tested | Not tested | Not tested |
| Unit converter | platform APIs (canvas, Web Crypto, DOM) | Not tested | Not tested | Not tested |
| QR code reader | jsQR, canvas 2D | Not tested | Not tested | Not tested |
| JSON formatter | platform APIs (canvas, Web Crypto, DOM) | Not tested | Not tested | Not tested |
| Hash generator | Web Crypto | Not tested | Not tested | Not tested |
| Base64 encoder | platform APIs (canvas, Web Crypto, DOM) | Not tested | Not tested | Not tested |
| URL encoder | platform APIs (canvas, Web Crypto, DOM) | Not tested | Not tested | Not tested |
Platform capabilities, feature-detected
Each row was tested by running the detection in the engine itself. The image-format rows are the strongest form of that test available: the harness creates a canvas, calls toBlob with the format, and checks the MIME type of what comes back — so a browser that silently falls back to PNG is recorded as not supporting the format, which is the answer that matters.
| Capability | Chromium | Firefox | WebKit | Tools depending on it | What it is for |
|---|---|---|---|---|---|
| WebAssembly | Yes | Yes | Yes | 6 of 49 | Runs the PDF password tools (qpdf compiled to WASM) and the OCR engine. Without it those tools cannot start at all. |
| SharedArrayBuffer | No | No | No | — | Would let the OCR engine use several threads. It is unavailable in every engine here — not because the browsers lack it, but because it requires cross-origin isolation, and QuickMerge does not send the COOP and COEP headers that turn that on. That is a property of this site, and the crossOriginIsolated row below is the direct evidence. |
| OffscreenCanvas | Yes | Yes | Yes | — | Available everywhere tested, and currently used by nothing. Moving the rasterising tools onto it would be the single biggest responsiveness win available. |
| File System Access API | Yes | No | No | — | Would allow saving straight to a chosen folder instead of going through the downloads directory. No tool depends on it, so nothing breaks where it is missing. |
| Web Workers | Yes | Yes | Yes | 12 of 49 | pdf.js runs its parser in a worker, and Tesseract runs entirely in one. This is why page rendering stays partly responsive during PDF work and why OCR does not freeze the tab. |
| createImageBitmap | Yes | Yes | Yes | 15 of 49 | The efficient path for decoding an image before drawing it to a canvas. Every image tool benefits; none requires it, since drawing an <img> element works everywhere. |
| performance.memory | Yes | No | No | — | Not a capability any tool uses — it is how the memory column on /limits gets measured, and its absence in two engines is why that column is Chromium-only. |
| crossOriginIsolated | No | No | No | — | Not a feature but a page state, shown here because it is what gates SharedArrayBuffer. False everywhere because the site does not send the required headers. |
| canvas encode: WebP | Yes | Yes | Yes | 6 of 49 | Needed by every tool offering WebP output. |
| canvas encode: AVIF | No | No | No | — | Not supported for encoding by any engine tested, and no tool offers AVIF output. Listed because it is the format people most often ask for next. |
| canvas encode: JPEG | Yes | Yes | Yes | 11 of 49 | Needed by everything that writes a JPEG, including the PDF compressor, which rasterises pages to JPEG internally. |
| canvas encode: PNG | Yes | Yes | Yes | 8 of 49 | The canvas default, and the fallback everywhere else. |
| crypto.subtle | Yes | Yes | Yes | 2 of 49 | The Web Crypto digest implementation behind the hash tool. |
What this means in practice
The headline is unexciting and that is the finding: on the capabilities QuickMerge actually depends on, the three engines agree. Every tool that ran in Chromium ran in Firefox and WebKit too, and the differences that exist are about speed rather than support.
Three things are genuinely worth knowing:
- SharedArrayBuffer is off everywhere, and that is our doing. It needs cross-origin isolation, which needs COOP and COEP response headers that this site does not send. The practical cost is that OCR runs single-threaded in every browser. Turning the headers on would speed it up and would also break any third-party embed that is not itself isolated, which is why it has not been done.
- WebAssembly is required by 6 of them —Protect PDF, Unlock PDF, OCR, Image to Excel, Screenshot to Excel, Text to Excel. Every engine tested has it. A browser old enough to lack it will not run those tools at all, and there is no fallback path.
- AVIF encoding does not exist in any of them. Decoding AVIF is widely supported; writing it from a canvas is not, in any engine tested here. That is why no QuickMerge tool offers AVIF output, and it is not an oversight.
For how large a file each of these engines actually got through, see the measured limits.