SurrealDB is a multi-model database that combines SQL, document, graph, and time-series capabilities in a single engine. It has a powerful query language called SurrealQL and can run embedded in your app or as a server.
What Makes SurrealDB Special?
- Multi-model — relational + document + graph in one
- SurrealQL — SQL-like but with graph traversal and JavaScript
- Real-time — live queries with WebSocket
- Embedded or server — runs in-process or as a service
- Free — open source, BSL license
The Hidden API: SurrealQL
-- Create records without predefined schema
CREATE user:john SET
name = 'John Doe',
email = 'john@example.com',
age = 30,
interests = ['coding', 'music'],
address = {
city: 'London',
country: 'UK'
};
-- Graph relations — no JOINs needed!
RELATE user:john->follows->user:jane SET since = time::now();
RELATE user:john->likes->post:abc SET at = time::now();
-- Graph traversal query
SELECT name, ->follows->user.name AS following,
<-follows<-user.name AS followers
FROM user:john;
-- Subqueries and computed fields
SELECT *,
count(->likes->post) AS total_likes,
->follows->user->likes->post.* AS feed
FROM user
WHERE age > 25;
Live Queries — Real-Time API
import Surreal from 'surrealdb.js';
const db = new Surreal();
await db.connect('ws://localhost:8000/rpc');
await db.use({ namespace: 'app', database: 'main' });
// Live query — auto-updates!
const queryUuid = await db.live('messages', (action, result) => {
switch (action) {
case 'CREATE': console.log('New:', result); break;
case 'UPDATE': console.log('Updated:', result); break;
case 'DELETE': console.log('Deleted:', result); break;
}
});
// CRUD operations
await db.create('messages', {
text: 'Hello World',
author: 'user:john',
channel: 'general'
});
Embedded Mode
use surrealdb::Surreal;
use surrealdb::engine::local::Mem;
#[tokio::main]
async fn main() {
let db = Surreal::new::<Mem>(()).await.unwrap();
db.use_ns("app").use_db("main").await.unwrap();
// Full database in-process — no server needed
let users: Vec<User> = db.select("user").await.unwrap();
}
Quick Start
curl -sSf https://install.surrealdb.com | sh
surreal start --user root --pass root
# Connect at localhost:8000
Why Developers Choose SurrealDB
A developer shared: "We had PostgreSQL for data, Redis for caching, and Neo4j for graph queries. SurrealDB replaced all three. One database, one query language, and the graph traversal is built right into SQL-like syntax."
Need database solutions? Email spinov001@gmail.com or check my developer tools.
Multi-model or specialized databases? What's your approach?
Top comments (0)