Generate Go client and server boilerplate from OpenAPI 3 specifications
This report summarizes scanner evidence for oapi-codegen/oapi-codegen, a Go project with 8,635 GitHub stars. SynthScan examined 760,372 lines of code across 2067 source files, recording 1186 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 1.8 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 1105 finding(s).
Are imports declared and package/API names verified? 5 finding(s).
Are wrappers, guards, and repeated structures necessary? 76 finding(s).
Which changes need focused human review? 1186 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 1186 distinct pattern matches across 7 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | README.md | 661 | // The endpoint of the server conforming to this interface, with scheme, | COMMENT |
| LOW | cmd/oapi-codegen/oapi-codegen.go | 1 | // Copyright 2019 DeepMap, Inc. | COMMENT |
| LOW | internal/test/clients/clients.gen.go | 601 | // with any type of body and a specified content type. | COMMENT |
| LOW | internal/test/clients/clients.gen.go | 621 | // PostJsonWithResponse performs a POST /with_json_body (the `PostJson` operationId) request. | COMMENT |
| LOW | internal/test/clients/responseheaders/doc.go | 1 | // Package responseheaders verifies that response headers declared in the | COMMENT |
| LOW | internal/test/options/compatibility/doc.go | 1 | // Package optionscompatibility exercises the compatibility output options. | COMMENT |
| LOW | …ternal/test/options/compatibility/compatibility.gen.go | 101 | } | COMMENT |
| LOW | internal/test/options/skip_prune/skip_prune_test.go | 1 | package optionsskipprune | COMMENT |
| LOW | internal/test/options/skip_prune/doc.go | 1 | // Package optionsskipprune exercises the output-options skip-prune flag: | COMMENT |
| LOW | …rnal/test/options/skip_prune/config_default_prune.yaml | 1 | # yaml-language-server: $schema=../../../../configuration-schema.json | COMMENT |
| LOW | internal/test/options/type_aliases/doc.go | 1 | // Package optionstypealiases exercises output-options.disable-type-aliases-for-type: | COMMENT |
| LOW | internal/test/options/name_normalizer/spec.yaml | 1 | # ========================================================================== | COMMENT |
| LOW | internal/test/options/name_normalizer/unset/doc.go | 1 | // Package optionsnamenormalizerunset checks that, with name-normalizer unset, | COMMENT |
| LOW | …rnal/test/options/name_normalizer/to_camel_case/doc.go | 1 | // Package optionsnamenormalizertocamelcase checks that name-normalizer: | COMMENT |
| LOW | …lizer/to_camel_case_with_additional_initialisms/doc.go | 1 | // Package optionsnamenormalizertocamelcasewithadditionalinitialisms checks | COMMENT |
| LOW | …tions/name_normalizer/to_camel_case_with_digits/doc.go | 1 | // Package optionsnamenormalizertocamelcasewithdigits checks that | COMMENT |
| LOW | …/name_normalizer/to_camel_case_with_initialisms/doc.go | 1 | // Package optionsnamenormalizertocamelcasewithinitialisms checks that | COMMENT |
| LOW | internal/test/options/struct_tags/doc.go | 1 | // Package optionsstructtags exercises the struct-tags output option: struct | COMMENT |
| LOW | internal/test/options/struct_tags_unions/doc.go | 1 | // Package optionsstructtagsunions exercises the struct-tags output option | COMMENT |
| LOW | internal/test/options/response_getters/spec.yaml | 1 | # ========================================================================== | COMMENT |
| LOW | internal/test/options/response_getters/skipped/doc.go | 1 | // Package optionsresponsegettersskipped checks that, with skip-response-body-getters | COMMENT |
| LOW | internal/test/options/response_getters/enabled/doc.go | 1 | // Package optionsresponsegettersenabled checks that, with skip-response-body-getters | COMMENT |
| LOW | internal/test/options/content_types/doc.go | 1 | // Package optionscontenttypes exercises the content-types output option: a | COMMENT |
| LOW | internal/test/options/filter/server.yaml | 1 | # ========================================================================== | COMMENT |
| LOW | internal/test/options/filter/doc.go | 1 | // Package optionsfilter drives generation of the operations/ and tags/ sub-packages, | COMMENT |
| LOW | internal/test/options/yaml_tags/doc.go | 1 | // Package optionsyamltags exercises the yaml-tags output option: when enabled, | COMMENT |
| LOW | internal/test/bodies/responses/headerformats/doc.go | 1 | // Package responseheaderformats verifies that strict-server response headers | COMMENT |
| LOW | …al/test/bodies/responses/component_inline_union/doc.go | 1 | // Package responsescomponentinlineunion verifies that a components/responses | COMMENT |
| LOW | internal/test/bodies/responses/content/content_test.go | 1 | package responsescontent | COMMENT |
| LOW | internal/test/bodies/responses/content/doc.go | 1 | // Package responsescontent verifies that a components/responses entry | COMMENT |
| LOW | internal/test/bodies/responses/headers/doc.go | 1 | // Package responseheaders verifies that response headers declared on an | COMMENT |
| LOW | internal/test/bodies/requests/requests.gen.go | 101 | type ClientInterface interface { | COMMENT |
| LOW | internal/test/bodies/requests/doc.go | 1 | // Package bodiesrequests exercises request bodies combined with parameters in the generated | COMMENT |
| LOW | internal/test/bodies/content_types/spec.yaml | 1 | # ========================================================================== | COMMENT |
| LOW | internal/test/bodies/content_types/doc.go | 1 | // Package bodiescontenttypes exercises request/response content-type handling. | COMMENT |
| LOW | internal/test/bodies/content_types/content_types.gen.go | 381 | // with any type of body and a specified content type. | COMMENT |
| LOW | internal/test/bodies/content_types/content_types.gen.go | 901 | // | COMMENT |
| LOW | internal/test/bodies/content_types/content_types.gen.go | 921 | // | COMMENT |
| LOW | internal/test/bodies/content_types/content_types.gen.go | 941 | // | COMMENT |
| LOW | internal/test/bodies/content_types/text_and_json/doc.go | 1 | // Package textandjson verifies strict-server codegen for an operation | COMMENT |
| LOW | …ernal/test/bodies/content_types/text_non_string/doc.go | 1 | // Package textnonstring verifies strict-server codegen for text/plain | COMMENT |
| LOW | …test/bodies/content_types/multi_json/multi_json.gen.go | 881 | // are not resolved here; the bytes are the spec exactly as embedded by | COMMENT |
| LOW | internal/test/bodies/content_types/multi_json/doc.go | 1 | // Package multijson verifies that an operation declaring multiple | COMMENT |
| LOW | internal/test/aggregates/anyof/spec.yaml | 1 | # ========================================================================== | COMMENT |
| LOW | internal/test/aggregates/anyof/anyof.gen.go | 1041 | // Response body array items are an inline anyOf — no separate named schema. | COMMENT |
| LOW | internal/test/aggregates/anyof/doc.go | 1 | // Package aggregatesanyof exercises anyOf/oneOf/allOf union types in multiple forms: | COMMENT |
| LOW | internal/test/aggregates/hoisting/spec_implicit.yaml | 1 | # ========================================================================== | COMMENT |
| LOW | internal/test/aggregates/hoisting/doc.go | 1 | // Package aggregateshoisting exercises anonymous inner schema hoisting into named | COMMENT |
| LOW | internal/test/aggregates/params/doc.go | 1 | // Package aggregatesparams covers oneOf/anyOf parameters (issue #2560). An | COMMENT |
| LOW | internal/test/aggregates/allof/spec.yaml | 1 | # ========================================================================== | COMMENT |
| LOW | internal/test/aggregates/allof/allof_test.go | 81 | // When both schemas have additionalProperties: false, | COMMENT |
| LOW | internal/test/aggregates/allof/doc.go | 1 | // Package aggregatesallof exercises allOf composition and additionalProperties merge | COMMENT |
| LOW | internal/test/aggregates/allof/config_old_merge.yaml | 1 | # yaml-language-server: $schema=../../../../configuration-schema.json | COMMENT |
| LOW | internal/test/aggregates/allof/config_new_merge.yaml | 1 | # yaml-language-server: $schema=../../../../configuration-schema.json | COMMENT |
| LOW | internal/test/aggregates/oneof/doc.go | 1 | // Package aggregatesoneof exercises oneOf code generation: discriminator-driven unions | COMMENT |
| LOW | internal/test/aggregates/matrix/doc.go | 1 | // Package matrix is the aggregate-schema (allOf / anyOf / oneOf) test matrix. | COMMENT |
| LOW | internal/test/aggregates/matrix/doc.go | 21 | // | COMMENT |
| LOW | …est/aggregates/matrix/v1/allof_constraint_oneof/doc.go | 1 | // Code generated by specgen from ../../shapes/allof_constraint_oneof.yaml. DO NOT EDIT. | COMMENT |
| LOW | …1/allof_constraint_oneof/allof_constraint_oneof.gen.go | 841 | BodyComponentWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorF | COMMENT |
| LOW | …1/allof_constraint_oneof/allof_constraint_oneof.gen.go | 861 | BodyDefaultWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) | COMMENT |
| 1036 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | internal/test/options/compatibility/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/options/compatibility/spec.yaml | 8 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/options/skip_prune/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/options/skip_prune/spec.yaml | 7 | # ========================================================================== | COMMENT |
| MEDIUM | …ternal/test/options/skip_prune/spec_default_prune.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | …ternal/test/options/skip_prune/spec_default_prune.yaml | 7 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/options/type_aliases/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/options/type_aliases/spec.yaml | 7 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/options/name_normalizer/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/options/name_normalizer/spec.yaml | 24 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/options/struct_tags/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/options/struct_tags/spec.yaml | 8 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/options/struct_tags_unions/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/options/struct_tags_unions/spec.yaml | 8 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/options/response_getters/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/options/response_getters/spec.yaml | 14 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/options/content_types/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/options/content_types/spec.yaml | 9 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/options/filter/server.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/options/filter/server.yaml | 12 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/options/yaml_tags/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/options/yaml_tags/spec.yaml | 7 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/bodies/content_types/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/bodies/content_types/spec.yaml | 19 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/aggregates/anyof/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/aggregates/anyof/spec.yaml | 11 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/aggregates/hoisting/spec_explicit.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/aggregates/hoisting/spec_explicit.yaml | 9 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/aggregates/hoisting/spec_implicit.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/aggregates/hoisting/spec_implicit.yaml | 11 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/aggregates/allof/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/aggregates/allof/spec.yaml | 12 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/aggregates/allof/spec_new_merge.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/aggregates/allof/spec_new_merge.yaml | 8 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/aggregates/allof/spec_old_merge.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/aggregates/allof/spec_old_merge.yaml | 8 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/schemas/security/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/schemas/security/spec.yaml | 8 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/schemas/recursive/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/schemas/recursive/spec.yaml | 9 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/schemas/primitives/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/schemas/primitives/spec.yaml | 11 | # ========================================================================== | COMMENT |
| MEDIUM⚡ | internal/test/schemas/deprecated/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM⚡ | internal/test/schemas/deprecated/spec.yaml | 14 | # ========================================================================== | COMMENT |
| MEDIUM | …ternal/test/extensions/skip_optional_pointer/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | …ternal/test/extensions/skip_optional_pointer/spec.yaml | 11 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/extensions/struct_tags/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/extensions/struct_tags/spec.yaml | 11 | # ========================================================================== | COMMENT |
| MEDIUM | …est/extensions/struct_tags/spec_extra_tags_params.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | …est/extensions/struct_tags/spec_extra_tags_params.yaml | 9 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/extensions/x_order/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/extensions/x_order/spec.yaml | 7 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/extensions/x_go_type/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/extensions/x_go_type/spec.yaml | 12 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/openapi31params/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/openapi31params/spec.yaml | 10 | # ========================================================================== | COMMENT |
| MEDIUM⚡ | internal/test/naming/conflicts/spec.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM⚡ | internal/test/naming/conflicts/spec.yaml | 10 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/naming/conflicts/spec_importnames.yaml | 1 | # ========================================================================== | COMMENT |
| MEDIUM | internal/test/naming/conflicts/spec_importnames.yaml | 8 | # ========================================================================== | COMMENT |
| 16 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | pkg/codegen/merge_schemas_v3_test.go | 368 | assert.True(t, result.AdditionalProperties.Schema.Value.Type.Is("string")) | CODE |
| CRITICAL | pkg/codegen/merge_schemas_v2_test.go | 339 | assert.True(t, result.AdditionalProperties.Schema.Value.Type.Is("string")) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | internal/test/aggregates/oneof/config_components.yaml | 4 | # components.yaml fold: comprehensive oneOf + anyOf marshaling / discriminator cases. | COMMENT |
| MEDIUM⚡ | internal/test/schemas/deprecated/spec.yaml | 9 | # - deprecation/ (comprehensive) (deprecated operations/params/bodies/headers/objects) | COMMENT |
| MEDIUM⚡ | internal/test/naming/conflicts/spec.yaml | 9 | # - name_conflict_resolution (comprehensive conflict resolution patterns A-M) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pkg/codegen/resolve_names.go | 21 | // Step 1: Generate candidate names for all schemas | COMMENT |
| LOW⚡ | pkg/codegen/resolve_names.go | 33 | // Step 2: Resolve collisions iteratively | COMMENT |
| LOW⚡ | pkg/codegen/resolve_names.go | 36 | // Step 3: Build the result map | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pkg/codegen/resolve_names.go | 21 | // Step 1: Generate candidate names for all schemas | COMMENT |
| LOW⚡ | pkg/codegen/resolve_names.go | 33 | // Step 2: Resolve collisions iteratively | COMMENT |
| LOW⚡ | pkg/codegen/resolve_names.go | 36 | // Step 3: Build the result map | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …test/aggregates/matrix/shapes/anyof_closed_inline.yaml | 19 | - '{"phone": "555-0100"}' | CODE |
| LOW | examples/authenticated-api/echo/server/fake_jws.go | 28 | const KeyID = `fake-key-id` | CODE |
| LOW | examples/authenticated-api/stdhttp/server/fake_jws.go | 28 | const KeyID = `fake-key-id` | CODE |