Repository navigation
Releases
25.0.2 Ocelot Extension Packages
Release Ocelot.* extension packages
- Ocelot release: 25.0.2 on Oct 15, 2026 → Release Radar 📡
Ocelot.Cache.CacheManager version 25.0.2
- Ocelot.Cache.CacheManager release: 25.0.2 on Oct 18, 2026
Ocelot.QualityOfService.Polly version 25.0.2
- Ocelot.QualityOfService.Polly release: 25.0.2 on Oct 16, 2026
Ocelot.Discovery.Consul version 25.0.2
- Ocelot.Discovery.Consul release: 25.0.2 on Oct 16, 2026
Ocelot.Discovery.Eureka version 25.0.2
- Ocelot.Discovery.Eureka release: 25.0.2 on Oct 17, 2026
Ocelot.Discovery.KubeClient version 25.0.2
- Ocelot.Discovery.KubeClient release: 25.0.2 on Oct 18, 2026
25.0.2
📦 Reference SDK 10.0.402. Runtime 10.0.13 patch (version 25.0.2)
Version 25.0.2 includes upgraded solutions of all Ocelot packages based on .NET SDK 10.0.402, released on October 13, 2026. For more details about SDK 10.0.402 (also known as Runtime 10.0.13), see the .NET 10.0.13 Release Notes as part of the .NET 10 Release Notes.
🔥 Hotfix for bugs #2352 #2428 (version 25.0.2), a.k.a. Dynamic Routing patch 📦
Affected Milestones: .NET 10, Summer '25
Hotfixed versions: 24.1.0 ("Globality"), 25.0.0, 25.0.1 (".NET 10")
Read the Docs: Ocelot 25.0 with PDF
🔥 Hotfixed bugs are #2352 and #2428. A sincere and heartfelt "Thank You" goes to @xiexihui, @elenacalugaru, and @alin-popa for reporting these critical bugs.
❤️ A special "Thank You" goes to Beka Mosulishvili (@bekammo) for the professional and timely contributions in pull requests #2427 and #2429.
❗Breaking Changes❗
Interface Breaking Changes:
- Interface FQN: Ocelot.DownstreamRouteFinder.Finder.IDownstreamRouteProvider
- Deleted type FQN: Ocelot.DownstreamRouteFinder.DownstreamRouteHolder
The IDownstreamRouteProvider.Get method now returns Response<Route> (previously Response<DownstreamRouteHolder>). The DownstreamRouteHolder class has been removed. Placeholders are now stored directly on Route.TemplatePlaceholderNameAndValues. Custom implementations of IDownstreamRouteProvider and any code that references DownstreamRouteHolder require updates and recompilation.
Other changes affecting deployments:
- Dynamic Routing no longer attempts to build upstream header templates from incoming request headers (fixes
RegexParseExceptionon certain browser headers such assec-ch-ua). An empty collection is returned instead. Static routing is unchanged. - Reference updated to .NET SDK 10.0.402 / Runtime 10.0.13.
25.0.1 Ocelot Extension Packages
Release Ocelot.* extension packages
- Ocelot release: 25.0.1 on Sep 14, 2026 → Release Radar 📡
Ocelot.QualityOfService.Polly version 25.0.1
- Ocelot.QualityOfService.Polly release: 25.0.1 on Sep 16, 2026
Ocelot.Discovery.Consul version 25.0.1.2
- Ocelot.Discovery.Consul release: 25.0.1.2 on Sep 18, 2026
Ocelot.Discovery.Eureka version 25.0.1
- Ocelot.Discovery.Eureka release: 25.0.1 on Sep 17, 2026
Ocelot.Discovery.KubeClient version 25.0.1
- Ocelot.Discovery.KubeClient release: 25.0.1 on Sep 17, 2026
25.0.1 ⚠️
Warning
Critical Hotfix for Dynamic Routing users. Please upgrade to 25.0.2 ASAP❗
If your Ocelot deployment uses the Dynamic Routing feature, you are affected by two critical bugs — #2352 and #2428 — and must upgrade to 25.0.2 immediately. Users not using Dynamic Routing can safely remain on 24.1.0 (.NET 9); 25.0.0, 25.0.1 (.NET 10).
📦 Reference SDK 10.0.401. Runtime 10.0.12 patch (version 25.0.1)
Version 25.0.1 includes upgraded solutions of all Ocelot packages based on .NET SDK 10.0.401, released on September 8, 2026. For more details about SDK 10.0.401 a.k.a. Runtime 10.0.12, see the .NET 10.0.12 Release Notes as part of .NET 10 Release Notes.
Features of version 25.0.1
Logbook
- ba90c50 by Raman Maksimchuk on Monday, September 14 at 21:54 →
Release version 25.0.1 for SDK 10.0.401 | +semver: patch - 7fac820 by Raman Maksimchuk on Monday, September 14 at 15:08 →
Ref SDK 10.0.401 (Runtime 10.0.12) to release Ocelot v25.0.1 and Ocelot.Testing v25.0.1 - 65686d4 by Raman Maksimchuk on Friday, August 28 at 14:12 →
Don't upload code coverage for Release-mode DLLs as a second uploaded report, since it breaks the coverage process for Debug DLLs - 5a59e96 by Raman Maksimchuk on Wednesday, August 26 at 15:45 →
IDE0130 Namespace Ocelot.AcceptanceTests.* does not match folder structure, expected Ocelot.Acceptance.* - 30c2e08 by Raman Maksimchuk on Tuesday, August 18 at 20:24 →
Finalize the docs for version 25.0
Full Changelog: 25.0.0...25.0.1
25.0.0 ⚠️
Warning
Critical Hotfix for Dynamic Routing users. Please upgrade to 25.0.2 ASAP❗
If your Ocelot deployment uses the Dynamic Routing feature, you are affected by two critical bugs — #2352 and #2428 — and must upgrade to 25.0.2 immediately. Users not using Dynamic Routing can safely remain on 24.1.0 (.NET 9); 25.0.0, 25.0.1 (.NET 10).
Upgrade to .NET 10 SDK (TFM net10.0, version 25.0) a.k.a. the .NET 10 release
Milestone: .NET 10 👈
Codenamed: .NET 10
Read the Docs: Ocelot 25.0 with PDF
Target Framework Monikers:net8.0,net9.0,net10.0
ℹ️ About
On November 11th, 2025, the .NET team announced the release of the .NET 10 framework:
- .NET Blog: Announcing .NET 10
This major release upgrades the Ocelot package TFMs to net10.0 in addition to the current net8.0 and net9.0. Thus, the current Ocelot supported frameworks are .NET 8 LTS, .NET 9 STS, and .NET 10 LTS.
Additionally, in this major release the Ocelot team focused on preparing the codebase and its ecosystem for the .NET 10 SDK (.NET 10 milestone), while also extracting several integrated extension packages from the v24.1 monorepo into their own dedicated repositories to speed up delivery and reduce release coupling. As a result of these DevOps activities, the Ocelot repository now hosts only two package projects — Ocelot (src folder) and Ocelot.Testing (testing folder) — along with two solutions, Ocelot.slnx and Ocelot.Samples.slnx, which can be opened or built only if the .NET 10 SDK is installed. Since the extension packages now live in separate repositories, a new Release Radar status page has been introduced to track their progress.
This major version also includes the following feature updates:
- A built-in Quality of Service (QoS) circuit breaker (express edition) that works out of the box without requiring the Polly library.
- Significant enhancements to the WebSockets feature, including WebSockets middleware overriding and the addition of Security Options to the WebSockets pipeline.
- Improved Configuration experience that merges multiple
ocelot.*.jsonfiles, keeping users' extended properties available during Ocelot app startup and at runtime via the standardIConfigurationservice in the DI container.
Finally, because the repository has a new folder structure, the development team recommends recloning or even reforking the Ocelot repository for a successful upgrade to the new version in order to avoid potential build errors.
As a best practice, the release strategy has been aligned with .NET SDK monthly patches (usually available between the 10th and 15th of each month). The development team will therefore also aim to roll out monthly Ocelot patches that reference the new .NET SDK patched versions. Ocelot patches will follow the form of a beta or patched version major.minor.*, where * is the Ocelot patch number corresponding to the newly available .NET SDK patch.
Ideally, the Ocelot team expects accelerated releases with more frequent minor/patch versions, because DevOps is now prepared for the new release strategy and offers fast delivery.
For successful contributions, maintainers will announce an identity-verification procedure (details for first-time contributors will be published soon).
🆕 What's New?
Quality of Service: A "Built-in Circuit Breaker" feature implementation was added by @ocelot-ot in pull request #2385 — no Polly required. ⭐
Ocelot's QoS schema no longer strictly depends on the external Ocelot.QualityOfService.Polly package to provide circuit breaking and timeout enforcement. A lightweight, thread-safe circuit breaker (Closed → Open → HalfOpen → Closed) ships in the Ocelot core package, supporting both count-based and FailureRatio-based modes.
The two implementations are mutually exclusive: the last of AddQualityOfService() or AddPolly() registered on the OcelotBuilder wins.
See the built-in QoS documentation for full details, including the AddQualityOfService<THandler>() extensibility point for overriding server error codes.
WebSockets: The "Overridable WebSocket buffer size" feature and custom middleware injection were added by @erannevo in pull request #2387.
The previously hard-coded DefaultWebSocketBufferSize is now a protected virtual property that can be overridden by subclassing.
The Middleware Injection feature was extended with a WebSocketsProxyMiddleware override on the OcelotPipelineConfiguration class, allowing a fully custom WebSocket middleware to be injected into the pipeline.
Refer to the "Sample" section to understand how to utilize the new feature.
WebSockets: The "SecurityOptions support for the WebSocket pipeline" feature was added by @CurtisRobertOliver in pull request #2406.
Previously, IP allow/block-list Routing "Security Options" were not enforced for WebSocket upgrade requests (a.k.a. the CONNECT HTTP method), allowing them to bypass IP security. WebSocket upgrade requests are now intercepted by the same IPSecurityPolicy used for regular HTTP requests, and denied upgrades now correctly return 403 Forbidden.
24.1.0 ⚠️
Warning
Critical Hotfix for Dynamic Routing users. Please upgrade to 25.0.2 ASAP❗
If your Ocelot deployment uses the Dynamic Routing feature, you are affected by two critical bugs — #2352 and #2428 — and must upgrade to 25.0.2 immediately. Users not using Dynamic Routing can safely remain on 24.1.0 (.NET 9); 25.0.0, 25.0.1 (.NET 10).
Summer-Autumn 2025 (version 24.1) a.k.a. the Globality release
Milestone: Summer'25 👈
Codenamed: Globality
Read the Docs: Ocelot 24.1 with PDF
ℹ️ About
In this minor release, the Ocelot team put the spotlight on the Configuration feature as part of their semi-annual 2025 effort, with a particular focus on the Global Configuration Schema. This release enhances support for global configurations across both routing modes: the classic static Routing and the service discovery-based Dynamic Routing.
The updated documentation highlights the deprecation of certain options through multiple notes and warnings. This deprecation process will be completed in the upcoming .NET 10 release. With the [Obsolete] attributes in place, C# developers will notice several warnings in the build logs during compilation.
On top of that, this release brings a great enhancement to the Kubernetes provider, also known as the Ocelot.Provider.Kubernetes package.
🆕 What's New?
Configuration: The "Dynamic routing global configuration" feature has been redesigned by @raman-m and contributors.
This update brings changes to the Dynamic Route Schema and Global Configuration Schema, while the Route Schema stays the same apart from deprecation updates. All work was coordinated under issue #585, which addressed the challenges of configuring Ocelot's most popular features globally before version 24.1, when dynamic routing gained global configuration partial support, but static routing mostly lacked it. A key outcome of #585 is the ability to override global configuration options within the DynamicRoutes collection. This ongoing issue will continue to require attention, as adapting static route global configurations for dynamic routing is complex and, in some cases, impossible. This will be a challenge for future Ocelot releases and the community.
Kubernetes: The "Kubernetes provider based on watch requests" feature by @kick2nick in PR #2174. ⭐
The Ocelot.Provider.Kubernetes package now features a new WatchKube provider for Kubernetes service discovery. This provider is a great fit for high-load environments where the older Kube and PollKube providers struggle to handle heavy traffic, often leading to increased log errors, HTTP 500 issues, and potential Ocelot instance failures. WatchKube is the next step in the evolution of these providers, leveraging the reactive capabilities of the KubeClient API. For guidance on choosing the right provider for your Kubernetes setup, check out the "Comparing providers" section in the documentation.
Configuration: The "Routing default timeout" feature by @hogwartsdeveloper in PR #2073.
In the past, the Timeout setting in the Route Schema didn't actually stop requests, defaulting instead to a fixed 90 seconds. Custom timeouts were handled using the Quality of Service Timeout strategy, and this only applied if Polly and the Ocelot.Provider.Polly package were used. Now, the Timeout option (in seconds) can be set at the route, global, and QoS levels. The Global Configuration Schema and Dynamic Route Schema also include the new Timeout setting, making it possible to configure default timeouts for dynamic routing as well.
Quality of Service: The "FailureRatio and SamplingDuration parameters of Polly V8 circuit-breaker" feature by @RaynaldM in PR #2081.
Starting with version 24.1, two new parameters in QoSOptions, FailureRatio and SamplingDuration, let you fine-tune the behavior of the Circuit Breaker strategy. Both can be configured globally, even with dynamic routing.
Please note that DurationOfBreak, ExceptionsAllowedBeforeBreaking, and TimeoutValue are now deprecated in 24.1, so check the QoSOptions Schema documentation for details.
🆙 What's Updated?
Configuration: Several File-model options have been deprecated by @raman-m.
The updated docs now highlight these deprecated options with multiple notes and warnings. The v24.1 deprecation process will wrap up in the upcoming .NET 10 release. Due to the Obsolete attributes, C# developers will notice several build warnings during compilation.
Testing: The Ocelot.Testing project was deprecated by @raman-m ...
24.0.1
🔥 Hot fixing bug #2299 (version 24.0.1), a.k.a. Kubernetes patch 📦
Milestone: .NET 9
Hot fixed version: 24.0.0
Read the Docs: Ocelot 24.0 with PDF
ℹ️ About
🔥 Hot fixed bug: #2299
❤️ A sincere and heartfelt "Thank You" to Gracjan Bryłka, @font3r for reporting the bug.
⚠️ Warning
- This patch updates only the Ocelot.Provider.Kubernetes extension package to version 24.0.1.
- No further patches are planned for this major version. The next minor release, version 24.1, codenamed "Globality", is scheduled for Summer-Autumn 2025.
❗ Breaking Changes
Interface Breaking Changes:
IKubeApiClientFactoryinterface removal: TheServiceAccountPathproperty was removed because it was not intended for public use.
Interface FQN:Ocelot.Provider.Kubernetes.Interfaces.IKubeApiClientFactory
Property FQN:Ocelot.Provider.Kubernetes.Interfaces.IKubeApiClientFactory.ServiceAccountPath
What's Changed
- #2299 Encapsulate
ServiceAccountPathas a protected property of the factory to stabilizeKubeApiClientcreation in the Kubernetes provider by @raman-m in #2302 - Release v24.0.1 | Hotfix for issue #2299 | .NET 9 release | +semver: patch by @raman-m in #2303
Full Changelog: 24.0.0...24.0.1
24.0.1 Ocelot.Administration.IdentityServer4
Ocelot.Administration.IdentityServer4 version 24.0.1
Ocelot release: 24.0.0
Ocelot.Administration.IdentityServer4 release: 24.0.1
NuGet package: Ocelot.Administration.IdentityServer4.24.0.1
❗ Breaking Changes
The Ocelot.Administration extension package has been renamed to Ocelot.Administration.IdentityServer4 ❗
Feature: Administration
All IdentityServer4-related vulnerabilities (issue #2218) were addressed. The Ocelot.Administration source code has been moved out of the Ocelot repository (pull request #2274) and transferred to the Ocelot.Administration.IdentityServer4 repository.
Currently, the Administration feature is solely based on the IdentityServer4 package, whose repository was archived by its owner on July 31, 2024. In this release, the Ocelot team deprecated the Ocelot.Administration.IdentityServer4 extension package after the current Ocelot v24.0 release; however, the repository is/will not be archived, allowing for potential patches in the future.
Note: In upcoming releases, the Ocelot team plans to utilize the ASP.NET Core Identity framework for Administration feature development and in Ocelot's acceptance testing project to align with .NET industry standards. As a result, the IdentityServer4 library is intended to be replaced with ASP.NET Core Identity, which also supports Bearer tokens, commonly known as
JwtBearerHandlerfrom the Microsoft.AspNetCore.Authentication.JwtBearer namespace.
24.0.0 ⚠️
Warning
Critical Hotfix for Kubernetes users. Please upgrade to 24.0.1 ASAP❗
If your Ocelot deployment uses the Kubernetes feature, you are affected by critical bug — #2299 — and must upgrade to 24.0.1 immediately. Users not using Kubernetes can safely remain on 24.0.0 (.NET 9).
Upgrade to .NET 9 (TFM net9.0, version 24.0) a.k.a. the .NET 9 release
Milestone: .NET 9 👈
Codenamed: .NET 9
Read the Docs: Ocelot 24.0 with PDF
Target Framework Monikers:net8.0,net9.0
ℹ️ About
On November 12th, 2024, the .NET team announced the release of the .NET 9 framework:
- .NET Blog: Announcing .NET 9
This major release upgrades Ocelot package TFMs to net9.0 in addition to the current net8.0. Thus, the current Ocelot supported frameworks are .NET 8 LTS and .NET 9 STS. According to the .NET Support Policy, the Ocelot team has discontinued support of .NET 6 and .NET 7 by providing the version 23.4.3 which targets those .NET versions.
🔖 Official Notice to the Community Regarding CircleCI
Ocelot's previous CI/CD provider, CircleCI, facilitated professional and seamless development, build processes, and delivery of Ocelot versions for seven years, starting in March 2018. But last year, in January 2025, after patching Ocelot with version 23.4.3, our team encountered legal issues related to CircleCI Co's policies, leading to this CI/CD provider stopping the build process for the Ocelot project. This legal issue and technical incident were unforeseen on our part because Ocelot is open-source software (OSS), and forcibly stopping the project's build process and blocking accounts appears to be an unfortunate breach of OSS principles. We strongly believe that any developer or user, from any country, should be able to use software providers that support the OSS movement by offering free or other cost-free plans and serving the accounts of these users, OSS teams, and OSS projects 24/7, 365 days a year. We consider this legal issue and the resulting technical incidents involving CircleCI to be a serious breach of OSS principles and an act of discrimination against Ocelot users, developers, and customers who rely on Ocelot OSS, ultimately causing delays to the current release. As a team, we do not recommend using CircleCI for OSS projects, as there is no guarantee that these projects will not face discrimination from this U.S. company.
For all developers, team leads, architects, and managers of any OSS projects—at least on GitHub—we recommend utilizing the built-in GitHub Actions CI/CD infrastructure. Since its founding, GitHub has supported OSS projects. Today, GitHub provides 2,000 minutes of free CI/CD build time per month for OSS repositories (public repos). Also, we strongly believe that GitHub will never violate its OSS policies without a notice period, nor fail to inform owners and maintainers that certain policies must be met by Ocelot's owners. In addition, we want to acknowledge that we are monitoring U.S. government regulations. Unfortunately, we must state that some GitHub products are unavailable in certain countries, even if the project is OSS and GitHub claims these products are free for OSS. Since the Ocelot team does not utilize these non-critical products (we prefer to energize our brains rather than rely on AI-driven products), and since the Ocelot project is currently well-served by GitHub Co, the Ocelot team affirms that Ocelot will remain on GitHub as long as its OSS-friendly policies continue. As a team, we hope that GitHub will never enforce extra rules on our project or other OSS projects.
Regardless, we remain on GitHub! ![]()
🆕 What's New?
DevOps: The CI/CD infrastructure was migrated from CircleCI to GitHub Actions by @raman-m
Starting from version 24.0, all pull requests, development commits, and releases will be built using GitHub Actions workflows (documentation). We currently have three workflows: one for pull requests (PR), one for the develop branch (Develop), and one for the main branch (Release). All workflow runs are available on the Actions dashboard.
The PR workflow will track code coverage using Coveralls. After opening a pull request or submitting a new commit to a pull request, Coveralls will publish a short message with the current code coverage once the top commit is built. Considering that Coveralls retains the entire history but does not fail the build if coverage falls below the threshold, all workflows have a built-in 80% threshold, applied internally within the build-cake job, particularly during the "Cake Build" step-action. If the code coverage of a newly opened pull request drops below the 80% threshold, the build-cake job will fail, logging an appropriate message in the "Cake Build" step. For your information, the current code coverage of the Ocelot project is around 85-86%. The coverage threshold is subject to change in upcoming releases. All Coveralls builds can be viewed by navigating to the ThreeMammals/Ocelot project on Coveralls.io.
🆙 What's Updated?
Core:
The main Ocelot package and all extension packages reference net8.0 and net9.0 target framework monikers (TFMs). Refer to TargetFrameworks to verify this. The net6.0 and net7.0 TFMs have been removed. If your project still relies on these outdated TFMs, please continue using version 23.4.3.
Authentication:
Testing of Identity Server Bearer Tokens functionality was stopped due to vulnerabilities reported by Dependabot, specifically the "IdentityServer Open Redirect vulnerability" security issue. More technical details were provided in the 23.4.3 release notes, where we notified the community. Ultimately, issue #2218 was addressed via pull request #2274.
Note: In upcoming releases, we plan to utilize the ASP.NET Core Identity framework in our acceptance testing project to align with .NET industry standards. As a result, we intend to replace the IdentityServer4 library with ASP.NET Core Identity, which also supports Bearer tokens, also known as
JwtBearerHandlerfrom the Microsoft.AspNetCore.Authentication.JwtBearer namespace.
23.4.3
🔥 Hot fixing bug #2246 (version 23.4.3) a.k.a. Core Caching patch 📦
Milestone: Nov-December'24
Hot fixed versions: 23.4.0 — 23.4.2
Read the Docs: Ocelot 23.4 with PDF
ℹ️ About
🔥 Hot fixed bug: #2246
❤️ A sincere and heartfelt "Thank You" to Donny Tian, @donnytian for reporting the bug.
⚠️ Warning
- Consider this patch as the last one supporting .NET 6 and 7 frameworks. For more details, refer to the previous version notes.
- No further patches for this minor version are expected. The next major release will be .NET 9, version 24.0.
❗ Breaking Changes
Upgrading from 23.4.0-23.4.2 to 23.4.3 introduces no breaking changes. However, some internal interfaces have been updated, which should not introduce IBC for 99.99% of projects. For further information, refer to the source code.
What's Changed
- #2246 Review Core cache and redesign
Regexcaching by @raman-m in #2251 - Release 23.4.3 | Hot fixing #2246 | November'24 release | +semver: patch by @raman-m in #2252
Full Changelog: 23.4.2...23.4.3