Last Updated: Aug 30, 2023
documentation for the dotCMS Content Management System

Content in dotCMS takes many forms, and can be used in many different ways depending on the type of Content.

Content includes familiar web objects such as Pages and Files, but can also include specific types of web content such as blog posts and comments, or more abstract types of content such as products, employees, and office locations. You are free to define and use any types of content appropriate for your site, and to use that content in any way you wish.

Basic Content Architecture

There are three basic levels of content architecture in dotCMS: Content Types, Content Type Fields, and individual content items (also often referred to as contentlets).

  • Each Content Type represents a specific type of content you can create and use in dotCMS (such as pages, images, blog posts, products, employees, etc.).
    • Content Types do not limit (and may not have any information at all about) where or how the individual content of that type will be displayed on your site.
  • The Content Type fields define what information you can store for items of a given Content Type, and how each piece of information is stored and validated.
    • For example, a Product Content Type might include fields for the Name, Part Number, Product Family, Description, Stock Quantity, etc.; in addition the Product Family field might be limited to a selection from a pre-defined list, and the Part Number field might be validated to ensure it is in the correct format.
  • Each individual content item represents a single piece of content (such as a specific product or an individual blog entry).
    • Each content item can be accessed and managed seperately from other items of the same content type, (including adding and editing, displaying on a page, listing using a content pull, etc).
    • Each item contains a log of its own history; different content versions can be viewed directly or compared side by side with the current version through the History tab.


Individual content items of Content Types other than Pages or Files are sometimes referred to as contentlets.

This term represents the fact that, while Pages and Files can always be accessed and displayed using the path to the Page or File, a content item of any Content Type other than a Page or File can not be accessed or displayed unless it is placed on a Page (either directly inside a Container or indirectly using a content pull).

Relation to Other Content Platforms

Content organization in dotCMS is relatively straight-forward, but it can often help to understand it more easily by relating it to other types of content organization you may be more familiar with. The following sections describe three common platforms you may be familiar with, and how dotCMS content relates to each of them.

Specialized Web Content Platforms

A number of popular platforms exist for creating and posting common web content such as blogs (e.g. Wordpress and Joomla), photos (e.g. Instagram), and videos (e.g. YouTube). Entering content in dotCMS is similar to entering content in these other platforms, as content contributors are presented with a screen that specifies certain information to enter (such as a Title, Image, and Text portion for a blog entry, or an Image file and Caption for an image).

However, where many web platforms allow you to enter only a single type of web content (such as a blog entry), dotCMS allows you to create multiple content types and allow users to enter all of these different content types within a single platform (dotCMS).

  • Each of these different types of web content is represented by a different dotCMS Content Type.
    • Thus you can create Content Types for Blog, Image, and Video.
  • Each Content Type can have different fields the user can enter as appropriate for the content type.
    • Thus, for exampe, you can create Title, Image, and Text fields for the Blog Content Type, while having only Image file and Caption fields for the Image Content Type.
  • Users can create individual content items of each different Content Type.
    • So although there is only one Blog Content Type, users can create multiple different Blog entries (Blog content items), each which has its own values for the Title, Image, and Text fields.

Note that in addition to these popular web content types (e.g. Blogs, Images, Videos, etc.), dotCMS allows you to create a Content Type to represent any kind of content you wish. This includes common types of content you may wish to display on your web site (like Products or Press Releases) or internal business information (such as Employees, Departments, and Office Locations).

Database Architecture (Tables)

If you are familiar with relational databases, it may help to think of dotCMS content like data in a database. Each Content Type can be thought of similar to a table in a database, where the fields of the Content Type represent the columns of the table and each individual content item represents a row in the table.


  • Content in dotCMS is not actually stored in separate database tables for each Content Type.
    • In fact all content (of all Content Types) is stored in a single database table, with each field of the Content Type mapped to one of the columns of the common table.
  • Conceptually, however, you can perform almost all the same operations on Content Types that you can on database tables, such as adding “columns” (in the form of fields), and adding “rows” (in the form of individual content items).

Object-Oriented Programming (Classes)

For developers, it may also be helpful to think of Content Types as similar to object-oriented programming language classes, where the fields of the Content Type represent the properties of the class, and each individual content item represents an instantiation of the class (with specific values assigned to each class property). This is helpful because Content Types inherit the fields of their Base Content Type in the same way that classes can inherit the properties of of a base class.

On this page


We Dig Feedback

Selected excerpt: