Remix.run Logo
tamnd a day ago

I'm working on Mizu, a small Go web framework built around a simple idea: net/http is already good, frameworks should not fight it.

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.

Docs: https://docs.go-mizu.dev/overview/intro