Skip to content

chore(deps): Update dependency Refit to v15 - #665

Closed
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/major-refit-monorepo
Closed

renovate[bot] wants to merge 1 commit into
mainfrom
renovate/major-refit-monorepo

Conversation

@renovate

@renovate renovate Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
Refit 7.2.2215.2.0 age confidence

Release Notes

reactiveui/refit (Refit)

v15.2.0: 15.2.0

🗞️ What's Changed
✨ Features
🐛 Fixes
📦 Dependencies
  • @​755b8c3 chore(deps): update dependency roslynator.analyzers to 4.16.1 (#​2312) renovate[bot]

🔗 Full Changelog: reactiveui/refit@v15.1.0...v15.2.0

🙌 Contributions

💖 Thanks to all the contributors: @​glennawatson

🤖 Automated services that contributed: renovate[bot]

v15.1.0: 15.1.0

🗞️ What's Changed
🐛 Fixes
⚡ Performance
🧹 General Changes
📦 Dependencies
  • @​46071eb chore(deps): update dependency sonaranalyzer.csharp to 10.32.0.713 (#​2303) renovate[bot]
  • @​51368ea chore(deps): update dependency roslynator.analyzers to 4.16.0 (#​2298) renovate[bot]

🔗 Full Changelog: reactiveui/refit@v15.0.0...v15.1.0

🙌 Contributions

💖 Thanks to all the contributors: @​glennawatson

🤖 Automated services that contributed: renovate[bot]

v15.0.0: 15.0.0

🗞️ What's Changed
✨ Features
🐛 Fixes
🧹 General Changes
📦 Dependencies

🔗 Full Changelog: reactiveui/refit@v14.0.1...v15.0.0

🙌 Contributions

🌱 New contributors since the last release: @​Lukas, @​radixy0
💖 Thanks to all the contributors: @​glennawatson, @​JavierGarcíadelaNocedaArgüelles, @​jgarciadelanoceda, @​Lukas, @​radixy0, @​rmja

🤖 Automated services that contributed: @​renovate[bot]

v14.0.1: 14.0.1

🗞️ What's Changed

🐛 Fixes
⚡ Performance

🔗 Full Changelog: reactiveui/refit@v14.0.0...v14.0.1

🙌 Contributions

🌱 New contributors since the last release: @​JavierGarciadelaNocedaArguelles
💖 Thanks to all the contributors: @​glennawatson, @​JavierGarciadelaNocedaArguelles, @​JavierGarcíadelaNocedaArgüelles, @​jgarciadelanoceda

v14.0.0: 14.0.0

Refit 14.0.0

Refit 14 is a major bug-fix and request-generation release. It fixes a broad set of correctness issues while completing the move to source-generated request building. Most clients can now build requests without runtime reflection, improving trimming, Native AOT support, startup time, and allocations.

What end users need to know
  • Check RF006 warnings before upgrading. The reflection request builder has moved out of the main package. If any API method reports RF006, add the Refit.Reflection package. Fully generated clients should not add it.
  • Some async APIs now return ValueTask. This affects the success-guard methods, DefaultApiExceptionFactory.CreateAsync, and several RefitSettings delegates. Most callers can continue to await them; code that stores a Task may need .AsTask().
  • A few request-building behaviours are intentionally different. Query objects are flattened from their declared type, serializer property names are honoured in query keys, and nested URL-encoded objects are flattened instead of using ToString().
  • Caller-owned streams remain open. Refit no longer disposes streams supplied as request bodies or multipart parts; callers are responsible for disposing them.
  • Validation timing can change. Fully generated interfaces validate route templates when the first request is built rather than when the client is created. Generated method frames also no longer appear in ApiException stack traces.
  • Empty authorization tokens now omit the header. Returning null, empty, or whitespace from AuthorizationHeaderValueGetter no longer sends a blank Authorization header.
Major fixes
  • Request generation now handles multiple generic overloads, escaped C# keyword identifiers, nullable value-type query objects, nested URL-encoded bodies, and indexed query collections correctly.
  • Caller-supplied request streams can be reused, generated helper types no longer collide across InternalsVisibleTo assemblies, and null parameter values round-trip correctly.
Highlights
  • New request controls include [PathPrefix], per-method [Timeout], absolute URLs with [Url], optional route segments, indexed query collections, header validation, and returning a built HttpRequestMessage without sending it.
  • Query objects, dictionaries, generic methods, multipart form objects, and custom return-type adapters gain broader reflection-free generation.
  • Server-Sent Events can be consumed as IAsyncEnumerable<T>, and transport exceptions can be customized with TransportExceptionFactory.
  • Runtime, reflection, and source-generator allocation reductions improve throughput; source generation is roughly twice as fast in the measured workload.

See the V14 migration details and complete feature documentation.

🗞️ What's Changed
💥 Breaking Changes
✨ Features
♻️ Refactoring
🐛 Fixes
⚡ Performance
🧹 General Changes
✅ Tests
📝 Documentation
📦 Dependencies

🔗 Full Changelog: reactiveui/refit@v13.1.0...v14.0.0

🙌 Contributions

🌱 New contributors since the last release: @​arpitjain099, @​jgarciadelanoceda, @​rmja
💖 Thanks to all the contributors: @​arpitjain099, @​ChrisPulman, @​glennawatson, @​jgarciadelanoceda, @​rmja, @​TimothyMakkison

🤖 Automated services that contributed: @​Copilot, @​renovate[bot]

v13.1.0: 13.1.0

🗞️ What's Changed
  • Fixed the CS0436 build error from PrimitivesR3BridgeGeneratedAttribute (#​2176, #​2194). Bumps ReactiveUI.Primitives to 6.0.0, which moves the R3 bridge generator out of the runtime package. Projects using InternalsVisibleTo (e.g. test projects) build again, and the <Analyzer Remove=... /> workaround is no longer needed.
  • Path parameters now use generated request building instead of reflection (#​2174), so they work with AddRefitGeneratedClient and NativeAOT. Now covers enum, Guid, DateTime/DateTimeOffset/DateOnly/TimeOnly/TimeSpan, all integer widths (incl. Int128/UInt128/Half), and any IFormattable (#​2193).
✨ Features
🧹 General Changes

🔗 Full Changelog: reactiveui/refit@v13.0.0...13.1.0

🙌 Contributions

🌱 New contributors since the last release: @​calebkiage
💖 Thanks to all the contributors: @​calebkiage, @​glennawatson

v13.0.0: 13.0.0

🗞️ What's Changed

Refit 13 is a major release focused on security hardening and a brand-new testing package.

  • Security hardening (#​2181) — closes issues found in a security audit. XML deserialization is now protected against XXE (external entity) attacks, the Newtonsoft.Json integration no longer honours unsafe TypeNameHandling by default (blocking type-confusion/deserialization attacks), and sensitive values (auth headers, tokens) are now redacted from exception and log output. This is the main reason for the major version bump: if you relied on permissive Newtonsoft type handling you may need to opt back in explicitly.
  • New Refit.Testing package (#​2184) — a first-party way to stub and verify Refit clients in tests without spinning up a real HttpClient. Supply canned responses for interface calls and assert which requests your code made, instead of hand-rolling HttpMessageHandler fakes.
  • R3 bridge analyzer fix (#​2186) — corrects the removal target for the R3 bridge analyzer.
  • CI and documentation tidy-ups for SonarCloud on fork pull requests.
✨ Features
🧹 General Changes
📝 Documentation
📌 Other

🔗 Full Changelog: reactiveui/refit@v12.1.0...v13.0.0

🙌 Contributions

💖 Thanks to all the contributors: @​ChrisPulman, @​glennawatson

v12.1.0: 12.1.0

🗞️ What's Changed

✨ Features
🐛 Fixes
📝 Documentation
📦 Dependencies

🔗 Full Changelog: reactiveui/refit@v12.0.0...12.1.0

🙌 Contributions

💖 Thanks to all the contributors: @​ChrisPulman, @​glennawatson, @​HulinCedric

🤖 Automated services that contributed: @​renovate[bot]

v12.0.0: 12.0.0

Overview

Refit 12.0 is a large release centred on a near-complete rewrite of how requests are built. The source generator now constructs HTTP requests inline at compile time instead of going through the reflection pipeline, making generated clients faster and friendly to trimming and Native AOT. On top of that foundation it adds response streaming, JSON Lines, naming-convention presets, and a batch of long-standing fixes. Two small, well-scoped breaking changes are called out below.

This release also removed netstandard2.0 and netstandard2.1 support. You should to use net462/net8 as your base lines, and use multiple targets if you need to target both.

Highlights
  • Reflection-free, AOT-ready source generation. Eligible interface methods now have their request (URI, headers, body, request properties) built directly in generated code, with the reflection request-builder kept only as a fallback for shapes that cannot be generated inline. Form bodies flatten through compiled, source-generated field descriptors. The generator itself was modernised and optimised, and ships analyzer diagnostics and code fixes. There is also a generated-only client-creation mode and a build-time switch for generated request building.
  • IAsyncEnumerable<T> response streaming. Stream large responses, auto-detecting a JSON array vs JSON Lines from the content type, generated inline on the hot path.
  • JSON Lines request bodies. [Body(BodySerializationMethod.JsonLines)] plus a streaming JsonLinesContent (application/x-ndjson), wired through both the reflection and source-gen paths.
  • Naming-convention presets. RefitSettings.CamelCase() / SnakeCase() / KebabCase() configure query keys, form-url-encoded keys, and JSON body property names consistently, plus snake/kebab URL key formatters. Opt-in, so existing behaviour is unchanged.
  • Response ergonomics. EnsureSuccessStatusCodeAsync() / EnsureSuccessfulAsync() are now available directly on IApiResponse<T>; a new IsSuccessfulWithContent (and HasContent) gives a single, mock-safe success-with-content check; nullable annotations on IApiResponse<T> were corrected to be sound.
  • URL and route control. Opt-in RFC 3986 / HttpClient-style URL resolution via RefitSettings.UrlResolution, and RefitSettings.AllowUnmatchedRouteParameters to leave an unmatched {token} for a DelegatingHandler to rewrite.
  • Faster JSON. A fast-path serialization option (SystemTextJsonContentSerializer.GetFastPathJsonSerializerOptions()) and buffered/streamed request-body modes that run through it.
  • Smaller additions. [Query(SerializeNull = true)] to send a null property as key= instead of omitting it, and a public UniqueName.ForType<T>() to resolve the generated IHttpClientFactory client name.
  • Fixes. Multipart Guid/DateTime/DateTimeOffset/TimeSpan (and DateOnly/TimeOnly) are sent as plain text (#​2016); property-level [Query(delimiter, prefix)] is honoured when flattening complex objects (#​1334); [Query(Format = "")] serializes a complex value via ToString() (#​1281); and IApiResponse<T> no longer shadows base members (#​1933).
Breaking changes and migration
  • IApiResponse<T> no longer shadows base members. The new-shadowed Error, ContentHeaders, IsSuccessStatusCode, and IsSuccessful members are removed from the generic interface. Source that reads these still compiles (they bind to the inherited base members), but code compiled against v8-v11 that bound to the generic-interface slots needs a recompile. If you relied on IsSuccessful to narrow Content to non-null on an IApiResponse<T>-typed value, switch to HasContent / IsSuccessfulWithContent.
  • The default System.Text.Json serializer now reads numbers from JSON strings (NumberHandling = AllowReadingFromString). Opt back out with NumberHandling = JsonNumberHandling.Strict on your JsonSerializerOptions.

🗞️ What's Changed

💥 Breaking Changes
✨ Features
♻️ Refactoring
⚡ Performance
🧹 General Changes

🔗 Full Changelog: reactiveui/refit@v11.2.0...v12.0.0

🙌 Contributions

💖 Thanks to all the contributors: @​glennawatson

v11.2.0: 11.2.0

🗞️ What's Changed
🐛 Fixes

🔗 Full Changelog: reactiveui/refit@v11.1.0...v11.2.0

🙌 Contributions

💖 Thanks to all the contributors: @​glennawatson

v11.1.0: 11.1.0

🗞️ What's Changed
🐛 Fixes
🧹 General Changes
📝 Documentation
📦 Dependencies

🔗 Full Changelog: reactiveui/refit@v11.0.1...v11.1.0

🙌 Contributions

🌱 New contributors since the last release: @​HulinCedric
💖 Thanks to all the contributors: @​ChrisPulman, @​glennawatson, @​HulinCedric, @​PressXtoChris

🤖 Automated services that contributed: @​renovate[bot]

v11.0.1: 11.0.1

🗞️ What's Changed

🧹 General Changes
📌 Other

🔗 Full Changelog: reactiveui/refit@v11.0.0...11.0.1

🙌 Contributions

🌱 New contributors since the last release: @​xIceFox
💖 Thanks to all the contributors: @​glennawatson, @​xIceFox

v11.0.0: 11.0.0

⚠️ This is a breaking release (major: 10.x → 11.0.0)

11.0.0 reworks Refit's error/exception model and tightens interface validation. Most apps will compile, but code that inspects ApiResponse.Error, reads StatusCode, or catches transport exceptions around Refit calls will need changes. These are the same breaking changes that briefly shipped in the now‑delisted 10.1.7 and were reported by the community in #​2114.

💡 Need a drop‑in, non‑breaking replacement for 10.1.6? Use 10.2.0 — it is 10.1.6 re‑signed with a valid certificate (the 10.1.6 cert was revoked, see #​2114). Move to 11.0.0 when you're ready to adopt the changes below.

💥 What changed & how to migrate

1. ApiResponse<T>.Error is now ApiExceptionBase? (was ApiException?) (#​2052)
A new abstract base ApiExceptionBase now sits under both ApiException and the new ApiRequestException. ApiExceptionBase does not expose Content / HasContent — those still live on ApiException.

// before
string? body = response.Error?.Content;

// after — narrow to ApiException first
if (response.Error is ApiException apiEx)
{
    string? body = apiEx.Content;   // Content/HasContent are on ApiException
}

2. New ApiRequestException wraps transport/connection failures (#​2052)
Exceptions thrown by HttpClient.SendAsync before a response arrives — HttpRequestException (DNS/host unreachable), TaskCanceledException (time

Important

✂ PR body was truncated to here.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot added the dependencies Dependency updates and supply-chain label Aug 12, 2026
@renovate
renovate Bot force-pushed the renovate/major-refit-monorepo branch 2 times, most recently from 0137375 to 4577f44 Compare August 25, 2026 14:59
@renovate renovate Bot changed the title chore(deps): Update dependency Refit to v15 chore(deps): Update dependency Refit to v15 - autoclosed Sep 7, 2026
@renovate renovate Bot closed this Sep 7, 2026
@renovate
renovate Bot deleted the renovate/major-refit-monorepo branch September 7, 2026 21:50
@renovate renovate Bot changed the title chore(deps): Update dependency Refit to v15 - autoclosed chore(deps): Update dependency Refit to v15 Sep 8, 2026
@renovate renovate Bot reopened this Sep 8, 2026
@renovate
renovate Bot force-pushed the renovate/major-refit-monorepo branch 2 times, most recently from 4577f44 to 669891b Compare September 8, 2026 04:27
@renovate renovate Bot changed the title chore(deps): Update dependency Refit to v15 chore(deps): Update dependency Refit to v15 - autoclosed Sep 9, 2026
@renovate renovate Bot closed this Sep 9, 2026
@renovate renovate Bot changed the title chore(deps): Update dependency Refit to v15 - autoclosed chore(deps): Update dependency Refit to v15 Sep 9, 2026
@renovate renovate Bot reopened this Sep 9, 2026
@renovate
renovate Bot force-pushed the renovate/major-refit-monorepo branch 2 times, most recently from 669891b to 98f4d92 Compare September 9, 2026 21:06
@coderabbitai

coderabbitai Bot commented Sep 9, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 4dbe6fa3-8e3c-456c-bc75-97b625e3bd13

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

@thewrz

thewrz commented Sep 15, 2026

Copy link
Copy Markdown
Contributor

This was written agentically; verify its assertions:

Closing — not verifiable here. Refit 15 does still ship net48 targets (checked the nuspec: .NETFramework4.6.2–4.8.1 are present), so this is not the #589 case, but it is an eight-major jump (7.x → 15.x, across the Refit 8 source-generator rewrite) against a Phase 4c scaffold that no CI job compiles: the CodeQL csharp check on this PR never builds the add-in (it needs the Revit 2024 API assemblies from a local install), so its green tick is not evidence. The csproj's own rule is "bump via the lockfile, never blind". Take this deliberately when the add-in gets a build gate; rename this PR to get a fresh one then.

🤖 Co-authored by Claude Fable 5.1.

@thewrz thewrz closed this Sep 15, 2026
@renovate

renovate Bot commented Sep 15, 2026

Copy link
Copy Markdown
Contributor Author

Renovate Ignore Notification

Because you closed this PR without merging, Renovate will ignore this update. You will not get PRs for any future 15.x releases. But if you manually upgrade to 15.x then Renovate will re-enable minor and patch updates automatically.

If you accidentally closed this PR, or if you changed your mind: rename this PR to get a fresh replacement PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Dependency updates and supply-chain

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant