FW/1 - The Invisible Framework

Framework One and friends...

FW/1 Roadmap

| Comments

BREAKING NEWS!! Updated March 28th, 2019

After seeing this blog post, Steven Neiland stepped up to take over maintenance of the framework! He has been a long-time user of FW/1 and designed the “2.0” version of subsystems four years ago. I’m looking forward to working with Steven to ensure a smooth hand-off over the next few months. Thank you!

State of the FW/1 Union

It’s been a year now since FW/1 4.2.0 was released so I wanted to revisit the roadmap document from that time. At the end of December 2018, I posted to the FW/1 channel on the CFML Slack (and to the FW/1 mailing list) that my involvement with CFML and FW/1 was coming to an end. I’ve asked, several times over the years, for new maintainers to step up for FW/1. Nolan Erck has permissions on the GitHub organization (as owner) but I’m not expecting him to lead development as he has a lot of other things on his plate. At this point, FW/1 is extremely stable and (fairly) well-documented. 4.0.0 was released in Fall 2016. There have been (minor) maintenance releases each year since (4.1.0 in July ‘17 and 4.2.0 at the end of March ‘18).

There have been two very small enhancements on the develop branch since then (thank you Carl Von Stetten and Matthew Clemente) but not enough to warrant a new release (and, with CommandBox, it’s easy enough to install that branch anyway: box install fw1@be). At this point, unless one or more genuinely proactive and engaged maintainers come forward, 4.2.0 will probably be the last official release of the framework.

The Roadmap

The roadmap document (linked above) talks about a refactoring of the lifecycle functionality that was intended to simplify Application.cfc and the “Alternative Application Structure” in current FW/1 apps but it would ultimately have been a significant breaking change (hence the mention of an intermediate 4.5 migration release before the breaking 5.0 release). Since that was mostly driven by my architectural preferences, I don’t see any value in any new maintainers following that path – I never fleshed out, on paper, what that should look like so I’m going to close out the associated GitHub issue for it. Making subsystems more self-contained and more “pluggable” probably should be a goal for any new maintainers, but tackled more incrementally. Beyond that, I don’t know what should be on a roadmap now: perhaps minimal, careful maintenance to fix bugs and stay compatible with new versions of Lucee and Adobe ColdFusion is all that is really needed?

My Road to Here

I’ve made no secret of how my work has transitioned from CFML to Clojure over the last roughly nine years. I initially ported FW/1 to Clojure but then decided to sunset that port, as it became clear that FW/1 added very little value to a (simpler) combination of the Ring, Compojure, Component, and Selmer libraries. At work, we ported our CFML FW/1 apps to Clojure FW/1 apps and then to plain Clojure apps a few years ago. Our primary CFML app – built with ColdBox – was retired completely this month, in favor of a React.js-based front end and a Clojure-based back end. We have two ColdBox apps remaining: a small, customer-facing app that we plan to redesign and rebuild (in Clojure) over the next year, and a medium-sized internal “administration” app that we started migrating to Clojure last year. We’ve gone from four servers running Lucee to just one, and expect to retire that before year end.

I got started with CFML over seventeen years ago, when my then-employer Macromedia acquired Allaire, and as a technology it has been good to me throughout that time – at Macromedia, at Adobe, as a freelancer, at Broadchoice (Flex, Groovy, and Railo), as part of Railo Inc, as a freelancer again, and for several years at World Singles Networks where I also found myself writing Scala for a year or so and then Clojure. The CFML community is one of the friendliest, most supportive technology groups I’ve met, in a career that spans back to the early 80’s, and I’ve missed seeing my CFML friends at conferences as my work focus has shifted – it’s been six years now since I last attended a CFML conference!

I expect I’ll still lurk on the CFML Slack for quite a while, and I’ll stay subscribed to the FW/1 mailing list – forever, I expect – so folks can still reach me for FW/1 and CFML questions and general chit-chat.

FW/1 4.2.0 Released!

| Comments

FW/1 4.2.0 has been released!

This is a maintenance release for FW/1 4.1.0 that includes a handful of bug fixes and some experimental work to try to support ColdBox modules.

FW/1 4.1.0 Released!

| Comments

FW/1 4.1.0 has been released!

This is a maintenance release for FW/1 4.0.0 that includes a number of bug fixes and some minor enhancements. See this blog post about the release candidate for the main changes in this release. Since the release candidate, most of the work has been on updating the documentation and adding an example of using a custom template engine (Mustache) with FW/1.

Note that 4.1.0 includes an important bug fix for 4.0.0 which addresses a race condition that could cause transient beans to be partially resolved, leading to dependencies not being available under heavy load conditions.

Lucee 5.x is now an officially supported platform for FW/1, along with Adobe ColdFusion 10, 11, and 2016, and Lucee 4.5.

FW/1 4.1.0 Release Candidate Available

| Comments

The first Release Candidate of FW/1 4.1.0 is available for testing.

This is a maintenance release for FW/1 4.0.0 that includes a number of bug fixes and some minor enhancements. The most important bug fix addresses a race condition that could cause transient beans to be partially resolved, leading to dependencies not being available under heavy load conditions. My thanks to John Whish and John Berquist for their work in tracking that down and providing a patch to address it!

Other bug fixes mostly focus on error handling.

The enhancements include making session handling pluggable, improving handling of missing views, and a new onReload() extension point. In addition, the process to test FW/1 has been overhauled: it now uses CommandBox and TestBox, making it much easier for contributors to run tests locally, as well as expanding the matrix of servers/versions that can be automatically tested.

Finally, Lucee 5.x is officially supported by this release. Although earlier versions of FW/1 “worked” on Lucee 5.x, the Clojure integration (introduced in FW/1 3.5) only worked in limited cases on Lucee 5.x so I could not consider it “officially supported” (for example, at World Singles, we could not upgrade to Lucee 5.x because it breaks our use of Clojure from CFML). In order to support Lucee 5.x officially, the Clojure integration functionality has been removed from FW/1. The files that provide Clojure integration are still available in the cfmljure repository on GitHub.

I consider this Release Candidate to be “production-ready” so I would appreciate as many users upgrading and testing it as possible!

Thank you to everyone who contributes to FW/1 in every way!

FW/1 4.0.0 Released!

| Comments

The Gold Release of FW/1 4.0.0 is available for general release and production use. The focus of this release is improved REST support:

  • JSON-encoded and URL-encoded POST / PUT body support.
  • Controllers have easy access to HTTP headers.
  • Builder syntax for renderData() result elements.
  • Support for user-supplied rendering functions.
  • Integrated support for HTTP OPTIONS verb.
  • Per-resource error handling.
  • Setting status text (in addition to status code) in HTTP responses.
  • Wildcard HTTP method support.

Dependency Injection (DI/1) has also received a lot of attention in this release, including the addition of a flexible and powerful builder syntax for declaring beans.

See the FW/1 4.0.0 Change Log for full details of all the enhancements and bug fixes. Please note that there are a few breaking (or potentially breaking) changes since 3.5.1, with the most notable one being that Adobe ColdFusion 10 is now the minimum supported version. Support for Railo and Lucee has not changed.

This will be followed by a 4.1 maintenance release and a 4.5 migration release, which will pave the way for some breaking changes planned for the 5.0 release. For more details of future plans, consult the FW/1 Roadmap.

FW/1 4.0.0 Beta 2

| Comments

FW/1 4.0.0 Beta 2 is available. The only change from Beta 1 is that the enableJSONPOST setting has been renamed to decodeRequestBody. This is a breaking change if you were using that setting in the earlier Alpha / Beta builds: you will now get an exception and will need to update your application’s configuration.

For full details, read the Change Log for FW/1 4.0.

FW/1 4.0.0 Alpha 1

| Comments

FW/1 4.0.0 Alpha 1 is available. At this point FW/1 4.0.0 is feature complete – there may be a few very minor changes between now and the Beta, and then only bug fixes through the RC phase. We’ve been using this develop version in production at work all along so I consider it solid enough for serious work.

FW/1 4.0 and Beyond

| Comments

Happy New Year and Welcome to 2016!

FW/1 3.5 has been out for a few months now and I want to talk about what’s coming this year.

FW/1 3.5.0 Released!

| Comments

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!

FW/1 3.5.0 Release Candidate 2 Available!

| Comments

The second Release Candidate of FW/1 3.5.0 is available for testing.

This Release Candidate contains a few bug fixes discovered since Release Candidate 1. I consider this stable enough to evaluate for production usage at this point – I expect this RC to be the Gold Release unless end user testing uncovers a showstopping issue in the next week or two!

You can read the full list of changes since 3.1 on GitHub, along with accepted pull requests since 3.1..

FW/1 Out of the Box

| Comments

FW/1 is up on ForgeBox. ForgeBox is the npm / Maven of the CFML world. If you haven’t heard about it – or you think it’s only for “Box” products – you need to check it out! It’s a repository for CFML projects that can be easily installed via Command Box. Wait! You haven’t heard of that either? Gosh, you’ve got some reading to do! It’ll change the way you do development!

Go get it installed, then read on!