Skip to content

By language

Rust

SurrealDB can be run as an embedded database within your Rust application, allowing you to use SurrealDB without running a separate server process. This is ideal for desktop applications, testing, local development, and edge computing scenarios.

SurrealDB supports multiple types of embedded storage in Rust:

  • In-memory database (Mem) - Fastest performance with data stored in RAM. Perfect for testing, caching, or temporary data. Data is lost when the connection closes.

  • File-based database (RocksDb or SurrealKV) - Persistent storage on disk using RocksDB or SurrealKV storage engines. Data persists across connections and application restarts.

use surrealdb::engine::local::Mem;
use surrealdb::Surreal;

// In-memory database
let db = Surreal::new::<Mem>(()).await?;
db.use_ns("main").use_db("main").await?;
let person = db.create("person").content(Person { name: "John Doe" }).await?;
println!("{:?}", person);

// File-based persistent database (RocksDB)
use surrealdb::engine::local::RocksDb;
let db = Surreal::new::<RocksDb>("./mydb").await?;
db.use_ns("main").use_db("main").await?;
let company = db.create("company").content(Company { name: "TechStart" }).await?;
println!("{:?}", company);

In a desktop framework such as Tauri, the interface runs in a webview and the application code in Rust. An embedded database runs inside the Rust process and does not listen on a network port, so the JavaScript SDK in the webview has nothing to connect to. There are two ways to give the interface its data:

  • Query from Rust. Keep the embedded database in the Rust code, and expose the queries the interface needs as Tauri commands, which the webview calls with invoke. The database stays private to the application.

  • Run a server. Start surreal start as a separate process listening on localhost, and connect to it from both the Rust code and the JavaScript SDK. Both see the same data, at the cost of a second process to start and stop with the application.

The JavaScript SDK can also embed its own engine in the webview, but that is a separate database from the one in the Rust process.

For complete documentation, installation instructions, examples, best practices, and troubleshooting, see the Rust SDK embedding guide.

Was this page helpful?