Releases: wheels-dev/wheels
Releases · wheels-dev/wheels
Wheels 3.0.0-rc.1+2 (Release Candidate)
Release Candidate 1 for Wheels 3.0.0
This is a pre-release version for community testing. Please report any issues to GitHub.
🎉 Major Changes in 3.0.0
Rebrand: CFWheels → Wheels
- Project renamed from "CFWheels" to "Wheels"
- New domain: wheels.dev (from cfwheels.org)
- New GitHub organization: wheels-dev/wheels (from cfwheels/cfwheels)
Architecture Changes
- New Project Structure: Wheels core moved outside app root for cleaner separation
- Updated Mappings: Application.cfm paths restructured for better organization
- CLI Enhancements: New
wheelsCLI tool with enhanced commandswheels init- Initialize new Wheels projects with Docker supportwheels env setup- Environment configuration and switchingwheels db create/drop- Database management with Oracle support
- macOS Installer: Complete macOS installer package with automated setup
- VSCode Extension API: Enhanced API for better IDE integration
Model Enhancements
- ignoreColumns(): New model config method to exclude columns from mapping
- Improved Model Initialization: Better race condition handling with automatic recovery
- Performance Improvements: Significant findAll() performance optimizations
- Query Enhancements: Native query returnType support
- Calculated Properties: Fixed invalidation issues for better reliability
View Enhancements
- paginationLinks(): Enhanced to set active class on parent elements
Testing & Development
- Rewritten TestUI: Modern Vue-based test runner interface
- Database Support: Updated to latest versions of MySQL, PostgreSQL, SQL Server
- Oracle Support: Full Oracle database support in CLI commands
- Migration System: Updated null property handling (null → allowNull)
Bug Fixes
- Fixed model datasource bugs
- Fixed updateAll() missing JOIN statements with include argument
- Fixed checkbox bugs when checkedValue is not true
- Fixed ambiguous column names using wheels alias
- Fixed duplicate component issues
- Fixed default route handling
- Fixed numeric primary key return values
- Fixed afterFind callback in findAll for structs
- Fixed reload password check for URL IP exceptions
Documentation
- Extensive guide updates and improvements
- Added WHERE clause nested query limitations
- Updated beginner tutorials
- Added ignored columns documentation
- Spelling and grammar fixes throughout
- Test framework functions added to documentation
Testing Infrastructure
- Added Lucee 6 and 7 support
- Added Adobe 2021, 2023, 2025 support
- Updated to Docker Compose v2 syntax
- Enhanced GitHub Actions testing matrix
Potentially Breaking Changes
- Project Structure: Wheels core location changed - requires Application.cfm updates
- Mappings: New mapping structure in Application.cfm
- CLI Commands: New command syntax for database operations
- Dependencies: Updated WireBox (^7.0.0) and TestBox (^6.0.0) requirements
Testing Focus Areas
Please help test these areas:
- Fresh installations on Lucee 5/6/7, Adobe 2021/2023/2025, BoxLang
- Upgrades from 2.5.0 to 3.0.0-rc.1
- New CLI commands (
wheels init,wheels db create, etc.) - Model ignoreColumns() functionality
- Application.cfm mapping changes
- Oracle database support
- macOS installer
Wheels 3.0.0-rc.1+1 (Release Candidate)
Release Candidate 1 for Wheels 3.0.0
This is a pre-release version for community testing. Please report any issues to GitHub Issues.
What's New in 3.0.0
This release represents a major milestone with significant architectural improvements and new features:
Testing Focus Areas
Please help test these critical areas:
- Fresh installations on all supported CFML engines
- Upgrades from 2.x versions
- Plugin compatibility
- Database operations and migrations
- CLI command functionality
CFWheels v2.5.1
CFWheels v2.5.0
Model Enhancements
- PR-1183-Allow datasource argument in finders #1183 - [Adam Chapman]
- PR-1201-Issue #929 validate not nullable columns with default #1201 - [Adam Chapman]
- PR-1202-Remove old oracle test workaround #1202 - [Adam Chapman]
- PR-1205-issue-1182-adds-simplelock-to-sql-caching #1205 - [Adam Chapman]
- PR-1222-Findall() performance bottleneck #1222 - [Adam Chapman]
- PR-1223-refactor-queryCallback-with-inbuilt-query-functions #1223 - [Adam Chapman]
- PR-1226-Invalid column not throwing exception in select argument #1226 - [Zain Ul Abideen]
- PR-1265-improve-performance-refactor-out-listfind #1265 - [Adam Chapman]
- PR-1260-Adds support for native query returnType #1260 - [Adam Chapman]
- PR-1249-Removed the original IF/ELSE condition that invalidates calculated props and added condition #1240 - [Zain Ul Abideen]
View Enhancements
- PR-1254-issue 908 enable paginationLinks() to set active class on parent #1254 - [Zain Ul Abideen]
Bug Fixes
- PR-1227-Return a numeric value if the primary key is Numeric #1227 - [Zain Ul Abideen]
- PR-1257-Checkbox bug when checkedvalue is not true #1257 - [Adam Chapman]
- PR-1246-set the default route if it is not passed in the function #1246 - [Zain Ul Abideen]
- PR-1256-issue 889 unable to duplicate component #1256 - [Zain Ul Abideen]
- PR-1253-Issue 580 select ambiguous column name using the wheels alias #1253 - [Zain Ul Abideen]
- PR-1245-Added afterFind callback hook in the findAll function in case of structs #1245 - [Zain Ul Abideen]
- PR-1302-Check for Reload Password when setting a url IP exception #1302 - Peter Amiri
Miscellaneous
- PR-1175-restoreTestRunnerApplicationScope setting #1175 - [Adam Chapman]
- PR-1176-fix text in core readme file #1176 - [Per Djurner]
- PR-1177-fix text in base template readme file #1177 - [Per Djurner]
- PR-1178-fix text in default template file #1178 - [Per Djurner]
- PR-1185-adds-root-docker-volume #1185 - [Adam Chapman]
- PR-1200-Update the docker-compose command to docker compose v2 syntax #1200 - [Adam Chapman, Peter Amiri]
- PR-1204-Add Lucee 6 to test matrix on local Docker test suite #1204 - [Peter Amiri]
- PR-1203-ensure testing params maintained #1203 - [Adam Chapman]
- PR-1228-Adding addClass attribute in the function textField #1228 - [Zain Ul Abideen]
- PR-1230-Add Adobe 2021 Support to local Docker and GitHub Actions testing - #1230 - Peter Amiri
- PR-1264-update Lucee 6 version used for tests to latest #1264 - [Zac Spitzer - * New Contributor *]
- PR-1241-Fix spelling and remove whitespace from link #1241 - [John Bampton]
- PR-1247-show the current git branch in the debug layout #1247 - [Michael Diederich]
- PR-1250-Added test framework functions in the docs #1250 - [Zain Ul Abideen]
- PR-1255-issue 1179 Downloaded the CDN files and changed paths in files #1255 - [Zain Ul Abideen]
Guides
- PR-1198-Documentation-fixes #1198 - [Adam Chapman]
CFWheels v2.4.0
Bug Fixes
- issue-1091-wheels-paths-in-error-template #1091 - [Adam Chapman]
- issue-1082-validations should not trim properties #1082 - [Adam Chapman]
- issue-1088-Adds SQL parsing regex tweak which correctly handles whitespace #1088 - [Adam Chapman, Adam Cameron]
Miscellaneous
- Adds cfformat ignore marker comments around core "view" cfm files that contain html markup - [Adam Chapman]
- Adds the ability to scroll large items horizontally in the test runner UI #1130 - [Adam Chapman]
- Fix cfformat ignore markers #1129 - [Adam Chapman]
- Enable finder model methods to returnAs "sql", mainly for debugging #1141 - [Adam Chapman]
- Show the Test Runner buttons in the CFWheels GUI on the Package List screen allowing the developer to run the entire test suite instead of one package at a time. - [Peter Amiri]
- The Base Template now contains all necessary placeholders for the CLI to interact with the application and be able to inject code properly. - [Peter Amiri]
- By default the Core tests will run in the application datasource, but the developer can setup a different database for running the Core tests to ensure there is no side effects from running the tests. If you do end up setting a different database for the coreTestDatasourceName, make sure to reload your application after running the Core tests. - [Peter Amiri]
- Fix two broken links in README. [#1150] - [John Bampton - * New Contributor *]
- Fix spelling [#1151][#1158] - [John Bampton - * New Contributor *]
- Add .env parser to parse .env files and add the properties found in the file to this.env scope. #1157 - [Peter Amiri]
- Update the local test suite to supported ARM architecture docker images to make the suite compatible with the Apple Silicon Macs. #1143 - [Peter Amiri]
Guides
CFWheels Version v2.3.0
This is the official 2.3.0 release. There were no new enhancements or bug fixes introduced from release candidate 1 so the change log is essentially the same as v2.3.0.rc.1.
CFWheels Version v2.3.0-rc.1
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 Version 2.2.0
Controller Enhancements
- Added the
statusargument to allrender*()functions to force returning a specific HTTP status code #1025 - [Adam Chapman, Tom King] - CORS
accessControlAllowOrigincan now match subdomain wildcards #1031 - [Tom King]
Model Enhancements
- Experimental adapter for Oracle database - [Andrei B]
- Added
automaticValidationsargument to thepropertymethod - [Per Djurner] - Support named second argument in
findOneBy[Property]And[Property]andfindAllBy[Property]And[Property]- [Per Djurner] - Support
valueargument infindOrCreateBy[Property]- [Per Djurner] - Minor fix for
full null support- [Michael Diederich]
View Enhancements
- Added the
requiredargument toimageTagto suppress exceptions if using non-existent files #979 - [Adam Chapman, Michael Diederich]
Bug Fixes
- Removed authenticity token id attribute to avoid non-unique id warnings in Chrome #953 - [Per Djurner]
- Fixes regular expression bug when using the SQL
INoperator #944 - [Adam Chapman, Per Djurner] - Display content in maintenance mode on newer Lucee versions #848 - [Per Djurner]
validatesUniquenessOfdoes not respect allowBlank #914 - [Adam Chapman]Wheels.RouteNotFoundError page now escapes thearguments.pathto prevent XSS attacks - [Michael Diederich]buttonTo()now uses<button>internally instead of<input>allowing for html in content - #798 - [Tom Sucaet, Tom King, Per Djurner]- Minor SQL preview fix in GUI - #992 - [Brandon Shea, Tom King]
Miscellaneous
- Added the
refreshurl parameter for auto refreshing test framework html - #986 - [Adam Chapman] - Allow custom migrator templates by scanning the
/migrator/templatesdirectory - [Adam Chapman] - Minimum Lucee 5 version is now 5.3.2.77 - Tests added - [Michael Diederich]
- Use
http_x_forwarded_prototo determine if the application is running behind a loadbalancer that is performing SSL offloading - [Peter Amiri] - Allow the combination of
urlandparamsarguments withredirectTo- [Adam Chapman] - Fixed some variable scoping - [Michael Diederich]
- Github Actions CI Pipeline - [Adam Chapman, Tom King]
- Flash Cookie can now be disabled via
set(flashStorage="none")#978 [Tom King] processRequest()accepts a route param -#1030 - [Adam Chapman]- Migration files are written with 664 mode -#1034 - [Adam Chapman]
CFWheels Version 2.1.0
Bug Fixes
- Fixed pagination order ambiguous column name exception - #980 [Adam Chapman, Mike Lange]
- Renames findLast() to findLastOne() for [email protected]+92 upwards compatibility #988
CFWheels Version 2.1.0 Beta
Potentially breaking changes
(Or, just things to look out for...)
- The new CFWheels internal GUI is more isolated and runs in it's own component: previously this was extending the developers main
Controller.cfcwhich caused multiple issues. The migrator, test runner and routing GUIs have therefore all been re-written. - The plugins system behaviour no longer chains multiple functions of the same name as this was a major performance hit. It's recommended that plugin authors check their plugins to run on 2.1
- HTTP Verb/Method switching is now no longer allowed via GET requests and must be performed via POST (i.e via
_method)
Model Enhancements
- Migrator now automatically manages the timestamp columns on
addRecord()andupdateRecord()calls - #852 [Charley Contreras] - Migrator correctly honors CFWheels Timestamp configuration settings (
setUpdatedAtOnCreate, softDeleteProperty, timeStampMode, timeStampOnCreateProperty, timeStampOnUpdateProperty) - #852 [Charley Contreras] MSSQLnow usesNVARCHAR(max)instead ofTEXT#896 [Reuben Brown]- Allow createdAt and updatedAt to be explicitly assigned using the
allowExplicitTimestamps=trueargument - #887 - [Adam Chapman]
Controller Enhancements
- New
set(flashAppend=true)option allows for appending of a Flash key instead of replacing - #855 - [Tom King] flashMessages()now checks for an array of strings or just a string and outputs appropriately - #855 - [Tom King]flashInsert()can now accept a one dimensional array - #855 - [Tom King]
Bug Fixes
- Allow uppercase table names containing reserved substrings like
ORandAND- #765 [Dmitry Yakhnov, Adam Chapman] - Calculated properties can now override an existing property - #764 [Adam Chapman, Andy Bellenie]
- Filters are now correctly called if there is more than one after filter - #853 [Brandon Shea, Tom King, Adam Chapman]
- Minor fix for duplicate debug output in the test suite - #176 [Adam Chapman, Tom King]
- Convert
handleto a valid variable name so it doesn't break when using dot notation - #846 [Per Djurner] - The
validatesUniquenessOf()check now handles cases when duplicates already exist - #480 [Randall Meeker, Per Djurner] validatesConfirmationOf()now has acaseSensitiveargument to optionally perform a case sensitive comparison - #918 [Tom King]sendFile()no longer expands an already expanded directory on ACF2016 - #873 [David Paul Belanger, Tom King, strubenstein]- Automatic database migrations onApplicationStart now correctly reference appropriate Application scope - #870 [Tom King]
usesLayout()now can be called more than once and properly respects the order called - #891 [David Paul Belanger]- Migrator MSSQL adapter now respects
TimeandTimestampColumn Types - #906 [Reuben Brown] - Automatic migrations fail on application start - #913 [Adam Chapman]
- Default
cacheFileCheckingtotruein development mode - [Adam Chapman, Steve Harvey] - Migrator columnNames list values are now trimmed - #919 [Adam Chapman]
- Fixes bug when httpRequestData content is a JSON array - #926 [Adam Chapman]
- When httpRequestData content is a JSON array, contents are now automatically added to
params._json- #939 [Tom King] - Fixes bug where Migrator $execute() always appends semi-colon - #924 [Adam Chapman]
- Fixes bug where model createdAt property is changed upon update - #927 [Brandon Shea, Adam Chapman]
- Fixed silent application.wheels scope exception hampering autoMigrateDatabase - #957 [Adam Chapman, Tom King]
Miscellaneous
- Added the ability to pass
&lock=falsein the URL for when reload requests won't work due to locking - [Per Djurner] - Basic 302 redirects now available in mapper via
redirectargument forGET/PUT/PATCH/POST/DELETE- #847 - [Tom King] .[format]based routes can now be turned off inresources()andresource()viamapFormat=false- #899 - [Tom King]mapFormatcan now be set as a default inmapper()for all childresources()andresource()calls - #899 - [Tom King]HEADrequests are now aliased toGETrequests #860 - [Tom King]- Added the
includeFiltersargument to theprocessRequestfunction for skipping execution of filters during controller unit tests - [Adam Chapman] - Added the
useIndexargument to finders for adding table index hints #864 - [Adam Chapman] - HTTP Verb/Method switching is now no longer allowed via
GETrequests and must be performed viaPOST#886 - [Tom King] - CORS Header
Access-Control-Allow-Origincan now be set either via a simple value or list inaccessControlAllowOrigin()#888 [Tom King] - CORS Header
Access-Control-Allow-Methodscan now be set viaaccessControlAllowMethods(value)#888 [Tom King] - CORS Header
Access-Control-Allow-Credentialscan now be turned on viaaccessControlAllowCredentials(true); #888 [Tom King] accessControlAllowMethodsByRoute()now allows for automatic matching of available methods for a route and sets CORS HeaderAccess-Control-Allow-Methodsappropriately #888 [Tom King]- CORS Header can now be set via
accessControlAllowHeaders(value)#888 [Tom King] - Performance Improvement: Scanning of Models and Controllers #917 [Adam Chapman]
- Added the
authenticityToken()function for returning the raw CSRF authenticity token #925 [Adam Chapman] - Adds
enablePublicComponent,enableMigratorComponent,enablePluginsComponentenviroment settings to completely disable those features #926 [Tom King] - New CFWheels Internal GUI #931 [Tom King]
pluginRunner()now removed in favour of 1.x plugin behaviour for performance purposes #916 [Core Team]- Adds
validateTestPackageMetaDataenvironment setting for skipping test package validation on large test suites #950 [Adam Chapman] - Added aliases for
migrator.TableDefinitionfunctions to allow singular variant of thecolumnNamesproperty #922 [Sébastien FOCK CHOW THO] onAbortis now supported viaevents/onabort.cfm#962 [Brian Ramsey]