raisindb-overview
RaisinDB Overview
Critical Rules
-
Always ask the user for the repository name before writing any frontend code. The repository is a server-side concept (like a database name) — it is NOT the same as the workspace or package name. The WebSocket URL uses the repository name:
ws://localhost:8080/sys/default/{REPOSITORY}. Use it inclient.initSession(REPOSITORY),client.database(REPOSITORY), andclient.loginWithEmail(email, password, REPOSITORY). -
Always validate after changing any YAML in
package/. Run this every time you create or modify a.yamlor.node.yamlfile:npm run validateDo NOT skip this step. Fix any errors before proceeding.
-
For navigation queries, use a
hide_in_navBoolean property on the NodeType instead of filtering by archetype or hardcoding path exclusions. Addhide_in_nav: Booleanto your Page NodeType and filter withproperties->>'hide_in_nav'::Boolean != true. -
Boolean property queries: Cast the key to
Boolean, notString:properties->>'featured'::Boolean = true. For string properties, cast toString:properties->>'status'::String = 'published'.
What RaisinDB Is
RaisinDB is a multi-tenant content database with SQL queries, graph traversal (Cypher/PGQ), real-time WebSocket subscriptions, and CRDT-based replication. You model content as typed nodes living at hierarchical paths, then build frontends that map those nodes to UI components. Every node belongs to a tenant, repository, branch, and workspace.