Github|...

Mutations

Create, update and delete. Writes land locally first, then sync. Your UI never waits on the network.

Mutating data in Sp00ky is performant and secure. Changes are instantly reflected in your local UI (optimistic updates) and synchronized with the server.

Creating Records

To create a new record, use the db.create method. You need to specify the record ID (or let Sp00ky generate one) and the data.

import { RecordId, Uuid } from 'surrealdb';

// Generate a unique ID
const genId = Uuid.v4().toString().replace(/-/g, '');
const threadId = \`thread:\${genId}\`;

// Create the record. `db.create` takes a fully-qualified record id
// ("thread:abc...") plus a typed payload. There's no separate table
// argument. Pass record-typed fields as `RecordId` instances so the
// SurrealDB SDK encodes them correctly.
await db.create(threadId, {
  title: 'My New Thread',
  active: true,
  author: new RecordId('user', currentUserId),
});
Warning

Ensure you adhere to the PERMISSIONS defined in your schema. If a user does not have permission to create a record, the operation will fail.

Updating Records

Use db.update() to update existing records. This performs a partial update (merge) by default.

// Partial update
await db.update('thread', 'thread:123', {
  title: 'Updated Title'
});

// Update with debouncing (useful for real-time typing)
await db.update('thread', 'thread:123', {
  content: 'Updated content...'
}, {
  debounced: {
    key: 'recordId_x_fields',
    delay: 500
  }
});

Deleting Records

To delete a record, call db.delete with the table name and record ID.

await db.delete('thread', 'thread:123');