Lesson  in  ColdFusion 2025: Foundations

Introduction to ColdFusion

What ColdFusion is, the problems it solves, and how its architecture works. Learn the history of CFML, the difference between Adobe ColdFusion and Lucee, and how to verify services in your lab environment.

What is ColdFusion?

ColdFusion is a rapid web-application development platform built around CFML (ColdFusion Markup Language). It lets you query databases, send email, consume web services, and render HTML responses with far less ceremony than most general-purpose languages. A single CFML tag can replace dozens of lines of boilerplate in other languages.

The platform has two layers:

  • CFML — the language itself: a hybrid of HTML-like tags (<cfquery>, <cfloop>) and a modern ECMAScript-style scripting block (<cfscript>).
  • The CFML engine — the Java-based runtime that compiles .cfm/.cfc files to bytecode and executes them inside a servlet container (historically JRun, today Apache Tomcat).
Side-by-side comparison of CFML tag syntax on the left (cfset and cfoutput tags with hash-delimited variable interpolation) and cfscript syntax on the right (ECMAScript-style statements with writeOutput), showing both are valid CFML

CFML offers two syntaxes that compile to identical bytecode — tags (left) and cfscript (right).


A brief history of CFML

The story of ColdFusion starts in 1995, long before Ruby on Rails or Node.js, with a small startup called Allaire Corporation.

The Allaire Corporation logo — a stylised blue flame above the word "allaire" in lowercase, as used on ColdFusion 1.0 through 4.5 packaging in the late 1990s

Allaire Corporation, founded in 1995 — the original home of ColdFusion and HomeSite.

YearMilestone
1995Allaire Corporation ships ColdFusion 1.0 — one of the first server-side web scripting platforms
1999Allaire merges with Macromedia; CF gains Flash/Flex integration
2005Adobe acquires Macromedia; ColdFusion becomes an Adobe product
2012Railo (open-source CFML engine) forks into Lucee
2016Lucee Association Switzerland established; Lucee 5 released
2018ColdFusion 2018 ships API Manager and enhanced REST support
2021ColdFusion 2021 introduces cfThread improvements and PDF services overhaul
2023ColdFusion 2023 ships with JVM 21 baseline and enhanced security headers
2025ColdFusion 2025 — current release; Lucee 7.0.x in parallel
A horizontal timeline from 1995 to 2025 showing ColdFusion version milestones — CF 1.0 (Allaire), CF 5 (Macromedia acquisition), CF MX (rewrite on JRun/J2EE), CF 8 through CF 2023 (Adobe), and Lucee forking from Railo in 2012 as a parallel open-source track

Thirty years of CFML: from Allaire's 1995 launch through three corporate owners to today's Adobe CF 2025 and the parallel open-source Lucee track.

CFML was one of the web's original "batteries included" platforms. While other stacks require composing separate libraries for database access, file I/O, and HTTP clients, ColdFusion ships all of that in the core runtime. This philosophy still defines it today.


Problems ColdFusion solves

1. Database access without boilerplate

In most languages you open a connection, prepare a statement, bind parameters, iterate a result set, and close the connection. In CFML:

<cfquery name="users" datasource="myDB">
  SELECT id, name, email FROM users WHERE active = 1
</cfquery>

<cfoutput query="users">
  #users.name# — #users.email#<br>
</cfoutput>

The engine manages the connection pool, parameterises the query, and returns a strongly-typed query object you can iterate with a single tag.

2. File and email operations in one line

<!--- Send email --->
<cfmail to="user@example.com" from="app@example.com" subject="Welcome" type="html">
  <p>Your account is ready.</p>
</cfmail>

<!--- Upload a file --->
<cffile action="upload" fileField="myFile" destination="/var/uploads" nameConflict="makeUnique">

3. HTTP and web-service consumption

<cfhttp url="https://api.example.com/data.json" method="GET" result="resp">
  <cfhttpparam type="header" name="Authorization" value="Bearer #token#">
</cfhttp>

<cfset data = deserializeJSON(resp.fileContent)>

4. Rapid page rendering

ColdFusion pages are compiled to Java bytecode on first request and cached. Subsequent requests hit the bytecode cache directly, giving competitive throughput without a separate compile step during development.


How ColdFusion's architecture works

