Let the browser handle the copy, paste, rename routine
Document Batch is a small front-end tool: drop an Excel list and a Word template into your browser and it fills, names and packs N documents for you. No server, no server-side account, no invoice.
Why this exists
Thirty employment documents take a careful person forty minutes of copy and paste. The risk in those forty minutes is not typing speed — it is reaching the seventeenth person while believing you are on the eighteenth.
Mail merge solves half of it, until a field name does not match, the formatting drifts, or someone without Office needs to run it.
So we built a tool that does one thing: on your own machine, pour the list into the template and hand back a folder of already-named docx files.
How it works
It reads your sheet. xlsx is unzipped and parsed as XML; xls goes through a legacy parser. You decide which row holds the header.
It finds the blanks: underlines, empty brackets, {{fields}}, and the empty right-hand cells of label tables all become clickable spots.
Text is replaced in memory and repacked as docx using the template formatting, then zipped into a single download.
The stack: a small tool with almost no dependencies
The whole site is static. No framework, no backend, no build-time network calls — it runs the moment a browser opens it.
| Technology | Where it is used |
|---|---|
| HTML + CSS + vanilla JavaScript | The entire interface and logic. No framework, no virtual DOM. |
| Hand-written OOXML parsing | DOMParser / XMLSerializer read and write the XML inside docx and xlsx directly |
| Hand-written OLE compound-document reader | Reads .xls (BIFF8) and .doc (FIB + CLX piece table), formats designed in 1997 |
| Hand-written ZIP writer | Static files are compressed once and reused per document; compression uses native CompressionStream |
| JSZip | The only third-party library: it unpacks docx / xlsx containers |
| Hand-written i18n module | Four languages switchable at runtime; adding one means adding one dictionary |
| CSS custom properties + Grid / Flex | Design tokens, light and dark themes, three responsive layouts, no CSS framework |
| Node.js build script | Content-hashed filenames, optional obfuscation, emits dist/ |
| Static hosting (e.g. Cloudflare Pages) | It only serves files; CSP sets connect-src to none |
There is no backend. That is not a slogan, it is the architecture: the server has exactly one job — hand you a few static files.
Free, and staying that way
Every feature is available
No pro tier, no export quota, no watermark. What you see here is the whole product.
No data trading
There is no data to trade, so there is no profile to sell.
The cost is genuinely low
Static files on a free CDN tier; the computing happens on your machine. We pay for the domain.
Three hard commitments
Nothing is uploaded
The page contains no fetch call, and the browser itself is forbidden from opening connections.
Nothing is retained
No analytics, no third-party fonts; the ad slot is served by Google and we set no cookies of our own. Close the tab and the documents in memory are gone.
Nothing is locked in
The output is plain docx and zip — readable by Word, WPS and LibreOffice.
Questions
Are my documents uploaded?
No. Parsing, replacement and packing all happen in browser memory. You can unplug your network and repeat the process to verify.
Do you support .doc and .xls?
Yes. Legacy files are first read into text or cell values. A .doc always produces .docx output, and layout is simplified. When you can save as a modern format, do that.
How many documents at once?
Under 2000 is the sensible limit. The archive is assembled in memory, so a large batch on a small machine will slow down.
Is there a Windows or macOS app?
You do not need one. It is a web page: Chrome, Edge, Safari and Firefox all run it, and you can even open the files straight from disk.
Try it — thirty seconds
No sign-up, nothing to install. Drop two files in and decide whether it deserves a bookmark.