finds.dev← search

// the find

goadesign/goa

★ 6,083 · Go · MIT · updated Jun 2026

Design-first Go framework that generates API code, documentation, and clients. Define once in an elegant DSL, deploy as HTTP and gRPC services with zero drift between code and docs.

Goa is a design-first framework for Go APIs where you write a DSL that drives code generation for HTTP REST, gRPC, and JSON-RPC servers plus client packages and OpenAPI docs. The DSL is Go code, so it's type-checked and IDE-friendly. It's for Go teams building multiple services who are tired of keeping API specs, implementation, and docs in sync manually.

The code generation is genuinely thorough — you get server stubs, typed client packages, CLI test tools, and OpenAPI specs from one source of truth, and they stay in sync because they're all generated together. Multi-protocol from a single design (HTTP + gRPC + JSON-RPC) is rare and useful if your service needs to speak to both external REST consumers and internal gRPC callers. The interceptor model is clean — generated wrapper types make the middleware layer type-safe rather than relying on interface{} context hacks. Test coverage is serious: the golden-file test approach across hundreds of testdata cases means generator regressions get caught early.

The upfront cost is high — you have to learn the DSL before writing a single endpoint, and DSL errors can produce confusing generator failures rather than clear compiler errors. Generated code is not meant to be read, which means debugging transport-layer issues (wrong status code, malformed payload mapping) requires tracing through generated files that weren't written for humans. The design-first model breaks down when you need to iterate fast on an experimental endpoint — every change requires running 'goa gen' and potentially reconciling merge conflicts in generated files. Streaming support exists but the DSL surface for WebSocket and SSE is noticeably thinner than the HTTP/gRPC paths, with fewer examples and less documentation.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →