Properties in BCMS
In BCMS, Properties (also known as inputs) are the smallest building blocks used to define content structure. They are combined in Groups, Widgets, and Templates to define flexible and structured content types.
Each property type represents a specific kind of input field - like text, number, image, or relationship to other content.
You can configure each property as:
Single or Array: One or many values.
Required or Optional: Whether editors must fill it in to save an entry.
Basic Property Types
String
A basic text input that accepts any character.
Appears as a single-line text field.
Good for titles, slugs, or short descriptions.
{ "title": "Hello World" }
Options:
Array: Yes
Required: Optional
Rich Text
A content editor with formatting: headings, bold, italic, links, lists, etc.
Good for content bodies that allow formatting
{ "body": [ { "type": "paragraph", "value": "This is a paragraph." } ] }
Options:
Array: Yes
Required: Optional
You can pass it to BCMSContentManager
like this:
<BCMSContentManager
items={myRichTextInput.nodes}
clientConfig={bcms.getConfig()}
/>
and BCMSContentManager will automatically resolve lists, paragraphs etc, into HTML.
Number
Accepts any numeric value, including decimals.
Appears as a number input field.
Useful for prices, rankings, or metrics.
{ "price": 19.99 }
Options:
Array: Yes
Required: Optional
Date
Date-time picker that returns a timestamp (in milliseconds).
Good for scheduling events, publishing content, or tracking deadlines.
{ "publishedAt": 1712926400000 }
Options:
Array: Yes
Required: Optional
Boolean
A simple toggle input: true
or false
.
Appears as a switch in the editor.
Ideal for flags like “featured,” “published,” or “visible.”
{ "featured": true }
Options:
Array: Yes
Required: Optional
Enumeration
Predefined list of selectable options shown as a dropdown.
Helps enforce consistency (e.g. category: Blog, News, Guide).
You define the choices when setting up the property.
{ "category": "Blog" }
Options:
Array: Yes
Required: Optional
Relational Property Types
Entry Pointer
Lets editors select one or more entries from another template.
Often used for building relationships between content.
For example: “Recommended Articles” → list of entries from the Blog template.
{ "relatedPosts": [ "entry-id-1", "entry-id-2" ] }
Options:
Array: Yes
Required: Optional
Group Pointer
Lets you embed a group of properties inside the current template/widget.
Reuses custom-defined input structures.
Example: A “Testimonial” group with
name
,quote
, andavatar
.
{ "testimonials": [ { "name": "Jane", "quote": "Great service!" } ] }
Options:
Array: Yes
Required: Optional
Learn more about working with Groups.
Media
File picker that connects to the Media Library.
Allows selecting images, videos, or files.
Used often in hero sections, product images, etc.
{ "image": { "_id": "media-id", "name": "hero.jpg" } }
Options:
Array: Yes
Required: Optional
Learn more about working with Media.
Visual and Coming properties
Color picker (coming soon)
Will allow selecting color values in HEX or RGB.
Tags (Coming Soon)
Planned support for assigning free-form labels or keywords to entries.
Best practices
Use arrays when multiple values make sense, such as a list of features or image gallery.
Keep required fields minimal, so content editors aren’t blocked.
Use Groups for repeatable structures, and Widgets for reusable layouts across templates.
Example use in template
Let’s say you have a Blog Post template with these properties:
title
(There by default, string)slug
(There by default, string)publishedAt
(Date)author
(Group Pointer)coverImage
(Media)relatedPosts
(Entry Pointer, array)
This structure allows content editors to create rich blog posts while maintaining consistency across entries.