Browse all documentation

Editorial workflows

Choose the task guide for duplication, bulk and trash actions, document locks, preferences, drafts, versions, and scheduling.

Start with the authoring task you need:

Task Guide
Find, filter, sort, and select work Browse and organize content
Reopen a useful list workspace Saved views, folders, and hierarchy
Use the schema-driven form Create and edit documents
Change many records or recover one Bulk actions and trash
Coordinate concurrent editors Document locks
Publish, restore, or schedule Drafts and versions
Translate content Localization
Preview unsaved changes Live preview

Duplicate a document

Duplicate runs a create lifecycle from an authorized source snapshot and accepts create-style overrides:

ts
const copy = await client.duplicate('posts', original.id, {
  title: `${original.title} (copy)`,
  slug: 'hello-ridu-copy'
});

Ridu checks source read access, redacts denied fields, validates the new input, applies create access and hooks, assigns a new ID/timestamps, and writes in one transaction. Unique values usually need an override. Localized documents retain their locale data according to the duplicate contract; use the dedicated copy-locale operation to translate one existing document in place.

Run atomic bulk actions

Bulk edit, publish, unpublish, delete, trash restore, and permanent delete accept a bounded reviewed selection and commit atomically. Follow Bulk actions and trash for admin steps, SDK examples, the 100-document limit, and rollback behavior.

Enable trash

Set Trash: true on a collection when normal deletion should be recoverable. With ridu dev running, saving that change regenerates contracts and safely prepares the local development store; create the reviewed migration before deployment. Bulk actions and trash covers the active/trash workspaces, restore behavior, and the difference between soft and permanent deletion.

Permanently delete

Permanent deletion and Empty trash are destructive, bounded operations. Read Permanently delete content before using them with uploads, references, or retained version history.

Coordinate editors with document locks

Enable expiring authoring leases with LockDocuments: true. Document locks explains refresh, read-only behavior, separately authorized takeover, SDK integration, and why _revision remains the final write fence.

Persist author preferences

Authenticated users have namespaced JSON preferences for saved list views, columns, navigation state, locale choice, and application/plugin UI:

ts
await client.setPreference('posts:list:default', {
  columns: ['title', 'status', 'updatedAt'],
  sort: ['-updatedAt']
});

const view = await client.preference('posts:list:default');
await client.deletePreference('posts:list:default');

Keys are 1–200 characters and use lowercase letters, numbers, :, ., _, or -. Preference ownership includes the exact auth collection as well as user ID, so identical document IDs in two auth collections cannot share state accidentally. resetPreferences removes every preference for the current identity.

Preferences are convenience state, never authorization. A saved filter or hidden column cannot expand the current user’s capabilities.

Ask what the actor can do

Use collection/global capability endpoints to enable an action before the user clicks it, and resolveFilteredSelection to turn the current authorized filter into a bounded bulk target set. Capability responses contain booleans and non-secret presentation information; they never serialize access callbacks or filtered predicates.

Always handle a denied operation anyway. State or access can change between capability evaluation and mutation, and the server is the authority.

For revision history, drafts, publishing, restore, autosave, and scheduling, continue with Drafts and versions. See The Ridu admin for the full authoring surface and Access control for the rule matrix.