Tracon.Sqlite
1.0.0-preview.3
Prefix Reserved
dotnet add package Tracon.Sqlite --version 1.0.0-preview.3
NuGet\Install-Package Tracon.Sqlite -Version 1.0.0-preview.3
<PackageReference Include="Tracon.Sqlite" Version="1.0.0-preview.3" />
<PackageVersion Include="Tracon.Sqlite" Version="1.0.0-preview.3" />
<PackageReference Include="Tracon.Sqlite" />
paket add Tracon.Sqlite --version 1.0.0-preview.3
#r "nuget: Tracon.Sqlite, 1.0.0-preview.3"
#:package Tracon.Sqlite@1.0.0-preview.3
#addin nuget:?package=Tracon.Sqlite&version=1.0.0-preview.3&prerelease
#tool nuget:?package=Tracon.Sqlite&version=1.0.0-preview.3&prerelease
Tracon.Sqlite
SQLite persistence layer for Tracon.
For single-file setups: demos, embedded/edge scenarios, and testing with real SQL behavior
beyond in-memory stores. Tables carry a configurable prefix (default tracon_) so
they do not collide with the consumer's own tables; SQLite has no schema concept.
Setup
dotnet add package Tracon.Sqlite --prerelease
builder.AddTracon()
.UseSqlite("Data Source=tracon.db");
In memory, testing only:
builder.AddTracon()
.UseSqlite("Data Source=:memory:"); // LIMIT: data is lost when the connection closes
With settings:
builder.AddTracon()
.UseSqlite(options =>
{
options.ConnectionString = "Data Source=tracon.db";
options.TablePrefix = "tracon_";
options.CommandTimeoutSeconds = 30;
options.AutoApplyMigrations = true;
});
Sharing a data source
Give DataSource instead of ConnectionString when your host already owns a
DbDataSource for the same database file and you want Tracon using that same
instance:
options.DataSource = yourDbDataSource; // ConnectionString is then not required
Tracon never disposes an instance it did not build; the caller keeps
ownership. Microsoft.Data.Sqlite does not itself offer a DbDataSource
implementation, so this is for a DbDataSource adapter you write yourself — see
Tracon.PostgreSql's https://tracon.dev/guides/ef-core/ for
the pattern.
SQLite's real limits
These are not hidden; they are reported in this README and in the /api/meta output.
| Limit | Consequence |
|---|---|
| Single writer | Concurrent writes serialize. At high run volume, run_events writes become a bottleneck |
| WAL required | Set automatically on connection open; cannot be disabled |
busy_timeout |
Set to 5000 ms |
| Weak type system | No datetimeoffset, no uuid, no decimal — all encoded as text/number |
| No network | Single-process; cannot be used in a multi-instance deployment |
No SKIP LOCKED |
The job queue (RunWorker) runs with a single worker; cannot be multi-instance |
These limits do not make SQLite bad; using it in the wrong place does.
Migrations
Embedded .sql files are applied automatically at application startup. The lock carries no
sp_getapplock/pg_advisory_lock equivalent — it is protected by a sidecar file lock
(<database-file>.tracon-migration-lock). The lock is skipped for :memory: databases
(another process cannot share the same connection anyway).
options.AutoApplyMigrations = false;
Migration numbers are per provider; they do not, and need not, line up with
Tracon.PostgreSql or Tracon.SqlServer.
Read contract view
Set EnableReadViews = true to publish {prefix}runs_v1 (no separating dot — SQLite
has no schema concept), a narrow, versioned, read-only view over run data — query it
with your own SQL or map it as an EF Core keyless entity, without depending on the
internal runs table shape. Off by default; a deployment that never turns it on
never sees the object. See
Read contract views for
the column list and the compatibility rule.
AOT
This package's AOT status is not measured. SQLitePCLRaw carries a native library; this
typically affects publish behavior. Use Tracon.PostgreSql for setups that require AOT.
Two providers at once
If UsePostgreSql(), UseSqlServer(), and UseSqlite() are called in the same chain, the
last registration wins and a warning is logged at startup. This is a configuration error;
call only one.
Links
- Guide: https://tracon.dev/getting-started/persistence/
- Capability map: https://tracon.dev/capabilities/
- API reference: https://tracon.dev/api/
Licence: PolyForm Small Business 1.0.0 - free below 100 people and 1,000,000 USD (2019, inflation adjusted) revenue; a commercial licence applies above that. Terms ship in the package as LICENSE.md. Details: https://tracon.dev/reference/licensing/
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Data.Sqlite (>= 10.0.10)
- SQLitePCLRaw.bundle_e_sqlite3 (>= 2.1.12)
- Tracon.Core (= 1.0.0-preview.3)
-
net8.0
- Microsoft.Data.Sqlite (>= 10.0.10)
- SQLitePCLRaw.bundle_e_sqlite3 (>= 2.1.12)
- Tracon.Core (= 1.0.0-preview.3)
-
net9.0
- Microsoft.Data.Sqlite (>= 10.0.10)
- SQLitePCLRaw.bundle_e_sqlite3 (>= 2.1.12)
- Tracon.Core (= 1.0.0-preview.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0-preview.3 | 41 | 9/24/2026 |
| 1.0.0-preview.2 | 79 | 9/20/2026 |
| 1.0.0-preview.1 | 59 | 9/20/2026 |