MagnusOpera.OpenApiGen
0.43.0
Prefix Reserved
dotnet tool install --global MagnusOpera.OpenApiGen --version 0.43.0
dotnet new tool-manifest
dotnet tool install --local MagnusOpera.OpenApiGen --version 0.43.0
#tool dotnet:?package=MagnusOpera.OpenApiGen&version=0.43.0
nuke :add-package MagnusOpera.OpenApiGen --version 0.43.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 | net10.0 is compatible. 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.43.0 | 1,618 | 11/22/2025 | |
| 0.42.0 | 354 | 11/12/2025 | |
| 0.41.0 | 280 | 11/12/2025 | |
| 0.40.0 | 282 | 11/12/2025 | |
| 0.39.0 | 281 | 11/12/2025 | |
| 0.38.0 | 379 | 11/11/2025 | |
| 0.37.0 | 276 | 11/11/2025 | |
| 0.36.0 | 447 | 11/10/2025 | |
| 0.35.0 | 194 | 11/3/2025 | |
| 0.34.0 | 311 | 10/27/2025 | |
| 0.33.2 | 120 | 10/18/2025 | |
| 0.33.1 | 133 | 10/18/2025 | |
| 0.33.0 | 559 | 9/23/2025 | |
| 0.32.0 | 233 | 9/13/2025 | |
| 0.31.0 | 116 | 9/13/2025 | |
| 0.30.0 | 193 | 9/7/2025 | |
| 0.29.0 | 280 | 9/7/2025 | |
| 0.28.0 | 177 | 9/5/2025 | |
| 0.27.0 | 318 | 8/26/2025 | |
| 0.26.0 | 217 | 8/26/2025 |