wasm-dbms

logo

license-mit repo-stars downloads latest-version ko-fi conventional-commits

ci coveralls docs


Documentation

Guides

Step-by-step guides for building databases with wasm-dbms:

Reference

API and type reference documentation:

IC Integration

For deploying wasm-dbms as an Internet Computer canister:

Technical Documentation

For advanced users and contributors:


Quick Example

Define your schema:

use wasm_dbms_api::prelude::*;

#[derive(Debug, Table, Clone, PartialEq, Eq)]
#[table = "users"]
pub struct User {
    #[primary_key]
    pub id: Uint32,
    #[sanitizer(TrimSanitizer)]
    #[validate(MaxStrlenValidator(100))]
    pub name: Text,
    #[validate(EmailValidator)]
    pub email: Text,
}

Use the Database trait for CRUD operations:

use wasm_dbms_api::prelude::*;

// Insert
let user = UserInsertRequest {
    id: 1.into(),
    name: "Alice".into(),
    email: "[email protected]".into(),
};
database.insert::<User>(user)?;

// Query
let query = Query::builder()
    .filter(Filter::eq("name", Value::Text("Alice".into())))
    .build();
let users = database.select::<User>(query)?;

Features

  • Schema-driven: Define tables as Rust structs with derive macros
  • Runtime-agnostic: Works on any WASM runtime, not tied to a specific platform
  • CRUD operations: Full insert, select, update, delete support
  • ACID transactions: Commit/rollback with isolation
  • Foreign keys: Referential integrity with cascade/restrict behaviors
  • Validation & Sanitization: Built-in validators and sanitizers
  • JSON support: Store and query semi-structured data
  • IC Integration: First-class support for Internet Computer canisters via ic-dbms