goa
RepositoryFreeDesign-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.
Capabilities14 decomposed
design-first api dsl compilation and expression evaluation
Medium confidenceGoa implements a Go-based Domain Specific Language (DSL) that developers use to declaratively define API structures using Service(), Method(), Payload(), Result(), and transport-specific functions. The DSL is compiled and executed by the generator, which evaluates all constructs into an internal expression system (RootExpr, ServiceExpr, MethodExpr, AttributeExpr, ValidationExpr, HTTPEndpointExpr, GRPCEndpointExpr) that represents the complete API design. This expression tree becomes the single source of truth for all downstream code generation, documentation, and client generation.
Uses a Go-native DSL with embedded expression evaluation rather than external schema files (YAML/JSON), enabling compile-time validation and IDE support; the expression system (expr package) provides a unified internal representation that all generators consume, eliminating translation layers between spec formats
Stronger than OpenAPI-first approaches because design validation and type safety happen at definition time in Go, not as post-generation linting; more integrated than Protobuf because HTTP and gRPC transports share a single design model rather than requiring separate .proto files
multi-protocol code generation (http, grpc, json-rpc) from unified design
Medium confidenceThe code generation engine orchestrates protocol-specific generators that consume the expression tree and produce transport-layer implementations. HTTP transport generation creates route handlers, request/response marshaling, and middleware hooks; gRPC generation produces service definitions and interceptor support; JSON-RPC generation creates JSON-RPC 2.0 compliant endpoints. Each protocol generator is independent but shares type definitions and validation rules from the unified expression model, ensuring consistency across transports without code duplication.
Generates all three major RPC protocols (HTTP, gRPC, JSON-RPC) from a single design definition using protocol-specific generator modules (codegen/service, grpc/codegen, jsonrpc/codegen) that share type transformation and validation logic, eliminating the need to maintain separate .proto files, OpenAPI specs, or JSON-RPC schemas
More comprehensive than gRPC-only frameworks (like Buf) because it unifies HTTP and gRPC under one design; more flexible than OpenAPI generators because protocol-specific features (streaming, interceptors) are first-class DSL constructs rather than annotations
design evolution and regeneration with backward compatibility
Medium confidenceGoa supports design evolution by allowing developers to modify the DSL and regenerate code. The generator produces code in separate files (service.go, endpoints.go, http.go, grpc.go) such that business logic files (service implementation) are not overwritten during regeneration. Developers can add new methods, modify types, or change transport configurations, and the generator updates only the affected generated files. The design model tracks version information and can detect breaking changes, though the framework does not enforce backward compatibility automatically.
Separates generated code into multiple files (service.go, endpoints.go, http.go, grpc.go) such that business logic implementation is never overwritten during regeneration, allowing safe design evolution; the expression system tracks design changes and can detect breaking changes
More flexible than code-generation-once approaches because design can be evolved and regenerated; more maintainable than hand-written code because generated code is always synchronized with design
json-rpc 2.0 endpoint generation
Medium confidenceGoa generates JSON-RPC 2.0 compliant endpoints from service definitions, creating HTTP endpoints that accept JSON-RPC 2.0 requests and return JSON-RPC 2.0 responses. The generator creates request/response marshaling code that maps JSON-RPC parameters to service method arguments and service method results to JSON-RPC responses. Error handling is integrated through JSON-RPC error codes and messages. The generated code handles both positional and named parameters as defined in the JSON-RPC 2.0 specification.
Generates JSON-RPC 2.0 endpoints from the same design definition used for HTTP and gRPC, ensuring all three RPC protocols expose the same business logic without code duplication; request/response marshaling is automatically generated with support for both positional and named parameters
More integrated than third-party JSON-RPC libraries because JSON-RPC is a first-class transport option in the design; more consistent than hand-written JSON-RPC code because endpoints are generated from the design and automatically synchronized
design-driven client library generation
Medium confidenceGoa generates type-safe client libraries for all transport protocols (HTTP, gRPC, JSON-RPC) from the service definition. The generator creates client structs with methods that correspond to service methods, handling request marshaling, response unmarshaling, and error handling. HTTP clients use the standard Go http.Client; gRPC clients use the generated gRPC stubs; JSON-RPC clients use HTTP with JSON-RPC 2.0 formatting. Generated clients are fully type-safe and include proper error handling and timeout support.
Generates type-safe clients for all three transport protocols (HTTP, gRPC, JSON-RPC) from a single service definition, ensuring clients are always synchronized with the server implementation; clients are fully type-safe with proper error handling
More comprehensive than OpenAPI client generators because it supports gRPC and JSON-RPC in addition to HTTP; more integrated than hand-written clients because clients are generated from the design and automatically synchronized
http request/response header and parameter mapping
Medium confidenceGoa generates code that maps HTTP request/response headers, path parameters, query parameters, and request bodies to service method arguments and results. The HTTPEndpointExpr configuration specifies where each parameter comes from (path, query, header, body), and the generator creates code that extracts, validates, and transforms these parameters. Response headers and status codes are also configured in the design and automatically generated. The generator handles type conversion (e.g., string to int) and validation for all parameter types.
Generates parameter extraction code that is aware of parameter locations (path, query, header, body) defined in HTTPEndpointExpr, automatically handling type conversion and validation without requiring manual route handler code
More integrated than third-party parameter binding libraries because parameter mapping is defined in the design and automatically generated; more type-safe than manual parameter extraction because type conversion and validation are generated
type-safe request/response validation code generation
Medium confidenceGoa generates validation code for all request payloads and response results based on ValidationExpr rules defined in the DSL (Required, Enum, Format, Pattern, Minimum, Maximum, etc.). The generated validation functions are type-safe Go code that enforces constraints at runtime before business logic executes. Validation rules are embedded in AttributeExpr definitions and automatically propagated to all transport layers (HTTP, gRPC, JSON-RPC), ensuring consistent validation across protocols without duplicating constraint definitions.
Validation rules are defined once in the DSL and automatically generated as type-safe Go functions that execute before business logic, with validation errors propagated consistently across all transport protocols; this eliminates the need for manual validation code or third-party validation libraries
More integrated than tag-based validation (like Go's validator package) because constraints are part of the design model and automatically enforced; more consistent than hand-written validation because rules are centralized and regenerated with design changes
openapi/swagger specification generation
Medium confidenceGoa generates OpenAPI 3.0 specifications directly from the expression tree, mapping service definitions, methods, payloads, results, and HTTP endpoint configurations into OpenAPI components (paths, schemas, parameters, responses). The generator traverses the expression model and produces valid OpenAPI YAML/JSON that accurately reflects the API design, including request/response schemas, validation constraints, and HTTP metadata. This ensures the OpenAPI spec is always synchronized with the implementation and never becomes stale.
Generates OpenAPI specs directly from the internal expression tree rather than parsing generated code or annotations, ensuring 100% fidelity between design and spec; validation constraints from the DSL are automatically mapped to OpenAPI schema constraints (minLength, maxLength, enum, pattern, etc.)
More accurate than annotation-based OpenAPI generation (like Swag for Go) because the spec is generated from the design model before code generation, not reverse-engineered from code; more maintainable than hand-written specs because regeneration keeps specs synchronized with design changes
type transformation and marshaling code generation
Medium confidenceGoa generates type transformation functions that convert between transport-layer types (HTTP request bodies, gRPC messages, JSON-RPC parameters) and internal service types. The generator analyzes the expression tree to determine which fields must be transformed, in what order, and with what validation. Marshaling code is generated for serialization (Go structs to JSON/Protobuf) and unmarshaling code for deserialization (JSON/Protobuf to Go structs), with automatic handling of nested types, arrays, and custom types.
Generates marshaling code that is aware of transport-specific requirements (HTTP headers vs body, gRPC metadata vs message fields) by analyzing HTTPEndpointExpr and GRPCEndpointExpr configurations, allowing a single type definition to be marshaled differently across protocols
More comprehensive than struct tag-based marshaling (like encoding/json) because it handles protocol-specific transformations (e.g., HTTP query parameters, gRPC metadata) automatically; more maintainable than hand-written marshaling because code is regenerated with design changes
http endpoint routing and middleware integration
Medium confidenceGoa generates HTTP endpoint routing code that maps HTTP requests to service methods based on HTTPEndpointExpr configurations (routes, HTTP methods, path parameters, query parameters, headers). The generated code creates a net/http compatible router that handles request parsing, parameter extraction, validation, and response serialization. Middleware hooks are generated at multiple points (before routing, before business logic, after business logic) allowing developers to inject cross-cutting concerns (logging, authentication, rate limiting) without modifying generated code.
Generates HTTP routing code that is aware of parameter locations (path, query, header, body) defined in HTTPEndpointExpr, automatically extracting and validating parameters without requiring manual route handler code; middleware hooks are generated at multiple execution points, allowing clean separation of concerns
More integrated than third-party routers (like Gin, Echo) because routing is generated from design and automatically synchronized; more flexible than standard net/http because middleware hooks are built-in and parameter extraction is automatic
grpc service stub and interceptor generation
Medium confidenceGoa generates gRPC service definitions (.proto files) and Go service stubs from GRPCEndpointExpr configurations. The generator creates gRPC service interfaces, request/response message types, and server/client implementations. Interceptor hooks are generated at multiple points (unary, streaming) allowing developers to inject cross-cutting concerns (authentication, logging, metrics) without modifying generated code. The generator handles both unary and streaming RPC patterns defined in the design.
Generates both .proto files and Go gRPC stubs from a single design definition, eliminating the need to maintain separate .proto files; interceptor hooks are generated at multiple execution points (unary, streaming), allowing clean injection of cross-cutting concerns
More integrated than hand-written .proto files because service definitions are generated from design and automatically synchronized; more flexible than standard protoc because interceptor support is built-in and streaming patterns are first-class design constructs
example server and cli client code generation
Medium confidenceGoa generates example server implementations that demonstrate how to implement the service interface, and example CLI clients that show how to invoke the API. The generator creates boilerplate code that developers can use as a starting point for their implementation. Example code includes proper error handling, logging, and usage patterns. CLI clients are generated with command-line argument parsing and output formatting, allowing developers to test the API from the command line.
Generates both server and client example code from the same design definition, ensuring examples are always synchronized with the API; CLI clients are generated with full argument parsing and output formatting, making them immediately usable for testing
More useful than generic scaffolding because examples are generated from the actual service definition and include proper error handling; more complete than documentation examples because generated code is executable and tested
design-driven service interface generation
Medium confidenceGoa generates Go service interfaces from ServiceExpr and MethodExpr definitions, creating type-safe interfaces that developers implement with business logic. Each method in the interface corresponds to a method in the design, with parameters matching the Payload type and return values matching the Result type. The generated interface enforces a contract between the design and implementation, ensuring that business logic matches the API specification. Error handling is integrated through the Errors field in MethodExpr, generating error types that can be returned from service methods.
Generates service interfaces that are derived directly from the design model, ensuring the interface contract matches the API specification; error types are generated from the Errors field in MethodExpr, providing type-safe error handling across all transport protocols
More enforcing than hand-written interfaces because the interface is generated from design and regenerated with design changes; more type-safe than annotation-based approaches because the interface is the source of truth for the API contract
http websocket and streaming endpoint generation
Medium confidenceGoa generates HTTP WebSocket and Server-Sent Events (SSE) endpoint code from MethodExpr streaming configurations. The generator creates WebSocket upgrade handlers and SSE response writers that integrate with the service interface. Streaming endpoints are defined in the design using Stream configuration, which specifies the streaming direction (client-to-server, server-to-client, bidirectional) and message types. The generated code handles connection lifecycle, message marshaling/unmarshaling, and error propagation.
Generates WebSocket and SSE handlers from Stream configuration in the design, automatically handling connection lifecycle and message routing; streaming message types are defined in the design and validated like regular request/response types
More integrated than third-party WebSocket libraries because streaming is a first-class design construct; more type-safe than hand-written WebSocket code because message types are generated from the design
Capabilities are decomposed by AI analysis. Each maps to specific user intents and improves with match feedback.
Related Artifactssharing capabilities
Artifacts that share capabilities with goa, ranked by overlap. Discovered automatically through the match graph.
Polymet
Transforms ideas into production-ready code using...
Factory
Coding Droids for building software end-to-end
L2MAC
Agent framework able to produce large complex codebases and entire books
Grit
Automating code migrations and dependency upgrades
OpenAI: GPT-5 Codex
GPT-5-Codex is a specialized version of GPT-5 optimized for software engineering and coding workflows. It is designed for both interactive development sessions and long, independent execution of complex engineering tasks....
Qwen: Qwen3 Coder 30B A3B Instruct
Qwen3-Coder-30B-A3B-Instruct is a 30.5B parameter Mixture-of-Experts (MoE) model with 128 experts (8 active per forward pass), designed for advanced code generation, repository-scale understanding, and agentic tool use. Built on the...
Best For
- ✓Go teams building microservices who want design-first workflows with zero drift between spec and code
- ✓API-first organizations that need OpenAPI specs, client libraries, and servers generated from a single source
- ✓Teams migrating from REST-only to multi-protocol services (HTTP + gRPC) without duplicating design logic
- ✓Microservices teams that need to support multiple client types (REST, gRPC, JSON-RPC) without maintaining separate code paths
- ✓Organizations standardizing on Goa for internal APIs that must support both synchronous (HTTP/gRPC) and legacy (JSON-RPC) clients
- ✓Backend teams that want to avoid hand-writing transport boilerplate for each protocol
- ✓Long-lived APIs that need to evolve over time while maintaining stability
- ✓Teams that want to avoid manual code synchronization when design changes
Known Limitations
- ⚠DSL is Go-specific; non-Go developers must learn the syntax and cannot use familiar OpenAPI/Protobuf editors
- ⚠Design changes require full regeneration of all transport code, which can be disruptive in large codebases with manual modifications
- ⚠Expression system is internal; no stable API for third-party tools to consume or extend the design model
- ⚠Protocol-specific features (e.g., gRPC streaming, HTTP WebSockets) require explicit DSL configuration; not all protocol capabilities are automatically inferred
- ⚠Generated code assumes standard request/response patterns; highly custom protocol behavior may require manual code modifications after generation
- ⚠Regeneration overwrites transport code, so any hand-written customizations must be in separate files or protected regions
Requirements
Input / Output
UnfragileRank
UnfragileRank is computed from adoption signals, documentation quality, ecosystem connectivity, match graph feedback, and freshness. No artifact can pay for a higher rank.
Repository Details
Last commit: Apr 12, 2026
About
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.
Categories
Alternatives to goa
Are you the builder of goa?
Claim this artifact to get a verified badge, access match analytics, see which intents users search for, and manage your listing.
Get the weekly brief
New tools, rising stars, and what's actually worth your time. No spam.
Data Sources
Looking for something else?
Search →