Articles

 


 


Making a Music Video Using AI Tools

Image about Making a Music Video Using AI Tools
James Moberg

A behind-the-scenes look at producing a fully AI-generated music video for the GamesOver track "Alwaysway Isteninglay," using Claude Code to drive DaVinci Resolve, Remotion, Suno, Grok Imagine, and OpenArt. Covers the lip-sync experiment that saved the project, real credit costs, and the pitfalls of tools that report success while doing something else entirely.

 


 


Building Word documents from CFML with cf-word

Image about Building Word documents from CFML with cf-word

Build, populate and convert Word .docx from CFML

James Moberg

Every couple of years I hit the same wall. A client needs a real .docx, not HTML pretending to be one, and CFML has never had a good answer for it. You end up shelling out to a COM object on Windows, or hand-writing OOXML, or gluing Apache POI together with cfscript and hoping the POI version already on the server doesn't fight the one you want to use. So I built cf-word. It's a free, open-source CFML library for creating, populating, and converting Word documents, and it runs on Adobe...

 


Expose local CommandBox servers to the internet using NetBird

Image about Expose local CommandBox servers to the internet using NetBird

Using a launcher so I don't have to manually type any flags

James Moberg

I use Netbird to show work-in-progress CFML sites to clients and to point webhooks at a local Adobe ColdFusion or Lucee server without deploying anything. It also does tcp/udp/tls for things like database tunnels, and the http side supports a PIN or SSO group restrictions instead of a password if that fits better.

 


Reading old WDDX files in 2026

Image about Reading old WDDX files in 2026
James Moberg

Old WDDX files you can't open anymore? I built a set of Windows tools that reads WDDX and converts to CSV, JSON, SQL, XLSX and more, plus a Total Commander lister plugin that opens .wddx as a grid.

 


JS-Screensaver - a privacy curtain for admin apps

Image about JS-Screensaver - a privacy curtain for admin apps

A small, zero-dependency JavaScript framework for full-screen browser screensavers.

James Moberg

Beyond nostalgia: web apps for admin or back-office users often sit open with sensitive data (PII, financials) on screen while someone steps away. JS-Screensaver is a small, zero-dependency JavaScript framework for full-screen browser screensavers to provide shoulder-surfing protection.

 


 


 


Tags: A Six-Song Love Letter to ColdFusion (and the Soundtrack to My 500-Mile Summit Pilgrimage)

Image about Tags: A Six-Song Love Letter to ColdFusion (and the Soundtrack to My 500-Mile Summit Pilgrimage)

Six songs, five genres, one web platform that outlived its own obituary.

James Moberg

Tags is a six-song love letter to ColdFusion, the web platform declared dead in 2002 that never got around to dying. Spanning Americana, heartland rock, blues, electro-funk, synthwave, and pop-punk, it tells thirty years of history - two brothers in a Minnesota basement, three corporate names on the door, and a faithful community that still gathers in the Vegas desert every year. It's an album about outliving your own obituary, written in the only language that could: the one they buried...

 


The cfExec CFC library is now on GitHub

Image about The cfExec CFC library is now on GitHub
James Moberg

I've been running cfExec.com for a while now, and it's up and running today. It's a reference site for command-line tools you can drive from ColdFusion: what each one does, live "try it" demos, the arguments spelled out. The one thing it never did was hand you the code in one place. Now it does.

 


 


 


cf-scrimage: a CFML wrapper for Scrimage with WebP, filters, and a dual API

Image about cf-scrimage: a CFML wrapper for Scrimage with WebP, filters, and a dual API

A dual API wrapper supports the full Scrimage 4.x feature set.

James Moberg

CF 2025 added native WebP support and Lucee has had it for a bit, but most of us are still running CF 2021 or 2023 in production. If you wanted WebP from CFML before now, your options were ImageMagick shell-outs, a Photoshop step, or "use a different format." It does more than WebP. Scrimage's full surface is 46 named filters, 21 composite blend modes, two dominant-color transforms, plus the usual sizing and geometry work.

 


