Skip to content

Content repositories

A repository is CM Box’s unit of multi-tenancy: an isolated content space with its own content types, taxonomies, security lists, storage bucket, search index, and GraphQL endpoint. One CM Box instance can host many repositories — for example, one per site, department, or brand.

Every repository is a configuration document identified by its CACHE_ROOT — the repository’s unique name and namespace. The CACHE_ROOT drives isolation throughout the system:

  • Redis keys — every content item is stored under the prefix <CACHE_ROOT>:<item_id>; the repository config itself lives at fb:middleware:config:<id>.
  • Search — each repository gets its own search index, named <CACHE_ROOT>_idx, built from the fields of its content types.
  • Storage — each repository gets its own bucket (or container) in the configured storage backend, created automatically when the repository is created and recorded as storage.bucketName. Deleting the repository deletes the bucket, and the delete is blocked if the bucket cannot be removed.
  • GraphQL — the GraphQL server generates a schema per repository from its types and mounts a separate endpoint per repository.

Clients query a repository’s GraphQL API through the app at:

POST /api/graphql/<CACHE_ROOT>

Note the /api prefix — the app proxies this route to the internal GraphQL service, which serves each repository at /graphql/:repo. Saving a repository configuration reloads its GraphQL schema automatically; you can also trigger a reload manually with the Reload GraphQL button in the repository list. If one repository’s configuration is invalid, only that repository’s endpoint becomes unavailable — the others keep serving. See GraphQL for the query API itself.

The core fields of a repository configuration:

Field Purpose
CACHE_ROOT Unique repository name; used as the Redis key prefix, index name, bucket name component, and GraphQL endpoint path.
TYPES Comma-separated list of content types enabled in the repository. The default types File, Image, Upload, Video, and Folder are always included.
TAXONOMIES The taxonomies available in the repository, each with per-type “required” settings.
SECURITY viewers, contributors, and maintainers lists of roles/users. The admin role is always a maintainer.
IS_PUBLIC Whether published content in the repository is accessible without authentication.
ENABLE_GRAPHQL Whether the repository’s GraphQL endpoint is enabled.
FEATURES Repository feature toggles (see below).
conversions Which renditions are generated per media class (image thumbnail/small/medium/large; video transcode, poster, thumbnails, storyboard, VTT; document preview/thumbnail; text extraction). All are enabled by default.
workflow Workflow settings: enabled, defaultWorkflow, availableWorkflows, autoPackageRules, autoMergeOnCompletion, autoPublishOnMerge (see Webhooks and workflow).
scheduledTasks autoArchiveRules and autoPublishRules executed by the scheduled queue workers.
CACHE_INDEX_FIELDS Custom search-weight overrides (name/weight pairs) for searchable type fields.
SYNONYMS Named synonym groups applied to the repository’s search index.

The Features section of the repository editor exposes these switches:

Feature Description
Folders Enable folder-based organization for content items in this repository. Defaults to enabled for repositories created before the toggle existed.
Packaged Updates Enables packaging together arbitrary sets of items and/or sites to track what has been updated. Enabling it reveals a package-settings section.
Oracle Eloqua Integration (BETA) Integrates CM Box with Eloqua to upload emails and landing pages directly from the site builder. Enabling it reveals an Eloqua settings section (see Integrations).

Before you start: you need a role with admin.repositories permissions to open the page.

  1. Go to Admin → Repositories. The Repositories table lists each repository’s ID and name.
  2. Click Add Config.
  3. In the Add New Config dialog, enter a Config Name — this becomes the repository’s CACHE_ROOT, so it must be unique.
  4. Click Add. CM Box creates the configuration, provisions the storage bucket, and opens the repository editor.
  5. Work through the editor’s sections — Features, Security, Asset Types, Asset Taxonomies, Conversion Settings, Search Index Fields Configuration, and AI — then click save. Types and taxonomies themselves are managed separately; see Content modeling.

To verify: the new repository appears in the Repositories table, and (with ENABLE_GRAPHQL on) its endpoint responds at /api/graphql/<CACHE_ROOT>.

  • Edit — click the repository’s ID or its Edit Config button. The editor opens in a form-based view; click Source View to edit the raw configuration JSON directly (useful for fields the form does not expose, such as ai.enabled or IS_PUBLIC), and Standard View to switch back.
  • Reload GraphQL — rebuilds the repository’s GraphQL schema without a full save.
  • Delete — click the delete button on the repository’s row and confirm. This removes the configuration, drops the <CACHE_ROOT>_idx search index, removes the repository from security roles, and deletes the storage bucket with all of the repository’s files — there is no undo.
  • Content modeling — defining the types and taxonomies a repository uses
  • Security — roles referenced by repository security lists
  • Storage backends — where repository buckets are created
  • GraphQL — querying a repository’s endpoint