Changelog
Release announcements and project updates. For planned work, see the roadmap.
v3.3.0 — Durable Write Performance & Embedded Storage Tuning
Focused on durable write throughput, a new storage-tuning surface for embedded users, and release-stable benchmark publishing. Promoted from the April 21, 2026 release-core run after a clean guardrail compare (PASS=185, WARN=0, SKIP=0, FAIL=0):
- Append-optimized indexed insert paths — Append-optimized row-id chains and hashed index payloads, overflow-store improvements, hot right-edge recovery, and expanded commit-path diagnostics. Promoted
InsertBatch B10000durable ingest lands at 798.25K rows/sec — 1.48× the matched SQLite WAL+FULL baseline on the same runner. - Trailing-integer composite grouped aggregates — The planner can now route grouped aggregates through a composite index when the grouping key prefixes the index and the trailing column is an integer.
- SQL index metadata defaults — Multi-column indexes no longer receive trailing-integer hash options unless explicitly requested. Existing serialized options continue to resolve through the legacy compatibility path.
- Embedded storage tuning for ADO.NET and EF Core — New
Storage Preset=andEmbedded Open Mode=connection-string keywords onCSharpDb.Data, matchingCSharpDbConnection.DirectDatabaseOptions/HybridDatabaseOptions, and EF CoreUseStoragePreset()/UseEmbeddedOpenMode(). Ships with five presets (WriteOptimized,LowLatencyDurableWrite,DirectLookupOptimized,DirectColdFileLookup,HybridFileCache) and three open modes (Direct,HybridIncrementalDurable,HybridSnapshot). - Same-runner SQLite comparison coverage — New SQLite C API, concurrent SQLite, concurrent ADO.NET, strict insert, and EF Core comparison harnesses.
--sqlite-compare,--concurrent-sqlite-capi-compare,--concurrent-adonet-compare, and--efcore-comparecommands; promoted comparison rows intests/CSharpDB.Benchmarks/SQLITE_COMPARISON.md. - Release-stable benchmark publishing — Balanced
--release-coresuite (master, durable batching, concurrent writes, hybrid storage, hot-set reads, cold open, SQLite comparison), manifest-driven README generator, row-specific guardrail tolerances, and separate catalog/history/SQLite comparison files. - Refreshed package READMEs and website — Root README performance numbers updated (1.67M collection gets/sec, 10.77M concurrent reader-burst reads/sec, 798.25K durable
InsertBatch B10000rows/sec, 1.04K concurrent durable commits/sec); package READMEs refreshed for Admin, Forms, Reports, CLI, MCP, Native, API, Data, Engine, EF Core, and the aggregate package surface.
v3.2.0 — Entity Framework Core 10 Provider & Scalar Aggregate Optimization
Adds the first embedded EF Core provider, supporting planner/parser work, and a focused scalar aggregate optimization pass:
CSharpDB.EntityFrameworkCore(v1) — First embedded EF Core 10 provider layered overCSharpDB.Data. AddsUseCSharpDb(...)configuration, design-time services, migrations/history/lock plumbing, relational connection services, SQL generation, type mapping, update batching, and database creation. Packaged and published alongside the existing NuGet set; runnable example atsamples/efcore-provider.- Parser and planner support for EF-emitted shapes — Extended tokenizer, parser, query planner, and result handling plus ADO.NET command/parameter plumbing so the provider can execute the required EF query and command shapes cleanly.
- Scalar aggregate lookup optimization — Simple indexed and primary-key-backed
COUNT(...)andSUM(...)cases now reuse lightweight lookup plans instead of materializing full scans. Focused baseline refresh checked in attests/CSharpDB.Benchmarks/baselines/focused-validation/20260418-185724. - Benchmark guardrail stabilization — Scenario selection, durable SQL batching coverage, and guardrail scripting hardened for repeat runs. Internal cleanup removed the unused
FlushBufferedWritesAsyncmethod fromIWalFlushPolicyto align with the current commit/flush contract. - New docs —
docs/entity-framework-core.md,docs/ado-ef-storage-tuning/README.md, the programmatic insert performance planning set, and a benchmark-driven CSharpDB-versus-SQLite guide.
v3.1.0 — Concurrent Writers, Daemon Hybrid Defaults & Bulk Ingest Samples
Extends the initial phase-1 multi-writer work with richer transaction handling, commit-path optimization, transport integration, and new user-facing samples:
- Concurrent insert execution (opt-in) — New
ImplicitInsertExecutionMode.ConcurrentWriteTransactionsroutes shared auto-commit inserts through isolatedWriteTransactionstate for disjoint-key workloads. Richer explicitWriteTransactionhandling with logical conflict tracking, disjunctive and range predicate validation, and insert-side rebase/split recovery. - Durable write fan-in (phase 3/4) — Snapshot checkpoint retention tuning and shared auto-commit fan-in on top of the phase-1 multi-writer base. Split-aware conflict handling and leaf/interior rebase hardening reduce insert-path retry tails under concurrency. New insert fan-in and commit-path diagnostics.
- Commit-path optimizations — Insert commit allocation hot paths, single-insert commit cost, collection secondary-index maintenance, and reader-session
COUNT(*)all received focused optimization. WAL publication and flush staging were split into explicit stages with dedicated diagnostics and refreshed baselines. - ADO.NET through Client and hybrid daemon defaults — The ADO.NET provider now routes through
CSharpDB.Clientfor remote sessions, and the daemon host defaults moved to the newer hybrid multi-writer hosting model. - Samples and tutorials — New Atlas Platform Showcase sample (schema, workbook queries, procedures, and reports), an API-first CSV bulk import sample and tutorial, and a multi-writer follow-up planning document linked from the roadmap.
v3.0.0 — Source-Generated Collections & Performance Recovery
Source-generated collection models are now part of the engine, with a trim-safe generated collection API and focused write-path performance recovery:
- CSharpDB.Generators — No-reflection, trim-safe typed collection API via
GetGeneratedCollectionAsync<T>()andGeneratedCollection<T> - Generated field metadata — Analyzer-packaged collection models, codecs, and field descriptors with NativeAOT-friendly model registration
- Collection write-path recovery — Separated write probes from read-side B-tree routing-cache, reused traversal scratch during insert/replace, and buffered catalog mutation bookkeeping
- Covered composite-index fast-path — Recovered covered composite-index lookup optimization for index-only queries
v2.9.0 — Cost-Based Optimizer, Multi-Writer & CLI Refresh
A broad release carrying phase-2 planner statistics, durable-write batching, initial multi-writer support, and a richer CLI experience:
- Phase-2 planner statistics — Internal histograms, heavy hitters, composite-prefix summaries, and bounded DP join reordering for richer selectivity and cardinality estimates
- Durable group commit — Opt-in
UseDurableCommitBatchWindow(...)batches durable WAL flushes across contending writers - Initial multi-writer support — Explicit
WriteTransactionwith conflict-detected retry, shared auto-commit non-insert isolation, and opt-in concurrent implicit inserts - Async I/O batching — WAL frame-chunk writes, chunked checkpoint copies, and reusable B-tree copy utilities
- CLI refresh — Spectre.Console-based output, richer tables, interactive
.dot-command menu, and branded ASCII startup banner - New docs — Configuration reference, query execution pipeline walkthrough, expanded SQL reference
v2.8.0 — Batch-First SQL Row Transport
The SQL execution engine now uses a batch-first row transport foundation. This is a significant internal architecture change that enables more efficient query processing:
- Batch-capable result boundaries across scans, joins, and aggregates
- Foundation for future vectorized query execution
- Reduced per-row overhead for large result sets
Full-Text Search
CSharpDB now includes built-in full-text search capabilities:
- Inverted index with tokenization and stemming
- Relevance ranking via MATCH() in SQL
- CREATE FULLTEXT INDEX syntax for easy setup
Foreign Key Constraints
v1 foreign key support has landed with column-level REFERENCES and optional ON DELETE CASCADE:
- Single-column, column-level REFERENCES syntax
- ON DELETE CASCADE for automatic child row cleanup
- Metadata and tooling surfaces across direct, HTTP, gRPC, CLI, and Admin
- Retrofit migration for older databases
Subqueries, Set Operations & Visual Query Designer
Major SQL feature additions and tooling improvements:
- Scalar subqueries, IN/EXISTS (including correlated) subqueries
- UNION, INTERSECT, EXCEPT set operations
- Visual query builder in Admin UI with drag-and-drop source canvas, join editing, and SQL preview
- Collation support (BINARY, NOCASE, NOCASE_AI, ICU:<locale>)
Ecosystem Expansion
Major tooling and ecosystem additions that shipped in late 2025:
- Dedicated gRPC daemon — Full gRPC coverage for SQL, schema, procedures, collections, and maintenance
- Hybrid storage mode — Hot tables in memory with durable checkpoint to disk
- Client backup & restore — First-class operations across all access methods
- Background WAL checkpointing — Incremental auto-checkpointing off the commit path
- MCP server — AI assistant integration for database operations
- NativeAOT C library — Cross-language FFI for JavaScript, Python, and more