dotCMS provides multiple different ways to develop code and extend your sites. It is helpful to understand the different ways you can code in and extend dotCMS when planning your site development.
Client-Side Web Development
Server-Side Web Development: Velocity
dotCMS natively supports the Apache Velocity language, which is a server-side coding language that is easy to learn and use, with a simple syntax, but also easily extended with Java plugins. dotCMS both provides standard Apache Velocity classes (called Viewtools), and enables you to easily pull, manipulate, and display dotCMS content using Velocity.
External Application Development (Headless/Content-as-a-Service/CaaS): REST API
dotCMS provides a large number of REST API Endpoints which can be used to create, modify, and access dotCMS objects and content.
Plugin Development: Java
You may create both static and dynamic OSGI plugins to extend dotCMS functionality. Plugins are coded in Java. Dynamic plugins can be loaded and unloaded without restarting your dotCMS server. Static plugins may not be dynamically loaded, but can be used to perform some types of changes that can not be performed with dynamic plugins (such as overriding built-in dotCMS classes).
Combining Development Methods
For more information on each of these development methods, please see the appropriate documentation section.