August 27, 2026
James Moberg
A new ColdFusion component for the Slack Web API - wrapping 50 methods across chat, conversations, users, views, and DND, tested on seven engines from Adobe ColdFusion 2016 through 2025 and Lucee 5 & 6.
August 19, 2026
James Moberg
cf-indexnow is a ColdFusion CFC that implements the protocol for Adobe ColdFusion 2016+ and Lucee 5+ to notify search engines the moment a URL is added, changed, or removed instead of waiting for the next crawl.
August 12, 2026
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.
August 6, 2026
James Moberg
DuckDB reads Parquet files where they sit and runs SQL against them. No server, no import, no staging. It is an in-process database and lives inside your JVM the way SQLite lives inside a phone app.
Build, populate and convert Word .docx from CFML
July 26, 2026
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...
Using a launcher so I don't have to manually type any flags
July 18, 2026
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.
July 14, 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.
A small, zero-dependency JavaScript framework for full-screen browser screensavers.
July 7, 2026
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.
Leveraging Supertonic TTS and ONNX Runtime Web
July 1, 2026
James Moberg
I've written CFML-based AI chatbots using an older perpetual licensed version of ColdFusion and wanted to integrate text-to-speech that I would not have to pay a cloud vendor for. It turns out that is now possible, and the whole thing runs client-side.
June 28, 2026
James Moberg
I built a backport, a single shaded JAR plus a thin ColdFusion CFC, that gives you the identical function signatures and identical hash output of ColdFusion 2025u8's passwordHashGenerate and passwordHashVerify (plus PBKDF2).
Six songs, five genres, one web platform that outlived its own obituary.
June 11, 2026
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...
June 7, 2026
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.
Is this IP a VPN, a datacenter, or a real person?
June 4, 2026
James Moberg
Released a new open-source CFC: iplogs, a cross-engine client for the ipLogs.com IP reputation / VPN-detection API.
Run a ping, traceroute, mtr, DNS lookup, or HTTP check from real machines in real locations
June 2, 2026
James Moberg
Can my web application be accessed "out there"? Not from my server. Not from my laptop on the Central Coast. From Frankfurt. From Tokyo. Globalping (free) solves the vantage-point problem.
A dual API wrapper supports the full Scrimage 4.x feature set.
May 28, 2026
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.
Fluent API; EXIF auto-rotate; watermark; batch resize; single JAR
May 21, 2026
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.
May 14, 2026
James Moberg
cfTOML parses and emits TOML, runs on Adobe CF 2016 through 2025, Lucee 5+, and BoxLang 1+. One CFC.
May 7, 2026
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.)
April 29, 2026
James Moberg
This CFML wrapper provides support for newer emojis using the JEmoji Java library (and Java 17).
Profanity detection and filtering CFC for ColdFusion 2016+
April 21, 2026
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.
I built a local CFML playground that runs 10 engines at once
April 16, 2026
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.
April 7, 2026
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.
April 1, 2026
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...
Parsing behavior is undefined and implementation-dependent
February 12, 2026
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.
JSON for LLM prompts at half the tokens
November 6, 2025
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...
A pure ColdFusion port of msgpack-lite for encoding and decoding MessagePack binary format. Compatible with ColdFusion 2016+
October 29, 2025
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.
October 23, 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.
October 16, 2025
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.
Use thisTag.executionMode to ensure logic only runs once
October 6, 2025
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.
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.
September 15, 2025
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.
Highlighting ColdFusion developers over the last 30 years
August 28, 2025
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...
AnyAscii provides ASCII-only replacement strings for practically all Unicode characters.
July 3, 2025
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...
CFML source with 93 example barcode images in 3 formats
June 26, 2025
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.
This is beneficial when preparing your app for Iñtërnâtiônàlizætiøn (i18n) compliance.
June 19, 2025
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...
... or maybe I'm just not doing it right.
June 11, 2025
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...
Inspired by DataFaker, Faker.js and cbMockData. CF2016+
June 4, 2025
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.
Xpdf's Pdfinfo.exe outputs the contents of the 'Info' dictionary (plus some other useful information) from a Portable Document Format (PDF) file.
May 29, 2025
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.
May 12, 2025
isIPv6 has been around since 2009. Are you using it? Is it beneficial? Does it perform a connection to a host? Does it test an IP string for validity? Are the results consistent in Adobe ColdFusion, Lucee and BoxLang?
Forward Email Webhook and Taffy API
May 8, 2025
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.
Timer functionality without enabling CF Debugging
May 1, 2025
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...
I get to share and explain some of my custom UDFs on a podcast with Ben & Ryan.
April 23, 2025
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...
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
April 19, 2025
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.
Escapes regular expression control characters within a string
April 19, 2025
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.
Leverages cacheput/get to store temporary secrets; ie short-lived client variables-on-demand without having to enable client variables
April 19, 2025
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.
Modifies PDF bits so Adobe Reader treats non-Adobe PDF as "editable"
April 19, 2025
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....
Useful for identifying and blocking comment form abuse; SQL queries using INTs are faster
April 19, 2025
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.
Searches the output buffer to determine if a string exists; Used for lazy dependency injection
April 19, 2025
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...
Allows embedding of a full HTML document in a webpage; (ie, inline email/PDF preview)
April 19, 2025
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.
Protect against sequential traversal when using INT keys
April 19, 2025
James Moberg
The hashid and ishashidValid CFML user-defined functions (UDFs) provide a simple mechanism for generating and validating hash-based identifiers.
March 30, 2025
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".