bx-compat-cfml — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited bx-compat-cfml (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.
install-bx-module bx-compat-cfml
# CommandBox
box install bx-compat-cfmlbx-compat-cfml enables near-zero-code migration of existing Adobe ColdFusion or Lucee CFML applications to BoxLang. It adjusts BoxLang's behavior to match your source engine's quirks around:
{
"modules": {
"compat-cfml": {
"settings": {
"engine": "lucee"
}
}
}
}| Value | Description |
|---|---|
"lucee" | Emulates Lucee CFML behavior |
"adobe" | Emulates Adobe ColdFusion behavior |
// Adobe CF: null is returned as empty string ""
// Lucee: null is returned as actual null value
// With engine: "adobe"
var result = queryExecute( "SELECT NULL AS val", {}, { returntype: "array" } )
result[1].val == "" // true — null-to-empty-string conversion
// With engine: "lucee" OR native BoxLang
result[1].val == null // true — null stays null// Adobe CF: stricter implicit numeric coercion
// engine: "adobe" emulates Adobe's behavior
// Numeric comparison with strings
"10" > "9" // Adobe: false (numeric compare: 10 > 9 = true)
"10" > "9" // Lucee: false (string compare: "1" < "9")// engine: "adobe" populates server scope with Adobe CF-compatible values
// engine: "lucee" populates server scope with Lucee CF-compatible values
server.ColdFusion.ProductName // "ColdFusion" (adobe) or "Lucee" (lucee)
server.ColdFusion.ProductVersion // Engine-specific version string// Adobe CF: integers parsed from JSON as Integer type
// Lucee: integers parsed as Double
// engine: "adobe"
var data = deserializeJSON( '{"count": 5}' )
isInteger( data.count ) // true
// engine: "lucee"
isDouble( data.count ) // trueinstall-bx-module bx-compat-cfml{
"modules": {
"compat-cfml": {
"settings": {
"engine": "lucee"
}
}
}
}BoxLang directly runs .cfc and .cfm files — no conversion needed. Start your application and observe which behaviors differ.
Typical remaining issues after enabling the compat module:
.cftag) that have no BoxLang equivalentOnce the app runs with compat, start converting files to native BoxLang:
file.cfc → file.bx (ColdFusion component → BoxLang class)
file.cfm → file.bxm (ColdFusion template → BoxLang template)Remove the compat module once all files are converted and all tests pass.
The compat module adds Adobe CF-compatible versions of BIFs that behave differently in native BoxLang:
isJSON() — Adobe compatibilityserializeJSON() — Preserves Adobe CF serialization quirksqueryNew() — Column type handlingstructNew("ordered") — Ordered struct behavioronSessionStart, onCFCRequest, etc.)getApplicationMetadata() — Lucee-style return formatengine — "lucee" and "adobe" have meaningfully different behaviors<cfgrid>, old forms) have no equivalentengine: "lucee" and engine: "adobe" simultaneously — choose the source engine~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.