Replace Your Stack
Stop stitching together services. RaisinDB unifies your data layer into a single, versioned database.

One query language, every data model
Documents, graphs, vectors, full-text, and time-travel, all through SQL via any PostgreSQL client.
SELECT * FROM 'default'WHERE node_type = 'Article'AND properties->>'status'::String = 'published'ORDER BY created_at DESC;
Everything you need in one database
A multi-model database that combines document storage, graph queries, search, and version control in a single system.
Git-like Versioning
Branches, tags, and commits for your data. Draft and commit workflows, merge operations, revision history, and time-travel queries.
CREATE BRANCH feature/new-content FROM main;Schema-Driven Development
Define NodeTypes in YAML with typed properties, validation rules, inheritance, and constraints. Deploy schemas as part of your codebase.
PostgreSQL-Compatible SQL
Connect with psql or any PostgreSQL client. Query with JSON operators, hierarchical functions, and standard SQL.
Graph Queries
Model relationships with typed edges. Traverse graphs with SQL/PGQ GRAPH_TABLE, REFERENCES() and the NEIGHBORS() table function.
Full-Text Search
Tantivy-powered search with multi-language stemming, fuzzy matching, wildcards, and relevance scoring. Indexes update with your data automatically.
SELECT * FROM FULLTEXT_SEARCH('database AND article', 'en', workspaces => 'main')Vector Search
Store embeddings and run KNN similarity queries. Build semantic search, RAG pipelines, and AI agent memory without external vector stores.
RAP Packages
Package schemas, content, and functions into Raisin Archive Packages (.rap). Deploy with the CLI, install into any repository.
Serverless Functions
Run JavaScript, Starlark, WebAssembly, or SQL functions inside the database. Triggers, webhooks, scheduled jobs, and AI agent tools.
DCAD: Schema-Driven Apps
Your schema defines your app. Archetypes map data to UX patterns — switch the archetype, change the entire interface without touching data.
Authentication & RBAC
Pluggable auth strategies, workspace-scoped roles, row-level security. Content-centric permissions that replicate across clusters.
ACID Transactions
Atomic commits across multiple operations. BEGIN and COMMIT with a message and actor, so every change carries its provenance.
Real-Time Events
Subscribe to node changes over WebSocket. Filter by workspace, node type, or path. The JavaScript client reconnects and restores subscriptions automatically.
Built for Modern Applications
Content Management Systems
Manage articles, pages, and media with branching workflows and editorial review. Schema-driven content modeling with full revision history. Multi-tenant by design.
SaaS Platforms
Tenant isolation, workspace organization, and version-controlled data out of the box. REST API, WebSocket events, and PostgreSQL wire protocol for flexible integration.
AI Agent Memory & RAG
Give AI agents branching memory — each workflow gets its own branch to reason and iterate without corrupting shared state. Vector search for RAG, serverless functions for tool use, and full revision history so agents never lose context.
Schema-Driven Applications (DCAD)
Let your schema drive the UI. Archetypes define how data is presented — change the archetype, transform the interface. Build dynamic, data-centric apps without rewriting frontend code.
Use your existing tools
RaisinDB speaks the PostgreSQL wire protocol. Connect with any standard library, or use the JavaScript client for WebSocket subscriptions and chat.
import pg from 'pg';// user = tenant, password = an API key, database = repositoryconst client = new pg.Client({connectionString: 'postgresql://default:<api-key>@localhost:5432/myrepo'});await client.connect();// Standard PostgreSQL queriesconst { rows } = await client.query(`SELECT path, properties->>'title'::String AS titleFROM 'content'WHERE node_type = 'news:Article'AND properties->>'status'::String = 'published'ORDER BY created_at DESC LIMIT 10`);// Row-level security: run as an identity user (JWT)await client.query("SET app.user = '" + accessToken + "'");const results = await client.query(sql);await client.query('RESET app.user');
Get Started with RaisinDB
npm install -g @raisindb/cli && raisindb server startOne command to install, one to start. Define your first schema and start querying in minutes.