fluid.db
Version:
The DX-focused ORM for SurrealDB
93 lines (62 loc) β’ 2.36 kB
Markdown
# FluidDB
**FluidDB** is a minimalist, Proxy-based ORM for [SurrealDB](https://surrealdb.com).
It gives you a natural, object-like API for interacting with tables and records β inspired by [SyncStore](https://npmjs.com/package/syncstore.json) but backed by a real database.
## π Features
* π **Push syntax**: `db.users.push({...})` to insert records
* π **Direct access by ID**: `await db.users[id]`
* π§© **Filter queries**: `await db.users.filter({ active: true })`
* π **Delete syntax**: `delete db.users[id]`
* β‘ **Auto-upsert**: `db.users[id] = {...}` updates or creates a record
* π§© **Schema-less by default** β but supports SurrealDB schemas
## π¦ Installation
```bash
npm install fluid.db
```
Requires a running [SurrealDB server](https://surrealdb.com/docs/start).
## π οΈ Usage
```js
const FluidDB = require("fluid.db");
(async () => {
const db = new FluidDB({
url: "http://127.0.0.1:8000/rpc",
namespace: "test",
database: "test",
});
// Insert records
const alice = await db.users.push({ name: "Alice", age: 25, active: true });
const bob = await db.users.push({ name: "Bob", age: 30, active: false });
console.log(alice);
// { id: "users:xyz123", name: "Alice", age: 25, active: true }
// Fetch by ID
console.log(await db.users[alice.id]);
// Filter
console.log(await db.users.filter({ active: true }));
// Update (upsert)
await (db.users[alice.id] = { ...alice, active: false });
// Delete
await delete db.users[alice.id];
})();
```
## π Example Data in SurrealDB
After the example above, your `users` table will look like:
| id | name | age | active |
| -------------- | ----- | --- | ------ |
| `users:xyz123` | Alice | 25 | false |
| `users:abc456` | Bob | 30 | false |
## β
Use Cases
* Quick prototypes with SurrealDB
* Local tools needing a super simple ORM
* Teaching / demos of SurrealDB
* Anywhere you want object-like DB access without writing SQL
## β οΈ Notes
* By default SurrealDB is **schemaless** β you can push extra props and theyβll be stored.
* If you want strict schemas, define them in SurrealDB with `DEFINE TABLE ... SCHEMAFULL`.
## π License
MIT Β© DinoscapeProgramming