Verhaal achter het project

SharpCoreDB is gebouwd vanuit de frustratie met te zware database-clusters voor kleine tot middelgrote workloads en de beperkingen van losse JSON-bestanden. Na 28 jaar .NET-ontwikkeling weten we precies waar teams op vastlopen: transacties, queries, encryptie en performance zonder externe afhankelijkheden. Ontworpen voor C# 14, .NET 10 en zero-allocation principes.

Probleem dat dit oplost

Full database servers (SQL Server, PostgreSQL) zijn te zwaar voor veel scenario's: edge devices, offline apps, configuratie stores, audit logs, embedded tools. Tegelijkertijd zijn plain JSON/CSV-bestanden onvoldoende voor query's, transacties, concurrency en betrouwbare opslag. Teams bouwen telkens dezelfde wheel: file locking, parsing, indexering.

Architectuur

Single-file storage engine met eigen SQL parser, transactionele write-ahead flow, page-based allocation en encryptie at rest. Gebruik van Span<T>, Memory<T>, ArrayPool<T> en Channel<T> voor producer-consumer writes. Uitbreidbare modules voor indexing, compression en replication hooks.

sequenceDiagram
    participant App
    participant DB as SharpCoreDB
    participant Storage as SingleFile
    App->>DB: ExecuteBatchSQL(statements)
    DB->>DB: Parse + Validate
    DB->>Storage: Write pages (WAL)
    Storage-->>DB: Offset + Checksum
    DB->>App: Result + Flush

Lessons learned

Performance, security en developer ergonomics vanaf dag één ontwerpen voorkomt dure herbouw. Gebruik ExecuteBatchSQL + Flush in plaats van losse calls. Nooit sync-over-async. Lock via Lock class (C# 14), nooit object. Na 28 jaar is duidelijk: de snelste code is code die je niet hoeft te debuggen in productie.

Screenshots

SharpCoreDB screenshot

Code snippets

SharpCoreDB
// Factory + open met encryptie
using SharpCoreDB;
var factory = new DatabaseFactory();
await using var db = factory.Create("app.scdb", "strong-master-password");

// Batch voor performance (persisteert direct naar engine)
var statements = new List<string>
{
    "CREATE TABLE posts (id INT PRIMARY KEY, title TEXT, created TEXT)",
    "INSERT INTO posts VALUES (1, 'Hello', '2025-01-28')"
};
db.ExecuteBatchSQL(statements);
db.Flush();
db.ForceSave();
SharpCoreDB
// Zero-allocation hot path voorbeeld
ReadOnlySpan<byte> data = ...;
var buffer = ArrayPool<byte>.Shared.Rent(4096);
try
{
    // schrijf via Span
}
finally { ArrayPool<byte>.Shared.Return(buffer); }

Klaar om te gebruiken?

Bekijk de volledige broncode, documentatie en releases op GitHub. Open source onder MIT-licentie.

Bekijk op GitHub Bespreek integratie