The Gold Release of FW/1 3.5.0 is available for general release and production use. The focus of this release is integration, bringing an improved way to add subsystems to an existing application, an easier way to add FW/1 to a legacy application, support for mixed CFML / Clojure applications, better support for WireBox, and full support for ForgeBox and CommandBox!
The major new features in FW/1 3.5.0 are:
- Subsystems 2.0. A new, more streamlined way to add subsystems to an existing FW/1 application has been added. Thank you to Steven Neiland for the inspiration and guiding principles! Read about Subsystems 2.0 and how they differ from the older approach (which is still supported). The examples have been reworked to use Subsystems 2.0 so you can see how it works in practice.
- An Alternative Application Structure is now supported that allows you to create FW/1 applications that do not require
Application.cfc
extends the FW/1 component. Read about the Alternative Application Structure. Some of the examples have been updated to use this approach so you can see how it works in practice. - Clojure integration. If you have Leiningen installed (Clojure’s build tool) then it is very easy to write services and/or controllers in Clojure and have FW/1 automatically integrate those into your CFML application. Read about mixing CFML & Clojure for more details. An example of Clojure integration is provided in the repository (you’ll need Leiningen installed for that example to run).
- ForgeBox / CommandBox support. FW/1 now has a
box.json
file and is hosted on ForgeBox so it can be easily installed via CommandBox.
In addition to the major features, the following enhancements have been added:
redirect()
allowsqueryString
to be a struct, likebuildURL()
.isFrameworkReloadRequest()
is now public in case an application needs to take action when the framework is reloaded.getSubsystemSectionAndItem()
added to supplementgetFullyQualifiedAction()
(the latter omits the subsystem if it is empty).- The WireBox adapter now supports custom binders.
- The conventions used for various folder names can now be overridden in the framework configuration.
And the following bugs have been fixed:
- 377 - AOP/1 now allows a single interceptor to be applied to multiple objects.
- 361 -
renderData()
could kill sessions (this was backported to 3.1.1). - 336 - account for
expandPath()
returning the wrong directory on ACF11 when the path has a trailing/
.
Finally, FW/1 includes experimental support for Lucee Language, so if you are running a prerelease build of Lucee Server that has Lucee Language support enabled, you can write controllers and views etc in .lc
or .lucee
files and FW/1 will use them.
You can read the full list of changes since 3.1 on GitHub, along with accepted pull requests since 3.1.