Requirements

WitDatabase targets .NET 10 and nothing older. There is no .NET 9 build, no .NET 8 build, and no .NET Framework build. The reasoning behind that, along with the history of how the target moved, is in the introduction.

There is nothing else to install. WitDatabase is managed code with no native components, so there are no platform-specific binaries to deploy alongside it and nothing to configure on the machine it runs on. For what that means on each platform, see platform support.

Which package you need

WitDatabase gives you four ways to talk to a database, and you install the one that matches how you want to write your code. Each package brings in the ones below it, so you only ever install one.

Package You get Install it when
OutWit.Database.EntityFramework A full EF Core provider: DbContext, LINQ, migrations, scaffolding You are building an application and want an ORM. This is the common answer
OutWit.Database.AdoNet DbConnection, DbCommand, DbDataReader, DbTransaction You want to write SQL yourself, or you have existing ADO.NET code to move across
OutWit.Database WitSqlEngine: SQL without the ADO.NET wrapper You want SQL with less ceremony, or you need the engine's own APIs for schema introspection
OutWit.Database.Core The key-value store, transactions, encryption, storage engines You are building a cache, a document store, or something else that has no use for SQL

If you are unsure, take OutWit.Database.EntityFramework. It contains everything, and dropping down to ADO.NET or the SQL engine later costs you nothing because they are already there.

Installing

Using the .NET CLI:

bash
dotnet add package OutWit.Database.EntityFramework

Using the Package Manager Console in Visual Studio:

powershell
Install-Package OutWit.Database.EntityFramework

Or by editing your project file:

xml
<ItemGroup>
  <PackageReference Include="OutWit.Database.EntityFramework" />
</ItemGroup>

None of these pin a version. Let the tooling write the current one into your project file.

Extension packages

Two of the seven published packages are extensions rather than layers. Neither is required, and neither sits between you and the core.

OutWit.Database.Core.IndexedDb puts the database in the browser, backed by IndexedDB. Install it alongside your chosen package when you are targeting Blazor WebAssembly.

bash
dotnet add package OutWit.Database.Core.IndexedDb

OutWit.Database.Core.BouncyCastle adds ChaCha20-Poly1305 encryption. Reach for it where AES has no hardware acceleration to fall back on, which in practice means WebAssembly and some ARM targets.

bash
dotnet add package OutWit.Database.Core.BouncyCastle

IndexedDb is one implementation of IStorage and BouncyCastle is one implementation of ICryptoProvider. Both are written through the same public interfaces you have, and both live outside the core. Blazor WebAssembly support is a storage backend registered under a key, sitting where the file backend usually sits. Putting the database in S3, or the keys in an HSM, is the same amount of work. See architecture for how registration works.

Checking that it worked

A database in memory needs no file, no path and no cleanup, so it is the shortest way to prove the packages resolved:

csharp
using OutWit.Database.AdoNet;

using var connection = new WitDbConnection("Data Source=:memory:");
connection.Open();

using var command = connection.CreateCommand();
command.CommandText = "CREATE TABLE Ping (Id INT PRIMARY KEY, Note TEXT)";
command.ExecuteNonQuery();

command.CommandText = "INSERT INTO Ping (Id, Note) VALUES (1, 'ok') RETURNING Note";

Console.WriteLine(command.ExecuteScalar());

If that prints ok, the parser, the planner, the storage engine and the provider are all in place.

Where to go next