Turxo is early-stage Elixir bindings for the Turso database, currently offering direct access to Turso via Rust-powered NIFs. The package provides low-level, raw functions for opening, connecting, and executing SQL on Turso, along with statement preparation and reuse.

This is a proof-of-concept release (v0.1.0). There are no ergonomic APIs, documentation, or DBConnection/Ecto integration yet — those are planned for future releases and in separate repositories.

Project status:

  • Early alpha, APIs are unstable
  • Only low-level NIF wrappers exposed
  • Limited documentation

Supported Features

  • Open or create a Turso database, including in-memory databases
  • Connect to an open database
  • Execute SQL commands or perform queries on a connection
  • Prepare reusable SQL statements, then execute or query them

Installation

Add the package from Hex to your mix.exs (since v0.1.0):

def deps do
  [
    {:turxo, "~> 0.1.0"}
  ]
end

And run:

mix deps.get

Example

This example demonstrates all currently supported functions using the Turxo.NIF.Wrapped module.

alias Turxo.NIF.Wrapped, as: Turso

# Open an in-memory database
{:ok, db} = Turso.db_open(":memory:")

# Establish a connection
{:ok, conn} = Turso.db_connect(db)

# Execute SQL (no parameters)
{:ok, 0} =
  Turso.conn_execute(
    conn,
    "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)",
    []
  )

# Insert using positional parameters
{:ok, 1} =
  Turso.conn_execute(conn, "INSERT INTO users (name, email) VALUES (?1, ?2)", [
    "alice",
    "alice@example.com"
  ])

# Query with positional parameters
{:ok, [["alice@example.com"]]} =
  Turso.conn_query(conn, "SELECT email FROM users WHERE name = (?1)", ["alice"])

# Prepare a statement
{:ok, stmt} =
  Turso.conn_prepare(conn, "INSERT INTO users (name, email) VALUES (:name, :email)", false)

# Execute the prepared statement with named parameters
{:ok, 1} = Turso.stmt_execute(stmt, name: "bob", email: "bob@example.com")

# Query with named parameters
{:ok, [["bob@example.com"]]} =
  Turso.conn_query(conn, "SELECT email FROM users WHERE name = (:name)", name: "bob")

# Prepare a statement for querying
{:ok, qstmt} = Turso.conn_prepare(conn, "SELECT id, name FROM users", false)
{:ok, rows} = Turso.stmt_query(qstmt, [])
# rows = [[1, "alice"], [2, "bob"]]

Roadmap

  • Elixir-style API (DBConnection integration)
  • Ecto adapter (separate repository)
  • Extended documentation and guides

Copyright

Copyright (c) 2026 Benjamin Philip, MIT License