HTML stays legible
Templates are ordinary HTML with small, explicit Go islands for values, control flow, and composition.
HTML-first · ahead-of-time · Go
Sandwich Hime is an HTML-first, ahead-of-time template engine for Go. It keeps PHP-like immediacy, Go's types and deployment model, and ordinary markup that still looks like a page.
Working model
Templates are ordinary HTML with small, explicit Go islands for values, control flow, and composition.
Each template compiles into one typed component constructor. Components are the output and composition unit—not the whole product category.
Generated Go is committed with the application. Production needs the Apache-2.0 runtime, not the compiler.
One typed template
<?sando go
package views
func SandwichCard(sandwich Sandwich)
?>
<article>
<h2><?= sandwich.Name ?></h2>
<p><?= sandwich.Classification() ?> · <?= sandwich.Bread ?></p>
<ul>
<? for _, filling := range sandwich.Fillings { ?>
<li><?= filling ?></li>
<? } ?>
</ul>
<h3>Sauce</h3>
<p><?= sandwich.Sauce ?></p>
</article>
Typed sandwich data, an ordinary Go loop, and sauce that gets its own heading. Values are escaped for their HTML context. Build the complete field guide, with recipes and nested components.
Running proof
This website is built with Sandwich Hime. Its .sando templates compile into ordinary Go; the production binary links only the Apache-2.0 sando runtime, not the himesan compiler.
The HTML you are reading began in landing.sando. Hime-san generated ordinary Go, then an ordinary go build compiled this service.
landing.sandovisible templatelanding.sando.godeterministic generated Gogo buildthe normal Go toolchainsandwich-hime-sitethis ordinary Go serviceRead the EQL Helper production migration
See Hime in practice: our websites, Web Foundations, and renderer measurements.
Origin story · 🥪👸
I started the 2025 prototype with a wonderfully cursed question: could Go have the direct, mixed-markup joy of old PHP without inheriting PHP's production life? My first CLI could bless or rebuke a template, announced when Hime-san was resting, and made its first demo tell an admin user “uwu~” in hot pink.
Under the joke was a stubbornly serious idea: no syntax disguise, no reflection maze, and no page split across enough abstractions that its shape disappears. Everything visible. Everything obvious. Everything explicit.
It was not hubris. It was destiny.
I have used versions of Sandwich Hime in my own production work since 2025. Opening it now means formalizing the language, tests, security evidence, release channels, and compatibility promises—not pretending the idea appeared this week. Hime-san has grown a contextual analyzer, typed boundaries, deterministic generation, and considerably better judgment. The sandwich crown stays.
Craft principles
I am learning Japanese. These words and practices inspire design choices here; they are not a single doctrine, definitions of Japanese culture, or borrowed authority for a software project. The mappings below are explicitly my engineering analogies.
Repair visibly. A compiler bug earns a regression test and a clearer contract. The crack remains in history; the repair becomes part of the project's strength.
Value quiet restraint and the character that age and change can bring. In this project's analogy, honest preview status and calm, useful surfaces matter more than performing flawlessness.
Waste as little as practical. Generate ordinary Go, reuse its excellent toolchain, keep production small, and preserve work that still has value.
Leave meaningful space. HTML remains visible, the template engine stops at its boundary, and even an opinionated path leaves your application room to say no.
For fuller cultural context, start with Japan's public accounts of kintsugi and mottainai, the Japan Foundation on wabi-sabi, and Japan House Los Angeles on ma.
Supply-chain restraint · evidence over adjectives
At the assessed source baseline, the himesan compiler and nested sando runtime each declare zero third-party Go module requirements. That deliberately shrinks the engine's dependency surface; it does not mean the project is bug-free.
generate and check do not execute project code, invoke Go tooling, fetch dependencies, or edit go.mod. The optional dev supervisor is the separate command that intentionally builds and runs trusted project code..sando.go is ordinary, deterministic source intended to be committed, diffed, reviewed, and built with the normal Go toolchain.sando runtime; the AGPL compiler does not enter the service dependency graph.Template authors and embedded Go are trusted application code. Dynamic data is escaped according to whether it appears in HTML text, a quoted attribute, or a recognized URL attribute.
Ambiguous or unsupported contexts fail generation. Explicit trust types exist for the few cases where an application has already performed the necessary validation.
The exact RC source passed native Linux/amd64 and Apple Silicon macOS/arm64 verification on pinned Go 1.26.7 and Go 1.27.0 toolchains. The release includes reproducible archives, checksums, SPDX SBOMs, source/build provenance, and a Developer ID-signed, notarized, and stapled macOS distribution.
I publish dated, maintainer-led test and analysis evidence alongside named gaps. My own production use is useful operational evidence, but it is not an independent security audit, certification, formal verification, or a promise that another application has the same risk profile. Read the precise boundary, evidence, and current limitations.
Founder note
I first fell in love with making websites through a Geocities page for my PSO Gameclub that I last updated in 2004, at age 13. The web felt immediate: write a little markup, refresh, and share a place you made.
Two Japanese storytellers and world-builders have been among the most influential artists in my life: Hayao Miyazaki and Hideo Kojima. Through the worlds they made, I learned to notice the spaces between words; to let good and bad coexist deeply in one person, one story, and one place; and to trust that patience, beauty, reflection, and kindness can be worthwhile in themselves. Taking one clear, careful extra moment is often worth the moment.
To Hayao Miyazaki and Hideo Kojima: thank you for filling my life with so much joy, quiet, reflection, and space through your beautiful worlds.
To my wife and children: thank you for being the home and world that I love so deeply and dearly.
This is personal gratitude from a viewer and player. It does not claim affiliation with or endorsement by either creator.
I build now with an ADHD, neurodivergent mind, a disabled body, finite energy, and a family I want to leave something understandable and maintainable for. Those are not footnotes to the design. They are why I want calm defaults, visible files, useful diagnostics, accessible pages, last-good development builds, and systems that do not demand perfect health or attention before they become usable.
The web should leave space for individuals, tiny teams, new learners, disabled people, and anyone too small to win a complexity contest. Sandwich Hime is open work, but independence matters: copyleft for the compiler, a permissive runtime, application-owned output, founder-led governance, contributor-held copyright, and careful trademark stewardship make corporate capture harder without pretending open source can prohibit companies from using it.
I am not chasing perfection. I want perfect use and comfort where it matters, disciplined repairs where experience has left cracks, and enough care that my family—or another good steward—could carry the work forward.
— Cole Speelman
Opinionated, on purpose
The portable core is simple: himesan generate, himesan check, then your normal Go tools. For teams that want more, himesan dev is a deliberately featureful local supervisor: it watches, regenerates, builds your program, health-checks candidates, keeps the last healthy one serving, and provides local reload diagnostics.
I made that path opinionated on purpose: simplicity, friendliness, cleanliness, and fewer sharp edges. Follow it or don't; Hime-san will not follow your binary into production. She supervises your development server—she does not become your application server.
The canonical public source owns releases and signed compiler/runtime tags. Add the runtime to a Go project, then install the development compiler:
go get gamertan.com/sandwich-hime/sando@v1.0.0
go install gamertan.com/sandwich-hime/cmd/himesan@v1.0.0
The runtime and compiler modules each declare zero third-party Go module requirements. The downloads page carries exact Linux and macOS artifact identities; canonical Gitea remains the release authority.
The Agent Skill and VS Code previews remain compatible companions: give a coding agent the project's pinned, security-conscious workflow, or connect VS Code to Hime-san's editor-neutral language server.