docs/sql-reference/experimental-features.mdx
Some Turso features are still experimental and must be explicitly enabled before use. Experimental features are stable enough for testing but their API may change in future releases.
| Feature | Flag | Description |
|---|---|---|
| Views | views | CREATE VIEW and CREATE MATERIALIZED VIEW |
| Custom Types | custom_types | CREATE TYPE and DROP TYPE for STRICT tables |
| Triggers | triggers | CREATE TRIGGER and DROP TRIGGER |
| Encryption | encryption | At-rest encryption via PRAGMA cipher / hexkey |
| Index Methods | index_method | CREATE INDEX ... USING for FTS and custom index types |
| Autovacuum | autovacuum | Automatic database file compaction |
| Attach | attach | ATTACH DATABASE and DETACH DATABASE |
Pass --experimental-<feature> flags when starting tursodb:
tursodb --experimental-views --experimental-triggers database.db
Multiple flags can be combined:
tursodb \
--experimental-views \
--experimental-custom-types \
--experimental-triggers \
--experimental-encryption \
--experimental-index-method \
database.db
The Rust binding uses a fluent Builder API:
use turso::Builder;
let db = Builder::new_local("database.db")
.experimental_encryption(true)
.experimental_triggers(true)
.experimental_materialized_views(true)
.experimental_custom_types(true)
.experimental_index_method(true)
.experimental_attach(true)
.build()?;
Pass a comma-separated string to the experimental_features parameter:
import turso
conn = turso.connect(
"database.db",
experimental_features="views,triggers,custom_types",
)
Pass an array of feature strings to the experimental option:
import { Database } from "@tursodatabase/libsql";
const db = new Database("file:database.db", {
experimental: ["views", "triggers", "custom_types", "encryption"],
});
Set the ExperimentalFeatures field as a comma-separated string:
db, err := turso.NewDatabase(turso.TursoDatabaseConfig{
Path: "database.db",
ExperimentalFeatures: "views,triggers,custom_types",
})
The Go driver also supports DSN query parameters:
db, err := sql.Open("turso", "database.db?experimental=views,triggers")
The Java binding currently supports encryption through a dedicated method:
TursoDB db = TursoDB.openWithEncryption(
"database.db",
OpenFlags.CREATE,
"aegis256",
"your-hex-key-here"
);
The .NET binding currently supports encryption through the C FFI:
var db = Database.OpenWithEncryption(
"database.db",
"aegis256",
"your-hex-key-here"
);