NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
NuGet · #2458 most downloaded on NuGet
Refitter is a CLI tool for generating a C# REST API Client using the Refit library from OpenAPI specifications.
Last release 9 days ago
28 Sep 2026
Ships fairly regularly
a new release about every 4 weeks
Most releases are documented
notes for 52 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
117 releases · first in 2023
One column per quarter.
Build deprecated schemas used by operations with warnings as errors by @christianhelle in #1294
Full Changelog: 2.2.1...2.3.0
Implemented enhancements:
Fixed bugs:
Merged pull requests:
Bump up version to v2.2.1
Bump up version to v2.2.1
Full Changelog: 2.2.0...2.2.1
Implemented enhancements:
Fixed bugs:
Merged pull requests:
Fix code scanning workflow permissions alerts by @christianhelle in #1218
Full Changelog: 2.1.3...2.2.0
Implemented enhancements:
Merged pull requests:
Pass CancellationToken to async calls to resolve SonarCloud S8949 issues by @christianhelle in #1209
Full Changelog: 2.1.2...2.1.3
Implemented enhancements:
Merged pull requests:
Fix RCE attribute injection in generated Refit clients ( GHSA-3fhm-p725-h3g3 , GHSA-58x9-vjvp-6mx8 , GHSA-p32v-8v8j-j534 ) by @christianhelle in #1178
Full Changelog: 2.1.1...2.1.2
Implemented enhancements:
Closed issues:
Merged pull requests:
Update dependency AutoMapper to 16.2.0 by @renovate [bot] in #1186
Full Changelog: 2.1.0...2.1.1
Implemented enhancements:
Fixed bugs:
Merged pull requests:
Refactor GenerateCommand into focused modules and stabilize package-reference builds by @christianhelle in #1095
Full Changelog: 2.0.0...2.1.0
Implemented enhancements:
Fixed bugs:
Merged pull requests:
Breaking changes and Migration Guide for v2.0.0 by @christianhelle in #1009
Full Changelog: 1.7.3...2.0.0
Implemented enhancements:
Fixed bugs:
Closed issues:
Merged pull requests:
Refitter v2.0.0 introduces 2 breaking changes that require action if you're upgrading from v1.7.3 or earlier. Both changes fix serious bugs and include straightforward migration paths.
The .refitter authentication setting has been renamed and restructured:
"generateAuthenticationHeader" (boolean)"authenticationHeaderStyle" (enum: None, Method, Parameter)Users with custom authentication headers in their .refitter files must update their configuration. Old JSON keys are silently ignored, causing authentication header generation to be disabled even if your config specifies otherwise.
Before (v1.7.3):
{
"openApiPath": "./swagger.json",
"namespace": "MyApi",
"generateAuthenticationHeader": true
}
After (v2.0.0):
{
"openApiPath": "./swagger.json",
"namespace": "MyApi",
"authenticationHeaderStyle": "Method"
}
Valid authenticationHeaderStyle values:
"None" — No authentication header generation (default)"Method" — Add [Headers("Authorization: Bearer")] to each method"Parameter" — Add authorizationToken parameter to each method.refitter files for "generateAuthenticationHeader""generateAuthenticationHeader": true → "authenticationHeaderStyle": "Method" or "Parameter""generateAuthenticationHeader": false → "authenticationHeaderStyle": "None" (or remove the setting)The Refitter.SourceGenerator now uses Roslyn's context.AddSource() API to generate code in-memory instead of writing physical .g.cs files to disk. Generated code is still compiled into your assembly but is not persisted to the file system.
Users of Refitter.SourceGenerator who:
.g.cs files./Generated folderRefit flowing transitively from Refitter.SourceGeneratorwill need to adjust their workflow.
This fix resolves critical issues:
Microsoft.Extensions.ApiDescription.ServerGenerated code remains accessible through your IDE without cluttering the file system:
.refitter file → Select "View Generated Code".refitter file → Select "Peek Generated Code" (requires Roslyn extension).refitter file → Select "View Generated Files"This is the recommended approach for most users.
Refitter.SourceGenerator keeps its Refit dependency private. Add a direct package reference to Refit in every consuming project, and add Refit.HttpClientFactory separately if you use generated dependency-injection helpers such as ConfigureRefitClients().
<ItemGroup>
<PackageReference Include="Refitter.SourceGenerator" Version="2.0.0" />
<PackageReference Include="Refit" Version="10.1.6" />
<PackageReference Include="Refit.HttpClientFactory" Version="10.1.6" />
</ItemGroup>
If you do not use the generated DI helpers, omit Refit.HttpClientFactory.
If you need disk files for version control, inspection, or custom build processes:
Using Refitter CLI:
dotnet tool install -g Refitter
refitter ./swagger.json --output ./GeneratedClient.cs --namespace "MyApi"
Using Refitter MSBuild:
<PackageReference Include="Refitter.MSBuild" Version="2.0.0" />
Add .refitter files to your project. MSBuild generates and writes physical files to the configured outputFolder.
If your CI/CD pipeline references generated files:
./Generated/**/*.g.cs).g.cs from .gitignore (if using MSBuild) or to ignore them (if using Source Generator)Refitter v2.0.0 upgrades the OpenAPI parser from Microsoft.OpenApi.Readers 1.x to 3.x (OasReader 3.7.0.20). This is a major version upgrade with materially different schema interpretation.
Users upgrading from v1.7.3 may see different generated C# code even without changing their OpenAPI specifications. This is not a breaking change in the Refitter API, but a behavioral change in code generation caused by the parser upgrade. The branch proves the parser changed and documents how to migrate; it does not prove full 1.7.3-vs-v2.0 behavioral equivalence across a broad real-world corpus.
Microsoft.OpenApi 3.x interprets these schema aspects differently than 1.x:
null type interpretationoneOf/anyOf discriminator resolution$ref path handlingcomponents sectionAction required: After upgrading Refitter to v2.0.0:
Treat these steps as the recommended mitigation for the parser upgrade: regenerate, inspect the diff, and validate your client with tests before shipping.
If you're using the CLI:
# Regenerate with new parser
refitter ./swagger.json --output ./GeneratedClient.cs --namespace "MyApi"
# Review the diff
git diff GeneratedClient.cs
# Run tests
dotnet test
# Commit
git add GeneratedClient.cs && git commit -m "Regenerate client with OpenAPI parser v3.x"
If you're using Source Generator or MSBuild, rebuild your project and review the generated changes the same way.
.refitter files: replace generateAuthenticationHeader with authenticationHeaderStyleRefitter.SourceGenerator: add a direct Refit package reference (and Refit.HttpClientFactory if using generated DI helpers).g.cs files from version control (if using Source Generator)These features remain fully backward compatible:
.refitter file format (except auth setting above)v2.0.0 also includes several new opt-in features with safe defaults:
"propertyNamingPolicy": "PreserveOriginal" to keep original OpenAPI property names"openApiPaths": ["./swagger1.json", "./swagger2.json"] to merge multiple specifications"contractTypeSuffix": "Dto" for custom contract type naming"generateJsonSerializerContext": true for ahead-of-time compilationIf you encounter issues during migration or have questions, please:
Add support for systems running only .NET 10.0 (without .NET 8.0 or 9.0) in Refitter.MSBuild by @christianhelle in #882
Full Changelog: 1.7.2...1.7.3
Implemented enhancements:
Merged pull requests:
Improve Immutable Records ergonomics #844
Implemented enhancements:
Fixed bugs:
Merged pull requests:
Full Changelog: 1.7.1...1.7.2
Improved handling of optional parameters #448 by @christianhelle
JsonStringEnumConverter prohibits usage of Json-SourceGenerationContext #778Full Changelog: 1.7.0...1.7.1
Implemented enhancements:
Fixed bugs:
JsonStringEnumConverter prohibits usage of Json-SourceGenerationContext #778Merged pull requests:
Fix Multipart file array support by @christianhelle in #784
[JsonConverter(typeof(JsonStringEnumConverter))] from generated contracts by @christianhelle in #786Full Changelog: 1.6.5...1.7.0
Implemented enhancements:
Fixed bugs:
Merged pull requests:
Do not remove colon from url paths, verify they're not present in operation names by @eoma-knowit in #765
Full Changelog: 1.6.4...1.6.5
Implemented enhancements:
Fixed bugs:
Merged pull requests:
Update --operation-name-template implementation to replace all {operationName} instances with Execute \#759 (christianhelle)
Implemented enhancements:
Closed issues:
Merged pull requests:
Introduce --simple-output CLI argument \#751 (christianhelle)
Implemented enhancements:
Fixed bugs:
Merged pull requests:
ASCII Art Title \#729 (christianhelle)
Implemented enhancements:
Fixed bugs:
Closed issues:
Merged pull requests:
Generated Refit Code Pragmas Start Above Interface \#706
Implemented enhancements:
Merged pull requests:
fix missing schema for dictionary keys \#697 (kirides)
Implemented enhancements:
Fixed bugs:
Closed issues:
Merged pull requests:
Do not add both \[Multipart\] and "Content-Type: multipart/form-data" \#693 (jaroslaw-dutka)
Implemented enhancements:
Fixed bugs:
Closed issues:
Merged pull requests:
Using CollectionFormats other than Multi \#640
Implemented enhancements:
Merged pull requests:
Adding security schemes to the api interface generator \#106
Implemented enhancements:
Fixed bugs:
Merged pull requests:
Naming properties problem \#641
Implemented enhancements:
Fixed bugs:
Closed issues:
Merged pull requests:
Fix date formatting for date-time types \#600 (christianhelle)
Implemented enhancements:
Merged pull requests:
Proper support for multipart form \#595 (jaroslaw-dutka)
Implemented enhancements:
Fixed bugs:
Merged pull requests:
\[Apizr\] Deprecated Optional package removed from code & doc \#539 (JeremyBP)
Implemented enhancements:
Fixed bugs:
Closed issues:
Merged pull requests:
Thanks for the great tool! \#522
Implemented enhancements:
Merged pull requests:
\[Query\] Required query params must be initialized from constructor \#506 (JeremyBP)
Implemented enhancements:
Merged pull requests:
Use Azure App Insights for telemetry \#490 (christianhelle)
Implemented enhancements:
Fixed bugs:
Merged pull requests:
House keeping - Update dependencies and optimize usings \#483 (christianhelle)
Merged pull requests:
Missing documentation for System.Text.Json polymorphic serialization \#467
Implemented enhancements:
Fixed bugs:
Merged pull requests:
Added GenerateClients options for separate generation \#436 (berkslv)
Implemented enhancements:
Merged pull requests:
Improve telemetry for --settings-file usage \#419 (christianhelle)
Implemented enhancements:
Merged pull requests:
Support generating immutable records \#407
Implemented enhancements:
Merged pull requests:
Polly.Extensions.Http deprecated in favour of Microsoft.Extensions.Http.Resilience \#398
Implemented enhancements:
Merged pull requests:
NSwag v14.0.8 \#397 ([renovate[bot]](https://github.com/apps/renovate))
Merged pull requests:
Remove SonarAnalyzer.CSharp dependency \#394 (christianhelle)
Implemented enhancements:
Merged pull requests:
Add the facility to exclude namespaces from generated code \#362
Implemented enhancements:
Fixed bugs:
remove-unused-schema not working for collection-type responses #352Merged pull requests:
Tweak xml docs \#332 (osc-nseguin)
Implemented enhancements:
Merged pull requests:
Support for OpenAPI version 3.1.0 \#328
Implemented enhancements:
Merged pull requests:
chore\(deps\): update dependency microsoft.net.test.sdk to v17.9.0 \#311 ([renovate[bot]](https://github.com/apps/renovate))
Merged pull requests:
More than one generated Client Api will result in an Extension Method Conflict for ConfigureRefitClients \#294
Implemented enhancements:
generateNullableReferenceTypes #304 (christianhelle)Fixed bugs:
generateNullableReferenceTypes #302Merged pull requests:
Add support for old core frameworks versions from .net6 \#290
Implemented enhancements:
Merged pull requests:
Add return type override setting. \#286 (DJ4ddi)
Implemented enhancements:
Merged pull requests:
Serialize OperationNameGenerator enum as string \#278 (christianhelle)
Implemented enhancements:
Fixed bugs:
operationNameGenerator enum not resolved from .refitter file #277Merged pull requests:
Add new options to .refitter file format docs \#274 (christianhelle)
Merged pull requests:
Support $ref references to separate files in OpenAPI specifications. \#192
Implemented enhancements:
Fixed bugs:
Merged pull requests:
Fix source generator error - System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Bcl.AsyncInterfaces' \#247 (christianhelle)
Implemented enhancements:
Fixed bugs:
Merged pull requests:
Ensure Task\ is Returned for Void Methods in Generator \#238 (mortenlaursen)
Implemented enhancements:
Merged pull requests:
Handle paths that contain colons \#227 (christianhelle)
Implemented enhancements:
Fixed bugs:
Merged pull requests:
Remove unused schema definitions \(e.g. --remove-unreferenced-schema \) \#170
Implemented enhancements:
--remove-unreferenced-schema ) #170--trim-unused-schema & --keep-schema #199 (kirides)Fixed bugs:
Merged pull requests:
Manually run refit generator so the source can be directly added to the compilation rather than writing to a file \#196
Implemented enhancements:
Fixed bugs:
namespace settings from codeGeneratorSettings #197 (christianhelle)Merged pull requests:
Allow for naming of methods when generating interfaces by endpoint \#176
Implemented enhancements:
Merged pull requests:
Allow for custom relative output path in .refitter \#172 (Noblix)
Implemented enhancements:
Merged pull requests:
Mark deprecated operations \#147
Implemented enhancements:
partial by default #161--operation-name-template command line argument #164 (angelofb)--optional-nullable-parameters CLI argument #163 (christianhelle)Fixed bugs:
--settings-file parameter. #149Closed issues:
Merged pull requests:
Fix \#142 by changing includeTags filtering and restoring collection snapshots \#143 (kirides)
Introduce OpenAPI validation \#141 (christianhelle)
Implemented enhancements:
Fixed bugs:
content-encoding: gzip fails #135Merged pull requests:
Fix incorrect assembly and file version \#129 (christianhelle)
Implemented enhancements:
Fixed bugs:
Merged pull requests:
Local smoke test bash script \#98 (christianhelle)
Implemented enhancements:
Merged pull requests:
Rename source generator output to use .refitter file and replace extension with .g.cs \#94 (christianhelle)
Implemented enhancements:
Add production tests for source generators \#92 (christianhelle)
Implemented enhancements:
Merged pull requests:
Your coding agent can read these notes before it upgrades. Set up the MCP server →