> ## Documentation Index
> Fetch the complete documentation index at: https://docs.turso.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# Experimental Features

> How to enable experimental features in the CLI and each SDK

# Experimental Features

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.

## Experimental Features List

| Feature | Flag | Description |
| - | - | - |
| Views | `views` | [CREATE VIEW](/sql-reference/statements/create-view) and [CREATE MATERIALIZED VIEW](/sql-reference/statements/create-materialized-view) |
| Custom Types | `custom_types` | [CREATE TYPE](/sql-reference/statements/create-type), [DROP TYPE](/sql-reference/statements/drop-type), [CREATE DOMAIN](/sql-reference/statements/create-domain), and [DROP DOMAIN](/sql-reference/statements/drop-domain) for STRICT tables |
| Encryption | `encryption` | At-rest encryption via [PRAGMA cipher / hexkey](/sql-reference/pragmas#encryption) |
| Index Methods | `index_method` | [CREATE INDEX ... USING](/sql-reference/statements/create-index#using-clause) for FTS and custom index types |
| Autovacuum | `autovacuum` | Automatic database file compaction |
| Vacuum | `vacuum` | In-place [VACUUM](/sql-reference/statements/vacuum) compaction |
| Attach | `attach` | [ATTACH DATABASE](/sql-reference/statements/attach-database) and [DETACH DATABASE](/sql-reference/statements/detach-database) |
| Generated Columns | `generated_columns` | Virtual [`GENERATED ALWAYS AS`](/sql-reference/statements/create-table) columns |
| Without Rowid | `without_rowid` | `WITHOUT ROWID` tables |
| Multi-Process WAL | `multiprocess_wal` | [Multi-Process Access](/sql-reference/multiprocess-access) — share a database file between OS processes via a shared WAL coordinator |
| MVCC Passive Checkpoint | `mvcc_passive_checkpoint` | Passive checkpointing under MVCC (`journal_mode=mvcc`) |

<Info>
  Triggers are no longer experimental as of Turso 0.7 — [CREATE TRIGGER](/sql-reference/statements/create-trigger) and [DROP TRIGGER](/sql-reference/statements/drop-trigger) work without any flag.
</Info>

## CLI

Pass `--experimental-<feature>` flags when starting `tursodb`:

```bash theme={null}
tursodb --experimental-views --experimental-custom-types database.db
```

Multiple flags can be combined:

```bash theme={null}
tursodb \
  --experimental-views \
  --experimental-custom-types \
  --experimental-encryption \
  --experimental-index-method \
  --experimental-vacuum \
  database.db
```

## Rust SDK

The Rust binding uses a fluent `Builder` API:

```rust theme={null}
use turso::Builder;

let db = Builder::new_local("database.db")
    .experimental_encryption(true)
    .experimental_materialized_views(true)
    .experimental_custom_types(true)
    .experimental_index_method(true)
    .experimental_vacuum(true)
    .experimental_attach(true)
    .experimental_multiprocess_wal(true)
    .build()?;
```

## Python SDK

Pass a comma-separated string to the `experimental_features` parameter:

```python theme={null}
import turso

conn = turso.connect(
    "database.db",
    experimental_features="views,custom_types,vacuum",
)
```

## JavaScript / Node.js SDK

Pass an array of feature strings to the `experimental` option:

```typescript theme={null}
import { Database } from "@tursodatabase/libsql";

const db = new Database("file:database.db", {
    experimental: ["views", "custom_types", "encryption", "vacuum"],
});
```

## Go SDK

Set the `ExperimentalFeatures` field as a comma-separated string:

```go theme={null}
db, err := turso.NewDatabase(turso.TursoDatabaseConfig{
    Path: "database.db",
    ExperimentalFeatures: "views,custom_types,vacuum",
})
```

The Go driver also supports DSN query parameters:

```go theme={null}
db, err := sql.Open("turso", "database.db?experimental=views,vacuum")
```

## Java SDK

The Java binding currently supports encryption through a dedicated method:

```java theme={null}
TursoDB db = TursoDB.openWithEncryption(
    "database.db",
    OpenFlags.CREATE,
    "aegis256",
    "your-hex-key-here"
);
```

## .NET SDK

The .NET binding currently supports encryption through the C FFI:

```csharp theme={null}
var db = Database.OpenWithEncryption(
    "database.db",
    "aegis256",
    "your-hex-key-here"
);
```

## See Also

* [Compatibility](/sql-reference/compatibility) for the full feature support matrix


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.