Hi everyone ![]()
Today I’m happy to announce ic-dbms 0.1.0, an open-source Rust framework that enables you to build a relational-style database canister on the Internet Computer by simply defining a schema.
Instead of manually managing stable structures, indexes, and storage logic, ic-dbms lets you describe your data model and automatically generates a fully functional database canister.
What does ic-dbms do?
Given a set of Rust structs annotated with #[derive(Table)], ic-dbms generates:
-
Tables with primary keys and foreign keys
-
CRUD operations for each table
-
Query support with filtering and pagination
-
Transactions (begin / commit / rollback)
-
Access Control Lists (ACL) to restrict database access
-
A strongly typed Candid API ready to be deployed
In practice, this:
#[derive(Table)]
#[table = “users”]
pub struct User {
#[primary_key]
id: Uint64,
name: Text,
email: Text,
}
It’s sufficient to expose a production-ready database interface from your canister.
Why this matters for IC development
One of the most significant pain points when building non-trivial applications on the IC is the lack of a robust database abstraction layer.
Most projects end up reinventing:
-
stable memory layouts
-
double-indexed maps
-
custom serializers
-
ad-hoc query logic
ic-dbms aims to remove that friction by providing a high-level, schema-driven database layer, enabling developers to focus on application logic rather than storage internals.
Current status & roadmap
Current features (v0.1.0):
-
Tables, primary keys, foreign keys
-
CRUD operations
-
Queries with filters and pagination
-
Transactions
-
ACLs
Planned features:
-
JOINs between tables
-
Indexes
-
Schema migrations
-
SQL-like query support
-
Column validation and constraints
Links
-
Blog article
-
GitHub repository:
-
Documentation & getting started:
Feedback, ideas, and contributions are very welcome—especially from anyone building data-intensive canisters on the IC.
Thanks! ![]()