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:
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:
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.