Generate HTTP handlers from html/template definitions.
Declare routes in template names using http.ServeMux patterns. Muxt analyzes receiver methods and generates handlers that parse parameters to match method signatures.
Muxt commands include:
muxt generateto generatehttp.Handlerglue (seetemplate_routes.gofor the output)muxtlist template routesmuxt checkto find bugs and more safely refactor your"text/template"or"html/template"source codemuxt list-template-callslist all call sites for a template (omit flag--patternsto list all call sites)muxt list-template-callerslist all callers for a template (omit flag--patternsto list all callers for all templates)
Standard http.ServeMux pattern:
[METHOD ][HOST]/[PATH]
Muxt extends this with optional status codes and method calls:
[METHOD ][HOST]/[PATH][ HTTP_STATUS][ CALL]
Define a template with a route pattern and method call:
{{define "GET /{id} GetUser(ctx, id)"}}
{{with $err := .Err}}
<div class="error" data-type="{{printf `%T` $err}}">{{$err.Error}}</div>
{{else}}
<h1>{{.Result.Name}}</h1>
<p>{{.Result.Email}}</p>
{{end}}
{{end}}
Implement the receiver method:
func (s Server) GetUser(ctx context.Context, id int) (User, error) {
return s.db.GetUser(ctx, id) // id automatically parsed from string
}Run muxt generate --use-receiver-type=Server to generate HTTP handlers.
Template names define the contract. Muxt analyzes method signatures using go/types and generates handlers that:
- Parse path parameters to method argument types (
string,int,bool, customTextUnmarshaler) - Bind form data to struct fields with validation
- Inject request context,
*http.Request, orhttp.ResponseWriterwhen named - Handle errors and return values through
TemplateData[T] - Set HTTP status codes from template names, return values, or error types
No (additional) runtime reflection. All type checking happens at generation time. The generated code uses only net/http and html/template from the standard library.
go install github.com/typelate/muxt@latestOr add it to your project's module go get -tool github.com/typelate/muxt (note the project license documentation).
- Create a template file
index.gohtml:
{{define "GET / Home(ctx)"}}
<!DOCTYPE html>
<html>
<body><h1>{{.Result}}</h1></body>
</html>
{{end}}
- Add generation directives to
main.go:
//go:embed *.gohtml
var templateFS embed.FS
//go:generate muxt generate --use-receiver-type=Server
var templates = template.Must(template.ParseFS(templateFS, "*.gohtml"))
type Server struct{}
func (s Server) Home(ctx context.Context) string {
return "Hello, Muxt!"
}- Generate handlers and run:
go generate && go run .The command tests were intended to be readable examples of muxt behavior.
- Local example - Complete application with tests (pkg.go.dev)
- Sortable Example - Interactive HTMX-enabled table row sorting
- HTMX Template - Full HTMX integration patterns
Comprehensive documentation organized by task:
- Getting Started Tutorial - Build your first Muxt application
- How-To Guides - Integrate, test, use HTMX, add logging
- Reference - CLI, syntax, parameters, type checking
- Explanation - Design philosophy, patterns, decisions
See the full documentation index for all available resources.
Paste these prompts into Claude Code or other AI assistants when building hypermedia apps:
| Prompt | Use Case |
|---|---|
| muxt-quick.md | Syntax lookup, minimal context |
| muxt-guide.md | Comprehensive guide for building apps |
| muxt-complete.md | Edge cases, testing patterns, advanced usage |
Start with muxt-guide.md for most sessions. Use muxt-quick.md when context is limited.
Muxt generator: GNU AGPLv3
Generated code: MIT License - The Go code generated by Muxt is not covered by AGPL. It is provided as-is without warranty. Use it freely in your projects.