Release notes
Every entry below is a GitHub release of nanov/prague.net, listed newest first by semantic version. Stable versions are tagged vX.Y.Z and ship to NuGet as Prague, Prague.Kafka, Prague.Api and Prague.Api.UI; prereleases carry a -pre.N suffix (vX.Y.Z-pre.N), need --prerelease on dotnet add package, and sort below the stable version of the same base once it exists. A release is cut by the repository's Release workflow, which bumps the previous version (patch, minor or major) and lets GitHub write the notes from the merged pull requests. This page is regenerated on every docs build.
v0.8.2 — 2026-10-29
What's Changed
- fix(kafka): suppress NU5104 so stable Prague.Kafka packs by @nanov in https://github.com/nanov/prague.net/pull/122
Full Changelog: https://github.com/nanov/prague.net/compare/v0.8.1...v0.8.2
v0.8.1 — 2026-10-29
What's Changed
- fix(docs): build every project with XML doc checks on by @nanov in https://github.com/nanov/prague.net/pull/117
- fix(codegen): escape QueryResults
in generated doc comment (CS1570) by @nanov in https://github.com/nanov/prague.net/pull/116 - refactor(kafka): live worker on Nanov.HighPerformance.Threading.Workers by @nanov in https://github.com/nanov/prague.net/pull/120
- fix(codegen): parse Guid index values in generated query parsers by @nanov in https://github.com/nanov/prague.net/pull/121
Full Changelog: https://github.com/nanov/prague.net/compare/v0.8.0...v0.8.1
v0.8.0 — 2026-10-25
What's Changed
- ci(release): a stable release promotes the in-flight prerelease series by @nanov in https://github.com/nanov/prague.net/pull/110
- ci(pages): deploy the site on stable releases, built from the release tag by @nanov in https://github.com/nanov/prague.net/pull/111
- feat: CountJoin / InnerCountJoin — count the rights a JoinMany would deliver by @nanov in https://github.com/nanov/prague.net/pull/112
- chore(deps): Nanov.Confluent.Kafka 2.15.1.2 and current minor versions by @nanov in https://github.com/nanov/prague.net/pull/113
- chore(kafka): switch to the Nanov.Kafka client package by @nanov in https://github.com/nanov/prague.net/pull/114
Full Changelog: https://github.com/nanov/prague.net/compare/v0.7.0...v0.8.0
v0.7.0 — 2026-10-23
What's Changed
- docs: align README with the library, suggested topic settings, llm-readme.txt by @nanov in https://github.com/nanov/prague.net/pull/105
- www: prerendered landing, accessible docs, bots files, auto-deploy to GitHub Pages by @nanov in https://github.com/nanov/prague.net/pull/106
- www: take the docs version from the latest GitHub release by @nanov in https://github.com/nanov/prague.net/pull/107
- docs: compiled samples, tutorial, how-to guides, explanations, reference, Excalidraw diagrams by @nanov in https://github.com/nanov/prague.net/pull/108
- feat: AddOrUpdateAndProduce(document, force) and ForceProduceAll() by @nanov in https://github.com/nanov/prague.net/pull/109
Full Changelog: https://github.com/nanov/prague.net/compare/v0.6.1...v0.7.0
v0.7.0-pre.2 — 2026-09-21 (prerelease)
What's Changed
- Prepared and frozen queries: Prepare()…Build() and BuildFrozen(), the plan-once executors by @nanov in https://github.com/nanov/prague.net/pull/96
- chore!: remove four dead public interfaces and fix the FilterExtensions type name (#95) by @nanov in https://github.com/nanov/prague.net/pull/98
- Header filters from DI by @AlexanderAnatolich in https://github.com/nanov/prague.net/pull/101
Full Changelog: https://github.com/nanov/prague.net/compare/v0.7.0-pre.1...v0.7.0-pre.2
v0.7.0-pre.1 — 2026-09-09 (prerelease)
What's Changed
- feat: bound sorted paged execution with top-K selection by @AlexanderAnatolich in https://github.com/nanov/prague.net/pull/56
- feat: bounded top-K sorted paging (SortBounded), zero-alloc, plus a phantom-row fix by @nanov in https://github.com/nanov/prague.net/pull/61
- fix(perf): make an untrustworthy comparison fail loudly (exit 2) by @nanov in https://github.com/nanov/prague.net/pull/60
- fix: a full join slot drops the row instead of failing the query by @nanov in https://github.com/nanov/prague.net/pull/62
- fix: JoinMany slot sizing — carries #57, pins the two resolvers still left by @nanov in https://github.com/nanov/prague.net/pull/63
- fix: size JoinMany slots from the recorded pairs, not the live bucket… by @AlexanderAnatolich in https://github.com/nanov/prague.net/pull/57
- fix: release unconsumed indexed-inner candidates when a resolver throws (carries #58) by @nanov in https://github.com/nanov/prague.net/pull/64
- fix: release unconsumed indexed-inner candidates when a resolver throws stacked on #56, #57 by @AlexanderAnatolich in https://github.com/nanov/prague.net/pull/58
- perf: gate the sort plans, so a correctness change to them is a visible cost by @nanov in https://github.com/nanov/prague.net/pull/65
- perf: cover the joined sort plans, where SortBounded silently gives up by @nanov in https://github.com/nanov/prague.net/pull/66
- fix: make the classic sort stable, so both sort plans return the same rows by @nanov in https://github.com/nanov/prague.net/pull/68
- fix: stop boxing the key on every JoinedKeyPair comparison by @nanov in https://github.com/nanov/prague.net/pull/69
- fix: deliver a shared right to every left it belongs to (the fan-out from #59) by @nanov in https://github.com/nanov/prague.net/pull/70
- perf: resample the joined sort metrics, and record the fan-out's real cost by @nanov in https://github.com/nanov/prague.net/pull/71
- perf: correct the joined allocation baseline, which was measuring the lucky run by @nanov in https://github.com/nanov/prague.net/pull/73
- perf: make the pooled query allocation metrics single-valued, and explain the 268 B (#74) by @nanov in https://github.com/nanov/prague.net/pull/78
- perf: make the classic Sort path allocation-free with a struct comparer (#77) by @nanov in https://github.com/nanov/prague.net/pull/79
- perf: sort the joined rows through the index array too (closes #67) by @nanov in https://github.com/nanov/prague.net/pull/80
- perf: land the #72 recording-loop fix on main and close out the #75 follow-ups by @nanov in https://github.com/nanov/prague.net/pull/81
Full Changelog: https://github.com/nanov/prague.net/compare/v0.6.0-pre.5...v0.7.0-pre.1
v0.6.1 — 2026-10-21
What's Changed
- fix(codegen): containers of containers, CS8604 in generated equality,… by @nanov in https://github.com/nanov/prague.net/pull/104
Full Changelog: https://github.com/nanov/prague.net/compare/v0.6.0...v0.6.1
v0.6.0 — 2026-09-24
What's Changed
- Tombstones beat ingress filters, and four adjacent defects by @AlexanderAnatolich in https://github.com/nanov/prague.net/pull/99
- fix(frozen): a single-bucket seed no longer returns a key twice under a churning writer by @nanov in https://github.com/nanov/prague.net/pull/102
Full Changelog: https://github.com/nanov/prague.net/compare/v0.7.0-pre.2...v0.6.0
v0.6.0-pre.5 — 2026-08-15 (prerelease)
What's Changed
- ci: scope the SSH.NET pin to every Testcontainers consumer by @nanov in https://github.com/nanov/prague.net/pull/52
- fix: stop reporting an abandoned ring-buffer worker as a clean drain by @nanov in https://github.com/nanov/prague.net/pull/53
- fix: dispose the shutdown CancellationTokenSources by @nanov in https://github.com/nanov/prague.net/pull/54
- fix: bound shutdown by the host token and report abandoned drains by @nanov in https://github.com/nanov/prague.net/pull/55
Full Changelog: https://github.com/nanov/prague.net/compare/v0.6.0-pre.4...v0.6.0-pre.5
v0.6.0-pre.4 — 2026-08-15 (prerelease)
What's Changed
- fix: stop the loader on shutdown instead of restarting it by @nanov in https://github.com/nanov/prague.net/pull/47
- Set Directory.Build.props
to 0.6.0 so a stable cut tags v0.6.0 by @aps-b2tech in https://github.com/nanov/prague.net/pull/44 - Per-index slot-capacity statistics by @AlexanderAnatolich in https://github.com/nanov/prague.net/pull/34
Full Changelog: https://github.com/nanov/prague.net/compare/v0.6.0-pre.3...v0.6.0-pre.4
v0.6.0-pre.3 — 2026-08-15 (prerelease)
What's Changed
- chore: pin SSH.NET 2026.0.0 to unbreak the test solution restore by @nanov in https://github.com/nanov/prague.net/pull/37
- Fix load-phase deletes lost after a compacting-buffer flush by @aps-b2tech in https://github.com/nanov/prague.net/pull/36
- chore: name IndexMap.cs after the type it contains; two stale-text fixes by @nanov in https://github.com/nanov/prague.net/pull/41
- docs: state the one-partition-per-cache-topic requirement by @nanov in https://github.com/nanov/prague.net/pull/40
- fix: fault the load when a cache mutation fails during the buffer flush by @nanov in https://github.com/nanov/prague.net/pull/39
- test: assert load/live parity for every superseding filter outcome by @nanov in https://github.com/nanov/prague.net/pull/42
- ci: run the full test suite on pull requests by @nanov in https://github.com/nanov/prague.net/pull/38
- fix: stop consumers on shutdown; make a stalled initial load fail instead of hang by @nanov in https://github.com/nanov/prague.net/pull/46
New Contributors
- @aps-b2tech made their first contribution in https://github.com/nanov/prague.net/pull/36
Full Changelog: https://github.com/nanov/prague.net/compare/v0.6.0-pre.2...v0.6.0-pre.3
v0.6.0-pre.2 — 2026-07-22 (prerelease)
What's Changed
- Pool leak-safety: close every ArrayPool leak and double-return in Core, verified by a tracking-pool test harness by @nanov in https://github.com/nanov/prague.net/pull/23
- ValueDictionary correctness: remove wrong-cursor Filter overload, Debug fail-fast guards by @nanov in https://github.com/nanov/prague.net/pull/24
- Inner-join Count() narrows like Execute; close the nested-join seeded-candidates leak window by @nanov in https://github.com/nanov/prague.net/pull/25
- Remove dead pooled code (TopKHeap, SeekAndTakePooled); harden SortedArraySet enumerators by @nanov in https://github.com/nanov/prague.net/pull/26
- Scan the intersect bitmap a word at a time instead of a bit at a time by @nanov in https://github.com/nanov/prague.net/pull/27
- perf: single-hash index maintenance for InMemoryDataCache by @nanov in https://github.com/nanov/prague.net/pull/28
- perf: regression-tripwire performance baseline (core-only + full-sim + full-real) by @nanov in https://github.com/nanov/prague.net/pull/29
- perf(ci): auto-commit linux baseline on manual bless dispatch by @nanov in https://github.com/nanov/prague.net/pull/30
- perf: concurrent read-under-write Phase B (read.throughput + contended latency) by @nanov in https://github.com/nanov/prague.net/pull/31
- perf: union pair-index IntersectValues straight into the target, drop… by @AlexanderAnatolich in https://github.com/nanov/prague.net/pull/32
- InitialCapacity sizing hint for Many-index buckets by @AlexanderAnatolich in https://github.com/nanov/prague.net/pull/33
New Contributors
- @AlexanderAnatolich made their first contribution in https://github.com/nanov/prague.net/pull/32
Full Changelog: https://github.com/nanov/prague.net/compare/v0.6.0-pre.1...v0.6.0-pre.2
v0.6.0-pre.1 — 2026-07-20 (prerelease)
What's Changed
- Restore pre-PR-20 bounded-scan loops for value-typed range keys by @nanov in https://github.com/nanov/prague.net/pull/22
Full Changelog: https://github.com/nanov/prague.net/compare/v0.5.0-pre.13...v0.6.0-pre.1
v0.5.0-pre.13 — 2026-07-20 (prerelease)
What's Changed
- feat: collection-backed multi-value indexes + M:N collection joins by @nanov in https://github.com/nanov/prague.net/pull/16
- Composite (key, hash) ordering for duplicate-key runs, gated on a duplicate-key flag by @nanov in https://github.com/nanov/prague.net/pull/20
- Remove vestigial non-randomized comparer machinery from ConcurrentCacheStore by @nanov in https://github.com/nanov/prague.net/pull/21
Full Changelog: https://github.com/nanov/prague.net/compare/v0.5.0-pre.12...v0.5.0-pre.13
v0.5.0-pre.12 — 2026-07-10 (prerelease)
What's Changed
- fix+perf: dispose missed range-intersecter on non-first .Lt(); stackalloc-back intersect buffers by @nanov in https://github.com/nanov/prague.net/pull/14
- fix: unique index loses live mapping on index-key swap between entities by @nanov in https://github.com/nanov/prague.net/pull/15
Full Changelog: https://github.com/nanov/prague.net/compare/v0.5.0-pre.11...v0.5.0-pre.12
v0.5.0-pre.11 — 2026-07-10 (prerelease)
What's Changed
- Fix B-tree equal-key-run leak and PooledSet use-after-return (perf-neutral port of internal PR #56) by @nanov in https://github.com/nanov/prague.net/pull/13
Full Changelog: https://github.com/nanov/prague.net/compare/v0.5.0-pre.10...v0.5.0-pre.11
v0.5.0-pre.10 — 2026-06-21 (prerelease)
What's Changed
- Bind user-supplied Kafka config to IConfiguration by @nanov in https://github.com/nanov/prague.net/pull/12
Full Changelog: https://github.com/nanov/prague.net/compare/v0.5.0-pre.8...v0.5.0-pre.10
v0.5.0-pre.9 — 2026-06-18 (prerelease)
What's Changed
- Add forceDeep overload to CacheEquals (skip ReferenceEquals fast path) by @nanov in https://github.com/nanov/prague.net/pull/10
- Nested joins (JoinMany with inner-join continuation) by @nanov in https://github.com/nanov/prague.net/pull/11
Full Changelog: https://github.com/nanov/prague.net/compare/v0.5.0-pre.7...v0.5.0-pre.9
v0.5.0-pre.8 — 2026-06-16 (prerelease)
What's Changed
- Add forceDeep overload to CacheEquals (skip ReferenceEquals fast path) by @nanov in https://github.com/nanov/prague.net/pull/10
- Nested joins (JoinMany with inner-join continuation) by @nanov in https://github.com/nanov/prague.net/pull/11
Full Changelog: https://github.com/nanov/prague.net/compare/v0.5.0-pre.7...v0.5.0-pre.8
v0.5.0-pre.7 — 2026-06-01 (prerelease)
What's Changed
- Return pooled child buffers on all JoinMany paths by @nanov in https://github.com/nanov/prague.net/pull/8
- Make QueryResultsDisposer an inline struct (zero-alloc pooled JoinMany) by @nanov in https://github.com/nanov/prague.net/pull/9
Full Changelog: https://github.com/nanov/prague.net/compare/v0.5.0-pre.6...v0.5.0-pre.7
v0.5.0-pre.6 — 2026-05-30 (prerelease)
What's Changed
- Filtered global last-update index + keyed TryGetMax by @nanov in https://github.com/nanov/prague.net/pull/7
Full Changelog: https://github.com/nanov/prague.net/compare/v0.5.0-pre.5...v0.5.0-pre.6
v0.5.0-pre.5 — 2026-05-30 (prerelease)
What's Changed
- Float MessagePack to 3.* so the library tracks the latest 3.x by @nanov in https://github.com/nanov/prague.net/pull/5
- Normalize telemetry metric prefix to end with a dot by @nanov in https://github.com/nanov/prague.net/pull/6
Full Changelog: https://github.com/nanov/prague.net/compare/v0.5.0-pre.4...v0.5.0-pre.5
v0.5.0-pre.4 — 2026-05-30 (prerelease)
What's Changed
- Multi-target net9.0 and net10.0 with floating Microsoft runtime versions by @nanov in https://github.com/nanov/prague.net/pull/4
Full Changelog: https://github.com/nanov/prague.net/compare/v0.5.0-pre.3...v0.5.0-pre.4
v0.5.0-pre.3 — 2026-05-30 (prerelease)
What's Changed
- Fix NU5128 pack failure in publish workflow + add package READMEs by @nanov in https://github.com/nanov/prague.net/pull/3
Full Changelog: https://github.com/nanov/prague.net/compare/v0.5.0-pre.2...v0.5.0-pre.3
v0.5.0-pre.2 — 2026-05-30 (prerelease)
What's Changed
- Zero-warning build + enforce TreatWarningsAsErrors by @nanov in https://github.com/nanov/prague.net/pull/2
Full Changelog: https://github.com/nanov/prague.net/compare/v0.5.0-pre.1...v0.5.0-pre.2
v0.5.0-pre.1 — 2026-05-30 (prerelease)
What's Changed
- Clean up dead code and align accessibility by @nanov in https://github.com/nanov/prague.net/pull/1
New Contributors
- @nanov made their first contribution in https://github.com/nanov/prague.net/pull/1
Full Changelog: https://github.com/nanov/prague.net/commits/v0.5.0-pre.1