I've kept running into the same problems in popular Go frameworks: hidden context mutation, magic middleware ordering, reflection-heavy binding, and APIs that slowly drift away from the standard library. The Gin ecosystem in particular has accumulated a lot of technical debt and footguns, which this post summarizes well: https://eblog.fly.dev/ginbad.html
Mizu is deliberately boring by design:
- Built directly on Go 1.22 http.ServeMux
- Explicit middleware chains with clear scoping
- No reflection, no codegen, no global state
- A real request context type that still interoperates with net/http
- First class graceful shutdown and error handling
If you're happy with net/http but want slightly better ergonomics and structure without losing control, that's the gap Mizu tries to fill.
Each chapter focuses on one HTTP concept and shows the same runnable example across net/http, Chi, Gin, Echo, Fiber, and Mizu. The key idea is that the README files are the single source of truth. All example code is generated from them and verified to compile and run (some may contain errors, let me build proper CI/CD later).
It is meant as a practical reference and a way to understand where frameworks differ in responsibility and wiring, not just syntax.
Book view here: https://github.com/go-mizu/go-fw/blob/main/BOOK.md