<?xml version="1.0" encoding="UTF-8"?><rss version="2.0">
<channel>
<description>A feed of the latest and greatest ForgeBox package entries</description>
<link>https://www.forgebox.io/</link>
<title>ForgeBox RSS Feed - Type: - Sorting:recent</title>
<copyright>Ortus Solutions, Corp (www.ortussolutions.com)</copyright>
<docs>http://www.rssboard.org/rss-specification</docs>
<generator>FeedGenerator</generator>
<lastBuildDate>Tue, 16 Jun 2026 17:37:18 GMT</lastBuildDate>
<pubDate>Tue, 16 Jun 2026 17:37:18 GMT</pubDate>
<item>
<title>Lucee Light CF Engine - v7.0.4+34</title>
<description>Lucee Light WAR engine for CommandBox servers.</description>
<link>https://www.forgebox.io/view/lucee-light</link>
<pubDate>Thu, 04 Jun 2026 09:30:13 GMT</pubDate>
<category>cf-engines</category>
<guid isPermaLink="false">https://www.forgebox.io/view/lucee-light</guid>
</item>
<item>
<title>Lucee CF Engine - v7.0.4+34</title>
<description>Lucee WAR engine for CommandBox servers.</description>
<link>https://www.forgebox.io/view/lucee</link>
<pubDate>Thu, 04 Jun 2026 09:29:45 GMT</pubDate>
<category>cf-engines</category>
<guid isPermaLink="false">https://www.forgebox.io/view/lucee</guid>
</item>
<item>
<title>BoxLang ORM - v1.6.5+30</title>
<description>ORM for BoxLang</description>
<link>https://www.forgebox.io/view/bx-orm</link>
<pubDate>Tue, 26 May 2026 15:13:18 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-orm</guid>
</item>
<item>
<title>JavaLoader - v2.6.0+5</title>
<description>A module to class load, compile and do much more with Java</description>
<link>https://www.forgebox.io/view/cbjavaloader</link>
<pubDate>Tue, 16 Jun 2026 13:45:14 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/cbjavaloader</guid>
</item>
<item>
<title>TestBox - v7.0.0+19</title>
<description>A BDD and xUnit testing framework with Mocking Goodness</description>
<link>https://www.forgebox.io/view/testbox</link>
<pubDate>Tue, 17 Mar 2026 12:43:32 GMT</pubDate>
<category>testing</category>
<guid isPermaLink="false">https://www.forgebox.io/view/testbox</guid>
</item>
<item>
<title>LogBox Logging Library - v8.1.0+34</title>
<description>LogBox is an enterprise ColdFusion logging library designed to give you flexibility and scalability.</description>
<link>https://www.forgebox.io/view/logbox</link>
<pubDate>Tue, 14 Apr 2026 20:32:44 GMT</pubDate>
<category>logging</category>
<guid isPermaLink="false">https://www.forgebox.io/view/logbox</guid>
</item>
<item>
<title>WireBox DI/AOP - v8.1.0+34</title>
<description>AOP and Dependency Injection Framework</description>
<link>https://www.forgebox.io/view/wirebox</link>
<pubDate>Tue, 14 Apr 2026 20:32:32 GMT</pubDate>
<category>di</category>
<guid isPermaLink="false">https://www.forgebox.io/view/wirebox</guid>
</item>
<item>
<title>CacheBox - v8.1.0+34</title>
<description> CacheBox is an enterprise caching engine, aggregator and API for ColdFusion applications. </description>
<link>https://www.forgebox.io/view/cachebox</link>
<pubDate>Tue, 14 Apr 2026 20:32:20 GMT</pubDate>
<category>caching</category>
<guid isPermaLink="false">https://www.forgebox.io/view/cachebox</guid>
</item>
<item>
<title>ColdBox Platform For BoxLang - v8.1.0+34</title>
<description>A conventions based HMVC development framework</description>
<link>https://www.forgebox.io/view/bx-coldbox</link>
<pubDate>Tue, 14 Apr 2026 20:32:07 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-coldbox</guid>
</item>
<item>
<title>ColdBox Platform - v8.1.0+34</title>
<description>A conventions based HMVC development framework</description>
<link>https://www.forgebox.io/view/coldbox</link>
<pubDate>Tue, 14 Apr 2026 20:31:55 GMT</pubDate>
<category>mvc</category>
<guid isPermaLink="false">https://www.forgebox.io/view/coldbox</guid>
</item>
<item>
<title>Preside - v10.30.29+0011190</title>
<description>The Preside platform by Pixl8 Interactive</description>
<link>https://www.forgebox.io/view/presidecms</link>
<pubDate>Mon, 15 Jun 2026 10:42:54 GMT</pubDate>
<category>cms</category>
<guid isPermaLink="false">https://www.forgebox.io/view/presidecms</guid>
</item>
<item>
<title>ColdBox CLI - v8.13.0+31</title>
<description>The official CLI for the ColdBox Framework</description>
<link>https://www.forgebox.io/view/coldbox-cli</link>
<pubDate>Thu, 28 May 2026 08:22:11 GMT</pubDate>
<category>commandbox-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/coldbox-cli</guid>
</item>
<item>
<title>PresideCMS Extension: Preside Data API - v3.8.2+0000372</title>
<description># Preside Data API Extension
The Data API extension provides developers with the power to rapidly develop APIs against their Preside data models. With a few simple object annotations and optional i18n resource keys, developers are able to provide full CRUD APIs to the data model with beautifully rendered API documentation.
**Note**: Version **3.0.0** requires Preside version **10.11.0** and above.
## Accessing the API
The **default** root URI of the API is `/api/data/v1/` (see _Namespaces and multiple APIs_, further below). OpenAPI v3 specification can be browsed at `/api/data/v1/docs/spec/` and HTML documentation based on the spec can be found at `/api/data/v1/docs/html/` (or `/api/data/v1/docs/swagger/`, if you prefer).
## Configuring your entities
### Object annotations
The _bare minimum_ configuration to enable an object for the API is to set `@dataApiEnabled true`:
```
/**
* @dataApiEnabled true
*
*/
component {
// ...
}
```
Additional _optional_ annotation options at the _object_ level are:
* `dataApiEntityName`: Alternative entity name to use in API urls, e.g. instead of `crm_contact`, you may wish to use `contact`.
* `dataApiCategory`: For the HTML documentation. Allows sub-groups of entities. Especially useful for large APIs.
* `dataApiQueueEnabled`: Whether or not the change queue is enabled for this object
* `dataApiQueue`: Specific queue name for this object
* `dataApiSortOrder`: Sort order for paginated results. Default is date last modified ascending.
* `dataApiSavedFilters`: Comma-separated list of saved filters to apply to all requests to this object (e.g. only return active records)
* `dataApiVerbs`: Supported REST HTTP Verbs. If not supplied, all verbs and operations are supported (i.e. GET, POST, PUT and DELETE)
* `dataApiFields`: Fields to return in GET requests (defaults to all non-excluded fields)
* `dataApiUpsertFields`: Fields to accept in POST/PUT request (defaults to `dataApiFields`)
* `dataApiExcludeFields`: Fields to exclude from GET API calls
* `dataApiUpsertExcludeFields`: Fields **not** to accept in POST/PUT requests (defaults to `dataApiExcludeFields`)
* `dataApiFilterFields`: Fields to allow as simple filters for paginated GET requests (defaults to foreign keys, boolean and enum fields)
* `dataApiAllowIdInsert`: Whether or not to allow the ID field to be set during a POST operation to create a new record
### Property annotations
Object properties support the following _optional_ annotations:
* `dataApiAlias`: An alternative name to use for the property in the API. i.e. instead of `contact_status` you may wish to just use `status` through the API.
* `dataApiRenderer`: A non-default renderer to use when returning data through the API. See custom renderers, below.
* `dataApiDerivative`: For image assets, specify the derivative to be used when rendering URLs.
* `dataApiType`: For the documentation. The data type of the property, e.g. 'string'.
* `dataApiFormat`: For the documentation. The format for the property, e.g. 'Email address'.
* `dataApiEnabled`: Whether or not this property should be included in the API
* `dataApiUpsertEnabled`: Whether or not this property should be included in the POST/PUT operations.
## Custom renderers
If you specify a non-default renderer for an object property, it will be rendered using Preside's content rendering system. For example, the following property definition specifies a `myCustomRenderer` renderer:
```
property name="my_prop" dataApiAlias="myProp" dataApiRenderer="myCustomRenderer";
```
To implement this, you will need a corresponding _viewlet_ at `renderers.content.myCustomRenderer.dataapi` **or** `renderers.content.myCustomRenderer.default` (a renderer _context_ of `dataapi` will be used and the system will fallback to the default renderer if that context is not implemented).
For example:
```
// /handlers/renderers/content/MyCustomRenderer.cfc
component {
private string function dataApi( event, rc, prc, args={} ){
var value = args.data ?: "";
return renderView( view="/renderers/content/myCustomRenderer/dataApi", args={ value=value } );
}
}
```
## Customizing documentation labels and descriptions
All of the labelling and text in the generated documentation can be found at `/i18n/dataapi.properties` and you should refer to that when customizing the default text. A bare minimum override might look like:
```
api.title=My Application's API
api.description=This is my awesome application's API and here is some general information about it.\n\
\n\
Team awesome xxx.
api.version=v2.0
api.favicon=data:image/x-icon;base64,iVBOR...
```
### Categories
If you annotate your objects with a `@dataApiCategory` property, your categories can be documented with:
```
category.my_category.name=My Category
category.my_category.description=Markdown enabled description of my category.
category.my_category.sort.order=20
```
### Object and field level customizations
The following set of `.properties` file keys can be added _per_ object in your own `dataapi.properties` files to customize the documentation per entity/field:
```
# OBJECT LEVEL:
dataapi:entity.my_entity.name=My entities
dataapi:entity.my_entity.name.singular=My entity
dataapi:entity.my_entity.description=Description of my entity (or API description for this section of the docs)
dataapi:entity.my_entity.sort.order=10
dataapi:operation.my_entity.get.description=Description for the paginated GET operation for your entity
dataapi:operation.my_entity.get.200.description=Description for the successful (200) response documentation for paginated GET requests for your entity
dataapi:operation.my_entity.get.by.id.description=Description for the GET /{recordId}/ operation for your entity
dataapi:operation.my_entity.get.by.id.200.description=Description for the successful (200) response documentation for GET /{recordId}/ requests for your entity
dataapi:operation.my_entity.get.by.id.404.description=Description for the not found (404) response documentation for GET /{recordId}/ requests for your entity
dataapi:operation.my_entity.put.description=Description for the PUT / (batch update) operation for your entity
dataapi:operation.my_entity.put.body.description=Description for the http json body for the PUT / (batch update) operation for your entity
dataapi:operation.my_entity.put.200.description=Description for the successful (200) response documentation for PUT / requests for your entity
dataapi:operation.my_entity.put.422.description=Description for the validation failed (422) response documentation for PUT / requests for your entity
dataapi:operation.my_entity.put.by.id.description=Description for the PUT /{recordid}/ (single record update) operation for your entity
dataapi:operation.my_entity.put.by.id.body.description=Description for the http json body for the PUT /{recordid}/ (single record update) operation for your entity
dataapi:operation.my_entity.put.by.id.200.description=Description for the successful (200) response documentation for PUT /{recordid}/ requests for your entity
dataapi:operation.my_entity.put.by.id.422.description=Description for the validation failed (422) response documentation for PUT /{recordid}/ requests for your entity
dataapi:operation.my_entity.put.by.id.404.description=Description for the record not found (404) response documentation for PUT /{recordid}/ requests for your entity
dataapi:operation.my_entity.post.description=Description of the POST / (batch insert) operation for your entity
dataapi:operation.my_entity.post.body.description=Description for the http json body for the POST / (batch insert) operation for your entity
dataapi:operation.my_entity.post.200.description=Description for the successful (200) response documentation for POST / requests for your entity
dataapi:operation.my_entity.post.422.description=Description for the validation failed (422) response documentation for POST / requests for your entity
dataapi:operation.my_entity.delete.description=Description of the DELETE /{recordid}/ operation for your entity
dataapi:operation.my_entity.delete.200.description=Description of the successful (200) response documentation for DELETE /{recordId}/ operations for your entity
# Field level
dataapi:operation.my_entity.get.params.fields.my_field.description=Description for *filter* field
dataapi:entity.my_entity.field.my_field.description=Description of field
```
## Further customizations using interceptors
The following interception points are used to allow you to more deeply customize the integration.
### `onOpenApiSpecGeneration`
Fired when generating OpenApi v3 specification for the API. A `spec` struct will be present in the `interceptorArgs` that you can use to augment the specification.
### `preDataApiSelectData`
Fired before selecting data through the API. Receives the following keys in the `interceptData`:
* `selectDataArgs`: Arguments that will be passed to the `selectData()` call
* `entity`: Name of the entity being operated on
### `postDataApiSelectData`
Fired after selecting data through the API. Receives the following keys in the `interceptData`:
* `selectDataArgs`: Arguments that were passed to the `selectData()` call
* `entity`: Name of the entity being operated on
* `data`: Rendered and prepared data that will be returned to the API caller
### `preDataApiInsertData`
Fires before inserting data through the API. Receives the following keys in the `interceptData`:
* `insertDataArgs`: Arguments that will be passed to the `insertData()` call
* `entity`: Name of the entity being operated on
* `record`: The data that will be inserted (struct)
### `postDataApiInsertData`
Fires after inserting data through the API. Receives the following keys in the `interceptData`:
* `insertDataArgs`: Arguments that were passed to the `insertData()` call
* `entity`: Name of the entity being operated on
* `record`: The data that will be inserted (struct)
* `newId`: Newly created record ID
### `preDataApiUpdateData`
Fires before updating data through the API. Receives the following keys in the `interceptData`:
* `updateDataArgs`: Arguments that will be passed to the `updateData()` call
* `entity`: Name of the entity being operated on
* `recordId`: ID of the record to be updated
* `data`: The data that will be inserted (struct)
### `postDataApiUpdateData`
Fires after updating data through the API. Receives the following keys in the `interceptData`:
* `updateDataArgs`: Arguments that were passed to the `updateData()` call
* `entity`: Name of the entity being operated on
* `recordId`: ID of the record to be updated
* `data`: The data that will be inserted (struct)
### `preDataApiDeleteData`
Fires before deleting data through the API. Receives the following keys in the `interceptData`:
* `deleteDataArgs`: Arguments that will be passed to the `deleteData()` call
* `entity`: Name of the entity being operated on
* `recordId`: ID of the record to be deleted
### `postDataApiDeleteData`
Fires after deleting data through the API. Receives the following keys in the `interceptData`:
* `deleteDataArgs`: Arguments that were passed to the `deleteData()` call
* `entity`: Name of the entity being operated on
* `recordId`: ID of the record to be deleted
## Data Change Queue(s)
By default, they system enables a queue feature: `settings.features.dataApiQueue`. When enabled, API users can be subscribed, through the admin UI, to listen for data changes to all, or a number, of entities in the system.
### Configuring the queue system
As of **v3.0.0**, you have the ability to configure multiple queue endpoints per API (see also, _Namespaces and multiple APIs_, below). This can be used to group entities into queues so that multiple different services can process the queues independently. The available settings per queue are:
* `pageSize`: Number of records returned with each call to queue. Default is **1**
* `atomicChanges`: Whether or not the queue should return atomic changes. If true, each item in the queue will contain only the fields that have changed. If false, default, each item in the queue will contain the latest state of the record. Default is **false**.
* `returnTotalRecords`: Whether or not to return X-Total-Records header with the total queue size when getting items from the queue (default is `true`)
#### Defining queues
Queues are defined in the Preside rest API configuration in `Config.cfc`. To add a queue definition to the default API:
```cfc
settings.rest.apis[ "/data/v1" ].dataApiQueueEnabled = true;
settings.rest.apis[ "/data/v1" ].dataApiQueues = {
default = { pageSize=100, atomicChanges=true } // the default queue
, highvolume = { pageSize=1000, atomicChanges=false, returnTotalRecords=false }
};
```
#### Per object queue settings:
Annotate your preside object CFC with `@dataApiQueueEnabled` (default is **true**) and `@dataApiQueue` (default is **default**) properties. For example:
```cfc
/**
* @dataApiQueueEnabled false
*/
```
or
```cfc
/**
* @dataApiQueue highvolume
*/
```
#### Skip a data api queue: 
To prevent data api queue to be created when you insert data into an object, you can set `skipDataApiQueue = true` as argument in the `insertData` function. For example:
```
$getPresideObject( "example_object" ).insertData(
data = { example_field_name = "example_value" }
, skipDataApiQueue = true
);
```
## Namespaces and multiple APIs
*Introduced in v2.0.0*
By default, the API is exposed at `/api/data/v1/`. However, there will be occasions when you want to expose your data in different ways for different purposes. Or, if you are writing an extension, you may want to namespace your API so that it does not clash with any existing default API implementation. You can also use this feature to host multiple versions of your API concurrently.
With just a small amount of configuration, you can use all of the Data API's functionality in a separate, namespaced instance. First, configure the endpoints in your `Config.cfc`:
```
settings.rest.apis[ "/myGroovyApi/v1" ] = {
authProvider = "dataApi"
, description = "REST API to expose data with an alternate structure"
, dataApiNamespace = "myGroovyApi"
, dataApiQueueEnabled = true
, dataApiQueues = {
default = { pageSize=100, atomicChanges=true }
}
};
settings.rest.apis[ "/myGroovyApi/v1/docs" ] = {
description = "Documentation for myGroovyApi REST API (no authentication required)"
, dataApiNamespace = "myGroovyApi"
, dataApiDocs = true
};
```
A few things to note here:
* The key within `settings.rest.apis` (e.g. `/myGroovyApi/v1`) is the base URI for the API. This will have `/api` prepended to it in the full URL.
* `dataApiNamespace` is the namespace for the alternate API, and will be used when configuring objects. This will usually be the first part of the URI, but does not need to be.
* `dataApiDocs` marks that this is the endpoint for the Swagger documentation. This whole endpoint could be omitted if you do not require the automatic document generation.
* Use `authProvider` to mark an endpoint as needing authentication. If you omit this, the resource will not require authentication. In the API Manager in Preside, you can allow users to have access to individual APIs - so a user could have access to `/api/myGroovyApi/v1` but not to the default `/api/data/v1`, if you wish.
### Annotations
You can annotate your objects using exactly the same annotations as described above, but with `:{namespace}` appended. For example:
```
/**
* @dataApiEnabled true
* @dataApiEnabled:myGroovyApi true
* @dataApiVerbs:myGroovyApi GET
*
*/
component {
property name="label" dataApiAlias:myGroovyApi="some_other_label";
}
```
This would enable this object both for the default `/data/v1` API, and for your custom `/myGroovyApi/v1` API. However, for `myGroovyApi` the object would only allow `GET` access, and the label field would be called `some_other_label` instead of `label`.
You could also use this to specify an alternate renderer for a property, e.g. `dataApiRenderer:myGroovyApi="alternateRenderer"`.
Note that namespaces do not inherit any annotations from the default API. Any annotations must be made explicitly with the `:{namespace}` suffix.
### Labelling and text
You can use all the same label and description customisations in your `/i18n/dataapi.properties` file as above; simply prefix the key name with `{namespace}.`. For example:
```
myGroovyApi.api.title=My Second API
myGroovyApi.api.description=This is an alternate API to my application
myGroovyApi.entity.my_entity.name=My alternate entity
```
Unlike annotations, i18n properties _will_ cascade up to the defaults. So if you do not make any customisations, you will see all the default text.
### Interceptors
All the same interceptors will run when actions are taken in a namespaced API. However, the interception point name will have `_{namespace}` as a suffix. Again, there is no fallback to the default interceptor, so any interceptors will need to be explicitly defined for your namespace. For example:
```
public void function preDataApiSelectData( event, interceptData ) {
// action to take for preDataApiSelectData on the default API
}
public void function preDataApiSelectData_myGroovyApi( event, interceptData ) {
// action to take for preDataApiSelectData on the myGroovyApi API
}
```
## Configuring individual user access
Provided that your APIs use the 'dataApi' auth provider (default), you will be able to manage user access to the APIs through the admin interface.
1. Navigate to: **System** &gt; **API Manager**
2. Find the API you want to manage &amp; click 'Data API authentication'
3. Click Add user
4. Enter a user name (can lookup existing users also) and configure access to individual entities, their verbs and optionally queue access</description>
<link>https://www.forgebox.io/view/preside-ext-data-api</link>
<pubDate>Mon, 15 Jun 2026 20:11:22 GMT</pubDate>
<category>preside-extensions</category>
<guid isPermaLink="false">https://www.forgebox.io/view/preside-ext-data-api</guid>
</item>
<item>
<title>ColdBox BoxLang Desktop App Template - v1.3.0+4</title>
<description>A starter template for building desktop applications with BoxLang and Electron.</description>
<link>https://www.forgebox.io/view/cbtemplate-boxlang-desktop</link>
<pubDate>Mon, 15 Jun 2026 19:48:58 GMT</pubDate>
<category>mvc</category>
<guid isPermaLink="false">https://www.forgebox.io/view/cbtemplate-boxlang-desktop</guid>
</item>
<item>
<title>Route Auditor - v2.0.1</title>
<description>A simple interceptor which captures the Coldbox event being fired and logs it to a DB</description>
<link>https://www.forgebox.io/view/route_auditor</link>
<pubDate>Mon, 15 Jun 2026 18:13:07 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/route_auditor</guid>
</item>
<item>
<title>REST HMVC Template - v8.3.0+20</title>
<description>A modular API RESTFul template</description>
<link>https://www.forgebox.io/view/cbtemplate-rest-hmvc</link>
<pubDate>Wed, 20 May 2026 14:52:09 GMT</pubDate>
<category>mvc</category>
<guid isPermaLink="false">https://www.forgebox.io/view/cbtemplate-rest-hmvc</guid>
</item>
<item>
<title>A tiered and structured starter template for ColdBox - v8.5.0+10</title>
<description>A tiered and structured starter template for ColdBox</description>
<link>https://www.forgebox.io/view/cbtemplate-tiered</link>
<pubDate>Wed, 20 May 2026 14:52:09 GMT</pubDate>
<category>mvc</category>
<guid isPermaLink="false">https://www.forgebox.io/view/cbtemplate-tiered</guid>
</item>
<item>
<title>REST APP Template - v8.3.0+19</title>
<description>This template gives you the base for building RESTFul web services with ColdBox</description>
<link>https://www.forgebox.io/view/cbtemplate-rest</link>
<pubDate>Wed, 20 May 2026 14:52:43 GMT</pubDate>
<category>mvc</category>
<guid isPermaLink="false">https://www.forgebox.io/view/cbtemplate-rest</guid>
</item>
<item>
<title>Flat ColdBox App Template - v8.4.0+37</title>
<description>
Copyright Since 2005 ColdBox Platform by Luis Majano and Ortus Solutions, Corp
www.coldbox.org |
www.ortussolutions.com
----
# ColdBox Flat Application Template
This template can be your starting ground for your modern ColdFusion (cfml) web applications. You must use [CommandBox](http://www.ortussolutions.com/products/commandbox) to track your dependencies and start embedded servers.
This template leverages ColdBox and the (ColdBox Elixir)[https://coldbox-elixir.ortusbooks.com] project for asset management and compilations. You can place all your static assets in the `resources/assets` folder and Elixir will combine, version, copy, and even babelify your code to their appropriate location in the `includes` folder.
## Quick Installation
Install the template dependencies by running the `install` command:
```bash
box install
```
This will setup all the needed dependencies for each application template. You can then start the embedded server:
```bash
box server start
```
Code to your liking and enjoy!
## Java Dependencies
If your project relies on Java third-party dependencies, you can use the included Maven `pom.xml` file in the root. You can add your dependencies there and then run the `mvn install` command to download them into the `lib` folder. The ColdBox application will automatically class load all the jars in that folder for you! You can also use the `mvn clean` command to remove all the jars.
You can find Java dependencies here: . Just grab the Maven coordinates and add them to your `pom.xml` file.
## Dockerfile
We have included a [`docker/Dockerfile`](docker/Dockerfile) so you can build docker containers from your source code. We have also added two scripts in your `box.json` so you can build the docker image and run the docker image using our [CommandBox Docker](https://hub.docker.com/r/ortussolutions/commandbox) containers.
```bash
# Build a docker **container**
run-script docker:build
# Run the container
run-script docker:run
# Go into the container's bash prompt
run-script docker:bash
```
## Docker Compose Stack
We have included a [`docker/docker-compose.yaml`](docker/docker-compose.yml) stack that can be used to run the application in a container alongside a database. We have included support for MySQL, PostgreSQL and MSSQL. We have also included the `run-script docker:stack` command you so you compose the stack up or down.
```bash
run-script docker:stack up
run-script docker:stack down
```
## VSCode Helpers
We have included two vscode helpers for you:
* `.vscode/settings.json` - Includes introspection helpers for ColdBox and TestBox
* `.vscode/tasks.json` - Tasks to assist in running a Test Bundle and a CommandBox Task
We have included two custom tasks:
* `Run CommandBox Task` - Open a CommandBox task and run it
* `Run TestBox Bundle` - Open the bundle you want to test and then run it
To run the custom tasks open the command palette and choose `Tasks: Run Build Task` or the shortcut `⇧⌘B`
## Welcome to ColdBox
ColdBox *Hierarchical* MVC is the de-facto enterprise-level [HMVC](https://en.wikipedia.org/wiki/Hierarchical_model%E2%80%93view%E2%80%93controller) framework for ColdFusion (CFML) developers. It's professionally backed, conventions-based, modular, highly extensible, and productive. Getting started with ColdBox is quick and painless. ColdBox takes the pain out of development by giving you a standardized methodology for modern ColdFusion (CFML) development with features such as:
* [Conventions instead of configuration](https://coldbox.ortusbooks.com/getting-started/conventions)
* [Modern URL routing](https://coldbox.ortusbooks.com/the-basics/routing)
* [RESTFul APIs](https://coldbox.ortusbooks.com/the-basics/event-handlers/rendering-data)
* [A hierarchical approach to MVC using ColdBox Modules](https://coldbox.ortusbooks.com/hmvc/modules)
* [Event-driven programming](https://coldbox.ortusbooks.com/digging-deeper/interceptors)
* [Async and Parallel programming constructs](https://coldbox.ortusbooks.com/digging-deeper/promises-async-programming)
* [Integration &amp; Unit Testing](https://coldbox.ortusbooks.com/testing/testing-coldbox-applications)
* [Included dependency injection](https://wirebox.ortusbooks.com)
* [Caching engine and API](https://cachebox.ortusbooks.com)
* [Logging engine](https://logbox.ortusbooks.com)
* [An extensive eco-system](https://forgebox.io)
* Much More
## Learning ColdBox
ColdBox is the defacto standard for building modern ColdFusion (CFML) applications. It has the most extensive [documentation](https://coldbox.ortusbooks.com) of all modern web application frameworks.
If you don't like reading so much, then you can try our video learning platform: [CFCasts (www.cfcasts.com)](https://www.cfcasts.com)
## ColdBox Sponsors
ColdBox is a professional open-source project and it is completely funded by the [community](https://patreon.com/ortussolutions) and [Ortus Solutions, Corp](https://www.ortussolutions.com). Ortus Patreons get many benefits like a cfcasts account, a FORGEBOX Pro account and so much more. If you are interested in becoming a sponsor, please visit our patronage page: [https://patreon.com/ortussolutions](https://patreon.com/ortussolutions)
### THE DAILY BREAD
&gt; "I am the way, and the truth, and the life; no one comes to the Father, but by me (JESUS)" Jn 14:1-12
</description>
<link>https://www.forgebox.io/view/cbtemplate-flat</link>
<pubDate>Thu, 21 May 2026 11:22:45 GMT</pubDate>
<category>mvc</category>
<guid isPermaLink="false">https://www.forgebox.io/view/cbtemplate-flat</guid>
</item>
<item>
<title>Super Simple APP Template - v8.2.0+16</title>
<description># Super Simple
The simplest of all application templates
## License
Apache License, Version 2.0.
## Important Links
Source Code
- https://github.com/coldbox-templates/supersimple
## Quick Installation
Each application templates contains a `box.json` so it can leverage [CommandBox](http://www.ortussolutions.com/products/commandbox) for its dependencies. 
Just go into each template directory and type:
```
box install
```
This will setup all the needed dependencies for each application template. You can then type:
```
box server start
```
And run the application.
---
###THE DAILY BREAD
&gt; "I am the way, and the truth, and the life; no one comes to the Father, but by me (JESUS)" Jn 14:1-12</description>
<link>https://www.forgebox.io/view/cbtemplate-supersimple</link>
<pubDate>Fri, 01 May 2026 16:22:38 GMT</pubDate>
<category>mvc</category>
<guid isPermaLink="false">https://www.forgebox.io/view/cbtemplate-supersimple</guid>
</item>
<item>
<title>Vite Based ColdBox Template - v8.3.0+17</title>
<description># Advanced Script Template
An advanced template with all the bells and whistles in script format
## License
Apache License, Version 2.0.
## Important Links
Source Code
- https://github.com/coldbox-templates/advanced-script
## Quick Installation
Each application templates contains a `box.json` so it can leverage [CommandBox](http://www.ortussolutions.com/products/commandbox) for its dependencies. 
Just go into each template directory and type:
```bash
box install
```
This will setup all the needed dependencies for each application template. You can then type:
```bash
box server start
```
And run the application.
---
### THE DAILY BREAD
&gt; "I am the way, and the truth, and the life; no one comes to the Father, but by me (JESUS)" Jn 14:1-12</description>
<link>https://www.forgebox.io/view/cbtemplate-vite</link>
<pubDate>Fri, 01 May 2026 16:22:35 GMT</pubDate>
<category>mvc</category>
<guid isPermaLink="false">https://www.forgebox.io/view/cbtemplate-vite</guid>
</item>
<item>
<title>The default starter template for a ColdBox application using BoxLang - v8.7.0+12</title>
<description>The default starter template for a ColdBox application using BoxLang</description>
<link>https://www.forgebox.io/view/cbtemplate-boxlang</link>
<pubDate>Wed, 20 May 2026 14:52:05 GMT</pubDate>
<category>mvc</category>
<guid isPermaLink="false">https://www.forgebox.io/view/cbtemplate-boxlang</guid>
</item>
<item>
<title>BoxLang Azure Key Vault Secrets Module - v1.0.0+1</title>
<description>Azure Key Vault Secrets Module for BoxLang</description>
<link>https://www.forgebox.io/view/bx-azure-secrets</link>
<pubDate>Mon, 15 Jun 2026 12:00:42 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-azure-secrets</guid>
</item>
<item>
<title>BoxLang Google Secret Manager Module - v1.0.0+1</title>
<description>Google Secret Manager Module for BoxLang</description>
<link>https://www.forgebox.io/view/bx-google-secrets</link>
<pubDate>Mon, 15 Jun 2026 11:56:37 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-google-secrets</guid>
</item>
<item>
<title>BoxLang PDF Module - v1.6.2+5</title>
<description>Enahanced PDF Module for BoxLang</description>
<link>https://www.forgebox.io/view/bx-pdf</link>
<pubDate>Sat, 14 Mar 2026 16:04:43 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-pdf</guid>
</item>
<item>
<title>ColdBox AI Tools - v1.0.0-snapshot</title>
<description>A collection of AI powered tools for ColdBox developers.</description>
<link>https://www.forgebox.io/view/cbMCP</link>
<pubDate>Sat, 13 Jun 2026 20:05:09 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/cbMCP</guid>
</item>
<item>
<title>ContentBox Installer Module - v6.3.2</title>
<description>The ContentBox installer module for new sites</description>
<link>https://www.forgebox.io/view/contentbox-installer-module</link>
<pubDate>Fri, 05 Dec 2025 22:11:28 GMT</pubDate>
<category>cms</category>
<guid isPermaLink="false">https://www.forgebox.io/view/contentbox-installer-module</guid>
</item>
<item>
<title>ContentBox Modular CMS Site - v6.3.2</title>
<description>A ColdBox site configured and deployed with ContentBox CMS</description>
<link>https://www.forgebox.io/view/contentbox-installer</link>
<pubDate>Fri, 05 Dec 2025 22:11:17 GMT</pubDate>
<category>cms</category>
<guid isPermaLink="false">https://www.forgebox.io/view/contentbox-installer</guid>
</item>
<item>
<title>ContentBox Modular CMS Installer - v6.3.2</title>
<description>A ColdBox site configured and deployed with ContentBox CMS</description>
<link>https://www.forgebox.io/view/contentbox-site</link>
<pubDate>Fri, 05 Dec 2025 22:11:07 GMT</pubDate>
<category>cms</category>
<guid isPermaLink="false">https://www.forgebox.io/view/contentbox-site</guid>
</item>
<item>
<title>ContentBox Modular CMS - Module - v6.3.2+13</title>
<description>A Modular Content Management System. This installs the module edition only (no installer)</description>
<link>https://www.forgebox.io/view/contentbox</link>
<pubDate>Fri, 05 Dec 2025 22:10:56 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/contentbox</guid>
</item>
<item>
<title>BoxLang Compat Module For CFML - v1.34.0+50</title>
<description>Compatibility module for BoxLang so it behaves like a CFML engine</description>
<link>https://www.forgebox.io/view/bx-compat-cfml</link>
<pubDate>Tue, 26 May 2026 15:30:36 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-compat-cfml</guid>
</item>
<item>
<title>BoxLang UI Compatibility Module - v1.0.4+8</title>
<description>CFML Compatibility UI components module for BoxLang</description>
<link>https://www.forgebox.io/view/bx-ui-compat</link>
<pubDate>Thu, 07 May 2026 15:02:11 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-ui-compat</guid>
</item>
<item>
<title>Boxlang UI Forms Module - v1.2.0+3</title>
<description>BoxLang HTML UI Module for Forms and Form Tags Generation</description>
<link>https://www.forgebox.io/view/bx-ui-forms</link>
<pubDate>Thu, 30 Apr 2026 12:50:44 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-ui-forms</guid>
</item>
<item>
<title>BoxLang CommandBox Engine - v1.14.0+51</title>
<description>The CommandBox Engine for BoxLang</description>
<link>https://www.forgebox.io/view/boxlang</link>
<pubDate>Wed, 03 Jun 2026 09:46:16 GMT</pubDate>
<category>cf-engines</category>
<guid isPermaLink="false">https://www.forgebox.io/view/boxlang</guid>
</item>
<item>
<title>BoxLang CommandBox Module - v7.0.11-alpha</title>
<description>CommandBox CLI for BoxLang</description>
<link>https://www.forgebox.io/view/bx-cli</link>
<pubDate>Fri, 12 Jun 2026 18:58:53 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-cli</guid>
</item>
<item>
<title>BoxLang AWS Secrets Manager Module - v1.0.0+1</title>
<description>AWS Secrets Manager Module for BoxLang</description>
<link>https://www.forgebox.io/view/bx-aws-secrets</link>
<pubDate>Fri, 12 Jun 2026 17:05:38 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-aws-secrets</guid>
</item>
<item>
<title>Boxlang Compatibility Module: SOAP Webservices - v1.0.0+1</title>
<description>Provides SOAP Webservices Compatibility Module for Boxlang+ Web Runtimes</description>
<link>https://www.forgebox.io/view/bx-compat-soap</link>
<pubDate>Thu, 30 Apr 2026 12:51:32 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-compat-soap</guid>
</item>
<item>
<title>PresideCMS Extension: Chart.js for Preside - v0.3.5+0000057</title>
<description># Chart.js for Preside
</description>
<link>https://www.forgebox.io/view/preside-ext-chart-js</link>
<pubDate>Wed, 29 Oct 2025 01:51:10 GMT</pubDate>
<category>preside-extensions</category>
<guid isPermaLink="false">https://www.forgebox.io/view/preside-ext-chart-js</guid>
</item>
<item>
<title>BoxLang MCP Server - v1.4.1+7</title>
<description>The BoxLang MCP Server module for web applications</description>
<link>https://www.forgebox.io/view/bx-mcp</link>
<pubDate>Thu, 11 Jun 2026 14:55:50 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-mcp</guid>
</item>
<item>
<title>Preside Extension: Alternate Admin Theme - v1.4.1+0000591</title>
<description>The Alternate Admin Theme extension provides a refresh to the original Preside core admin layout and styling, and also adds customisation options.</description>
<link>https://www.forgebox.io/view/preside-ext-alt-admin-theme</link>
<pubDate>Thu, 11 Jun 2026 11:10:58 GMT</pubDate>
<category>preside-extensions</category>
<guid isPermaLink="false">https://www.forgebox.io/view/preside-ext-alt-admin-theme</guid>
</item>
<item>
<title>Wheels Starter App - v1.0.0</title>
<description>Wheels Starter App</description>
<link>https://www.forgebox.io/view/wheels-starter-app</link>
<pubDate>Wed, 10 Jun 2026 04:25:19 GMT</pubDate>
<category>cfwheels-templates</category>
<guid isPermaLink="false">https://www.forgebox.io/view/wheels-starter-app</guid>
</item>
<item>
<title>Wheels CLI Commands - v4.0.3</title>
<description>Wheels.dev CLI Commands</description>
<link>https://www.forgebox.io/view/wheels-cli</link>
<pubDate>Wed, 10 Jun 2026 04:24:49 GMT</pubDate>
<category>commandbox-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/wheels-cli</guid>
</item>
<item>
<title>Wheels Core - v4.0.3</title>
<description>Wheels Framework Core Directory</description>
<link>https://www.forgebox.io/view/wheels-core</link>
<pubDate>Wed, 10 Jun 2026 04:24:22 GMT</pubDate>
<category>mvc</category>
<guid isPermaLink="false">https://www.forgebox.io/view/wheels-core</guid>
</item>
<item>
<title>Wheels Base Template - v4.0.3</title>
<description>Wheels Framework Base Template</description>
<link>https://www.forgebox.io/view/wheels-base-template</link>
<pubDate>Wed, 10 Jun 2026 04:23:52 GMT</pubDate>
<category>cfwheels-templates</category>
<guid isPermaLink="false">https://www.forgebox.io/view/wheels-base-template</guid>
</item>
<item>
<title>Adobe ColdFusion - v2025.0.09+331885</title>
<link>https://www.forgebox.io/view/adobe</link>
<pubDate>Tue, 09 Jun 2026 20:45:06 GMT</pubDate>
<category>cf-engines</category>
<guid isPermaLink="false">https://www.forgebox.io/view/adobe</guid>
</item>
<item>
<title>Lucee SSE Client - v1.0.7+0000028</title>
<description>A module to provide APIs for consuming SSE HTTP endpoints</description>
<link>https://www.forgebox.io/view/lucee-sse-client</link>
<pubDate>Tue, 09 Jun 2026 16:42:02 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/lucee-sse-client</guid>
</item>
<item>
<title>BoxLang Fluent Image Library - v1.7.0+21</title>
<description>Powerful and fluent image manipulation module for BoxLang with extensive built-in functions</description>
<link>https://www.forgebox.io/view/bx-image</link>
<pubDate>Mon, 01 Jun 2026 08:47:39 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-image</guid>
</item>
<item>
<title>cf-iplogs - v0.1.0</title>
<description>Cross-engine CFML client for the ipLogs.com IP reputation / VPN detection API with caching and offline datasets.</description>
<link>https://www.forgebox.io/view/iplogs</link>
<pubDate>Fri, 05 Jun 2026 00:42:08 GMT</pubDate>
<category>projects</category>
<guid isPermaLink="false">https://www.forgebox.io/view/iplogs</guid>
</item>
<item>
<title>PresideCMS Extension: Admin dashboards - v3.2.2+0000403</title>
<description># PresideCMS Extension: Admin Dashboards
This is an extension for PresideCMS that provides APIs and a methodolgy for creating user customizable dashboard interfaces in Preside admin.
## Installation
Install with:
```box install preside-ext-admin-dashboards```
## User stories
The following user stories describe the functionality of this extension:
* As an admin user, I want to be able to view a dashboard with multiple widgets so that I can get an overview of a particular data scenario(s)
* As an admin administrator, I want to be able to limit access to particular dashboard widgets so that I can protect sensitive data and functionality
* As an admin user, I want to be able to configure widgets and have my configuration persisted so that I can customize my view of a dashboard
## Rendering a dashboard
Admin dashboards are made up of "widgets" that a user can configure to show stats, summaries, etc. To render a dashboard, you can use the `renderAdminDashboard()` helper, providing an _arbitrary but unique_ dashboard ID that identifies a unique dashboard, an array of widget IDs and an optional column count (default 2, valid options are 1, 2, 3 or 4):
```cfc
#renderAdminDashboard( 
dashboardId = "mainAdminDashboard"
, widgets = [ "latestNews", "topStories", "yourTasks" ]
, columnCount = 3
)#
```
### Passing instance specific data
You may have a case where:
1. You have multiple instances of the same dashboard, but with different instance data
2. You have multiple instances of the same widget within your dashboard, but with different hard coded config values
For this you can use the `contextData` arg to `renderAdminDashboard` and/or individual widgets:
```cfc
// example 1
#renderAdminDashboard( 
dashboardId = "mainAdminDashboard"
, widgets = [ "latestNews", "topStories", "yourTasks" ]
, columnCount = 3
, contextData = { recordId=prc.recordId }
)#
// example 2
#renderAdminDashboard( 
dashboardId = "mainAdminDashboard"
, columnCount = 3
, widgets = [ 
{ id="stats", contextData={ object="event" }, ajax=false, configInstanceId="event" }, 
{ id="stats", contextData={ object="news" }, ajax=false, configInstanceId="news" }
]
)#
```
Notice how, in example 2, each widget is a `struct`. Widgets can either be passed as a simple string to represent the widget ID, or as a struct with the following keys:
* `id`: The widget ID
* `contextData`: Widget specific struct of data that will be passed to the widget render
* `ajax`: Whether or not to use ajax to render the widget (default true)
* `configInstanceId`: String to identify, along with the dashboard ID and user ID, a unique set of configuration options for the widget
## Creating dashboard widgets
An admin dashboard widget is created in three parts; a handler for rendering a widget and running any custom permissioning logic, an i18n properties file for labels and icons, and a preside form for providing any user editable config for the widget. 
For example, if you had a widget called `latestNews`, you would have the following files:
```
/i18n/admin/admindashboards/widget/latestNews.properties
/forms/admin/admindashboards/widget/latestNews.xml
/handlers/admin/admindashboards/widget/LatestNews.cfc
```
And they might look like this:
```properties
// /i18n/admin/admindashboards/widget/latestNews.properties
title=Latest news
description=See below for latest news articles for you to read.
iconClass=fa-newspaper orange
field.category.title=Category
```
```xml
// /forms/admin/admindashboards/widget/latestNews.xml
```
```cfc
// /handlers/admin/admindashboards/widget/LatestNews.cfc
component {
// You MUST implement a render() method with which to render
// the content
private string function render( event, rc, prc, args={} ) {
args.latestNews = getModel( "newsService" ).getLatestNews( 
category = args.config.category ?: "" // args.config is the user configured config from the config form
, featured = IsTrue( args.contextData.featured ?: "" ) // args.contextData is any data passed in renderAdminDashboard() call
);
return renderView( view="/admin/admindashboards/widgets/latestNews", args=args );
}
// An OPTIONAL permissions checking handler that returns true or false
private boolean function hasPermission( event, rc, prc, args={} ) {
return true;
}
// An OPTIONAL handler to render additional top right 'menu items' in the widget
private string function additionalMenu( event, rc, prc, args={} ) {
var addLink = event.buildAdminLink( objectName="news_item", operation="addRecord" );
return ' ';
}
}
```
## What's next
We've created this extension with what we feel is the bare minimum functionality for a first release. Obvious features that are lacking:
* Ability for a dashboard to have _optional_ widgets that users can add to a dashboard if they want
* Ability for a dashboard user to drag items around and configure them the way they like
* Ability for a dashboard user to save a dashboard configuration and share it with other users
If you're keen on helping out with ideas or code, do get in touch!
</description>
<link>https://www.forgebox.io/view/preside-ext-admin-dashboards</link>
<pubDate>Wed, 07 Jan 2026 04:49:37 GMT</pubDate>
<category>preside-extensions</category>
<guid isPermaLink="false">https://www.forgebox.io/view/preside-ext-admin-dashboards</guid>
</item>
<item>
<title>BoxLang AI - v3.3.1+14</title>
<description>AI integration for BoxLang</description>
<link>https://www.forgebox.io/view/bx-ai</link>
<pubDate>Wed, 03 Jun 2026 17:06:28 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-ai</guid>
</item>
</channel>
</rss>
