| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| Goa v3.25.0 source code.tar.gz | 2026-02-16 | 1.3 MB | |
| Goa v3.25.0 source code.zip | 2026-02-16 | 2.3 MB | |
| README.md | 2026-02-16 | 4.6 kB | |
| Totals: 3 Items | 3.7 MB | 0 | |
Highlights
- Automatic HTTP route tagging: the default Goa muxer now sets
r.Patternon every dispatched request, enabling observability middleware likeotelhttp(v0.65.0+) to tag spans and metrics with the matched route automatically — no per-handler wrapping or plugin required. (#3897) - Better DSL error messages: validation errors now include
file:linelocations pointing to the offending design declaration, making it much faster to find and fix issues in large Goa designs. (#3895) - Mixed unary + SSE results: services can now define both a unary
Resultand aStreamingResulton the same method with distinct types — the generated HTTP handler performs content negotiation based on theAcceptheader. (#3883)
What changed
HTTP runtime
r.Patternauto-populated: the muxer captures the original Goa route pattern (before Chi wildcard rewriting) and setsr.Pattern = "METHOD /path"following the Go 1.22+ convention. This is a single, uniform hook that covers all handlers — endpoints and file servers alike. Theotelplugin has been deprecated in favor of this built-in mechanism. (#3897)
Eval / DSL
- Validation error locations:
Validate()-phase errors now derivefile:linefrom the expression's DSL function pointer usingruntime.CallersFrames, robust to inlining. Both DSL-time and validation-time errors benefit. (#3895, #3890)
Codegen
- Mixed unary + SSE: generated handlers perform
Accept-based content negotiation; the generated client exposes a split API (Methodfor unary,MethodStreamfor SSE). A non-nil discard stream implementation is passed in unary mode so service code can use the stream parameter without nil guards. (#3883) - OneOf in ResultType views: union helper types are now emitted in the
viewspackage when referenced by view-projected types, fixing build failures forOneOfinsideResultType. (#3884) - Composite client response decoding: unnamed array/map HTTP client response bodies now decode directly into the concrete wire type instead of generating endpoint-scoped wrapper aliases, fixing build failures when multiple endpoints share a structural type. (#3888)
- WebSocket upgrade error persistence: upgrade failures are now stored on the server stream struct so subsequent
Send/Recvcalls reliably return the error instead of panicking on a nil connection. (#3885) - HTTP client array payload codegen: fixed deduplication of request body builder functions when multiple methods use
ArrayOf(...)payloads with different element types. (#3879)
Upgrade notes
This release changes generated code. After upgrading, regenerate and review the diff:
:::bash
go get goa.design/goa/v3@v3.25.0
# then run your normal generation flow (goa gen / go generate)
The otelhttp route-tagging behavior is automatic for the default Goa muxer — if you were using the otel plugin solely for WithRouteTag, you can remove it.
Full changelog
- #3879 fix: http client codegen for multiple array-type payloads
- #3883 codegen: support mixed unary + SSE results
- #3884 codegen: generate OneOf unions in views package
- #3885 http/codegen: persist websocket upgrade errors
- #3888 http/codegen: decode composite client responses without wrappers
- #3890 eval: report validation error locations
- #3895 eval: report validation error locations (refinement)
- #3897 http: set r.Pattern on dispatched requests for automatic route tagging
Compare: https://github.com/goadesign/goa/compare/v3.24.3...v3.25.0
Thank you to @abocim for contributing #3879!