arc is a typed HTTP/API runtime core for Go.
It provides:
- a custom router
- typed handlers
- request binding and validation
- error mapping
- response encoding
- OpenAPI 3.1 + JSON Schema generation
- middleware and observability hooks
- built-in Swagger UI docs
This README is the canonical scope/status document for the repository.
Implemented:
- custom router (path params, catch-all, groups, HEAD/OPTIONS)
- typed handlers (
Response, raw, stream, SSE, websocket helper) - binding from path/query/header/cookie/body/form/multipart (including multipart files)
- validation (required, min/max, min/max length, regex, enum, format, cross-field, custom validators)
- OpenAPI 3.1 and JSON Schema generation
- content negotiation (
application/json,application/problem+json, vendor+jsonmatching) - middleware pipeline and observability hooks
- tenant extraction (header/path/cookie/JWT)
- query DTO + include parsing + include tree helpers
- API versioning middleware and route version markers
- response caching with ETag/304 and invalidation middleware
- OpenAPI callbacks support
- server lifecycle (
/health,/ready, graceful shutdown)
arc currently integrates with orm directly (arc -> orm).
The adapter abstraction layer is not implemented yet by design in the current scope. This is a known and intentional limitation for the current version.
e := arc.New()
type In struct {
ID int64 `path:"id" validate:"required,min=1"`
}
type Out struct {
ID int64 `json:"id"`
}
arc.Handle(e, "GET", "/users/{id}", "users_get", func(ctx context.Context, in *In) (*arc.Response[Out], error) {
return arc.OK(Out{ID: in.ID}), nil
})
e.RegisterSystemRoutes("/openapi.json", "/docs")cmd/arc generates OpenAPI from registered routes.
Example:
go run ./cmd/arc -format json -out openapi.json
go run ./cmd/arc -format yaml -out openapi.yaml
go run ./cmd/arc -format json -stdout
go run ./cmd/arc -format json -out openapi.json -validate-qualityFlags:
-outoutput file path (default:openapi.json)-formatjson|yaml(default:json)-stdoutprint spec to stdout instead of writing file-with-systeminclude system routes (/openapi.json,/openapi.yaml,/docs,/schemas)-validate-qualityenforce OpenAPI quality gates and fail with exit code2on violations-require-tagsrequire roottagslist (default:true)-require-serversrequire rootserverslist (default:true)-require-security-schemescomma-separated requiredcomponents.securitySchemesnames (default:BearerAuth)-require-examplesrequire at least one operation-level request/response example (default:false)
CI usage example:
go run ./cmd/arc -format json -out openapi/openapi.json \
-validate-quality \
-require-tags \
-require-servers \
-require-security-schemes BearerAuthTo plug your own route registrations for generation, add a file in cmd/arc and assign RegisterRoutes in init():
func init() {
RegisterRoutes = func(e *arc.Engine) {
// register routes here
}
}/openapi.json/openapi.yaml/docs(Swagger UI)/schemas/schemas/{name}/health/ready
GitHub Actions workflows:
CI(.github/workflows/ci.yml):go vet,go test, andgo build ./cmd/arcon push/PR.Release(.github/workflows/release.yml): buildscmd/arcbinaries for Linux/macOS/Windows onv*tags and publishes assets to GitHub Releases.
Run tests:
go test ./...MIT. See LICENSE.md.