A CFML wrapper for Thumbnailator

Image about A CFML wrapper for Thumbnailator

Fluent API; EXIF auto-rotate; watermark; batch resize; single JAR

James Moberg

Thumbnailator is a single JAR with no transitive dependencies, MIT-licensed, compiled to Java 8 bytecode, and the API is well thought through - feature-complete for what most CFML projects need: resize, scale, crop, rotate, watermark, format conversion, batch processing, EXIF orientation, and a real fluent builder.

 


 


ashid for CFML: time-sortable, prefixed IDs without a JAR

Image about ashid for CFML: time-sortable, prefixed IDs without a JAR
James Moberg

Self-documenting prefix, embedded millisecond timestamp, lexicographically sortable, double-click-selectable as a single token, case-insensitive on decode. (Inspired by Stripe's IDs, ULID, and TypeID. Crockford Base32 keeps the alphabet to 32 lowercase characters with no I/L/O/U ambiguity.)

 


 


cf-BadWords (AKA Verbal Morality Statute Enforcement, CFML Edition)

Image about cf-BadWords (AKA Verbal Morality Statute Enforcement, CFML Edition)

Profanity detection and filtering CFC for ColdFusion 2016+

James Moberg

cf-badWords is a CFML profanity detection and filtering CFC for ColdFusion 2016+ that normalizes input through AnyAscii to defeat Unicode pseudo-letters, homoglyph attacks, Punycode, zero-width-space smuggling, leetspeak, and emoji-as-letters before matching.

 


cfmlFiddle - Compare ColdFusion, Lucee, and BoxLang Side-by-Side

Image about cfmlFiddle - Compare ColdFusion, Lucee, and BoxLang Side-by-Side

I built a local CFML playground that runs 10 engines at once

James Moberg

cfmlFiddle is a self-hosted CFML playground. It runs on your machine through CommandBox. You write code in an Ace Editor, pick an engine (or all of them), click Run, and see the output. If you picked multiple engines, you see all the results stacked, side by side, or tabbed.

 


Parsing PDFs into structured data with CFML and OpenDataLoader

Image about Parsing PDFs into structured data with CFML and OpenDataLoader
James Moberg

OpenDataLoader is an open source Java library that actually handles this well. It runs locally, no GPU needed, and it parses PDFs into JSON, text, HTML, annotated PDF, and three flavors of Markdown. Since it's a Java JAR, it works with Adobe ColdFusion 2016+, Lucee & BoxLang.

 


JSONata Comes to ColdFusion: Query and Transform JSON Like a Pro

Image about JSONata Comes to ColdFusion: Query and Transform JSON Like a Pro
James Moberg

If you've ever wrestled with deeply nested JSON structures in CFML - writing loop after loop, checking for key existence, and manually building transformed output - there's now a better way. cfJSONata is a new open-source CFC that brings JSONata expression support to Adobe ColdFusion 2016+ and Lucee 5-7. Think of JSONata as XPath for JSON - a declarative query and transformation language that lets you extract, filter, aggregate, and reshape JSON data with compact expressions instead of...

 


Parseable JSON is Not Always Valid or Consistent JSON

Image about Parseable JSON is Not Always Valid or Consistent JSON

Parsing behavior is undefined and implementation-dependent

James Moberg

The JSON specification (RFC 8259) says that object keys SHOULD be unique, but it doesn't strictly forbid duplicates-meaning duplicate keys produce valid JSON that will parse, but the behavior is undefined and implementation-dependent.

 


Token-Oriented Object Notation (TOON) for ColdFusion / CFML

Image about Token-Oriented Object Notation (TOON) for ColdFusion / CFML

JSON for LLM prompts at half the tokens

James Moberg

After generating a ColdFusion function for MessagePack encoding and decoding, I started seeing articles regarding optimizing data for use with LLMs called "TOON". TOON stands for "Token-Oriented Object Notation" and is lightweight data format optimized for LLMs. There's no curly braces, square brackets, or quotes. It uses indentation plus tabular patterns like YAML. It's great for flat, tabular JSON objects, but not ideal for deeply nested structures. The final result is something that models...

 


MessagePack Support for ColdFusion / CFML

Image about MessagePack Support for ColdFusion / CFML

A pure ColdFusion port of msgpack-lite for encoding and decoding MessagePack binary format. Compatible with ColdFusion 2016+

James Moberg

MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. It's supported by over 50 programming languages and environments, but not ColdFusion... until now.

 


ColdFusion CSV Processing Speed Test Results: October 2025

Image about ColdFusion CSV Processing Speed Test Results: October 2025

DuckDB dominates with the lowest mean (362 ms) and high consistency (low std relative to scale). OctoSQL follows closely (542 ms mean), making these ideal for low-latency CSV processing. CSVRead_2025 and CSVProcess_2025 (~5116–6299 ms) are moderately slow with decent consistency.

 


ColdFusion CSV Processing Speed Test

Image about ColdFusion CSV Processing Speed Test
James Moberg

While in the process of developing "real world" unit tests to compare purist ColdFusion/CFML-only approaches against alternatives available using the command line (via CFExecute), I came across staggering performance issues that kinda suprised me.

 


CustomTag CFScript "Nuance"

Image about CustomTag CFScript "Nuance"

Use thisTag.executionMode to ensure logic only runs once

James Moberg

When calling a ColdFusion custom tag using CFScript syntax (cf_customTagName()), it executes twice-once in start mode and once in end mode-unlike the single execution with tag-based syntax (). This subtle behavior can cause unexpected results. To handle this, I use thisTag.executionMode to ensure logic only runs once. This nuance isn't well-documented, so I wanted to share it to help others avoid confusion.

 


Who's Who - Survey Status Update

Image about Who's Who - Survey Status Update

It's crunch time... I'm finalizing my Adobe ColdFusion "first time" presentation and working on publishing this survey. I need help locating some people.

James Moberg

I've identified many developers through the archived articles and code samples that I've accrued over the last 28 years. I could use some assistance locating some developers from the past.

 


"Who's Who" Survey

Image about "Who's Who" Survey

Highlighting ColdFusion developers over the last 30 years

James Moberg

I've recently started re-reading the original Steven Levy's "Hackers: Heroes of the Computer Revolution" book from 1984 and I like how the author paid homage to the pioneers with a dedicated "Who's Who" section. In my opinion, the past & current CFML platforms (Allaire Cold Fusion, Macromedia ColdFusion, Adobe ColdFusion, RAILO, BlueDragon, Lucee CFML and BoxLang) would never have become anything if it weren't for developers. In preparation for the 2025 Adobe ColdFusion Summit, I realized that...

 


Convert Unicode to ASCII7 using AnyASCII Java Library

Image about Convert Unicode to ASCII7 using AnyASCII Java Library

AnyAscii provides ASCII-only replacement strings for practically all Unicode characters.

James Moberg

"Sanitizing inputs" is critical and it goes beyond checking for SQLi and XSS. For example, some filename naming conventions that work on one OS may not work on another. (Don't name your file "NUL.txt" on Windows or you won't be able to delete it.) As a precaution, we save uploaded files to an offline directory using a random ASCII7 filename and store the original uploaded name separately. If the file is to be available for downloading and is required to retain the original file name, we use...

 


ColdFusion Wrapper for Zint Barcode Generator

Image about ColdFusion Wrapper for Zint Barcode Generator

CFML source with 93 example barcode images in 3 formats

James Moberg

Zint is able to generate 93 different barcode formats using the command line on multiple platforms. I haven't found any java library that is capable of supporting the same formats or outputting files as BMP, EPS, GIF, PCX, TIF, EMF, PNG or SVG.

 


ColdFusion Pseudolocalization for Generating "Fake Translations"

Image about ColdFusion Pseudolocalization for Generating "Fake Translations"

This is beneficial when preparing your app for Iñtërnâtiônàlizætiøn (i18n) compliance.

About 10 years ago, I wrote a ColdFusion User Defined Function (UDF) named pseudolocalize for transforming a given string by replacing its Roman (Latin) characters with similar-looking characters that have simple diacritical marks (accents, tildes, etc.). I shared it on my old Tumblr blog the same year, but thought I'd modernize it and reshare it with a demo on MyCFML. (NOTE: This UDF was written by a human, not AI. Enjoy!) I've attempted to add support for tokens and optional support for...

 


ColdFusion Gemini Vibes Gone Wrong

Image about ColdFusion Gemini Vibes Gone Wrong

... or maybe I'm just not doing it right.

James Moberg

I like creating custom tag wrappers for command line executable that match built-in ColdFusion functions and utilize the same parameters. I do my best to match the same output when it matters. I thought that this would be a simple task to test AI LLM since it there's plenty of existing documentation and examples available for both technologies. I've manually done this multiple times in the past and thought it'd be cool if I took a backseat and let AI figure it out. I guess my expectactions were...

 


nameFaker - A CFML-based Function to Generate Fake Identity Data

Image about nameFaker - A CFML-based Function to Generate Fake Identity Data

Inspired by DataFaker, Faker.js and cbMockData. CF2016+

James Moberg

A project I'm working on needs to be able to generate lots of fictitious/fake identities for testing purposes. I wanted a mock library that works with CF2016+, not have any dependencies (java JAR, EXE, API, etc) and offers both granularity & customization when it comes to results and name lists.

 


Using ColdFusion and Xpdf to extract PDF metadata

Image about Using ColdFusion and Xpdf to extract PDF metadata

Xpdf's Pdfinfo.exe outputs the contents of the 'Info' dictionary (plus some other useful information) from a Portable Document Format (PDF) file.

James Moberg

A quick dive into the powerful combination of ColdFusion and Xpdf for extracting PDF metadata. Xpdf, an open-source project, provides a robust set of command-line tools, including pdfinfo.exe, which excels at metadata extraction.

 


 


Support Unlimited Forwarded Email Messages via API (and ColdFusion)

Image about Support Unlimited Forwarded Email Messages via API (and ColdFusion)

Forward Email Webhook and Taffy API

James Moberg

In tackling the challenge of processing email attachments from dedicated email addresses, we initially built a system to process EML using javax.mail. We sought out a more efficient approach and are exploring Forward Email's service, which offers unlimited domains and webhook-supported email forwarding.

 


CF_Timer Revisited

Image about CF_Timer Revisited

Timer functionality without enabling CF Debugging

James Moberg

The CF_Timer custom ColdFusion tag measures the execution time of the code block it encloses. Upon encountering the CF_Timer start tag, it records a timestamp with nanosecond or millisecond precision. When the corresponding end tag is reached, it calculates the elapsed time. This duration can then be displayed in various formats (inline, outline, or as a comment), assigned to a specified variable, or suppressed based on allowed IP addresses. The tag also offers flexibility in the time unit for...

 


Ben & Ryan Show Guest Appearance - ColdFusion Custom UDFs

Image about Ben & Ryan Show Guest Appearance - ColdFusion Custom UDFs

I get to share and explain some of my custom UDFs on a podcast with Ben & Ryan.

James Moberg

I was invited to be a guest on the Ben & Ryan Show (hosted by xByte Solutions and Ben Nadel) to share some custom ColdFusion user-defined functions (UDFs). UDFs are custom code blocks that you can create to perform specific tasks in your web applications, similar to reusable recipes. They help avoid repeating code, making development easier and more efficient. Back when CFML was solely tag-based, the CFFUNCTION tag was the built-in function (BIF) that enabled you to create a UDF. After CFScript...

 


maskCC UDF

Image about maskCC UDF

Strips all credit card variations from a string. Useful when sending/storing user-submitted data in order to remain compliant with VISA Payment Card Industry Data Security Standard (PCI DSS) requirements

James Moberg

The maskCC user-defined function (UDF) takes a text string as input, searches for patterns that resemble credit card numbers, attempts to validate these potential numbers using ColdFusion's built-in credit card validation, and then masks the validated numbers by replacing all but the last four digits with asterisks.

 


jreEscape UDF

Image about jreEscape UDF

Escapes regular expression control characters within a string

The jreEscape user-defined function (UDF) ensures strings can be safely used in regex patterns by preventing special characters from being interpreted as regex metacharacters. The reescape function exists in Adobe ColdFusion, but not Lucee.

 


tempCache UDF

Image about tempCache UDF

Leverages cacheput/get to store temporary secrets; ie short-lived client variables-on-demand without having to enable client variables

James Moberg

The tempCache user-defined function (UDF) allows you to temporarily store data in the ColdFusion cache and retrieve it using a generated UUID. This is particularly useful for preserving data across HTTP redirects, with options for automatic expiration and single-use retrieval.

 


enableWKHTMLTOPDFForms UDF

Image about enableWKHTMLTOPDFForms UDF

Modifies PDF bits so Adobe Reader treats non-Adobe PDF as "editable"

James Moberg

This enableWKHTMLTOPDFForms user-defined function (UDF) modifies the binary of a non-Adobe-generated PDF file to enable the editing of form fields in Adobe Acrobat. The function works by finding specific patterns within the PDF's data related to annotation parents and replacing the word "Parent" with "Papent" in those patterns. This seemingly small change addresses an incompatibility issue that prevents Acrobat from recognizing and allowing editing of form fields created by WKHTMLTOPDF....

 


generateEmailHashCode UDF

Image about generateEmailHashCode UDF

Useful for identifying and blocking comment form abuse; SQL queries using INTs are faster

James Moberg

The generateEmailHashCode user-defined function (UDF) processes an email address by extracting the domain, sanitizing the username by removing periods (dots) and any part after the first "+", converting both parts to lowercase, and then returning a consistent Java-generated integer hash code of the resulting string.

 


streamFindnocase UDF

Image about streamFindnocase UDF

Searches the output buffer to determine if a string exists; Used for lazy dependency injection

James Moberg

The streamFindNoCase user-defined function (UDF) searches the currently accumulated output buffer for the presence of a given string, performing a case-insensitive comparison. It utilizes different methods for accessing and searching the output buffer depending on whether the ColdFusion server is Railo/Lucee or another version. It returns true if the string is found and false otherwise, without adding any output to the buffer itself. In one of our projects about 10 years ago, we were fetching...

 


createShadowHtml UDF

Image about createShadowHtml UDF

Allows embedding of a full HTML document in a webpage; (ie, inline email/PDF preview)

James Moberg

The createShadowHtml CFML user-defined function (UDF) generates HTML and inline JavaScript to create a dynamic, client-side preview of a given HTML document within a shadow DOM. It optionally disables links within the preview and uses a placeholder text before the HTML is loaded. This allows for isolated rendering of HTML and CSS without interference from the main document's styles or scripts.

 


hashid / ishashidValid UDFs

Image about hashid / ishashidValid UDFs

Protect against sequential traversal when using INT keys

James Moberg

The hashid and ishashidValid CFML user-defined functions (UDFs) provide a simple mechanism for generating and validating hash-based identifiers.

 


CFFrankenstein: Choosing to use EXEs instead of CFML BIFs

Image about CFFrankenstein: Choosing to use EXEs instead of CFML BIFs
James Moberg

I **choose** to use a lot of third-party Windows command line programs as part of our ColdFusion/CFML stack. Much of the functionality could be considered duplicated since official built-in functions (BIFs) already exist, but I perceive it as a "customer-controlled functions that always return reliable results regardless of CFML platform and/or version".