MagnusOpera.OpenApiGen
0.32.0
Prefix Reserved
dotnet tool install --global MagnusOpera.OpenApiGen --version 0.32.0
dotnet new tool-manifest
dotnet tool install --local MagnusOpera.OpenApiGen --version 0.32.0
#tool dotnet:?package=MagnusOpera.OpenApiGen&version=0.32.0
nuke :add-package MagnusOpera.OpenApiGen --version 0.32.0
OpenApiGen
OpenApiGen is a .NET tool that generates simple, type-safe TypeScript clients from OpenAPI definitions. The generated clients are designed for easy integration with Axios and React Query.
Usage
Run the tool with:
openapigen <configuration-file> <openapi-file> <output-dir>
<configuration-file>
: Path to the configuration JSON file<openapi-file>
: Path to the OpenAPI definition JSON file<output-dir>
: Output directory for the generated TypeScript client (will be purged)
For help:
openapigen --help
Note on Any Types
This tool implements a workaround for a bug in Microsoft.Extensions.ApiDescription.Server 9.0.8, where nullable types are incorrectly emitted as type "any" in the OpenAPI definition. The generator heuristically locates an equivalent non-nullable schema and applies the intended nullability. This assumes the base, non-nullable schema is emitted correctly.
Example Output
Sample TypeScript code generated for a PATCH operation on /User/{id}
:
// === patch /User/{id} ===
export type UserIdPatchRequest = {
firstName: null | string
lastName: null | string
}
export type UserIdPatch200Response = {
firstName: string
lastName: string
}
export type UserIdPatch400Response = ProblemDetails
export type UserIdPatch404Response = ProblemDetails
export async function patchUserIdAsync(axios: AxiosInstance, bearer: string, id: string, request: UserIdPatchRequest): Promise<[200, UserIdPatch200Response] | [400, UserIdPatch400Response] | [404, UserIdPatch404Response]> {
const resp = await axios.patch(`/User/${id}`, request, { validateStatus: () => true, headers: { Authorization: `Bearer ${bearer}` } })
switch (resp.status) {
case 200: return [200, resp.data as UserIdPatch200Response]
case 400: return [400, resp.data as UserIdPatch400Response]
case 404: return [404, resp.data as UserIdPatch404Response]
default: throw `Unexpected status ${resp.status}`
}
}
Features
- Generates TypeScript clients from OpenAPI definitions
- Designed for easy integration with Axios and React Query
- Inlines types for clarity and simplicity
- Support for Bearer token (authorization header) and ApiKey (cookie)
- Minimal dependencies, no runtime bloat
Note on Nullable Types
This tool implements a workaround for a bug in Microsoft.Extensions.ApiDescription.Server 9.0.8, where nullable types are incorrectly emitted as type "any" in the OpenAPI definition. The generator heuristically locates an equivalent non-nullable schema (with the same required members) and applies the intended nullability. This assumes the base, non-nullable schema is emitted correctly.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
This package has no dependencies.
Version | Downloads | Last Updated |
---|---|---|
0.32.0 | 151 | 9/13/2025 |
0.31.0 | 56 | 9/13/2025 |
0.30.0 | 144 | 9/7/2025 |
0.29.0 | 231 | 9/7/2025 |
0.28.0 | 133 | 9/5/2025 |
0.27.0 | 286 | 8/26/2025 |
0.26.0 | 176 | 8/26/2025 |
0.25.0 | 168 | 8/25/2025 |
0.24.0 | 147 | 8/25/2025 |
0.23.0 | 117 | 8/25/2025 |
0.22.0 | 201 | 8/21/2025 |
0.21.0 | 138 | 8/21/2025 |
0.20.0 | 123 | 8/21/2025 |
0.18.0 | 126 | 8/21/2025 |
0.17.0 | 125 | 8/21/2025 |
0.16.0 | 76 | 8/15/2025 |
0.15.0 | 76 | 8/15/2025 |
0.14.0 | 136 | 8/15/2025 |
0.13.0 | 113 | 8/15/2025 |
0.12.0 | 138 | 8/14/2025 |
0.11.0 | 132 | 8/14/2025 |
0.10.0 | 132 | 8/14/2025 |
0.9.0 | 181 | 8/13/2025 |
0.8.0 | 166 | 8/11/2025 |
0.7.1 | 127 | 8/11/2025 |
0.7.0 | 136 | 8/10/2025 |
0.6.0 | 130 | 8/10/2025 |
0.5.0 | 118 | 8/9/2025 |
0.4.0 | 125 | 8/9/2025 |
0.3.0 | 129 | 8/9/2025 |
0.2.0 | 106 | 8/9/2025 |
0.1.0 | 106 | 8/9/2025 |
0.0.6 | 235 | 8/7/2025 |
0.0.5 | 206 | 8/7/2025 |
0.0.4 | 210 | 8/7/2025 |
0.0.3 | 206 | 8/7/2025 |
0.0.2 | 204 | 8/7/2025 |
0.0.1 | 212 | 8/7/2025 |