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.
How it works
Section titled “How it works”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 atfb: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.
Per-repository GraphQL endpoints
Section titled “Per-repository GraphQL endpoints”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.
Repository configuration
Section titled “Repository configuration”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. |
Feature toggles
Section titled “Feature toggles”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). |
Create a repository
Section titled “Create a repository”Before you start: you need a role with admin.repositories permissions
to open the page.
- Go to Admin → Repositories. The Repositories table lists each repository’s ID and name.
- Click Add Config.
- In the Add New Config dialog, enter a Config Name — this becomes
the repository’s
CACHE_ROOT, so it must be unique. - Click Add. CM Box creates the configuration, provisions the storage bucket, and opens the repository editor.
- 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 or delete a repository
Section titled “Edit or delete a repository”- 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.enabledorIS_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>_idxsearch index, removes the repository from security roles, and deletes the storage bucket with all of the repository’s files — there is no undo.
Related
Section titled “Related”- 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