NSwag: The Swagger/OpenAPI toolchain for .NET, ASP.NET Core and TypeScript
NSwag | NJsonSchema | Apimundo | Namotion.Reflection

:point_right: Announcing Apimundo: An API documentation system based on NSwag and NJsonSchema :point_left:
NSwag is a Swagger/OpenAPI 2.0 and 3.0 toolchain for .NET, .NET Core, Web API, ASP.NET Core, TypeScript (jQuery, AngularJS, Angular 2+, Aurelia, KnockoutJS and more) and other platforms, written in C#. The OpenAPI/Swagger specification uses JSON and JSON Schema to describe a RESTful web API. The NSwag project provides tools to generate OpenAPI specifications from existing ASP.NET Web API controllers and client code from these OpenAPI specifications.
The project combines the functionality of Swashbuckle (OpenAPI/Swagger generation) and AutoRest (client generation) in one toolchain (these two libs are not needed). This way a lot of incompatibilites can be avoided and features which are not well described by the OpenAPI specification or JSON Schema are better supported (e.g. inheritance, enum and reference handling). The NSwag project heavily uses NJsonSchema for .NET for JSON Schema handling and C#/TypeScript class/interface generation.
The project is developed and maintained by Rico Suter and other contributors.
Features
Ways to use the toolchain
Tutorials
OpenAPI/Swagger Generators
- ASP.NET Web API assembly to OpenAPI (supports .NET Core)
Code Generators
- CSharp Client
- CSharpClientGenerator
- Generates C# clients from an OpenAPI specification
- Generates POCOs or classes implementing INotifyPropertyChanged supporting DTOs
- The generated clients can be used with full .NET, .NET Core, Xamarin and .NET Standard 1.4 in general
- CSharp Controllers (contract first/schema first development)
- TypeScript Client
- TypeScriptClientGenerator
- Generates TypeScript clients from an OpenAPI specification
- Available templates/supported libraries:
- JQuery with Callbacks,
JQueryCallbacks
- JQuery with promises
JQueryPromises
- AngularJS using $http,
AngularJS
- Angular (v2+) using the http service,
Angular
- window.fetch API and ES6 promises,
Fetch (use this template in your React/Redux app)
- Aurelia using the HttpClient from aurelia-fetch-client,
Aurelia (based on the Fetch template)
Axios (preview)
Downloads
NPM Packages
- NSwag: Command line tools (.NET and .NET Core) distributed as NPM package
NuGet Packages
Specification
- NSwag.Core
- The OpenAPI/Swagger reader and writer classes, see OpenApiDocument (.NET Standard 1.0 / 2.0 and .NET 4.5)
- NSwag.Core.Yaml (.NET Standard 1.3 / 2.0 and .NET 4.5)
- Extensions to read and write YAML OpenAPI specifications
- NSwag.Annotations (.NET Standard 1.0 / 2.0 and .NET 4.5)
- Attributes to decorate Web API controllers to control the OpenAPI generation
OpenAPI generation
- NSwag.Generation (.NET Standard 1.0 / 2.0 and .NET 4.5)
- Classes to generate OpenAPI specifications
- NSwag.Generation.WebApi (.NET Standard 1.0 / 2.0 and .NET 4.5)
- NSwag.Generation.AspNetCore (.NET Standard 1.6 / 2.0 and .NET 4.5.1)
- (Experimental) Classes to generate OpenAPI specifications from ASP.NET Core MVC controllers using the ApiExplorer
Code generation
ASP.NET and ASP.NET Core
Frontends
- NSwag.AssemblyLoader (.NET Standard 1.6 / 2.0 and .NET 4.5.1):
- Classes to load assemblies in an isolated AppDomain and generate OpenAPI specs from Web API controllers
- NSwag.Commands (.NET Standard 1.6 / 2.0 and .NET 4.5.1+):
- Commands for the command line tool implementations and UI
- NSwag.MSBuild (MSBuild .targets):
- Adds a .targets file to your Visual Studio project, so that you can run the NSwag command lin