`
Search
Search
Search
Platform
Overview
Explore our fast, flexible and secure CMS.
Why Brightspot
Choose a CMS that grows with you as your business evolves.
Capabilities
Explore the features and functionalities of Brightspot CMS.
AI
AI-powered tools to boost productivity, while keeping you safe and secure.
Architecture
Complete flexibility – headless, decoupled or a hybrid of both.
Services
Learn about our migration, managed, and professional services.
Pricing
From a free trial to a custom solution, find the right fit for your business.
Solutions
By Use Case
Media & Publishing
The ultimate solution for media and publishers.
Marketing & Corporate
The cutting-edge solution made specifically for marketers.
Knowledge Management
The most customizable solution for knowledge workers.
Intranet
Driving effective communication throughout your organization.
All Use Cases
By Industry
Technology & Software
Create dynamic, customizable experiences anyone can build and everyone will love.
Media & Publishing
Award-winning, real-time solutions that drive peak engagement.
Sports & Live Events
Real-time coverage that performs under pressure and drives fan engagement.
Broadcasting
Deliver great stories, 24/7 across every channel.
All Industries
By Team
Digital Teams
Create, deliver and manage brilliant digital experiences.
Marketing Teams
Engage customers with the right message at the right time.
Editorial & Publishing Teams
Create, manage and publish content easily and efficiently.
Development Teams
Save time and costs with data modeling, APIs and debugging tools.
Resources
Resource Center
Access our library of CMS tips and know-how to move your content forward.
Case Studies
See how customers have achieved digital transformation with Brightspot.
Events
Meet our team and learn how we can help your business.
Recognition
See how analysts and users alike love Brightspot.
Integrations
Learn more about our suite of pre-built and custom integrations.
Documentation
Dive into our robust documentation to get started.
Developers
Overview
Save time and costs with robust data modeling, APIs and debugging tools.
Developer Portal
Collaborate, innovate and excel with leading Brightspot developers.
Developer Community
Join the conversation with expert Brightspot developers.
Partners
Overview
Explore our growing partner ecosystem.
Our Partner Program
Learn how to team up with Brightspot
Become a Partner
Join our program to help customers thrive.
Partner Portal
Already a partner? Welcome back.
Request Demo
Platform
Overview
Explore our fast, flexible and secure CMS.
Why Brightspot
Choose a CMS that grows with you as your business evolves.
Capabilities
Explore the features and functionalities of Brightspot CMS.
AI
AI-powered tools to boost productivity, while keeping you safe and secure.
Architecture
Complete flexibility – headless, decoupled or a hybrid of both.
Services
Learn about our migration, managed, and professional services.
Pricing
From a free trial to a custom solution, find the right fit for your business.
What's new in Brightspot
At Brightspot, we empower our customers with leading solutions that meet them where they are, ensuring success in a dynamic digital world. Explore the latest capabilities from our content platform here.
Solutions
By Use Case
Media & Publishing
The ultimate solution for media and publishers.
Marketing & Corporate
The cutting-edge solution made specifically for marketers.
Knowledge Management
The most customizable solution for knowledge workers.
Intranet
Driving effective communication throughout your organization.
All Use Cases
By Industry
Technology & Software
Create dynamic, customizable experiences anyone can build and everyone will love.
Media & Publishing
Award-winning, real-time solutions that drive peak engagement.
Sports & Live Events
Real-time coverage that performs under pressure and drives fan engagement.
Broadcasting
Deliver great stories, 24/7 across every channel.
All Industries
By Team
Digital Teams
Create, deliver and manage brilliant digital experiences.
Marketing Teams
Engage customers with the right message at the right time.
Editorial & Publishing Teams
Create, manage and publish content easily and efficiently.
Development Teams
Save time and costs with data modeling, APIs and debugging tools.
Resources
Resource Center
Access our library of CMS tips and know-how to move your content forward.
Case Studies
See how customers have achieved digital transformation with Brightspot.
Events
Meet our team and learn how we can help your business.
Recognition
See how analysts and users alike love Brightspot.
Integrations
Learn more about our suite of pre-built and custom integrations.
Documentation
Dive into our robust documentation to get started.
Developers
Overview
Save time and costs with robust data modeling, APIs and debugging tools.
Developer Portal
Collaborate, innovate and excel with leading Brightspot developers.
Developer Community
Join the conversation with expert Brightspot developers.
Partners
Overview
Explore our growing partner ecosystem.
Our Partner Program
Learn how to team up with Brightspot
Become a Partner
Join our program to help customers thrive.
Partner Portal
Already a partner? Welcome back.
Request Demo
More
Menu
Search
Brightspot CMS Developer Guide
Brightspot CMS Developer Guide
Developer guide
Developer guide
How Brightspot works
Rapid content modeling
Automatic generation of user interface
Distribute platform-independent content to consuming applications
Content modeling
Overview of content modeling
Step 1: Define the content types
Step 2: Define the properties of each content type
Step 3: Define the data type of each property
Step 4: Define the interaction requirements
Step 5: Define the data processing requirements
Creating a content type
Field types
Text field
Rich text
Object field
Date widget
Boolean field
Enum field
List fields
Set fields
StorageItem
Location
Region
Markdown editor
Embedded types
Query field
Secure secrets
Content modeling annotations
@ClearOnPlaceholderChange
@Content.Searchable
@DateTimeRangeGroups
@DynamicFieldClass
@DynamicNoteClass
@DynamicNoteMethod
@DynamicPlaceholderClass
@DynamicPlaceholderMethod
@DynamicTypeClass
@EditablePlaceholder
@HtmlNote
@Note
@Placeholder
@RichTextElement.Exclusive
@RichTextElement.Tag
@RichTextElement.Tags
@Seo.DescriptionFields
@Seo.KeywordsFields
@Seo.OpenGraphType
@Seo.TitleFields
@ToolUi.AddToTop
@ToolUi.BulkUpload
@ToolUi.Cluster
@ToolUi.ClusterDisplayOrder
@ToolUi.ClusterDisplayOrders
@ToolUi.CodeType
@ToolUi.CollectionItemProgress
@ToolUi.CollectionItemToggle
@ToolUi.CollectionItemWeight
@ToolUi.CollectionItemWeightColor
@ToolUi.CollectionItemWeightMarker
@ToolUi.ColorPicker
@ToolUi.CompatibleTypes
@ToolUi.CssClass
@ToolUi.DefaultSearchResult
@ToolUi.DefaultSortField
@ToolUi.DisplayAfter
@ToolUi.DisplayBefore
@ToolUi.DisplayFirst
@ToolUi.DisplayGlobalFilters
@ToolUi.DisplayGrid
@ToolUi.DisplayLast
@ToolUi.DropDown
@ToolUi.EmbeddedContentCreatorClass
@ToolUi.ExcludeFromGlobalSearch
@ToolUi.Expanded
@ToolUi.ExternalItemSortClass
@ToolUi.FieldDisplayOrder
@ToolUi.FieldDisplayPreview
@ToolUi.FieldDisplayType
@ToolUi.FieldSorted
@ToolUi.Filterable
@ToolUi.GlobalFilter
@ToolUi.Heading
@ToolUi.Hidden
@ToolUi.IconName
@ToolUi.InputProcessorPath
@ToolUi.InputSearcherPath
@ToolUi.LanguageTag
@ToolUi.LayoutField
@ToolUi.LayoutPlaceholder
@ToolUi.LayoutPlaceholders
@ToolUi.Main
@ToolUi.Note
@ToolUi.NoteHtml
@ToolUi.NoteRendererClass
@ToolUi.OnlyPathed
@ToolUi.Permissionable
@ToolUi.Placeholder
@ToolUi.Publishable
@ToolUi.PublishButtonText
@ToolUi.ReadOnly
@ToolUi.RichText
@ToolUi.Secret
@ToolUi.Sortable
@ToolUi.StoragePreviewProcessorPath
@ToolUi.StorageSetting
@ToolUi.SuggestedMaximum
@ToolUi.SuggestedMinimum
@ToolUi.Suggestions
@ToolUi.Tab
@ToolUi.TabDisplayOrder
@ToolUi.Unlabeled
@ToolUi.ValueGenerator
Viewing a model’s available annotations
Using Expression Language in annotations
Providing error messages
Creating custom fields
Image modeling
Image setup
Configuring storage
Choosing an image editor
Image object model
Inheritance
Modifications
Resource bundles
Creating properties files
Renaming fields
Renaming content types
Hiding content types
Hiding fields
Changing field order
Customizing MIME types
Secure secrets
Secure secrets configuration and usage
Configuring the secret service
Storing the secret service
Accessing the secret value
Database Secret Service
Configuration
AWS Secret Service
Configuration
Building a custom secret service
Implementation
Configuration
Tutorial: Creating custom form input experiences in Brightspot
Step 1: Defining the Form
Step 2: Create the ToolPage
Step 3: Rendering the Form
Step 4: Processing Form Submissions
Step 5: Create an access link to your Custom Form
Full Code
Rich text
Rich text toolbar
Defining a toolbar class
Associating a toolbar class with a rich-text field
Rich-text elements
Editing lifecycle of rich-text elements
Deploying a rich-text element
Storage of rich-text elements
Rendering rich text
Images
Focus points
Creating image sizes
Registering image sizes
Retrieving image information
Retrieving an image editing URL
Retrieving an image’s URL
Retrieving image attributes from Styleguide
Image URLs
Understanding image URLs
Troubleshooting images
Troubleshooting blurry images
Troubleshooting missing images
View system
Traditional
Model
View
View model
Headless
Model
View Model
View models
Methods
Advanced view modeling
Rendering rich text with RichTextViewBuilder
Conditional redirects
View model overlays
Direct view model overlay value
Indirect view model overlay value
Annotations
Type annotations
Field annotations
Custom field annotations
Preview System
Creating a custom Preview Type
Configuring preview types
Search engine optimization
Adding robots.txt to sites
Adding Open Graph fields
Error pages
Widgets
Dashboard widgets
Creating dashboard widgets
Configuring dashboard widgets
Content edit widgets
Creating content edit widgets
Creating content edit widgets that update
Position
Placement
Hiding
Additional configuration
Tabs
Displaying a tab
Conditionally displaying a tab
Handling update events in the content edit form
Profile tabs
Adding areas to the navigation menu
displayName—an area's label
internalName—an area's unique identifier
hierarchy—an area's position in the navigation menu
url—an area’s hyperlink
Creating areas
Conditionally displaying classes in widgets
Time Series
Using Time Series
Methods for incrementing and retrieving counters
Localization
Localizing Brightspot
Localizing widgets
Localizing content edit forms
Localizing published websites
Installing additional dictionaries
Formatting dates using view models
Customizing the search experience
Customizing search panel settings
Understanding the search panel loop
Customizing the search panel loop
Customizing search results
SearchResultField
SearchResultView
SearchResultAction
SearchResultSelectionGeneratable
SearchResultSuggester
Searching non-content objects
Visibility labels
Default visibility labels
Custom visibility labels
Visibility labels and selection fields
Permalinks
URL paths
Auto-generate permalink
Sites
Global-only settings
Site settings
Multi-site considerations
Site properties and multi-site permissions
Querying with site restrictions
Adding custom styling and scripting
Configuring custom styling and scripting in Brightspot
Delivering custom coding and styling through classes
Security and development considerations for custom styling and scripting
Sitemaps
Understanding Sitemaps
How search engines use a sitemap
Organization of sitemaps
Sitemap update frequencies
Viewing sitemap background tasks
Implementing sitemaps for custom content types
Notifications
Notifications
Overview of notifications
Notification lifecycle
Custom delivery options
Step 1: Defining a message
Step 2: Defining a delivery option
Code sample—delivering notifications to a log file
Custom subscriptions
Step 1: Declaring event context
Step 2: Declaring subscriptions
Step 3: Declaring publishers
Step 4: Detecting an event
Step 5: Invoking the publisher
Code sample—detecting and notifying about user login and logout events
Formatting notification messages
HTML formatting
External Types
Importing to Brightspot
Implementation requirements
ExternalItem implementation
ExternalItemConverter implementation
Configuring Brightspot's server
Brightspot editorial URLs
Tool URL
Application path
Security
Automatic user account creation
Limiting uploads by file type
Limiting super user access to developer features
Session timeout
Password expiration
Password change
Email notification from address
Password reset email interval
Declaring password policies
Activating a password policy
Limiting password reuse
Declaring authentication policies
Activating an authentication policy
Password reuse limit
Login attempt limit
Toggling production and development environments
Custom authentication policy example
Integrating AWS Services
Integration topology
Step 1: Configuring the host’s connection to AWS
Step 2: Testing the host’s connection
Step 3: Integration with an individual account
Step 4: Configuring the Tomcat server
Activity logs
GraphQL API
GraphQL reference topics
CDA vs. CMA: Which one should we use?
Authentication
Cross-Origin Resource Sharing
Understanding persisted queries
Sites permissions
Content Management API
Hello Content Management API
Creating and updating records in Brightspot Content Management API
Uploading files in Brightspot Content Management API
Custom Content Management API development
Content Delivery API
Content Delivery API permissions
CDA guides
Custom Content Delivery API development
Using Brightspot GraphQL Preview
Customizing field arguments in Brightspot Content Delivery API
GraphQL API tutorials
Tutorial: Programmatically creating a GraphQL endpoint for an admin team
Step 1: Create a data model and view model
Step 2: Create a Java class that will contain the endpoint configuration
Step 3: Add a URL path from which the endpoint can be accessed
Step 4: Configuring the endpoint to fetch data from the data model
Step 5: Allow an administrator to control whether or not an API key is required
Step 6: Allow an administrator to control whether or not to allow introspective queries
Result
Tutorial: Creating and expanding access for a GraphQL endpoint inside of Brightspot
Tutorial: Hello World GraphQL Content API
Accessing the GraphQL explorer
Using the GraphQL explorer
Editorial content report APIs
Content Report Data Provider
Report Storage
Report Presentation
Controlling revision access
Dari guide
Databases
SQL databases
Indexing
Tables created by Dari
Solr database
Aggregate database
Forwarding database
Transactions
Async database
AsyncDatabaseReader
AsyncDatabaseWriter
HTTP endpoint database
SourceDatabaseProvider implementation
Data modeling
Modeling
Creating a model
Object type definitions
Object state
Model constructors
Methods
Creating objects
Updating objects
Deleting objects
Field types
Text field
Rich text
Object field
Date widget
Boolean field
Enum field
List fields
Set fields
StorageItem
Location
Region
Markdown editor
Embedded types
Query field
Secure secrets
Relationships
Object references
Embedded objects
Many-to-many relationships
Indexes
Indexed fields
Indexed methods
Strategies for effective indexing
Excluding records from queries with visibility labels
Retrieving records with visibility labels
Reindexing existing objects
Persistence APIs
Save life cycle
Delete life cycle
Object labels
Data modeling annotations
@LazyLoad
@Modification.Classes
@ObjectField.AnnotationProcessorClass
@ObjectType.AnnotationProcessorClass
@Recordable.Abstract
@Recordable.BeanProperty
@Recordable.BootstrapFollowReferences
@Recordable.BootstrapPackages
@Recordable.CollectionMaximum
@Recordable.CollectionMinimum
@Recordable.Denormalized
@Recordable.DisplayName
@Recordable.Embedded
@Recordable.FieldInternalNamePrefix
@Recordable.Ignored
@Recordable.Indexed
@Recordable.InternalName
@Recordable.LabelFields
@Recordable.Maximum
@Recordable.MimeTypes
@Recordable.Minimum
@Recordable.PreviewField
@Recordable.Recalculate
@Recordable.Regex
@Recordable.Relocate
@Recordable.Required
@Recordable.SourceDatabaseClass
@Recordable.SourceDatabaseName
@Recordable.Step
@Recordable.TypeId
@Recordable.TypePostProcessorClasses
@Recordable.Types
@Recordable.TypesExclude
@Recordable.Values
@Recordable.Where
@RoutingFilter.Path
@UpdateTrackable.Names
Modifications
Modifying a class without the source
Modifying a group of classes
Accessing modification fields
Best practices
Augmentations
Substitutions
Alterations
Altering modifications
Altering interface implementations
File Storage
Creating StorageItems
Upload handling
StorageItem life cycle
Before save
After save
Customizing storage path generation
Configuring StorageItem
Setting the default StorageItem configuration
Configuring StorageItem for local storage
Configuring StorageItem for Amazon Simple Storage Service
Configuring StorageItem for Cloud Storage
Querying
Querying
Overview of querying with Dari
FROM
from method
fromType method
fromGroup method
fromAll method
fromQuery method
Predicates
Advanced predicates
Equals all condition
Not equals any condition
Paginated results
Binding variables
Binding variables of simple types
Binding collection variables
Using positional binding
Object references
Sorting
Grouping
Advanced Querying
Query reference options
referenceOnly
resolveToReferenceOnly
Spatial queries
QueryFilter
Viewing generated SQL
Reloader
Tasks
Creating a background task
Schedule tasks
Repeating tasks
Recalculation tasks
Queue processing
Queue pipeline example
Book class
BookWord class
BookAnalyzer class
BookReader class
BookWordSanitizer class
BookWordFilter class
LongestWordCalculator Class
Debugging with Dari
Contextual debugging
URL query parameters
Cache
Modifying the response format
Task Status
Build Information
Configuring build information
Viewing commit information
Code Playground
Database Bootstrap
Exporting bootstrap packages
Importing bootstrap packages
Database bulk operations
Reindexing
Copying a Solr or SQL database
Database Query
Database SQL Query
Database Schema Viewer
Database Storage Item bulk operations
Application settings
Performance Stats
Web database
Build the query
Run the query
Configuring Dari
Configuration identifiers, key prefixes, and defaults
Database configuration
General database configuration
Configuring an SQL database
Configuring aggregated databases
Configuring a Solr database
Exporting and importing between databases
Debug tools
Storage item configuration
Image editor configuration
General image editor configuration
Configuring a DIMS image editor
Configuring Brightspot for SAML
SAML configuration keys
Authentication link name
CMS login
Credential class
Default SAML configuration
Disable newly provisioned users
Email attribute field name
Entity ID
Group attribute field name
Hidden login control
Identity provider’s URL
Issuer URL
Key information required
Path to identity provider’s metadata
Deploying SAML
Sample SAML configuration
Miscellaneous Dari configuration
Signed cookies
Caching filter
Mail provider
SMS provider
Overriding configuration values
Theme guide
Theme guide
Introduction to theming
Data files
Pathing for referred data files and templates
Populating the Styleguide preview
Populating the preview with static data
Populating static text
Populating static images
Populating static video and audio
Using local media in data files
Populating the preview with mock data
hexcolor
image
name
number
paragraphs
sentences
Special keys
_dataUrl
_delegate
_hidden
_image
_include
_key
_random
_repeat
_template
_wrapper
javaPackage
pom
vars
Reusing data files
Generating data files from published content
How the view generator creates view classes
Generating Java view interfaces from data files
Templates
Handlebars Helpers
Comparison helpers
Logical helpers
Math helpers
Text helpers
Utility helpers
Custom helpers
BEM helpers
Contextual rendering
Configuring a theme
Image sizes
Defining image sizes
Defining image sizes at the theme level
Defining image sizes at the module level
Available properties
Image size display names
Grouping images in the image editor
Image format
Examples