<?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>Fri, 31 Jul 2026 20:46:53 GMT</lastBuildDate>
<pubDate>Fri, 31 Jul 2026 20:46:53 GMT</pubDate>
<item>
<title>BoxLang PDF Module - v1.6.3+6</title>
<description>Enahanced PDF Module for BoxLang</description>
<link>https://www.forgebox.io/view/bx-pdf</link>
<pubDate>Fri, 10 Jul 2026 13:35:16 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-pdf</guid>
</item>
<item>
<title>BoxLang CommandBox Module - v7.0.17-beta</title>
<description>CommandBox CLI for BoxLang</description>
<link>https://www.forgebox.io/view/bx-cli</link>
<pubDate>Fri, 31 Jul 2026 19:43:55 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-cli</guid>
</item>
<item>
<title>Unsafe Evaluate - v1.1.0+4</title>
<description>Unsafe Evaluate() function for BoxLang</description>
<link>https://www.forgebox.io/view/bx-unsafe-evaluate</link>
<pubDate>Fri, 31 Jul 2026 19:38:08 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-unsafe-evaluate</guid>
</item>
<item>
<title>BoxLang Compat Module For CFML - v1.36.0+52</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>Fri, 31 Jul 2026 18:38:22 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-compat-cfml</guid>
</item>
<item>
<title>BoxLang CommandBox Engine - v1.16.0+53</title>
<description>The CommandBox Engine for BoxLang</description>
<link>https://www.forgebox.io/view/boxlang</link>
<pubDate>Thu, 30 Jul 2026 21:33:13 GMT</pubDate>
<category>cf-engines</category>
<guid isPermaLink="false">https://www.forgebox.io/view/boxlang</guid>
</item>
<item>
<title>sitemap-spider - v1.1.0</title>
<description>A simple sitemap generator for ColdBox applications</description>
<link>https://www.forgebox.io/view/sitemap-spider</link>
<pubDate>Fri, 31 Jul 2026 00:18:32 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/sitemap-spider</guid>
</item>
<item>
<title>ColdBox Migrations Commands - v6.0.3</title>
<description>Run your ColdBox migrations from CommandBox</description>
<link>https://www.forgebox.io/view/commandbox-migrations</link>
<pubDate>Thu, 30 Jul 2026 17:34:56 GMT</pubDate>
<category>commandbox-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/commandbox-migrations</guid>
</item>
<item>
<title>Preside - v10.30.34+0011307</title>
<description>The Preside platform by Pixl8 Interactive</description>
<link>https://www.forgebox.io/view/presidecms</link>
<pubDate>Fri, 24 Jul 2026 09:58:44 GMT</pubDate>
<category>cms</category>
<guid isPermaLink="false">https://www.forgebox.io/view/presidecms</guid>
</item>
<item>
<title>PresideCMS Extension: Tiptap - v1.2.0+0000013</title>
<description>Tiptap (v3) rich-editor for Preside. Drop-in replacement for the vendored CKEditor 4, preserving Preside's content tokens, pickers and renderers.</description>
<link>https://www.forgebox.io/view/preside-ext-tiptap</link>
<pubDate>Thu, 30 Jul 2026 11:07:51 GMT</pubDate>
<category>preside-extensions</category>
<guid isPermaLink="false">https://www.forgebox.io/view/preside-ext-tiptap</guid>
</item>
<item>
<title>Preside Extension: Cloudflare Turnstile - v1.0.3+0000035</title>
<description># preside-ext-turnstile
A Preside Extension to override Preside's default reCaptcha support with Cloudflare's Turnstile
https://developers.cloudflare.com/turnstile/
</description>
<link>https://www.forgebox.io/view/preside-ext-turnstile</link>
<pubDate>Thu, 30 Jul 2026 02:13:50 GMT</pubDate>
<category>preside-extensions</category>
<guid isPermaLink="false">https://www.forgebox.io/view/preside-ext-turnstile</guid>
</item>
<item>
<title>BoxLang AI - v3.3.2+17</title>
<description>AI integration for BoxLang</description>
<link>https://www.forgebox.io/view/bx-ai</link>
<pubDate>Fri, 19 Jun 2026 07:49:32 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-ai</guid>
</item>
<item>
<title>CommandBox BoxLang CLI Tools - v1.22.0</title>
<description>CommandBox BoxLang CLI Tools</description>
<link>https://www.forgebox.io/view/commandbox-boxlang</link>
<pubDate>Wed, 29 Jul 2026 22:42:03 GMT</pubDate>
<category>commandbox-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/commandbox-boxlang</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>Boxlang Plus Licensing Module - v1.1.3+9</title>
<description>Boxlang Plus Licensing Module</description>
<link>https://www.forgebox.io/view/bx-plus</link>
<pubDate>Wed, 29 Jul 2026 21:24:23 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-plus</guid>
</item>
<item>
<title>ColdBox Validation - v4.9.0+31</title>
<description>This module provides server side validation to ColdBox applications with localization and i18n support</description>
<link>https://www.forgebox.io/view/cbvalidation</link>
<pubDate>Wed, 29 Jul 2026 21:09:08 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/cbvalidation</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>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>CFMigrations - v7.0.0</title>
<description>Keep track and run your database migrations and seeders.</description>
<link>https://www.forgebox.io/view/cfmigrations</link>
<pubDate>Wed, 29 Jul 2026 18:02:56 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/cfmigrations</guid>
</item>
<item>
<title>Preside Extension: Alternate Admin Theme - v1.5.2+0000665</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>Wed, 29 Jul 2026 14:53:46 GMT</pubDate>
<category>preside-extensions</category>
<guid isPermaLink="false">https://www.forgebox.io/view/preside-ext-alt-admin-theme</guid>
</item>
<item>
<title>PresideCMS Extension: Preside Data API - v3.8.3+0000390</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, 27 Jul 2026 13:58:49 GMT</pubDate>
<category>preside-extensions</category>
<guid isPermaLink="false">https://www.forgebox.io/view/preside-ext-data-api</guid>
</item>
<item>
<title>BoxLang FTP &amp; SFTP Module - v1.5.0+8</title>
<description>This BoxLang module provides FTP and SFTP file transfer capabilities.</description>
<link>https://www.forgebox.io/view/bx-ftp</link>
<pubDate>Sun, 01 Feb 2026 11:23:06 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-ftp</guid>
</item>
<item>
<title>errorAlerts - v2.2.0</title>
<description>Throttled error notifications for ColdBox: first-N + digest emails from a self-registering LogBox appender, with swappable notifiers.</description>
<link>https://www.forgebox.io/view/erroralerts</link>
<pubDate>Tue, 28 Jul 2026 19:16:24 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/erroralerts</guid>
</item>
<item>
<title>BoxLang Mail Module - v1.4.10+19</title>
<description>Boxlang module which adds mail funcitionality, components, and methods.</description>
<link>https://www.forgebox.io/view/bx-mail</link>
<pubDate>Mon, 27 Jul 2026 20:09:58 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-mail</guid>
</item>
<item>
<title>BoxLang LDAP - v1.5.0+8</title>
<description>A BoxLang module for LDAP authentication and user management.</description>
<link>https://www.forgebox.io/view/bx-ldap</link>
<pubDate>Wed, 29 Apr 2026 20:03:51 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-ldap</guid>
</item>
<item>
<title>SocketBox - v2.1.2</title>
<description>WebSocket Listener library</description>
<link>https://www.forgebox.io/view/socketbox</link>
<pubDate>Mon, 27 Jul 2026 17:10:38 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/socketbox</guid>
</item>
<item>
<title>BoxLang Fluent Image Library - v1.8.0+22</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>Sat, 25 Jul 2026 01:00:20 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-image</guid>
</item>
<item>
<title>avif - v1.0.1</title>
<description>CFML ColdBox module to encode, decode, and inspect AVIF images using bundled libavif binaries. Hot-swap sister module to `webp`.</description>
<link>https://www.forgebox.io/view/avif</link>
<pubDate>Fri, 24 Jul 2026 23:32:59 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/avif</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>PresideCMS Extension: Admin dashboards - v3.2.3+0000444</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>Thu, 25 Jun 2026 06:14:05 GMT</pubDate>
<category>preside-extensions</category>
<guid isPermaLink="false">https://www.forgebox.io/view/preside-ext-admin-dashboards</guid>
</item>
<item>
<title>CBStorages - v3.5.0+5</title>
<description>Provides a collection of facade storages for ColdFusion and distributed caching</description>
<link>https://www.forgebox.io/view/cbstorages</link>
<pubDate>Thu, 18 Sep 2025 16:03:46 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/cbstorages</guid>
</item>
<item>
<title>ColdBox CLI - v8.14.0+32</title>
<description>The official CLI for the ColdBox Framework</description>
<link>https://www.forgebox.io/view/coldbox-cli</link>
<pubDate>Tue, 07 Jul 2026 15:47:02 GMT</pubDate>
<category>commandbox-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/coldbox-cli</guid>
</item>
<item>
<title>ImageMagickHelpers - v1.0.0</title>
<description>Helpers for interacting with ImageMagick</description>
<link>https://www.forgebox.io/view/ImageMagickHelpers</link>
<pubDate>Thu, 23 Jul 2026 01:36:53 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/ImageMagickHelpers</guid>
</item>
<item>
<title>BoxLang ORM - v1.6.6+31</title>
<description>ORM for BoxLang</description>
<link>https://www.forgebox.io/view/bx-orm</link>
<pubDate>Wed, 22 Jul 2026 20:20:01 GMT</pubDate>
<category>boxlang-modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/bx-orm</guid>
</item>
<item>
<title>ColdBox ORM Extensions - v5.0.0+11</title>
<description>Enhances the Hibernate ORM on BoxLang + CFML Engines with tons of utilities.</description>
<link>https://www.forgebox.io/view/cborm</link>
<pubDate>Sat, 18 Jul 2026 17:12:29 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/cborm</guid>
</item>
<item>
<title>Masa CMS - v7.5.5</title>
<description>Masa CMS is an open source content management system for CFML.</description>
<link>https://www.forgebox.io/view/MasaCMS</link>
<pubDate>Tue, 21 Jul 2026 13:15:55 GMT</pubDate>
<category>cms</category>
<guid isPermaLink="false">https://www.forgebox.io/view/MasaCMS</guid>
</item>
<item>
<title>raygun4cfml - v3.0.0</title>
<description>Provides integration with the Raygun CrashReporting API</description>
<link>https://www.forgebox.io/view/raygun4cfml</link>
<pubDate>Tue, 21 Jul 2026 06:26:45 GMT</pubDate>
<category>logging</category>
<guid isPermaLink="false">https://www.forgebox.io/view/raygun4cfml</guid>
</item>
<item>
<title>cbq - v6.0.0</title>
<description>A protocol-based queueing system for ColdBox</description>
<link>https://www.forgebox.io/view/cbq</link>
<pubDate>Mon, 20 Jul 2026 19:38:32 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/cbq</guid>
</item>
<item>
<title>PresideCMS Extension: Preside JS Modern - v1.0.4+0000016</title>
<description># Preside JS Modern
A Preside CMS extension that replaces legacy jQuery and Bootstrap JavaScript with modern, lightweight alternatives while maintaining full API compatibility.
## Overview
Preside's admin interface relies on jQuery 2.x and Bootstrap 3.x. This extension provides drop-in replacements using Preside's Sticker asset management system:
| Legacy Library | Replacement | Description |
|----------------|-------------|-------------|
| jQuery 2.2.5 | **JQNext** | jQuery 2.x API compatible, modern ES6+ internals |
| Bootstrap 3 JS | **SandalJS** | Bootstrap 3 API compatible, powered by JQNext |
## How It Works
Preside uses Sticker for asset management where each asset has a unique ID. This extension registers assets using the **same IDs** as core Preside:
- `/js/admin/lib/jquery/` → JQNext (replaces jQuery)
- `/js/admin/lib/bootstrap/` → SandalJS (replaces Bootstrap JS)
When loaded, Sticker's override mechanism ensures the modern libraries are used throughout the admin interface. All existing Preside JavaScript continues to work without modification.
## Benefits
### Smaller Bundle Size
Both libraries leverage native browser APIs, resulting in significantly smaller file sizes.
### Modern Browser APIs
- **Web Animation API** - Smooth 60fps animations
- **Fetch API** - Modern AJAX with Promises
- **WeakMap** - Memory-efficient data storage
- **Intersection Observer** - Efficient scroll-based features
### Full Compatibility
- jQuery 2.x API - All methods, selectors, and patterns work unchanged
- jQuery UI 1.11.x - Full widget factory support
- Bootstrap 3 components - Modal, Dropdown, Tooltip, Collapse, etc.
- Preside-specific - `window.presideJQuery` automatically set
### Future-Proof
No legacy IE polyfills, ES6+ classes, native Promises, tree-shakeable modules.
## Modern + Legacy: Best of Both Worlds
JQNext enables Preside developers to gradually adopt modern JavaScript patterns while maintaining full compatibility with existing jQuery-based code. This means you can:
**Mix Modern and Legacy Patterns**
```javascript
// Legacy jQuery patterns continue to work
$('.widget').on('click', function() {
$(this).fadeIn();
});
// Modern patterns work alongside
$('.widget').on('click', async function() {
const response = await fetch('/api/data');
const data = await response.json();
$(this).html(data.content);
});
```
**Use Native Promises with jQuery AJAX**
```javascript
// JQNext's $.ajax() returns a native Promise-compatible object
const data = await $.getJSON('/api/endpoint');
// Or use Fetch directly alongside jQuery DOM manipulation
const response = await fetch('/api/endpoint');
$('.container').html(await response.text());
```
**Leverage Modern APIs in Existing Code**
```javascript
// JQNext uses WeakMap internally, preventing memory leaks in long-running SPAs
$('.dynamic-content').data('instance', complexObject);
// No need to manually clean up - garbage collected automatically
// Animation uses Web Animation API for better performance
$('.element').animate({ opacity: 0.5 }, 300);
// Runs on compositor thread, won't block main thread
```
**Incremental Migration Path**
- Start with this extension as a drop-in replacement
- Write new code using modern JavaScript patterns
- Existing Preside admin customisations continue to work
- Gradually refactor legacy code as time permits
## Installation
```bash
box install preside-ext-jsmodern
```
## Requirements
- Preside CMS 10.x or later
- Modern browsers (Chrome 60+, Firefox 55+, Safari 12+, Edge 79+)
## Included Libraries
### JQNext
Full jQuery 2.x API compatibility:
- Selectors including `:visible`, `:hidden`, `:eq(n)`, etc.
- DOM traversal and manipulation
- Events with delegation and namespacing
- Effects: `fadeIn()`, `slideUp()`, `animate()`, etc.
- AJAX: `$.ajax()`, `$.get()`, `$.post()`
- Utilities: `$.extend()`, `$.Deferred()`, etc.
- jQuery UI widget factory support
### SandalJS
Bootstrap 3 JavaScript components:
- Modal, Dropdown, Tooltip, Popover
- Tab, Collapse, Alert, Button
- Carousel, Scrollspy, Affix
- Full data-attribute API support
## Browser Support
Modern browsers with ES6+ support. Legacy IE is intentionally not supported.
## License
MIT
## Credits
- **JQNext** by Pixl8 Group Limited
https://github.com/pixl8/JQNext
- **SandalJS** by Pixl8 Group Limited
https://github.com/pixl8/SandalJS
- Built for [Preside CMS](https://www.preside.org/)
</description>
<link>https://www.forgebox.io/view/preside-ext-jsmodern</link>
<pubDate>Mon, 20 Jul 2026 11:30:19 GMT</pubDate>
<category>preside-extensions</category>
<guid isPermaLink="false">https://www.forgebox.io/view/preside-ext-jsmodern</guid>
</item>
<item>
<title>AntiSamy - v2.4.0+4</title>
<description>OWASP AntiSamy Project that provides XSS cleanup operations to ColdBox applications</description>
<link>https://www.forgebox.io/view/cbantisamy</link>
<pubDate>Fri, 17 Jul 2026 19:42:25 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/cbantisamy</guid>
</item>
<item>
<title>PresideCMS Extension: Socket.IO For Preside - v7.0.0+0000074</title>
<description># Socket.IO For Preside
Supply a helpful README here.</description>
<link>https://www.forgebox.io/view/preside-ext-socket-io</link>
<pubDate>Fri, 17 Jul 2026 16:18:30 GMT</pubDate>
<category>preside-extensions</category>
<guid isPermaLink="false">https://www.forgebox.io/view/preside-ext-socket-io</guid>
</item>
<item>
<title>schema-org - v1.1.0</title>
<description>A ColdBox module for building structured JSON-LD data using Schema.org conventions</description>
<link>https://www.forgebox.io/view/schema-org</link>
<pubDate>Fri, 17 Jul 2026 00:38:00 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/schema-org</guid>
</item>
<item>
<title>mixr - v3.0.1</title>
<description>ColdBox asset helper for Vite, Laravel Mix, ColdBox Elixir, and custom manifest bundlers</description>
<link>https://www.forgebox.io/view/mixr</link>
<pubDate>Wed, 15 Jul 2026 23:27:19 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/mixr</guid>
</item>
<item>
<title>CFConfig Services - v2.7.12</title>
<description>A library to read/write/store CF engine configs. This project is just the service layer, not the CLI component.</description>
<link>https://www.forgebox.io/view/cfconfig-services</link>
<pubDate>Wed, 15 Jul 2026 22:22:10 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/cfconfig-services</guid>
</item>
<item>
<title>Mollie CFML - v0.6.2</title>
<description>Mollie CFML is a CFML library for interacting with the Mollie API.</description>
<link>https://www.forgebox.io/view/molliecfml</link>
<pubDate>Wed, 15 Jul 2026 13:59:17 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/molliecfml</guid>
</item>
<item>
<title>Adobe ColdFusion - v2025.0.11+331909</title>
<link>https://www.forgebox.io/view/adobe</link>
<pubDate>Wed, 15 Jul 2026 01:01:27 GMT</pubDate>
<category>cf-engines</category>
<guid isPermaLink="false">https://www.forgebox.io/view/adobe</guid>
</item>
<item>
<title>OriginGuard - v1.0.0</title>
<description>Header-based cross-origin (CSRF) protection for ColdBox apps using the browser's Sec-Fetch-Site and Origin headers. No tokens, no sessions.</description>
<link>https://www.forgebox.io/view/originguard</link>
<pubDate>Tue, 14 Jul 2026 23:58:29 GMT</pubDate>
<category>modules</category>
<guid isPermaLink="false">https://www.forgebox.io/view/originguard</guid>
</item>
</channel>
</rss>
