Download Latest Version Goa v3.25.3 source code.tar.gz (1.3 MB)
Email in envelope

Get an email when there's a new version of Goa

Home / v3.25.0
Name Modified Size InfoDownloads / 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.Pattern on every dispatched request, enabling observability middleware like otelhttp (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:line locations 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 Result and a StreamingResult on the same method with distinct types — the generated HTTP handler performs content negotiation based on the Accept header. (#3883)

What changed

HTTP runtime

  • r.Pattern auto-populated: the muxer captures the original Goa route pattern (before Chi wildcard rewriting) and sets r.Pattern = "METHOD /path" following the Go 1.22+ convention. This is a single, uniform hook that covers all handlers — endpoints and file servers alike. The otel plugin has been deprecated in favor of this built-in mechanism. (#3897)

Eval / DSL

  • Validation error locations: Validate()-phase errors now derive file:line from the expression's DSL function pointer using runtime.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 (Method for unary, MethodStream for 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 views package when referenced by view-projected types, fixing build failures for OneOf inside ResultType. (#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/Recv calls 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!

Source: README.md, updated 2026-02-16