OxiDB provides official client libraries for multiple programming languages. All clients communicate with the OxiDB server over TCP using the same wire protocol.

Python

The Python client is available on PyPI with zero dependencies:

pip install oxidb
from oxidb import OxiDbClient

db = OxiDbClient("127.0.0.1", 4444)
db.insert("users", {"name": "Alice", "age": 30})
users = db.find("users", {"age": {"$gte": 25}})
db.close()

There's also an embedded mode client (pip install oxidb-embedded) that runs the database engine in-process via FFI — no server needed:

from oxidb_embedded import OxiDbEmbedded

db = OxiDbEmbedded("./my_data")
db.insert("users", {"name": "Alice"})
# Data stored directly in ./my_data directory

Go

The Go client uses the OxiWire protocol:

import "github.com/OxiDB-Pub/oxiwire-go"

func main() {
    client, _ := oxiwire.Connect("127.0.0.1:4444")
    defer client.Close()

    client.Insert("users", map[string]any{
        "name": "Alice",
        "age":  30,
    })

    users, _ := client.Find("users", map[string]any{
        "age": map[string]any{"$gte": 25},
    })

    for _, user := range users {
        fmt.Println(user["name"])
    }
}

.NET / C#

Three NuGet packages are available:

  • OxiDb.Client.Tcp — TCP client for server mode
  • OxiDb.Client.Embedded — embedded mode via FFI
  • OxiDb.EntityFrameworkCore — full EF Core provider
// TCP Client
using OxiDb.Client.Tcp;

var client = new OxiDbTcpClient("127.0.0.1", 4444);
await client.InsertAsync("users", new { name = "Alice", age = 30 });
var users = await client.FindAsync("users", new { age = new { gt = 25 } });
// EF Core — use OxiDB with familiar Entity Framework patterns
services.AddDbContext<AppDbContext>(options =>
    options.UseOxiDb("127.0.0.1", 4444));

// Then use standard EF Core:
var users = await db.Users
    .Where(u => u.Age >= 25)
    .OrderBy(u => u.Name)
    .ToListAsync();

Java / Spring Boot

The Spring Boot starter provides auto-configuration:

// application.yml
oxidb:
  host: 127.0.0.1
  port: 4444

// Use the auto-configured client
@Autowired
private OxiDbClient oxidb;

public void createUser(String name, int age) {
    oxidb.insert("users", Map.of("name", name, "age", age));
}

Julia

using OxiDB

client = connect("127.0.0.1", 4444)
insert(client, "users", Dict("name" => "Alice", "age" => 30))
users = find(client, "users", Dict("age" => Dict("\$gte" => 25)))
close(client)

Swift / iOS

The Swift client uses the C FFI shared library for embedded mode, making it suitable for iOS and macOS applications:

import OxiDB

let db = try OxiDB(path: "./my_data")
try db.insert("users", ["name": "Alice", "age": 30])
let users = try db.find("users", ["age": ["$gte": 25]])

Embedded Mode via C FFI

The oxidb-client-ffi crate produces a C-compatible shared library (.dylib / .so / .dll) that any language with C FFI support can use. This powers the embedded clients for Python, .NET, and Swift.

# Build the shared library
cargo build --release -p oxidb-client-ffi

# Output: target/release/liboxidb_embedded_ffi.dylib (macOS)
#         target/release/liboxidb_embedded_ffi.so   (Linux)
#         target/release/oxidb_embedded_ffi.dll      (Windows)
All client libraries follow the same API patterns. If you know how to use the Python client, you can use any other client with minimal learning curve.