Muxt

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.
Syntax
Standard http.ServeMux pattern:
[METHOD ][HOST]/[PATH]
Muxt extends this with optional status codes and method calls:
[METHOD ][HOST]/[PATH][ HTTP_STATUS][ CALL]
Example
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.
How It Works
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, custom TextUnmarshaler)
- Bind form data to struct fields with validation
- Inject request context,
*http.Request, or http.ResponseWriter when 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.
Installation
go install github.com/typelate/muxt@latest
Or add it to your project's module go get -tool github.com/typelate/muxt (note the project license documentation).
Quick Start
- 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 .
Examples
The command tests were intended to be readable examples of muxt behavior.
Documentation
Comprehensive documentation organized by task:
See the full documentation index for all available resources.
Using with AI Assistants
Paste these prompts into Claude Code or other AI assistants when building hypermedia apps:
Start with muxt-guide.md for most sessions. Use muxt-quick.md when context is limited.
License
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.