Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Storage Options

rudis-cms supports multiple storage backends for different content types.

R2 (Object Storage)

Cloudflare R2 for binary files like images.

storage:
  type: r2
  bucket: my-bucket
  prefix: images/posts
OptionRequiredDescription
bucketYesR2 bucket name
prefixNoKey prefix for objects

Objects are stored with content-addressed keys based on their hash, ensuring deduplication.

KV (Key-Value)

Cloudflare KV for text content like compiled markdown.

storage:
  type: kv
  namespace: content-namespace-id
OptionRequiredDescription
namespaceYesKV namespace ID

Inline

Store content directly in the database.

storage:
  type: inline

Best for small content that doesn’t need separate storage.

Asset

For static assets served directly.

storage:
  type: asset
  prefix: static

Storage Pointer Format

In the database, storage references are stored as JSON with pointer information:

{
  "hash": "abc123...",
  "pointer": "r2://bucket/prefix/key",
  "content_type": "image/png",
  "size": 12345
}

The pointer format indicates the storage type:

  • r2://bucket/key - R2 object
  • kv://namespace/key - KV entry
  • asset://path - Asset file

Deduplication

rudis-cms uses content hashing (BLAKE3) to deduplicate uploads:

  1. Before upload, the file hash is computed
  2. If an object with the same hash exists, upload is skipped
  3. Progress shows ⬆️ for new uploads and ⏭️ for skipped

Use the -f / --force flag to force re-upload of all objects.