For those that aren't aware, 7 years ago to the day, oapi-codegen was born!
(Well, technically it's tonight at midnight UTC, but who's splitting hairs?)
There's nothing too special planned for today, but we thought it'd be the perfect time to cut a slice of cake a release!
🎉 Notable changes
New generated code requires oapi-codegen/runtime v1.2.0+
As part of #2256, github.com/oapi-codegen/runtime v1.2.0 is needed alongside github.com/oapi-codegen/oapi-codegen, for new generated code.
This is providing a more future-proofed means to bind parameters.
See the release notes for the runtime package, and #2256 for more information.
oapi-codegen was part of the GitHub Secure Open Source Fund
oapi-codegen was one of the projects taking part in the third GitHub Secure Open Source Fund session.
We've written up more about what we've learned, and have some more things to share with you over the coming months about lessons we've learned and improvements we've taken that we can share.
We were pretty chuffed to be selected, and it's already helped improve our security posture as a project, which is also very important for the wider ecosystem!
go directive bump in next release
Long-time users will be aware that we work very hard to try and keep our requirement for Go source compatibility, through the go directive, especially as we recommend folks use oapi-codegen as a source-tracked dependency.
For more details about this, see our Support Model docs.
In the next minor release, we'll be setting our minimum go directive to Go 1.24 (End-of-Life on 2026-02-11), as it's required for a number of dependencies of ours to be updated any higher, and a change to the module import path for Speakeasy's OpenAPI Overlay library requires us fix this centrally for our users to be able to continue updating their libraries.
Note
Nothing is changing as part of v2.6.0, this is a pre-announcement for v2.7.0.
Behind the scenes cleanup
There's also been some work behind-the-scenes to try and clean up outstanding issues (of which we know there are many!) that have been fixed, as well as Marcin's work on trying to do some more significant rework of the internals with help from Claude.
There's still, as ever, work to go with this - as we've mentioned before, sponsoring our work would be greatly appreciated, so we can continue to put in the work, considering this is a widely used and depended on project.
🚀 New features and improvements
- feat: Pass schema type/formats to runtime v1.2.0 to allow better parameter serialization (#2256) @mromaszewicz
- feat: add Valid() method to generated enum types (#2227) @mromaszewicz
- Support nullable slice elements and map values (#2185) @iamtakingiteasy
- feat: add configurable type mapping for OpenAPI primitive types (#2223) @mromaszewicz
- Support unions with multiple mappings pointing to a single underlying type (#2071) @tobio
- feat: add support for custom package alias for external ref imports (#2211) @InventivetalentDev
- feat(output-options): add
resolve-type-name-collisionsto avoid name collisions (#200) @mgurevin - Adopt fiber middleware template for updated GetReqHeaders() method signature (#1419) @getBolted
🐛 Bug fixes
- fix: qualify external ref schema types in default response codes (#2241) @mromaszewicz
- fix: add omitempty to optional nullable fields (#2221) @mromaszewicz
- fix(codegen): generate
nullable.Nullablein arrays (#2242) @jamietanna - fix: support x-oapi-codegen-extra-tags on parameter schemas (#2232) (#2235) @mromaszewicz
- fix(templates/client): correctly nil check query parameters (#2237) @jamietanna
- fix(server-urls): restore generation of constants (#2239) @jamietanna
- fix(server-urls): use URL in GoDoc if
descriptionis empty (#2226) @jamietanna - fix: set indentation to 2 when marshalling spec for overlay (#2172) @wndhydrnt
- fix: handle optional request bodies in strict server mode (#2222) @mromaszewicz
- fix(strict-server): generate correct type for
$reftext responses (#2225) @mromaszewicz - Fix schema gathering oversight (#2219) @mromaszewicz
- fix: handle duplicate path parameters in OpenAPI specs (#2220) @mromaszewicz
- fix: escape quoted media type directives (#2217) @brahmlower
- Fix Iris strict server for no content case (#1411) @ShouheiNishi
- Fixes type collision for enum values that start with _ (underscore) (#1438) @ula
📝 Documentation updates
- chore: readme update (#2209) @mromaszewicz
- docs: fix link to example (#1884) @rkosegi
- docs(extensions): correct links to examples (#1836) @yuro241
- docs(sponsors): update section (#2195) @jamietanna
- docs(sponsors): remove Elastic as a sponsor (#2083) @jamietanna
👻 Maintenance
- chore(renovate): add module path to security updates + override test-only dependencies' label (#2249) @jamietanna
- Configure Greptile code review (#2236) @mromaszewicz
- style(gofix): Apply
go fix(#2229) @gaiaz-iusipov - Run golangci-lint on a supported Go version (#2215) @mromaszewicz
- refactor(internal): move Fiber tests into their own modules (#2212) @mromaszewicz
- build: use a re-usable, single, workflow for running CI (#2205) @jamietanna
- fix(renovate): only run
make tidyafter Go module updates (#2159) @jamietanna - chore(renovate): run
make tidyafter dependency updates togo.mod(#2150) @jamietanna
📦 Dependency updates
8 changes
- chore(deps): update module github.com/golangci/golangci-lint to v2.10.1 (makefile) (#2153) @renovate[bot]
- chore(deps): update github/codeql-action action to v4.32.4 (.github/workflows) (#2157) @renovate[bot]
- chore(deps): update actions/setup-go action to v6.3.0 (.github/workflows) (#2164) @renovate[bot]
- chore(deps): update actions/checkout action to v6 (.github/workflows) - autoclosed (#2165) @renovate[bot]
- chore(deps): update release-drafter/release-drafter action to v6.2.0 (.github/workflows) (#2253) @renovate[bot]
- chore(deps): update actions/upload-artifact action to v7 (.github/workflows) (#2254) @renovate[bot]
- chore(deps): update dessant/label-actions action to v5 (.github/workflows) (#2255) @renovate[bot]
- chore(deps): update release-drafter/release-drafter action to v6.1.0 (.github/workflows) (#2132) @renovate[bot]
Sponsors
We would like to thank our sponsors for their support during this release.