Skip to content
ToolDock

Build status

An honest record of what runs today. Every tool is marked implemented, runtime-unverified until a verification run covers it — a compile success or an installed library never counts as a runtime test. The pure engines have been executed server-side (see the execution log); run the verification above to cover this browser as well.

50

Implemented

2

Partial

8

Requires setup

Run verification (in your browser)

Creates fixtures, runs the real engines, and validates outputs with independent readers (PDF.js, fflate, jsQR, manual WAV parsing). Covers the browser-only paths the server-side engine run cannot: image engines, HEIC decode, PDF rendering, canvas QR, and full workflow chains. Nothing is uploaded or stored.

Test evidence

Two layers. (1) Engine-level suite, executed in Node 20 against the same engine code — see the execution log below. (2) In-browser harness (Status page, "Run verification"): runs the same engine tests plus DOM-dependent tests (Canvas, HEIC decode, PDF.js rendering, QR canvas pipeline) and outputs independent-reader checks (PDF.js, fflate, jsQR, manual WAV/PCM parse). Nothing is simulated with timers.

2026-09-26 · Node 20 — same engine code, executed server-side — 24 of 24 passed

Base64 Unicode round trip · CSV quoting/newlines/Unicode/safe-prefix · CSV→JSON leading zeros · invoice discount/tax rounding (minor units) · SHA-256 known-answer vector · WAV trim boundaries, channel mapping, exact sample values and mono mixdown decoded back from output bytes · ZIP round trip independently CRC-verified by fflate · deflate entries · traversal/absolute/backslash/drive-letter entries skipped · encrypted + symlink entries skipped · CRC mismatch rejected · declared-size lies and a mini zip bomb aborted mid-inflation · per-file/total/count caps enforced · duplicate names uniquified · truncated archive rejected · cancellation honoured · PDF range parsing · merge order and page sizes verified by PDF.js · extract selection and order · split by ranges · organize delete/reorder · rotation metadata · watermark placement (text on selected pages only) · page numbers per page · pdf-lib→PDF.js cross-reader text · QR payloads (URL, Wi-Fi escaping, SMS, Unicode) decoded byte-exactly by the independent jsQR decoder.

  • No third-party advertising or analytics scripts load anywhere in the app today, so file-processing pages are isolated from ad scripts by construction.
  • The Node run proves the pure engines; browser-only paths (image engines, HEIC decode, PDF rendering, canvas QR) still need an in-browser run — the Run verification button covers them.
  • Tests run on demand in the user's browser — a passing run is evidence for that browser and device only.
  • No automated CI and no real-device matrix (iOS Safari, Android Chrome) has been executed yet.
  • Image work runs on the main thread; very large batches may stutter (documented, not yet workerized). Decoded pixels are capped (60 MP images, 40 MP PDF renders).
  • WAV-only audio conversion is partial support, not MP3 support.

Platform capability matrix

CapabilityStateNotes
Public anonymous useverifiedApp is public; every working tool runs without an account.
Browser processing (Canvas, Web Crypto, Web Audio)verifiedUsed by all working tools. Output types are checked against real file signatures.
Web WorkersverifiedPDF rendering runs in a PDF.js worker; regex runs in a disposable worker with a 2 s limit. Image work runs on the main thread in short batches (browsers vary; no OffscreenCanvas path yet).
WASM enginesverifiedHEIC photos decode via libheif compiled to WebAssembly, in-browser. PDF and QR engines are pure JS.
CSP & cross-origin isolation headersunverifiedNot controllable from app code as built. Needed for multithreaded FFmpeg WASM.
Private storage & signed downloadsimplementedWired for the Transfer tools: files upload to private storage and download through short-lived signed URLs. Runtime-unverified until a browser verification run covers it.
Job scheduling / cleanupimplementedA nightly scheduled workflow purges expired transfer sessions.
Realtime transfer updatesimplementedOpen transfer pages poll the transfer service every few seconds, so an open page updates live with per-file arrival times. Transfers relay through platform storage — no TURN or signaling service is needed.
Admin console & activity loggingimplementedConsole at /admin (admin accounts only): every transfer and inbox with live previews, block/flag/delete controls, and an activity feed with server-seen IP logging. Local-only tool runs are not logged — they never leave the visitor’s device.
Atomic counters & unique constraintsunverifiedRecord updates are read-then-write. Quotas, download grants and shared document numbers need a transactional service.
Stripe checkout & webhooksunverifiedPossible through server functions with signature checks; not configured. No payments are taken.
Route rendering / SEOunverifiedSingle-page app. Titles and descriptions are set in the browser; no prerendering, sitemap, or real 404 status.
Malware scanningneeds external serviceNeeds an external scanner. Cloud sharing stays disabled without it.

