Build consistent document packets from CSV or XLSX. Map CSV or XLSX columns into the supplied DOCX templates, validate the rows and download a packet of draft documents for review.
You regularly produce the same handover acts, packing lists or receipt confirmations for several recipients from one list of items, and want every document filled consistently from the same rows.

Buy the Runhild bundle at /store/runhild/ and extract runhild-0.1.1-guide-bundle.zip. Then extract program/runhild-preview-20260929.zip into a separate folder. The app/, extension/, samples/ and docs/ paths below refer to that extracted program folder. GUIDE.html and examples/ in the outer bundle contain this manual and its practice material. Open app/runhild.html in desktop Chrome or Edge.
Under Data file choose your CSV or XLSX. For a workbook, pick the worksheet. Runhild shows how many rows it read; if a CSV uses another separator, change Column separator (Detect automatically, Comma, Semicolon or Tab).
Runhild matches your header row to its fields: Packet number, Document date, Handing over, Receiving, Item code, Item name, Quantity and Unit, and shows the first row's value next to each. Correct any wrong choice in the drop-downs.
Tick up to three templates. The built-in examples are Handover act (ticked by default), Packing list and Confirmation of receipt. You can also add your own .docx that uses Runhild's placeholders, such as {{sender_name}} and an item-table row marked {{#items}}; the same three examples are in app/templates as Word files to adapt, and docs/TEMPLATE-GUIDE.md lists every placeholder.
Click Check the packets. Every row is checked first: each problem is listed with its row, column and value, and nothing is written until all checks pass. Then click Download ZIP. Start over clears the page.
The ZIP, named runhild-packets-<date>-<time>.zip, is saved to your Downloads folder. It holds documents/<packet> <template>.docx (one per packet per template), manifest.json (which row went into which document) and report.html (a readable summary).
Open every document in the Word version you will use and read it. The documents are drafts for you to approve; Runhild does not check them against any law, register or accounting system.
Runhild keeps nothing between sessions: reloading or closing the page clears everything, so keep your spreadsheet and the downloaded ZIP. It makes no network requests. To remove it, delete the unzipped folder.
Input: examples/runhild/tool-library-handover.csv: four fictional rows for two packets. The Lindgren Tool Library hands garden tools to Maple Street Community Garden (PK-001) and Harbor School Greenhouse (PK-002).
Expected: Step 4 says All checks passed and 6 documents will be written: 2 packets, 4 item rows (PK-001: 2 items, 14 units; PK-002: 2 items, 4 units). The ZIP contains documents/PK-001 Handover act.docx, PK-001 Packing list.docx, PK-001 Confirmation of receipt.docx, the same three for PK-002, plus manifest.json and report.html. The item code 0042 keeps its leading zeros. If you change the date on one PK-001 row, the check instead reports that packet PK-001 has two different values for Document date and the download stays disabled.
A check failed. Read the listed problem (row, column and value), fix it in your spreadsheet, and choose the file again. Every row of a packet must share the same date, sender and recipient, and item codes must be unique inside a packet.
Runhild reads CSV files as UTF-8. Save the CSV as UTF-8 from your spreadsheet program, or import the XLSX instead.
The message names the problem, for example an unknown placeholder such as {{invoice_total}}, an {{item.…}} placeholder outside the {{#items}} row, or a placeholder in a header, footer or text box. Only the main document body is filled.
Runhild stores nothing. Reloading clears the page by design; choose the file again. The downloaded ZIP is your saved result.
Guide and examples: 30 September 2026. Examples are fictional or synthetic. Online guide · Support