Repository navigation
Description
Goal
Open the .NET 11 line: net11.0, EF Core 11, Npgsql 11, PostgreSQL 16+. It ships as 11.0.0-preview.N from main, and as 11.0.0 once Npgsql's EF provider 11.0.0 is on NuGet and the breaking set below is in. There is no preview branch (#280).
Decision (2026-10-18): two parallel lines, one per platform major, as EntglDb/BLite and EFCore.ComplexIndexes do. 10.x is the LTS line on .NET 10 (supported to 2028-11). 11.x is where the surface changes.
State on 2026-11-11
.NET 11, EF Core 11 and ASP.NET Core 11 have been on NuGet as 11.0.0 since 2026-11-10. Two things are not there yet:
Npgsql.EntityFrameworkCore.PostgreSQLis still11.0.0-rc.3and pins EF Core to exactly rc.3. A stable package can't depend on a prerelease (NU5104), sov11.0.0waits for it. Its 10.0.0 came eleven days after .NET 10.- No 11 preview of this package has been published.
mainis on rc.2, and the earlier plan of one preview per .NET 11 RC did not happen (Publish 11.0.0-preview.1 on the .NET 11 GA SDK and Npgsql's provider rc.3 #332 stayed open through RC2 and RC3).
Decided 2026-11-11 (maintainer)
- 11.0.0 carries the breaking set, not only the platform. A major is the only place for it, and nothing can ship stable before Npgsql does, so the wait is used for it: Per-domain range set types (Int32RangeSet, DateRangeSet, …) replace RangeSet<TRange, T> #275 (per-domain range set types), Decide the canonical order of string-backed value sets for 11.0.0: code point order, which PostgreSQL can sort, or ordinal #479 (the order of string sets) and the value-producing half of A null range answers some extensions in memory and throws on others, and the answers it gives disagree with PostgreSQL on a NULL column #350 (
ArgumentNullExceptionon a null range). - One target per line. The packages on
maintargetnet11.0only. No package here multi-targets. - main: re-enable the ComplexIndexes cross-tests and the joint smoke consumer against CodoMetis.EFCore.SchemaKit.PostgreSQL #333 leaves this release. SchemaKit's first preview waits for its API design (SchemaKit API design: a declaration the database would reject does not compile CodoMetis.EFCore.SchemaKit#11), and this tag does not wait for it. main: re-enable the ComplexIndexes cross-tests and the joint smoke consumer against CodoMetis.EFCore.SchemaKit.PostgreSQL #333 is under the backlog epic (Epic: Backlog #83) until the first 11.x minor is opened.
In scope and out of scope
In scope: the retarget, the unions marked closed (#149), the breaking set above, the native WithoutOverlaps/WithPeriod documentation, the two-line policy, the CI matrix (#152) and the release wiring (#341, #342, #343, #346).
Out of scope: exclusion constraints and GiST indexes on the 11 line (#333, SchemaKit). ltree, which belongs in the sibling hierarchies package. Additions that change no answer ship as 10.x minors and are carried to main, within the window CaffeinatedCoder/EFCore.ComplexIndexes#178 sets.
Sequence
- Move
mainto the GA SDK (main: move to the .NET 11 GA SDK and the 11.0.0 test packages, and repeat the retarget measurements #532): SDK 11.0.100, the test packages on 11.0.0, the retarget measurements and theclosedprobe run again. EF Core stays on rc.3, because Npgsql's rc.3 pins it. - Release wiring before any tag: Packages: show the version's changelog section as NuGet release notes #346 (release notes, PR chore: write each package's changelog section into its NuGet release notes #347), Release: run every CI lane (PostgreSQL 16 and 18, both smoke modes, the EF float legs) before publishing #342 (every lane before publishing).
11.0.0-preview.1(Publish 11.0.0-preview.1 on the .NET 11 GA SDK and Npgsql's provider rc.3 #332): the retarget with an identical public API, on rc.3. It is the first real run of the release workflow's prerelease path.11.0.0-preview.2: Shorten the default names of TPC copies over the identifier limit EFCore.ComplexIndexes#149 (closed), A null range answers some extensions in memory and throws on others, and the answers it gives disagree with PostgreSQL on a NULL column #350 and Decide the canonical order of string-backed value sets for 11.0.0: code point order, which PostgreSQL can sort, or ordinal #479.11.0.0-preview.3: Per-domain range set types (Int32RangeSet, DateRangeSet, …) replace RangeSet<TRange, T> #275.docs/migration.mdv10.x gets the rename.- Floors to 11.0.0 (main: move the EF Core and Npgsql floors to 11.0.0 when Npgsql's provider ships it #533) when Npgsql's provider ships it, then
v11.0.0.
CaffeinatedCoder/EFCore.ComplexIndexes#149 also ships on 10.x, in 10.5.0 (#534), after preview.2 has shown it works.
Done when
- every sub-issue is closed
- at least one
11.0.0-preview.Nwas published before the tag, so the prerelease path has run - the root changelog opens 11.0.0 with the platform floor, the breaking set, the variants migration and the "what can break you" list, and
docs/migration.mdhas a v10.x section v11.0.0is tagged onmainand the four packages are on NuGet- the baseline on
mainnames 11.0.0 andPackageValidationBaselineFrameworkToIgnoreis gone - CONTRIBUTING records the date until which 10.x takes additions (six months after the tag)
release/10.xcarries the same branch protection asmain(GitHub settings, done by hand; CONTRIBUTING promises it)
Activity
CaffeinatedCoder commentedon Oct 18, 2026
Two scope notes from 2026-10-18: (1) 10.x takes additions for six months after
v11.0.0(#178, PR CaffeinatedCoder/EFCore.ComplexIndexes#180), so CaffeinatedCoder/EFCore.ComplexIndexes#149's 10.x half fits. (2) The 10.0.0 epic (#58) now carries the scheduling and parity themes and the Float32/Float64 family (#153), so the 'Additions such as DoubleRange ship in a 10.x minor' line in the out-of-scope section is out of date: they ship in 10.0.0 and are merged forward like the fixes.24:00:00parses as00:00:00andT24:00:00as the next day #28625 remaining items