Configuration checklist

NeededUnlocksWithout it
Media worker or FFmpeg WASM + isolation headersTools 37–39, 43, MP3 outputBlocked
OCR / DOCX conversion provider keysTools 17–19Blocked
Stripe keys + approved price IDsPro / Business plansNo billing — everything shown is free

Tool catalog (60 entries)

#ToolCategoryWhere it runsStatusFormats / blocker
1Device-to-device transferTransferCloudImplemented · not yet verifiedAny files in · download out — Files are uploaded to ToolDock’s private storage — only someone with the code can download them, and the transfer expires after 10 minutes.
2Send text & links between devicesTransferCloudImplemented · not yet verifiedText in · text out — Held on the ToolDock platform — only someone with the code can read it. Expires after 10 minutes.
3Temporary share linksTransferCloudImplemented · not yet verifiedAny files in · download out — Anyone with the link or code can download until the transfer expires (10 minutes).
4File collection inboxTransferCloudImplemented · not yet verifiedAny files in · download out — Files land in ToolDock’s private storage. Inboxes stay open for 30 days.
5Merge PDFsPDFOn deviceImplemented · not yet verifiedPDF in · PDF out
6Split PDFPDFOn deviceImplemented · not yet verifiedPDF in · PDF out
7Extract PDF pagesPDFOn deviceImplemented · not yet verifiedPDF in · PDF out
8Delete & reorder PDF pagesPDFOn deviceImplemented · not yet verifiedPDF in · PDF out
9Rotate PDF pagesPDFOn deviceImplemented · not yet verifiedPDF in · PDF out
10Images to PDFPDFOn deviceImplemented · not yet verifiedJPG, PNG, WebP in · PDF out
11PDF to imagesPDFOn deviceImplemented · not yet verifiedPDF in · PNG or JPG out
12Compress PDFPDFOn deviceImplemented · not yet verifiedPDF in · PDF out — Rasterized output only — text stops being searchable, forms and vectors are lost. Disclosed before processing.
13PDF under a target sizePDFOn deviceImplemented · not yet verifiedPDF in · PDF out — Rasterized output only. Shows "Target not reached" with alternatives when it can't hit the limit.
14Watermark PDFPDFOn deviceImplemented · not yet verifiedPDF in · PDF out
15Add page numbersPDFOn deviceImplemented · not yet verifiedPDF in · PDF out
16Extract PDF textPDFOn deviceImplemented · not yet verifiedPDF in · TXT out — Embedded text only — scanned pages have none. OCR is a separate, unavailable capability.
17OCR — scans to textPDFCloudBlockedNeeds an OCR engine (Tesseract WASM with language data, or a configured OCR provider). Not configured.
18PDF to Word (DOCX)PDFCloudBlockedNeeds a real layout-aware conversion service. Not configured.
19Word (DOCX) to PDFPDFCloudBlockedNeeds a server document renderer (LibreOffice in an isolated worker, or a conversion provider). Not configured.
20Add a visual signaturePDFOn deviceImplemented · not yet verifiedPDF in · PDF out
21JPG to PNGImagesOn deviceImplemented · not yet verifiedJPG in · PNG out
22PNG to JPGImagesOn deviceImplemented · not yet verifiedPNG in · JPG out
23WebP to JPG or PNGImagesOn deviceImplemented · not yet verifiedWebP in · JPG or PNG out
24JPG/PNG to WebPImagesOn deviceImplemented · not yet verifiedJPG, PNG in · WebP out (browser must support WebP encoding)
25HEIC to JPG/PNGImagesOn deviceImplemented · not yet verifiedHEIC/HEIF in · JPG or PNG out
26Resize imageImagesOn deviceImplemented · not yet verifiedJPG, PNG, WebP, GIF, BMP in · same format out (GIF/BMP → PNG)
27Compress imageImagesOn deviceImplemented · not yet verifiedJPG, PNG, WebP, GIF, BMP in · JPG, PNG or WebP out
28Image under a target sizeImagesOn deviceImplemented · not yet verifiedJPG, PNG, WebP, GIF, BMP in · JPG or WebP out
29Crop imageImagesOn deviceImplemented · not yet verifiedSame format out (GIF/BMP → PNG)
30Rotate & flip imageImagesOn deviceImplemented · not yet verifiedSame format out (GIF/BMP → PNG)
31Watermark imageImagesOn deviceImplemented · not yet verifiedSame format out (GIF/BMP → PNG)
32Remove image metadataImagesOn deviceImplemented · not yet verifiedJPG, PNG, WebP in · same format out
33Inspect imageImagesOn deviceImplemented · not yet verifiedAny image file
34Social media image resizerImagesOn deviceImplemented · not yet verifiedJPG/PNG/WebP out
35Remove backgroundImagesOn deviceBlockedNeeds a licensed segmentation model running locally, or a configured background-removal provider.
36Color picker & paletteImagesOn deviceImplemented · not yet verifiedJPG, PNG, WebP, GIF, BMP
37Compress videoVideo & AudioCloudBlockedNeeds a verified media engine — FFmpeg WASM (requires cross-origin isolation headers) or a managed transcoding worker. Not configured.
38Convert video to MP4Video & AudioCloudBlockedNeeds a verified media engine — FFmpeg WASM (requires cross-origin isolation headers) or a managed transcoding worker. Not configured.
39Trim videoVideo & AudioCloudBlockedNeeds a verified media engine — FFmpeg WASM (requires cross-origin isolation headers) or a managed transcoding worker. Not configured.
40Extract audio from videoVideo & AudioOn devicePartial · not yet verifiedMP4, WebM, MOV in (depends on your browser) · WAV out — WAV output only — MP3 needs an encoder that is not installed.
41Convert audio to WAVVideo & AudioOn devicePartial · not yet verifiedMP3, WAV, OGG, M4A, FLAC in (depends on your browser) · WAV out — WAV output only — MP3 needs an encoder that is not installed.
42Trim audioVideo & AudioOn deviceImplemented · not yet verifiedMP3, WAV, OGG, M4A, FLAC in (depends on your browser) · WAV out
43Video to GIFVideo & AudioCloudBlockedNeeds a verified media engine — FFmpeg WASM (requires cross-origin isolation headers) or a managed transcoding worker. Not configured.
44Word & character counterText & DataOn deviceImplemented · not yet verifiedText
45Text case converterText & DataOn deviceImplemented · not yet verifiedText
46Remove duplicate linesText & DataOn deviceImplemented · not yet verifiedText
47Sort linesText & DataOn deviceImplemented · not yet verifiedText
48Find and replaceText & DataOn deviceImplemented · not yet verifiedText
49JSON formatter & validatorText & DataOn deviceImplemented · not yet verifiedText
50JSON ⇄ CSV converterText & DataOn deviceImplemented · not yet verifiedJSON or CSV text / files
51URL encode / decodeText & DataOn deviceImplemented · not yet verifiedText
52Base64 encode / decodeText & DataOn deviceImplemented · not yet verifiedText
53Password generatorText & DataOn deviceImplemented · not yet verifiedGenerated text
54UUID generatorText & DataOn deviceImplemented · not yet verifiedGenerated text
55SHA-256 file checksumText & DataOn deviceImplemented · not yet verifiedAny file
56QR code generatorText & DataOn deviceImplemented · not yet verifiedText in · PNG + SVG out
57Create & open ZIPText & DataOn deviceImplemented · not yet verifiedAny files in · ZIP out / ZIP in · files out — Created ZIPs store files without compression. Extraction blocks path-traversal entries and enforces size/count caps before inflating.
58Invoice generatorBusinessOn deviceImplemented · not yet verifiedForm in · PDF out
59Estimate / quote generatorBusinessOn deviceImplemented · not yet verifiedForm in · PDF out
60Receipt generatorBusinessOn deviceImplemented · not yet verifiedForm in · PDF out

Next steps

  1. Run the in-browser verification suite on each supported browser, and add automated fixture tests per tool.
  2. Move image processing to OffscreenCanvas workers where the browser supports it.
  3. Malware scanning for shared files, accounts and entitlements as cloud features grow.
  4. Media worker for video tools; transfer history and contacts.
  5. Billing, entitlements and the admin console once cloud features exist.
  6. Public SEO pages, sitemap and canonical URLs.