> ## 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 |
| Triggers          | `triggers`         | [CREATE TRIGGER](/sql-reference/statements/create-trigger) and [DROP TRIGGER](/sql-reference/statements/drop-trigger)                                                                                                                        |
| 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)                                                                                                                |
| Multi-Process WAL | `multiprocess_wal` | [Multi-Process Access](/sql-reference/multiprocess-access) — share a database file between OS processes via a shared WAL coordinator                                                                                                         |

## CLI

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

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

Multiple flags can be combined:

```bash theme={null}
tursodb \
  --experimental-views \
  --experimental-custom-types \
  --experimental-triggers \
  --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_triggers(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,triggers,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", "triggers", "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,triggers,custom_types,vacuum",
})
```

The Go driver also supports DSN query parameters:

```go theme={null}
db, err := sql.Open("turso", "database.db?experimental=views,triggers,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
