surrealism
by @24601
SurrealDB Surrealism WASM extension development. Write Rust functions, compile to WASM, deploy as database modules. Part of the surreal-skills collection.
clawhub install surrealismπ About This Skill
name: surrealism description: "SurrealDB Surrealism WASM extension development. Write Rust functions, compile to WASM, deploy as database modules. Part of the surreal-skills collection." license: MIT metadata: version: "1.0.4" author: "24601" parent_skill: "surrealdb" snapshot_date: "2026-02-19" upstream: repo: "surrealdb/surrealdb" release: "v3.0.0" sha: "2e0a61fd4daf" docs: "https://surrealdb.com/docs/surrealdb/extensions"
Surrealism -- WASM Extensions for SurrealDB
New in SurrealDB 3. Write custom functions in Rust, compile them to WebAssembly (WASM), and deploy them as native database modules callable from SurrealQL.
Prerequisites
wasm32-unknown-unknown targetsurreal binary with surreal module subcommand)DEFINE MODULE and DEFINE BUCKETDevelopment Workflow
1. Annotate -- surrealism.toml + #[surrealism] on Rust functions
2. Compile -- surreal module compile (produces .wasm binary)
3. Register -- DEFINE BUCKET + DEFINE MODULE in SurrealQL
Quick Start
# Create a new Surrealism project
cargo new --lib my_extension
cd my_extensionAdd the WASM target
rustup target add wasm32-unknown-unknownCreate surrealism.toml (required manifest)
cat > surrealism.toml << 'TOML'
[package]
name = "my_extension"
version = "0.1.0"
TOMLWrite your extension (annotate with #[surrealism])
cat > src/lib.rs << 'RUST'
use surrealism::surrealism;#[surrealism]
fn greet(name: String) -> String {
format!("Hello, {}!", name)
}
RUST
Compile to WASM using SurrealDB CLI
surreal module compileRegister in SurrealDB
surreal sql --endpoint http://localhost:8000 --user root --pass root --ns test --db test
-- Grant access to the WASM file
DEFINE BUCKET my_bucket;-- Register the module functions
DEFINE MODULE my_extension FROM 'my_bucket:my_extension.wasm';
-- Use the function in queries
SELECT my_extension::greet('World');
Use Cases
Status
Surrealism is actively in development and not yet stable. The API may change between SurrealDB 3.x releases. File feedback via GitHub issues/PRs on the surrealdb/surrealdb repository.
Full Documentation
See the main skill's rule file for complete guidance:
surreal module referenceβ‘ When to Use
π‘ Examples
# Create a new Surrealism project
cargo new --lib my_extension
cd my_extensionAdd the WASM target
rustup target add wasm32-unknown-unknownCreate surrealism.toml (required manifest)
cat > surrealism.toml << 'TOML'
[package]
name = "my_extension"
version = "0.1.0"
TOMLWrite your extension (annotate with #[surrealism])
cat > src/lib.rs << 'RUST'
use surrealism::surrealism;#[surrealism]
fn greet(name: String) -> String {
format!("Hello, {}!", name)
}
RUST
Compile to WASM using SurrealDB CLI
surreal module compileRegister in SurrealDB
surreal sql --endpoint http://localhost:8000 --user root --pass root --ns test --db test
-- Grant access to the WASM file
DEFINE BUCKET my_bucket;-- Register the module functions
DEFINE MODULE my_extension FROM 'my_bucket:my_extension.wasm';
-- Use the function in queries
SELECT my_extension::greet('World');
βοΈ Configuration
wasm32-unknown-unknown targetsurreal binary with surreal module subcommand)DEFINE MODULE and DEFINE BUCKET