Everything works together.
BlueTusk talks directly to PostgreSQL and does not hide another provider underneath.
Secure connections, clearly configured.
Use the database types you already rely on.
Values keep PostgreSQL precision and behavior.
Supports one-dimensional and multidimensional PostgreSQL arrays.
Keeps inclusive, exclusive, empty, and unbounded ranges intact.
Text and binary paths with typed parameters.
Works with PostgreSQL network addresses as typed values.
Use PostgreSQL full-text search values in ADO.NET and EF Core.
Register your .NET types once when the data source is created.
Infinity and interval structure preserve server behavior.
Bulk data, notifications, and replication are built in.
Use dedicated, tested APIs for high-volume and real-time database work.
COPY
Import or export large amounts of data efficiently, with typed values and cancellation.
Read the technical guidePipeline mode
Send groups of commands with fewer network waits while keeping results and errors in order.
Read the technical guideLISTEN / NOTIFY
Receive PostgreSQL notifications asynchronously while the connection stays healthy.
Read the technical guideSequential + large objects
Stream large fields and objects without loading the entire value into memory.
Read the technical guideLogical replication
Read committed PostgreSQL changes for Streams, Sync, Live, or your own processing.
Read the technical guideCloud credentials
Use short-lived AWS, Azure, or Google Cloud login tokens instead of stored passwords.
Read the technical guideCreate one data source and reuse it.
This is the public 1.x API. Automated checks keep the packages, API reference, examples, and compatibility promises in sync.
var connectionString = Environment.GetEnvironmentVariable(
"BLUETUSK_TEST_CONNECTION_STRING")
?? "Host=localhost;Username=postgres;Password=postgres";
await using var dataSource =
new BlueTuskDataSourceBuilder(connectionString).Build();
await using var command = dataSource.CreateCommand(
"SELECT $1::int4 + $2::int4");
command.Parameters.Add(new BlueTuskParameter<int>(20));
command.Parameters.Add(new BlueTuskParameter<int>(22));
var answer = await command.ExecuteScalarAsync<int>();