A desktop template editor built with Go, Wails v2, and a local HTML/CSS/JS UI. It stores templates as individual JSON files and exports filled reports to PDF.
Install Go 1.25+ and the Wails CLI:
go install github.com/wailsapp/wails/v2/cmd/wails@v2.13.0On Ubuntu 24.04+, install the native WebView dependencies before building:
sudo apt-get install libgtk-3-dev libwebkit2gtk-4.1-devwails devOn Ubuntu 24.04+, append -tags webkit2_41 to Wails build commands.
Build a local package for the current platform with:
wails buildThe platform binary is written to build/bin/.
Official releases are tag-driven:
git tag v1.0.0
git push origin v1.0.0Before creating a tag, run build-check from the repository’s GitHub Actions page. It compiles Windows, Linux, and macOS builds but does not upload or publish artifacts.
The GitHub Actions workflow builds Windows, Linux, and macOS artifacts on native runners and publishes them directly to the GitHub Release for that tag.
Manual workflow_dispatch runs are also supported for snapshot testing without publishing a GitHub Release.
Wails builds a native application using the platform WebView. The wails.json file is the packaging configuration.
main.go: Wails desktop entrypoint and embedded frontend assetsapp.go: template persistence, JS bridge, and PDF exportweb/: frontend loaded inside the desktop windowweb/Report-Template-builder.html: app markupweb/Report-Template-builder.css: app stylesweb/Report-Template-builder.js: app logic and desktop bridge callsreport-templates/: saved template JSON filesgo.mod: Go and Wails dependencieswails.json: Wails build configuration.github/workflows/release.yml: GitHub Actions release workflow
- Build templates with editable sections, fields, placeholders, select options, and date defaults
- Reorder sections and fields with drag and drop
- Duplicate templates from the sidebar
- Inline-edit field labels, field types, placeholders, select options, and date defaults
- Fill templates and see a live preview
- Copy the rendered report as Markdown or export it to PDF
- Sort templates by recent,
A-Z, orZ-A - Autosave template changes through the Go desktop bridge and browser cache
- Launch without a local web server or browser tab
Ctrl/Cmd + S: save the current templateCtrl/Cmd + Shift + D: duplicate the current templateCtrl/Cmd + 1: switch to Template BuilderCtrl/Cmd + 2: switch to Fill & Preview
Templates are stored as individual .json files in report-templates/.
The desktop app keeps this storage model unchanged:
- one template per file
- filenames generated from the current template name on save
- duplicate IDs skipped with warnings
- atomic writes when saving
Example manual template:
{
"id": "incident-report",
"name": "Incident Report",
"narrative": "Title: {{Overview.Title}}",
"sections": [
{
"name": "Overview",
"open": true,
"fields": [
{
"label": "Title",
"type": "text",
"placeholder": ""
}
]
}
]
}If id is missing, the desktop app will generate one from the filename on load.
- Use
Reload Templatesafter manually adding or editing template files. - The packaged desktop app reads/writes
report-templates/next to the executable. - Bundled starter templates are copied into the executable-adjacent
report-templates/folder on first launch if needed. - Windows stays
onedirbecause startup is faster than a self-extractingonefileexecutable.