ColdFusion request architecture diagram — browser sends an HTTP request to an optional Nginx reverse proxy, which forwards via AJP or mod_cfml to Apache Tomcat, which hands off to the CFML engine; the engine parses and compiles the .cfm file to Java bytecode on first request (cached on subsequent requests), executes it, accesses the datasource connection pool via JDBC to reach the database, optionally checks the ehcache tier, writes to the response buffer, and returns HTML or JSON to the browser

The ColdFusion request pipeline: browser → (optional) reverse proxy → Tomcat → CFML engine → JDBC datasource pool → response.

Key architectural points:

  • Everything runs on the JVM. You can call any Java class from CFML, use Java libraries on the classpath, and read JVM metrics with standard tools.
  • Datasources are named connection pools configured in the CF Admin or via Application.cfc. Pages reference them by name, not by connection string.
  • Application scope is shared across all requests within one application context, making in-memory caching trivial.
  • The web root is a folder watched by the engine; dropping a .cfm file there makes it immediately accessible with no restart or deploy step.

ColdFusion and the JEE platform

ColdFusion is built on top of the Java Enterprise Edition (JEE) platform and uses a JEE application server for its core services — database connectivity, naming and directory services, and other runtime infrastructure. This is not just an implementation detail: it directly shapes what you can do with ColdFusion applications.

ColdFusion can be deployed in two ways:

  • Server configuration — ColdFusion ships with a bundled JEE server (Apache Tomcat). This is the standard setup and what you are using in this lab.
  • JEE configuration (Enterprise only) — ColdFusion can be deployed as a WAR/EAR on an independent JEE application server such as IBM WebSphere, Oracle WebLogic, or JBoss.

By running on top of the JEE platform, ColdFusion inherits its power while hiding its complexity behind CFML tags and functions. This also means ColdFusion pages can integrate directly with the Java ecosystem:

CapabilityWhat it means in practice
Share session data with JSPs and Java servletsCFML and Java code running in the same container can read and write the same session scope
Import JSP tag librariesCustom JSP tags can be imported and used like ColdFusion custom tags
Integrate with Java objectsYou can call any Java class, JavaBean, or Enterprise JavaBean directly from CFML using createObject("java", ...)
Access the full JEE Java APIJDBC drivers, JMS, JNDI, and other JEE APIs are available to CFML code
💡 Why does this matter for CFML developers?

Understanding that ColdFusion runs inside a JVM servlet container explains several behaviours you will encounter throughout this course:

  • Why CF configuration lives in WEB-INF/ and cfclasses/ directories
  • Why restarting CF is sometimes needed to pick up code changes (the JVM class cache)
  • Why you can drop .jar files into the classpath and call Java libraries from CFML
  • Why performance tuning involves JVM flags (-Xmx, -Xms, GC settings) as much as CFML-level changes

Adobe ColdFusion vs. Lucee

Both engines execute the same CFML language core, but they differ in licensing, extension model, and some built-in capabilities.

The Adobe ColdFusion 2025 logo on the left (stylised red lightning bolt on a dark background with the text "Adobe ColdFusion") and the Lucee logo on the right (bold teal "Lucee" wordmark), placed side by side to represent the two main CFML engines used in this course

Adobe ColdFusion 2025 (port 8500) and Lucee 7 (port 8888) — both run in your lab environment.

FeatureAdobe ColdFusion 2025Lucee 7
LicenseCommercial (Developer Edition free, production licensed)Open source (LGPL)
Servlet containerBundled TomcatAny container; CommandBox bundles its own
Admin console/CFIDE/administrator/lucee/admin/
PDF generationNative (<cfdocument>)Via extension (PDF extension required)
ORMHibernate (built-in)Hibernate (built-in)
Language extensionsAdobe-only tags (e.g., <cfpresentation>)Lucee-only features (e.g., systemOutput())
Script-first styleBoth tag and script equally supportedScript-first recommended
Cold start speedModerate (~30 s typical)Fast (~5–10 s with CommandBox)
CommunityAdobe forums, Adobe docsLucee community, CommandBox ecosystem
  • Greenfield projects can use either. Lucee + CommandBox is popular for local development because of fast cold starts and zero licensing cost.
  • Enterprise Adobe shops use CF for support contracts, CF Admin policies, and built-in PDF/Office features.
  • This course uses both: Adobe ColdFusion 2025 on port 8500 is the primary engine; Lucee 7 on port 8888 lets you verify cross-engine compatibility.
Why are two servers running in this lab?

