Step-by-step guide
Runhild
Build document packets from one CSV or XLSX. Try the fictional example, then map your own columns, check the rows and download draft DOCX 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.
The guide and practice files are free. The paid download packages the working app, source and templates together with the manual. Original no-charge preview permissions remain valid, including use for real work; this purchase does not grant exclusivity or revoke those rights.
See it in use
Create handover documents from a sheet
A screenshot walkthrough with fictional practice data. Select a step to explore.
The built-in three-row DEMO case differs from the guide’s four-row tool-library sheet.
1. Start with
Create handover documents from a sheet
The guide’s tool-library CSV has four rows for two fictional packets.
Sample files and contents
examples/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).
Practice files and guides are free. The complete app is included only where the product page says so.
2. In the app

Try it in three steps
- Load the CSV and confirm all eight columns map.
- Select handover, packing and receipt documents.
- Check packets, then download the ZIP.
Show every click and setting
- Open app/runhild.html and choose examples/tool-library-handover.csv as the Data file. This four-row practice file is separate from the three-row built-in example.
- In Step 2 check that all eight fields are matched (Runhild reports 8 of 8 columns matched automatically).
- In Step 3 tick Packing list and Confirmation of receipt as well as Handover act.
- Click Check the packets, then Download ZIP.
3. The result
A separate demonstration
The guide expects six documents for its two packets. The pictured two DEMO handovers are a separate built-in three-row example.
The built-in three-row DEMO case differs from the guide’s four-row tool-library sheet.

What to check in the practice result
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.
See the workflow at a glance
Choose a short explanation, then follow the worked example below. Check the requirements and compatibility before using your own files.
One table, two handovers, six draft documents.
The same item should not acquire a different date halfway through a handover packet. Runhild groups the fictional tool-library CSV into two packets and produces six draft DOCX documents: handover acts, packing lists and receipt confirmations. The example also shows a conflicting packet date blocking download, while item code 0042 keeps its leading zeros. These are drafts, not legally validated forms. The synthetic workflow was checked in Chrome 152 on Linux; Word rendering remains unverified. Review the guide and your receiving organisation's requirements before using a packet.
View the illustrated card

Before you start
- Desktop Google Chrome or Microsoft Edge. Chrome on Linux is checked for the full flow; Edge on Windows has only been checked to open and start the app.
- A CSV (UTF-8) or XLSX file with eight columns: packet_id, document_date (YYYY-MM-DD), sender_name, recipient_name, item_id, item_name, quantity (whole number above zero) and unit.
- Up to 100 data rows, 20 packets, 3 templates and 60 documents; data file up to 5 MB, template up to 8 MB.
- Runhild-0.1.1.zip, extracted completely into one folder. It includes the local app, three DOCX templates, source, illustrated manual and practice CSVs. No second archive extraction is required.
Your first result
Download and extract your bundle
Extract Runhild-0.1.1.zip completely into one folder. Open app/runhild.html in desktop Chrome. The manual is manual/index.html; source/ contains the rebuildable source; examples/ contains fictional CSVs. Chrome on Linux has been checked for the complete workflow; the earlier Windows Edge check covered startup only.
Step 1 — Choose your sheet
Choose Try the example for three fictional rows and two checked packets. The default Handover act template produces two documents. Download example CSV gives you the eight-column UTF-8 starter to edit. For your own data, use Data file to choose CSV or XLSX, select a worksheet if needed and check the separator.
Step 2 — Say which column is which
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.
Step 3 — Pick the documents to produce
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.
Step 4 — Check and download
Click Check the packets after changing data, mapping or templates. Problems identify their row, column and value; the download stays unavailable until all checks pass. With both other templates selected, the two example packets produce six draft DOCX documents. Choose Download ZIP and review each document before sending. Start over clears the page.
What you get
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).
Review before sending
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.
Saving and your data
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.
A worked example
Tool library handover packets
Input: examples/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).
- Open app/runhild.html and choose examples/tool-library-handover.csv as the Data file. This four-row practice file is separate from the three-row built-in example.
- In Step 2 check that all eight fields are matched (Runhild reports 8 of 8 columns matched automatically).
- In Step 3 tick Packing list and Confirmation of receipt as well as Handover act.
- Click Check the packets, then Download ZIP.
Expected result: 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.
More application screens
Get a first result, then use your own sheet
Actual Runhild 0.1.1 screens in Chrome 152 on Linux with fictional data. These screenshots do not verify visual rendering in Word.
1. Start with two ready document packets

2. Keep a checked result when a replacement is refused

Troubleshooting
Download ZIP stays disabled.
Check the packets after any successful data, mapping or template change. If a check fails, read the row, column and value, fix the spreadsheet and choose it again. Rows in a packet must share date, sender and recipient; item codes must be unique inside each packet.
Letters look wrong after importing a CSV.
Runhild reads CSV files as UTF-8. Save the CSV as UTF-8 from your spreadsheet program, or import the XLSX instead.
Your own template is refused.
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.
The page lost my work.
Runhild stores nothing. Reloading clears the page by design; choose the file again. The downloaded ZIP is your saved result.
A replacement file was refused
A refused replacement worksheet keeps the loaded file, column mapping and checked packets. A successfully loaded replacement clears the previous check and must be checked again. Changing the delimiter or worksheet still requires fresh checks.
Compatibility & limits
- Fills plain placeholders and one repeating item row only. No PDF output, calculations, signatures, tax or legal checks.
- Chrome on Linux is checked for the full flow; how the documents look in Word on Windows or macOS, screen readers and printing still need your own check.
- The original program keeps its included preview permissions: you may use it, including for real work, but not sell or redistribute it (see PREVIEW-PERMISSION.md and THIRD-PARTY-NOTICES.md).
- Draft documents only; no legal validity, PDF conversion, OCR, signatures, tax or accounting checks. Chrome 152 Linux synthetic DOCX flow checked; Windows Edge startup only and Word rendering unverified.
Need a hand?
Tell us the product, host application and version, what you tried, and the exact error. Contact support with a fictional example; keep private customer files and passwords out of your message.