MagnusOpera.OpenApiGen 0.32.0

Prefix Reserved
dotnet tool install --global MagnusOpera.OpenApiGen --version 0.32.0
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local MagnusOpera.OpenApiGen --version 0.32.0
                    
This package contains a .NET tool you can call from the shell/command line.
#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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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