boxlang-docbox — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited boxlang-docbox (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
DocBox automatically parses your BoxLang or CFML source code and generates browsable API documentation in multiple output formats. It reads JavaDoc-style /** ... */ comments, class/property/function metadata, and inheritance relationships.
Published docs: https://docbox.ortusbooks.com
# CommandBox web runtimes
box install bx-docbox
# BoxLang OS runtime
install-bx-module bx-docboxbox install commandbox-docbox --saveDev# Install via CommandBox into your project
box install docbox --saveDevAdd a mapping if DocBox is not in the app root:
// Application.bx / Application.cfc
this.mappings[ "/docbox" ] = expandPath( "./libraries/docbox" );The boxlang module:docbox command is the fastest way to generate documentation:
# Minimal usage
boxlang module:docbox --source=/path/to/code --mapping=myapp --output-dir=/docs
# With title and excludes
boxlang module:docbox --source=/src \
--mapping=myapp \
--output-dir=/docs \
--project-title="My API" \
--excludes="(tests|build)"
# Use the frames (traditional three-panel) theme
boxlang module:docbox --source=/src --mapping=myapp \
--output-dir=/docs \
--theme=frames
# Multiple source mappings
boxlang module:docbox --mappings:models=/app/models \
--mappings:handlers=/app/handlers \
--output-dir=/docs
# Show all available options
boxlang module:docbox --helpnew docbox.DocBox()
.addStrategy( "HTML", {
projectTitle : "My API Documentation",
outputDir : expandPath( "./docs" ),
theme : "default" // or "frames"
} )
.generate(
source = expandPath( "/app" ),
mapping = "app",
excludes = "(tests|build)"
)new docbox.DocBox()
.addStrategy( "HTML", {
projectTitle : "My API",
outputDir : expandPath( "/docs/html" ),
theme : "default"
} )
.addStrategy( "JSON", {
projectTitle : "My API",
outputDir : expandPath( "/docs/json" )
} )
.addStrategy( "XMI", {
outputFile : expandPath( "/docs/diagram.uml" )
} )
.generate(
source = expandPath( "/app" ),
mapping = "app",
excludes = "(tests|specs|build)"
)new docbox.DocBox()
.addStrategy( "HTML", {
projectTitle : "My API",
outputDir : expandPath( "/docs" )
} )
.generate(
source = [
{ dir: expandPath( "/app/models" ), mapping: "app.models" },
{ dir: expandPath( "/app/handlers" ), mapping: "app.handlers" },
{ dir: expandPath( "/plugins" ), mapping: "plugins" }
],
excludes = "(tests|specs)"
)Generates a browsable SPA or frameset HTML site.
| Property | Required | Description |
|---|---|---|
outputDir | Yes | Absolute path for output |
projectTitle | Yes | Displayed in the page title |
projectDescription | No | Sub-title / description text |
theme | No | "default" (SPA) or "frames" (frameset). Default: "default" |
Default theme (SPA): Alpine.js routing, real-time search, method tabs (All/Public/Private), dark mode toggle, Bootstrap 5.
Frames theme (traditional): Three-panel frameset, left sidebar package navigation, dark mode, Bootstrap 5.
// Modern SPA (default)
.addStrategy( "HTML", {
projectTitle : "My API",
outputDir : expandPath( "/docs" ),
theme : "default"
} )
// Traditional frameset
.addStrategy( "HTML", {
projectTitle : "My API",
outputDir : expandPath( "/docs" ),
theme : "frames"
} )Generates machine-readable JSON files for tooling and CI integration:
| Property | Required | Description |
|---|---|---|
outputDir | Yes | Absolute path for output |
projectTitle | No | Used in overview-summary.json |
.addStrategy( "JSON", {
projectTitle : "My API",
outputDir : expandPath( "/docs/json" )
} )Generates an XMI file for use with UML diagram tools:
| Property | Required | Description |
|---|---|---|
outputFile | Yes | Absolute path to the output .uml / .xmi file |
.addStrategy( "XMI", {
outputFile : expandPath( "/docs/diagram.uml" )
} )Generates CommandBox-compatible command documentation:
.addStrategy( "CommandBox", {
outputDir : expandPath( "/commandbox-docs" )
} )The excludes parameter is a regular expression evaluated against each class name and path. Matching classes are skipped.
// Skip tests and build output
excludes = "(tests|specs|build)"
// Skip specific packages
excludes = "(com\.example\.internal|legacy)"
// Skip multiple patterns
excludes = "(tests|mocks|stubs|helpers)"Extend AbstractTemplateStrategy (which implements IStrategy) to create your own output format:
/**
* Markdown documentation strategy for DocBox.
*/
component extends="docbox.strategy.AbstractTemplateStrategy" {
/**
* @param metadata Query with columns: package, name, metadata, type, extends, implements
*/
IStrategy function run( required query metadata ) {
var outputDir = variables.properties.outputDir
ensureDirectory( outputDir )
for ( var row in arguments.metadata ) {
var mdContent = buildMarkdown( row.metadata )
writeTemplate(
path = outputDir & "/" & row.name & ".md",
template = mdContent
)
}
return this
}
private string function buildMarkdown( required struct meta ) {
return "# #meta.name#" & char( 10 ) & meta.hint
}
}Register and use it:
new docbox.DocBox()
.addStrategy( "docbox.strategy.MarkdownStrategy", {
outputDir : expandPath( "/docs/markdown" )
} )
.generate( source = expandPath( "/app" ), mapping = "app" )Specifying the full class path or a single constructor strategy still works:
// Full class path
variables.docbox = new docbox.DocBox(
strategy = "docbox.strategy.uml2tools.XMIStrategy",
properties = { outputFile : expandPath( "/docs/diagram.uml" ) }
)
// Or short alias on addStrategy
docbox.addStrategy( "docbox.strategy.api.HTMLAPIStrategy", { ... } )- name: Generate API docs
run: |
boxlang module:docbox \
--source=${{ github.workspace }}/src \
--mapping=myapp \
--output-dir=${{ github.workspace }}/docs \
--project-title="My API" \
--excludes="(tests|build)"
- name: Upload docs artifact
uses: actions/upload-artifact@v4
with:
name: api-docs
path: docs/box install bx-docbox or install-bx-module bx-docbox/** ... */ doc comments (see code-documenter skill)@doc.type added for array/struct/any return and argument typesexcludes regex covers tests, build output, and internal packagesoutputDir is an absolute path (use expandPath())"default" for SPA or "frames" for traditional three-panel layoutDocBox instance for a single-pass multi-format run~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.