Open Tools Tools Features Blog About Contact Proof of Privacy

Browser compatibility for all QuickMerge tools

Every tool run in every engine, and every platform capability feature-detected rather than looked up.

HomeTools › 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.

ToolProcessing libraryChromiumFirefoxWebKit
Merge PDFpdf-libWorks — to 50 MBWorks — to 50 MBWorks — to 50 MB
Split PDFpdf-lib, JSZipWorks — to 8.6 MBWorks — to 50 MBWorks — to 50 MB
Organize PDFpdf-lib, pdf.js, canvas 2DWorks — to 50 MBDid not completeWorks — to 50 MB
Rotate PDFpdf-libWorks — to 50 MBWorks — to 50 MBWorks — to 50 MB
Compress PDFpdf-lib, pdf.js, canvas 2DWorks — to 100 MBDid not completeWorks — to 100 MB
PDF to Wordpdf.js, mammoth.js, FileSaver.js, docx, canvas 2DWorks — to 50 MBNot testedNot tested
PDF to JPGpdf.js, JSZip, canvas 2DNot testedNot testedNot tested
Image to PDFjsPDFNot testedNot testedNot tested
Text to PDFpdf-libNot testedNot testedNot tested
Redact PDFpdf-lib, pdf.js, canvas 2DNot testedNot testedNot tested
PDF metadatapdf-libNot testedNot testedNot tested
Watermark PDFpdf-libNot testedNot testedNot tested
Remove PDF watermarkpdf-lib, pdf.js, canvas 2DNot testedNot testedNot tested
Add page numberspdf-libNot testedNot testedNot tested
Protect PDFqpdf-wasmNot testedNot testedNot tested
Unlock PDFqpdf-wasmNot testedNot testedNot tested
OCRpdf.js, Tesseract.js, canvas 2DNot testedNot testedNot tested
PDF summarizerpdf.jsNot testedNot testedNot tested
Image convertercanvas 2DNot testedNot testedNot tested
HEIC converterheic2any, JSZipNot testedNot testedNot tested
JFIF to JPGplatform APIs (canvas, Web Crypto, DOM)Not testedNot testedNot tested
Compress imageJSZip, canvas 2DNot testedNot testedNot tested
Resize imagecanvas 2DNot testedNot testedNot tested
Crop imagecanvas 2DNot testedNot testedNot tested
Remove image metadatacanvas 2DNot testedNot testedNot tested
Image to ExcelTesseract.jsNot testedNot testedNot tested
Screenshot to ExcelTesseract.jsNot testedNot testedNot tested
Text to ExcelTesseract.jsNot testedNot testedNot tested
Smart file organizerpdf.js, JSZip, Web CryptoNot testedNot testedNot tested
QR code generatorqrcodejs, canvas 2DNot testedNot testedNot tested
Password generatorplatform APIs (canvas, Web Crypto, DOM)Not testedNot testedNot tested
Stamp generatorcanvas 2DNot testedNot testedNot tested
Unit converterplatform APIs (canvas, Web Crypto, DOM)Not testedNot testedNot tested
QR code readerjsQR, canvas 2DNot testedNot testedNot tested
JSON formatterplatform APIs (canvas, Web Crypto, DOM)Not testedNot testedNot tested
Hash generatorWeb CryptoNot testedNot testedNot tested
Base64 encoderplatform APIs (canvas, Web Crypto, DOM)Not testedNot testedNot tested
URL encoderplatform APIs (canvas, Web Crypto, DOM)Not testedNot testedNot 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.

CapabilityChromiumFirefoxWebKitTools depending on itWhat it is for
WebAssemblyYesYesYes6 of 49Runs the PDF password tools (qpdf compiled to WASM) and the OCR engine. Without it those tools cannot start at all.
SharedArrayBufferNoNoNoWould 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.
OffscreenCanvasYesYesYesAvailable everywhere tested, and currently used by nothing. Moving the rasterising tools onto it would be the single biggest responsiveness win available.
File System Access APIYesNoNoWould 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 WorkersYesYesYes12 of 49pdf.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.
createImageBitmapYesYesYes15 of 49The 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.memoryYesNoNoNot 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.
crossOriginIsolatedNoNoNoNot 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: WebPYesYesYes6 of 49Needed by every tool offering WebP output.
canvas encode: AVIFNoNoNoNot 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: JPEGYesYesYes11 of 49Needed by everything that writes a JPEG, including the PDF compressor, which rasterises pages to JPEG internally.
canvas encode: PNGYesYesYes8 of 49The canvas default, and the fallback everywhere else.
crypto.subtleYesYesYes2 of 49The 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 themProtect 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.