Running both engines side by side reflects the real-world CFML ecosystem — Adobe CF and Lucee coexist in many organisations, and knowing both makes you a stronger developer.

For this course you don't need to master the differences right now. The one thing to remember: all exercises run on Adobe ColdFusion 2025 at port 8500. Lucee is there on port 8888 if you want to explore it on your own, but it won't affect your task completions.

--


Your lab environment

Your lab microVM is pre-configured with both engines running:

Screenshot of the iximiuz Labs platform showing the ColdFusion 2025 course lab — the top navigation shows course breadcrumbs, the main area is split into a left panel with the lesson content and task checklist, and a right panel showing the live lab environment with a Terminal tab open running ColdFusion on port 8500 and a ColdFusion tab showing the CF Admin login page

The iximiuz Labs interface: lesson content and task checklist on the left, live lab environment on the right.

Lab environment diagram showing three services running on a single microVM — Adobe ColdFusion 2025 on port 8500 with its wwwroot at /opt/coldfusion2025/cfusion/wwwroot/, CommandBox plus Lucee 7 on port 8888 with its app root at /home/laborant/app/, and VS Code code-server accessible via the IDE browser tab pointing at the CF 2025 webroot; all three are pre-started on boot with no configuration required

Your lab microVM boots with CF 2025 (8500), Lucee 7 (8888), and VS Code all ready — no installation needed.

ServicePortWeb root
Adobe ColdFusion 20258500/opt/coldfusion2025/cfusion/wwwroot/
CommandBox + Lucee 7.08888/home/laborant/app/
VS Code (code-server)IDE tabOpens the webroot of ColdFusion 2025

Tip: Files you create in VS Code land directly in the CF 2025 webroot. Open a Terminal inside VS Code to also write to the Lucee webroot.

Screenshot showing the right-click context menu on the CF Admin button inside the ColdFusion lab tab — the menu is open with "Open Link in New Tab" highlighted, demonstrating how to open the CF Admin console in a full browser window

Right-click the CF Admin button → "Open Link in New Tab" to get a full-screen view.

Want the CF Admin or ColdFusion tab to fill your whole screen?

Right-click any lab tab (ColdFusion, Lucee, IDE) and choose "Open Link in New Tab". The lab environment opens in a full browser tab with no course sidebar — ideal when you need more room to work in the CF Admin console or browse your app.

--

The Adobe ColdFusion Administrator login screen displayed in a full browser window with no course sidebar — a centered login form with a password field and a "Login" button on a dark background

CF Admin in full-screen — enter password admin to log in.


Verify services

Open the Terminal tab in your lab and run each command. A 200 status code confirms the service is ready.

# Verify Adobe ColdFusion 2025 (should return HTTP 200)
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8500/index.cfm
# Verify Lucee via CommandBox (should return HTTP 200)
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8888/index.cfm

Create and test your first ColdFusion page

  1. In VS Code, create a file called hello.cfm in the webroot.
  2. Add this content:
<cfset greeting = "Hello from ColdFusion 2025!">
<cfoutput>#greeting#</cfoutput>
  1. Verify it through the engine:
curl -s http://localhost:8500/hello.cfm
# Expected output: Hello from ColdFusion 2025!

If you see the greeting text (not the raw CFML source), the engine compiled and executed your file correctly.



When all the checks above are green, this lesson is complete. Your progress is saved automatically — move straight on to the next lesson.

Key concepts reference

TermMeaning
CFMLColdFusion Markup Language — tag + script hybrid
CFMColdFusion page file (.cfm) — renders a response
CFCColdFusion Component (.cfc) — reusable class or service
Application.cfcFramework entry point; defines app name, scope timeouts, lifecycle hooks
DatasourceNamed JDBC connection pool configured in CF Admin or Application.cfc
CF AdminWeb-based admin console at /CFIDE/administrator (Adobe)
CommandBoxCLI + embedded server tool for Lucee; analogous to Node's npm + node
cfscriptBlock tag (<cfscript>...</cfscript>) that enables ECMAScript-style syntax
ScopeNamed variable namespace (e.g., variables, session, application, request)
JEEJava Enterprise Edition — the platform ColdFusion runs on top of
Servlet containerThe JEE runtime (Tomcat in the lab) that hosts the CF engine
JVMJava Virtual Machine — the process CF runs inside; tuned via -Xmx/-Xms flags