Wheels-The Fast &
Fun
CFML Framework!
Build apps quickly with an
organized, Ruby on
Rails-inspired
structure.
Get up and
running in no time!
Automatic Documentation
Use our built in doc viewer which grows with your application with only minor markup required
Full Documentation
Lots of lovely documentation available with tutorials and a complete API reference
Latest From the Wheels Dev Blog
CFWheels 2.2 Released
It's been a while coming. Can I blame the pandemic? Lots of nice little tweaks and fixes in this version. Please see the changelog for all details.
If updating from CFWheels 2.1.x:
It should be an easy upgrade , just swap out the wheels folder.
If updating from CFWheels 2.0.x:
- replace your
wheelsfolder from the one in the download, and - outside the
wheelsfolder, ensure you've got a file atevents/onabort.cfmand create it if needed. - rename any instances of
findLast() tofindLastOne()(this has been changed due to Lucee 5.3 having a new inbuilt function called findLast() which clashes with the wheels internals)
As always, a huge thanks to all contributors - stay safe out there!
CFWheels 2.3.0-rc.1 Released
This version has been cooking for a while and there have been many contributors. But since this is my first release a the helm with a new CI pipeline in place, I felt more comfortable doing a Release Candidate first.
If updating from CFWheels 2.2.x:
If should be an easy upgrade, just swap out the wheels folder.
Changelog
View Enhancements
- Adds association error support via
includeAssociationsargument #1080 - [Nikolaj Frey]
Bug Fixes
- onerror handler should increase user defined requestTimeout value #1056 - [Adam Chapman]
- deletedAt should also respect timestamp mode (UTC) #1063 - [David Belanger]
- Fixes No output from
Debug()usage in plugin test cases #1061 - [Tom King] - Development mode will now properly return a 404 status if view not found #1067 - [Adam Cameron, Tom King]
- 404 status now properly returned without URL rewriting #1067 - [Adam Cameron, Tom King]
- Internal Docs in ACF2018 should now not display duplicate categories [Tom King]
- Internal Docs search now resets itself properly on backspace with empty value #982 - [Brandon Shea, Tom King]
ValidatesConfirmationOf()now correctly enforces prescence of confirmation property #1070 - [Adam Cameron, Tom King]resource()/resources()now allows emptyonlyproperty to utilise as non-route parent #1083 - [Brian Ramsey]- Handle XSS Injection in development enviroment - [Michael Diederich]
- Fix params bug in CLI API [#1106] - [Peter Amiri]
Miscellaneous
- Update Docker Lucee Commandbox version to 5.2.0 - [Adam Chapman, Tom King]
- Minor internal obselete reference to modelComponentPath removed - [Adam Chapman, Tom King]
- Minor visual fix for long migration logs overflow in modal (scroll) - [Brian Ramsey]
- Add test suite for Lucee and H2 Database to the GitHub Actions test suite. - [Peter Amiri]
- On going changes to update the H2 drivers [#1107] - [Peter Amiri]
- Fixes some syntax formating introduced by cfformat [#1111] - [Adam Chapman]
- Minimum ColdFusion version is now ColdFusion (2018 release) Update 3 (2018,0,03,314033) / ColdFusion (2016 release) Update 10 (2016,0,10,314028) / ColdFusion 11 Update 18 (11,0,18,314030) #923 - [Michael Diederich]
- Wheels save(allowExplicitTimestamps=true) doesn't produce the expected result [#1113] - [SebastienFCT]
Potentially Breaking Changes
- Automatic Time Stamps: the deletedAt column was using the server's local time for the timestamp while createdAt / updatedAt were using the timestamp selected for the timestamp mode. The default for CFWheels' timestamp mode is UTC and therefore all future deletedAt timestamps will be in UTC unless you've changed the default. Please review any SQL that uses deletedAt for datetime comparison.
CFWheels DotEnvSettings Plugin published
A new plugin was published to provide support for .env settings files in a production environment. This plugin is based on Eric Peterson's CommandBox module and allows the use of .env or similarly named files to store your application secrets so they can be kept out of source control.
LICENSE
Apache License, Version 2.0.
SYSTEM REQUIREMENTS
- Lucee 5+
- ColdFusion 9+
- CFWheels 2+
Instructions
Just drop the zip file into your plugins folder and restart your application or use CommandBox cli to install. Simply type the following at the root of your project:
box install cfwheels-dotenvsettings
Usage
Create a .env file in your project root and add to .gitignore or your version control's equivalent (don't commit secrets to your repo!) The file can contain JSON or Java properties style key value pairs:
// property style
MY_SECRET_KEY=somevalue
MY_OTHER_SECRET=shh
// json style
{
"MY_SECRET_KEY"="somevalue"
,"MY_OTHER_SECRET"="shh"
};
The default file name supported is .env but you can use any file name you want. You could even have multiple files for various environment.
In your CFWheels app you can read in your secrets by adding readDotEnvSettings() to your application. The most logical point to do this would be in your events\onApplicationStart.cfm file, but you could do it in your environment specific settings.cfm files as well. You can then access the secrets contained in the file processed using get("MY_SECRET_KEY").
If you want to customize the secrets file to use, you can specify the file name by passing in the file name like so readDotEnvSettings(".env-second").
Wheels Blog Badges, Wallpaper, and Free T-Shirts
Blog Badges
We have several variations to choose from. Here are two: Example code to place on your siteWallpaper
You can see and download the different wallpaper and badges psd/jpg files here. Since the images are hosted on github feel free to send Chaz any pull requests of your contributions like altering a badge or creating a different sized wallpaper.T-Shirt Giveaway
Find Mike Henke at cf.Objective() and show him the wallpaper on your computer or the blog badge on your site and he'll give you a free t-shirt while supplies last.Wheels 3.0: Setting Up Your Development Environment
Accompanying Video
This blog post has an accompanying video posted to YouTube.
Introduction
The forthcoming release of the Wheels 3.0 framework is creating waves in the development community, promising transformative enhancements and simplified workflows. In this blog post, we will focus on establishing the foundational environment crucial for executing Wheels projects efficiently. We'll guide you through project creation using both the current and the upcoming 3.0 versions of the framework and will explore the differences in their directory structures. Let's dive right in!
Installing CommandBox
The cornerstone of our setup is CommandBox, a versatile tool that modernizes the CFML developer's workflow. CommandBox serves as a command line shell, a package manager, and a seamless interface to start a CFML engine in any given directory, without the need to juggle complex application server installations. CommandBox is accessible for Mac, Windows, and Linux OS, with installation methods varying accordingly. For Mac users like me, Homebrew is the chosen method for installation, while Windows users can turn to Chocolaty or a native installer, and Linux enthusiasts can rely on built-in package managers.
CommandBox and Wheels CLI Setup
Once CommandBox is installed, jump into the CommandBox shell via the `BOX` command in the terminal window. Note that the first launch involves downloading several packages which could take some time. Following the setup, install the Wheels CLI commands into CommandBox using `INSTALL WHEELS-CLI`. Although I've already completed this step earlier, executing this ensures you are equipped with the right tools to proceed.
Creating Projects with Wheels
With CommandBox ready, embark on creating two projects using the `WHEELS NEW` command. This command initiates a wizard that will actively guide you through the process of setting up a new Wheels project.
1. Creating a Current Version Project
- Naming the Project: First, supply a name for the project, for instance, "CURRENT", which creates a directory embodying the project files.
- Template Selection: Choose the template corresponding to the current version and proceed with the default options.
- Project Initialization: Conclude the process with a "Yes" to affirm configuration and initiate project setup. The CLI will create the project directory and integrate necessary files. Launch the server with `START` and witness the "Congratulations" page, assuring correct installation.
2. Creating a Wheels 3.0 Version Project
- Naming the Project: Again, deploy `WHEELS NEW` to name your project.
- Template Selection: This time, select the "Bleeding Edge" template for a Wheels 3.0 implementation. Confirm defaults and proceed to build your project.
- Project Initialization: Use the `START` command to usher in a new CFML application server, culminating in a fresh "Congratulations" page highlighting the new branding and 3.0 framework base.
Exploring Directory Structures
A crucial step is to delve into the structural differences between the two projects:
- Current Version: This project exhibits a larger assortment of directories and files at its root, which poses an increased potential attack surface.
- Wheels 3.0: The new framework refines this exposure significantly, only housing four directories at the root. Key directories like config, controllers, and views reside under the `app` directory, while static resources like images and stylesheets find home under the `public` directory. The `vendor` directory now accommodates core framework files, enhancing security by mapping only the public folder to the webroot of the application server.
Conclusion
Setting up an environment for Wheels 3.0 marks the beginning of an exciting journey in CFML development. From installing CommandBox to exploring framework nuances, we have geared up for advanced Wheels projects.
Starting a New CFWheels Project with the CLI
If you're not using CommandBox for your CFWheels development, you're in for a treat. This is a quick post to show case how easy it is to start a new CFWheels project with the help of the the wheels command for CommandBox.
If you have CommandBox installed and have the cfwheels-cli module installed, then simply launch CommandBox by typing box and then issue the command wheels generate app myApp . This simple command will take care of the following:
- Create a folder in the current working directory for the project and name if myApp
- Copy the
cfwheels-template-basepackage from ForgeBox and expand it in the root of the myApp folder - Copy the
cfwheels-corepackage from ForgeBox and expand it into the wheels folder in the root of the myApp folder - This command also takes care of naming your app myApp or whatever name you pass in
You may be asking yourself, what are all these packages you're talking about? Well, we are starting to use the package management system provided by ForgeBox and CommandBox to make distribution of sample apps easier as well as installing and updating projects based on CFWheels. More to come on these topics later but this is just to whet your appetite.
cf.Objective starts and free t-shirts
Welcome Don Humphreys to the core team
ColdFusion on Wheels 1.1.6 Released
Model Enhancements
- validatesUniquenessOf only selects primary keys - [Jordan Clark, Don Humphreys]
View Enhancements
- Allow removal height and/or width attributes from imageTag when set to false - [downtroden, Tony Petruzzi]
- Allow delimiter to be specified for stylesheets and javascripts - [Derek, Tony Petruzzi]
Bug Fixes
- hasChanged was incorrectly evaluating boolean values - [Jordan Clark, Don Humphreys]
- Do not perform update when no changes have been made to the properties of a model - #786 [Mohamad El-Husseini, Tony Petruzzi]
- OnlyPath argument of urlFor does not correctly recognise HTTPS urls - [Andy Bellenie, Tony Petruzzi]
- Pagination clause wasn't enclosed - [Karl Deterville, Tony Petruzzi]
- Pagination endrow was incorrectly calculated - [Karl Deterville, Tony Petruzzi]
Welcome to Our Community
Welcome to Our Community - a place where like-minded people connect, share ideas,
and grow
together in a positive and supportive environment.
This website uses essential cookies to improve your experience. By continuing to use the site, you consent to the use of cookies.
Top Contributors
Per Djurner
Contributed as a Software Developer
Per Djurner is a long-time core contributor and leader of the Wheels framework, with a history of shaping its direction since the project’s early days. He made the very first commit and has continued to contribute regularly, fixing important bugs, refining SQL handling, and enhancing model methods with more flexible options. In addition to code, he has improved documentation, templates, and overall project stability, ensuring Wheels remains reliable and developer-friendly. His work reflects both technical expertise and long-term commitment to the growth of the framework.
Peter Amiri
Contributed as a Software Developer and Project Manager
Peter Amiri is a senior developer and community leader who has taken on a core team / maintainer role in the Wheels framework. He has decades of experience with ColdFusion (since version 1.5), including work in user-groups, large scale sites, and infrastructure. Since returning to the project, he’s helped revitalize it — organizing roadmap discussions, guiding structure changes, supervising modernization (including CLI improvements, package modularization, and updating workflows), and helping re-energize community contributions.
Zain Ul Abideen
Contributed as a Software Developer
Zain Ul Abideen is an active contributor to the Wheels framework, playing a key role in improving its stability and usability. His work includes fixing issues like invalid columns not throwing exceptions, ensuring primary keys return correctly as numeric, and refining logic around calculated properties. He also enhanced view helpers to better handle active states and improved default routing behavior. Through these contributions, Zain has strengthened both the framework’s reliability and developer experience.
Anthony Petruzzi
Contributed as a Software Developer
Anthony Petruzzi has made valuable contributions to the Wheels through code improvements, bug fixes, and collaborative reviews. They’ve helped refine core components, enhanced framework stability, and actively participated in issue discussions to steer design decisions. Their efforts in writing clear, maintainable code and offering constructive feedback in pull requests have strengthened the project’s code quality. Overall, Anthony Petruzzi involvement showcases dedication to open-source collaboration and meaningful impact on the Wheels ecosystem.
Tom King
Contributed as a Software Developer and Maintainer
Tom King is one of the core maintainers of Wheels, with deep involvement in both development and leadership. He oversaw major releases, such as Wheels 2.0, which introduced features like RESTful routing, database migrations, improved CLI support, and a rewritten core in CFScript. He also helps steer the project’s long-term direction — writing blog posts reflecting on its history (e.g. noting its first commits, celebrating milestones) and working to modernize both tooling and community engagement.
Adam Chapman
Contributed as a Software Developer
Adam Chapman has been a dedicated and influential contributor to the Wheels ecosystem. He joined the core team after years of community support, helping to steer architectural evolution and plugin integrations. Beyond code, he’s actively engaged in issue triage, proposing enhancements and shaping long-term design direction. His commitment to both community discussion and technical contributions has strengthened the project’s cohesion and future readiness.
James
Contributed as a Software Developer
James has brought forward meaningful contributions to the Wheels through consistent code enhancements, test case development, and active engagement in issue resolution. He frequently submits detailed pull requests, helping to bolster the framework’s robustness and maintainability. Beyond code, James participates in discussion threads and reviews, offering thoughtful feedback which helps keep the project aligned with community needs. His steady involvement has strengthened both core modules and auxiliary features, making Wheels more reliable and polished for all users.
Andrew Bellenie
Contributed as a Software Developer and Maintainer
Andrew Bellenie has played a pivotal role in the Wheels ecosystem, as a long-standing core team member and active community contributor. He brings deep experience in CFML development and framework architecture. Andy has contributed code, design feedback, documentation, and mentorship to newcomers. He also helps triage issues, guide feature direction, and maintain the project’s stability. His dedication helps keep the framework evolving and its community engaged.
scahyono
Contributed as a Software Developer
scahyono has contributed thoughtful enhancements to the Wheels codebase, particularly in ensuring compatibility with Oracle setups. Notably, they worked on a module (or plugin) to allow ColdFusion on Wheels to correctly read table metadata across Oracle remote database links, which broadens database support and resilience. Their willingness to tackle specialized integration challenges strengthens the framework’s versatility and helps more users adopt Wheels in diverse environments.
MvdO79
Contributed as a Software Developer
MvdO79 has shown his support for the Wheels not only through code but also as a financial backer. He contributes monthly via Open Collective, helping sustain the framework’s ongoing development. Beyond funding, his presence in issue discussions demonstrates engagement with bug tracking and community feedback. His dual role-as supporter and participant-reinforces the open-source spirit behind Wheels.
Raul Riera
Contributed as a Software Developer
Raúl Riera has been an enthusiastic supporter and contributor to the Wheels community-beyond writing code, he’s helped through design, advocacy, and community engagement. He has designed swag such as T-shirts for Wheels events and promoted the framework through his dev shop, Hipervínculo. As a software entrepreneur (founder of Odonto.me) and developer, Raúl bridges technical and community roles, helping raise awareness of Wheels and adding a touch of creativity and outreach to the project’s ecosystem.
Michael Diederich
Contributed as a Software Developer
Michael Diederich has contributed key fixes and enhancements to the Wheels, particularly around framework usability and interface issues. Notably, he addressed documentation and UI elements-changes such as showing the current Git branch in the debug layout in version 2.5.0 reflect his involvement. In earlier releases, he also fixed bugs (for example with form and URL handling in the startFormTag() and array routing) that improved reliability across use cases. His contributions help refine both developer-facing tools and core correctness.
Rob Cameron
Contributed as a Software Developer
Rob Cameron had the original idea for CFWheels (and by extension, the foundation for Wheels), having built the framework with inspiration from Ruby on Rails in 2005. Though he eventually moved on from active core development to focus on other projects (such as Rails work), his early design and architectural direction still underpin much of the project's structure and philosophy.
Chris Peters
Contributed as a Software Developer
Chris Peters has been foundational in the development, documentation, and promotion of the Wheels framework since its early days. He authored many of the earliest releases, oversaw version 1.3.0 that introduced HTML5 enhancements, table less models, and thread-safe startup, and managed releases like 1.0.5 with dozens of bug fixes and stability updates. He also wrote technical blog posts about core features (flash messages, asset query strings, error handling) and established guidelines for contributing and documentation, helping to build a strong community around the framework.
David Paul Belanger
Contributed as a Software Developer
David Paul Belanger has been a core force behind the Wheels, contributing both technically and strategically across many versions. He has co-authored features and bug fixes (such as updates to sendFile() and usesLayout()) in the 2.x releases. Beyond code, David has helped lead the transition of the framework’s governance and been active in community outreach-having participated in CF-Alive podcasts and collaborated with Tom King and others on guiding the project’s future direction.
John Bampton
Contributed as a Software Developer and Documentation Writer
John Bampton made his mark as a contributor to the Wheels project beginning with version 2.4.0, where he helped fix broken links in documentation and correct spelling errors in the README and core templates. His attention to detail improved the documentation clarity and usability for future developers. Though he is noted as a “new contributor,” his work helped plug small but important gaps in the project’s written material, aiding the framework’s polish and accessibility.
Simon
Contributed as a Software Developer
Simon contributed to the Wheels framework by refining code and improving framework functionality. His work helped address issues and enhance stability, making the project more reliable and easier for developers to use. These contributions support the continued growth and effectiveness of the Wheels ecosystem.
Brian Ramsey
Contributed as a Software Developer and Quality Assurance Engineer
Brian Ramsey has been a long-time contributor and advocate within the Wheels community. His work spans both code contributions and knowledge sharing, with a focus on improving framework usability for everyday developers. Brian has participated in bug resolution, tested new releases, and provided feedback that shaped core improvements. Beyond code, he’s been active in community discussions, answering questions, and guiding newer users. His steady involvement has helped ensure Wheels remains both developer-friendly and reliable, reflecting his commitment to open-source collaboration and practical problem solving.
Danny Beard
Contributed as a Software Developer
Danny Beard has contributed to the Wheels framework through targeted code enhancements and thoughtful participation in issue discussions. His work has included fixing bugs, refining logic in core functions, and improving overall framework consistency. Danny’s involvement reflects an eye for detail and a practical approach to problem-solving, ensuring the framework remains dependable in real-world applications. Beyond code, his willingness to collaborate with other contributors has reinforced the community-driven nature of Wheels, helping maintain a strong and sustainable open-source project.
Reuben Brown
Contributed as a Software Developer
Reuben Brown has been a valuable contributor to the Wheels framework, offering code improvements and community input that strengthen the project’s overall quality. His work includes bug fixes and refinements that enhance stability and usability, ensuring developers can rely on Wheels in production environments. Reuben’s involvement extends beyond code, as he has taken part in discussions, reviewed issues, and provided practical feedback to guide development. His contributions reflect a thoughtful balance of technical skill and collaborative spirit, reinforcing the open-source ethos of the Wheels project.
Seb
Contributed as a Software Developer
Seb has provided important contributions to the Wheels that help improve framework robustness and usability. Through resolving issues, submitting pull requests, and polishing code, Seb has helped close gaps and make the system smoother for both new and experienced users. They’ve also participated in reviews, giving constructive feedback, which strengthens code quality and consistency across releases. Seb’s steady involvement supports the project’s open-source mission, making Wheels more reliable, maintainable, and welcoming for all contributors.
timbadolato
Contributed as a Software Developer
Timbadolato has contributed to the Wheels with a focus on improving functionality, fixing issues, and enhancing developer experience. His pull requests demonstrate a clear attention to detail, addressing edge cases and refining framework behavior to make it more predictable and reliable. By engaging in code reviews and community discussions, timbadolato has helped shape technical decisions and ensured smoother adoption for users. His contributions highlight a practical, solution-oriented approach that supports both the long-term stability and growth of the Wheels ecosystem.
Alex
Contributed as a Software Developer
Alex has played a supportive and constructive role in the Wheels, contributing code improvements and feedback that strengthen the framework’s overall reliability. His efforts include bug fixes, refinements to core features, and helpful participation in discussions that guide project direction. By addressing issues and proposing practical solutions, Alex has contributed to making Wheels easier to use and more stable for developers. His involvement reflects a collaborative spirit and reinforces the open-source values that keep the project moving forward.
Chris Geirman
Contributed as a Software Developer
Chris Geirman made contributions to the Wheels that helped refine parts of the codebase and improve developer experience. While his involvement was smaller in scope, his participation still added value to the framework and reflects the spirit of open-source collaboration.
Zac Spitzer
Contributed as a Software Developer
Zac Spitzer provided contributions to the Wheels that helped address specific issues and improve framework stability. Though his involvement was brief, his work added value to the codebase and demonstrated the importance of community participation in strengthening and maintaining open-source projects.
Nikolaj Frey
Contributed as a Software Developer
Nikolaj Frey has made contributions to the Wheels framework that supported improvements in the project’s codebase and functionality. While his involvement was limited in scope, his participation still added meaningful value, reinforcing the collaborative nature of the open-source community that drives Wheels forward.
Gralen
Contributed as a Software Developer
Gralen contributed improvements to the Wheels framework that enhanced code quality and supported overall stability. Their work helped refine the project and contributed to making the framework more reliable for developers using it in real-world applications.
Doug McCaughan
Contributed as a Software Developer
Doug McCaughan contributed to the Wheels framework by helping refine functionality and addressing issues that improved developer experience. His efforts supported the stability of the project and ensured smoother use of core features. Through his work, Doug added value to the framework’s ongoing development and its open-source community.
Coleman Sperando
Contributed as a Software Developer
Coleman Sperando contributed to the Wheels framework by making improvements that strengthened its functionality and reliability. His work addressed specific areas of the codebase, helping to refine features and ensure a smoother experience for developers. These contributions supported the project’s ongoing growth and the collaborative effort behind Wheels.
Charlie Arehart
Contributed as a Software Developer
Charlie Arehart has supported the Wheels framework through his deep expertise in ColdFusion and the broader CFML ecosystem. He has provided valuable feedback, shared knowledge with the community, and highlighted best practices that strengthen adoption and reliability. His involvement helps connect Wheels development with the wider ColdFusion community, ensuring the framework remains relevant and accessible to developers.
Charley Contreras
Contributed as a Software Developer
Charley Contreras contributed to the Wheels framework by helping refine parts of the codebase and supporting improvements that enhance usability. His work added value to the project’s overall stability and reflects the collaborative effort of developers working together to keep the framework evolving and reliable.
Brant Nielsen
Contributed as a Software Developer
Brant Nielsen contributed to the Wheels framework by improving functionality and addressing issues that supported better performance and reliability. His work helped refine the codebase and enhance the developer experience, reinforcing the project’s commitment to building a stable and effective open-source framework.
Ben Nadel
Contributed as a Software Developer
Ben Nadel is a veteran ColdFusion developer known for deep technical thought leadership and contributions to the community, including work around Wheels and related topics. He writes regularly about extending and customizing parts of Wheels (for example, customizing the router/proxy component behavior to suit specific workflow preferences). He also shares experiments and educational posts (e.g. integrating HTMX in ColdFusion apps) that help other developers understand modern patterns in CFML. While he may not always be contributing direct core framework commits, his influence shows up in how people use and adapt Wheels in real-world apps, and in sharing best practices, tutorials, and ideas that help shape how the framework is viewed and utilized.
Andrei B.
Contributed as a Software Developer
Andrei B. contributed to the Wheels framework by helping refine code and improve functionality in targeted areas of the project. His efforts supported greater stability and usability, making the framework more dependable for developers. These contributions reflect the collaborative spirit that drives the ongoing success of Wheels.
Adam Larsen
Contributed as a Software Developer
Adam Larsen contributed to the Wheels framework by improving functionality and addressing issues that enhanced the stability and reliability of the codebase. His work helped refine features and ensure a smoother experience for developers, supporting the ongoing growth and maintenance of the project.
Claude
Contributed as a Software Developer
Share Your Experience!
We'd love to hear about your experience! Would you take a moment to share a testimonial?