Introduction

LiveTemplate builds reactive web UIs in standard HTML and Go. You write an ordinary html/template and a small Go controller; the browser sends ordinary form data; the server re-renders, diffs, and patches the page. There is no client-side framework to learn, no second state model to keep in sync, and no build step for the common app screens.

The defining idea is that you never leave HTML. A <button name="increment"> is the action — you don't annotate it to make it reactive. You reach for an lvt-* attribute only for behavior HTML itself cannot express (a debounce, a keyboard shortcut, a reactive class toggle), never as boilerplate.

When LiveTemplate fits

It's a good fit when you're building app screens in Go and want live behavior — forms with inline validation, multi-tab sync, dashboards that update themselves, cross-user views — without standing up a separate frontend. Because the same program works as a plain form POST first, it degrades gracefully to environments with no JavaScript and upgrades to WebSocket-driven real time where you want it.

It's a weaker fit for highly bespoke client-side interaction (canvas editors, offline-first apps, animation-heavy UIs) where the logic genuinely belongs in the browser.

How it compares

If you've used other tools, the short version: LiveTemplate keeps HTML standard and moves reactivity to the server, instead of layering a new vocabulary on top of it.

Where to go next

Once the model clicks, the Concepts section goes a level deeper, and the Recipes and Apps sections are copy-paste starting points.

source: livetemplate/docs · path: content/getting-started/introduction.md