<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[FW/1 - The Invisible Framework]]></title>
  <link href="http://framework-one.github.io/atom.xml" rel="self"/>
  <link href="http://framework-one.github.io/"/>
  <updated>2021-07-18T02:35:50+00:00</updated>
  <id>http://framework-one.github.io/</id>
  <author>
    <name><![CDATA[Sean Corfield]]></name>
    <email><![CDATA[your-email@example.com]]></email>
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[FW/1 4.3 Beta]]></title>
    <link href="http://framework-one.github.io/blog/2020/12/21/fw1-4-3-0-beta/"/>
    <updated>2020-12-21T08:00:00+00:00</updated>
    <id>http://framework-one.github.io/blog/2020/12/21/fw1-4-3-0-beta</id>
    <content type="html"><![CDATA[<p>Its been a long time coming but after over a year of learning the framework, accepting bug fixes, fighting jekyl and surviving the general hell that has been 2020 I can happily announce that <a href="https://github.com/framework-one/fw1/tree/v4.3.0-beta.1">FW/1 4.3.0 beta</a> is now available for testing. This release is mostly bug fixes but also includes a new small feature hence the minor version number bump.</p>

<h2 id="after-430">After 4.3.0</h2>

<p>So now that we are here, what is in store for FW/1. Well there are some new outstanding PR’s that will be getting reviewed for 4.3.1 and then most likely some updates to how the documentation is generated since jekyl has proven to be so much of a pain to work with.</p>

<p>After that the plan for now is to continue basic maintenance. The question I find myself asking is, is further enhancing the framework a good idea? At this point it has grown significantly from the original ethos of a small simple single file framework that Sean started with and additional complexity is not always a good thing. I do have some ideas of further enhancing the subsystem behaviors but I’ve run into issues that make me think a ground up rewrite of certain sections of code may be necessary. Additionally I know Sean was looking into the possibility of a plugin system, but is there a desire for something like this?&lt;/p&gt;</p>

<p>These are all questions I will be pondering over the next few months while we work on getting the beta to stable status.</p>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FW/1 4.3 Stable]]></title>
    <link href="http://framework-one.github.io/blog/2020/12/14/fw1-4-3-0-stable/"/>
    <updated>2020-12-14T08:00:00+00:00</updated>
    <id>http://framework-one.github.io/blog/2020/12/14/fw1-4-3-0-stable</id>
    <content type="html"><![CDATA[<p>Just a quick note that 4.3.0 has been marked stable</p>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FW/1 Roadmap]]></title>
    <link href="http://framework-one.github.io/blog/2019/03/27/fw1-roadmap/"/>
    <updated>2019-03-27T20:15:00+00:00</updated>
    <id>http://framework-one.github.io/blog/2019/03/27/fw1-roadmap</id>
    <content type="html"><![CDATA[<h2 id="breaking-news-updated-march-28th-2019">BREAKING NEWS!! Updated March 28th, 2019</h2>

<p>After seeing this blog post, <a href="https://github.com/sneiland">Steven Neiland</a> 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!</p>

<h2 id="state-of-the-fw1-union">State of the FW/1 Union</h2>

<p>It’s been a year now since <a href="https://github.com/framework-one/fw1/releases/tag/v4.2.0">FW/1 4.2.0</a> was released so I wanted to revisit the <a href="/documentation/roadmap/">roadmap document</a> 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).</p>

<p>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: <code class="language-plaintext highlighter-rouge">box install fw1@be</code>). 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.</p>

<h2 id="the-roadmap">The Roadmap</h2>

<p>The roadmap document (linked above) talks about a refactoring of the lifecycle functionality that was intended to simplify <code class="language-plaintext highlighter-rouge">Application.cfc</code> 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?</p>

<h2 id="my-road-to-here">My Road to Here</h2>

<p>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.</p>

<p>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 <a href="https://worldsinglesnetworks.com">World Singles Networks</a> 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!</p>

<p>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.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FW/1 4.2.0 Released!]]></title>
    <link href="http://framework-one.github.io/blog/2018/03/27/fw1-4-2-0-released/"/>
    <updated>2018-03-27T11:25:00+00:00</updated>
    <id>http://framework-one.github.io/blog/2018/03/27/fw1-4-2-0-released</id>
    <content type="html"><![CDATA[<p><a href="https://github.com/framework-one/fw1/releases/tag/v4.2.0">FW/1 4.2.0</a> has been released!</p>

<p>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.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FW/1 4.1.0 Released!]]></title>
    <link href="http://framework-one.github.io/blog/2017/07/01/fw1-4-1-0-released/"/>
    <updated>2017-07-01T20:00:00+00:00</updated>
    <id>http://framework-one.github.io/blog/2017/07/01/fw1-4-1-0-released</id>
    <content type="html"><![CDATA[<p><a href="https://github.com/framework-one/fw1/releases/tag/v4.1.0">FW/1 4.1.0</a> has been released!</p>

<p>This is a maintenance release for FW/1 4.0.0 that includes a number of bug fixes and some minor enhancements. See this <a href="http://framework-one.github.io/blog/2017/06/16/fw1-4-1-0-rc1/">blog post about the release candidate</a> 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.</p>

<p>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.</p>

<p>Lucee 5.x is now an officially supported platform for FW/1, along with Adobe ColdFusion 10, 11, and 2016, and Lucee 4.5.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FW/1 4.1.0 Release Candidate Available]]></title>
    <link href="http://framework-one.github.io/blog/2017/06/16/fw1-4-1-0-rc1/"/>
    <updated>2017-06-16T10:35:00+00:00</updated>
    <id>http://framework-one.github.io/blog/2017/06/16/fw1-4-1-0-rc1</id>
    <content type="html"><![CDATA[<p>The first <a href="https://github.com/framework-one/fw1/releases/tag/v4.1.0-rc1">Release Candidate of FW/1 4.1.0</a> is available for testing.</p>

<p>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 <a href="https://github.com/aliaspooryorik">John Whish</a> and <a href="https://github.com/jcberquist">John Berquist</a> for their work in tracking that down and providing a patch to address it!</p>

<p>Other bug fixes mostly focus on error handling.</p>

<p>The enhancements include making session handling pluggable, improving handling of missing views, and a new <code class="language-plaintext highlighter-rouge">onReload()</code> 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.</p>

<p>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 <a href="https://github.com/framework-one/cfmljure">cfmljure repository</a> on GitHub.</p>

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

<p>Thank you to everyone who contributes to FW/1 in every way!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FW/1 4.0.0 Released!]]></title>
    <link href="http://framework-one.github.io/blog/2016/09/16/fw1-4-0-0-released/"/>
    <updated>2016-09-16T21:15:00+00:00</updated>
    <id>http://framework-one.github.io/blog/2016/09/16/fw1-4-0-0-released</id>
    <content type="html"><![CDATA[<p>The <a href="https://github.com/framework-one/fw1/releases/tag/v4.0.0">Gold Release of FW/1 4.0.0</a> is available for general release and production use. The focus of this release is improved REST support:</p>

<ul>
  <li>JSON-encoded and URL-encoded POST / PUT body support.</li>
  <li>Controllers have easy access to HTTP headers.</li>
  <li>Builder syntax for <code class="language-plaintext highlighter-rouge">renderData()</code> result elements.</li>
  <li>Support for user-supplied rendering functions.</li>
  <li>Integrated support for HTTP <code class="language-plaintext highlighter-rouge">OPTIONS</code> verb.</li>
  <li>Per-resource error handling.</li>
  <li>Setting status text (in addition to status code) in HTTP responses.</li>
  <li>Wildcard HTTP method support.</li>
</ul>

<p>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.</p>

<p>See the <a href="http://framework-one.github.io/documentation/4.0/changes.html">FW/1 4.0.0 Change Log</a> 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.</p>

<p>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 <a href="http://framework-one.github.io/documentation/roadmap.html">FW/1 Roadmap</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FW/1 4.0.0 Release Candidate 1]]></title>
    <link href="http://framework-one.github.io/blog/2016/07/26/fw1-4-0-0-rc-1/"/>
    <updated>2016-07-26T12:00:00+00:00</updated>
    <id>http://framework-one.github.io/blog/2016/07/26/fw1-4-0-0-rc-1</id>
    <content type="html"><![CDATA[<p><a href="https://github.com/framework-one/fw1/releases/tag/v4.0.0-rc1">FW/1 4.0.0 RC 1</a> is available.
The only change from Beta 2 is a bug fix in the handling of load listeners for subsystem bean factories (the default load listener is no longer inherited).</p>

<p>For full details, read the <a href="http://framework-one.github.io/documentation/4.0/changes.html">Change Log for FW/1 4.0</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FW/1 4.0.0 Beta 2]]></title>
    <link href="http://framework-one.github.io/blog/2016/07/12/fw1-4-0-0-beta-2/"/>
    <updated>2016-07-12T12:35:00+00:00</updated>
    <id>http://framework-one.github.io/blog/2016/07/12/fw1-4-0-0-beta-2</id>
    <content type="html"><![CDATA[<p><a href="https://github.com/framework-one/fw1/releases/tag/v4.0.0-beta2">FW/1 4.0.0 Beta 2</a> is available.
The only change from Beta 1 is that the <code class="language-plaintext highlighter-rouge">enableJSONPOST</code> setting has been renamed to <code class="language-plaintext highlighter-rouge">decodeRequestBody</code>.
This is a <strong>breaking change</strong> 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.</p>

<p>For full details, read the <a href="http://framework-one.github.io/documentation/4.0/changes.html">Change Log for FW/1 4.0</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FW/1 4.0.0 Beta 1]]></title>
    <link href="http://framework-one.github.io/blog/2016/07/11/fw1-4-0-0-beta-1/"/>
    <updated>2016-07-11T14:45:00+00:00</updated>
    <id>http://framework-one.github.io/blog/2016/07/11/fw1-4-0-0-beta-1</id>
    <content type="html"><![CDATA[<p><a href="https://github.com/framework-one/fw1/releases/tag/v4.0.0-beta1">FW/1 4.0.0 Beta 1</a> is available.
Per those release notes, the beta contains a small number of enhancements and bug fixes since Alpha 1 was released in March.</p>

<p>For full details, read the <a href="http://framework-one.github.io/documentation/4.0/changes.html">Change Log for FW/1 4.0</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FW/1 4.0.0 Alpha 1]]></title>
    <link href="http://framework-one.github.io/blog/2016/03/05/fw1-4-0-0-alpha-1/"/>
    <updated>2016-03-05T17:00:00+00:00</updated>
    <id>http://framework-one.github.io/blog/2016/03/05/fw1-4-0-0-alpha-1</id>
    <content type="html"><![CDATA[<p><a href="https://github.com/framework-one/fw1/releases/tag/v4.0.0-alpha1">FW/1 4.0.0 Alpha 1</a> 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 <strong>develop</strong> version in production at work all along so I consider it solid enough for serious work.<!-- more --></p>

<p>The focus of the 4.0 release is on improving REST support. Improvements include:</p>

<ul>
  <li>JSON-encoded POST body support.</li>
  <li>Controllers have easy access to HTTP headers.</li>
  <li>Builder syntax for <code class="language-plaintext highlighter-rouge">renderData()</code> result elements.</li>
  <li>Support for user-supplied rendering functions.</li>
  <li>Integrated support for HTTP <code class="language-plaintext highlighter-rouge">OPTIONS</code> verb.</li>
  <li>Per-resource error handling.</li>
  <li>Setting status text (in addition to status code) in HTTP responses.</li>
  <li>Wildcard HTTP method support.</li>
</ul>

<p>In addition, DI/1 has had a number of enhancements, including the addition of a builder syntax for programmatically declaring beans.</p>

<p>For more detail, read the <a href="http://framework-one.github.io/documentation/4.0/changes.html">Change Log for FW/1 4.0</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FW/1 4.0 and Beyond]]></title>
    <link href="http://framework-one.github.io/blog/2016/01/05/fw1-4-0-and-beyond/"/>
    <updated>2016-01-05T22:20:00+00:00</updated>
    <id>http://framework-one.github.io/blog/2016/01/05/fw1-4-0-and-beyond</id>
    <content type="html"><![CDATA[<p>Happy New Year and Welcome to 2016!</p>

<p>FW/1 3.5 has been out for a few months now and I want to talk about what’s coming this year.<!-- more -->
FW/1 4.0 is well under way and the themes are REST APIs and enhancements to DI/1. You can read <a href="http://framework-one.github.io/documentation/4.0/changes.html">the FW/1 4.0 change log</a> here to see how much has been done so far. There are <a href="https://github.com/framework-one/fw1/issues?q=is%3Aopen+is%3Aissue+milestone%3A4.0">only a few issues left for 4.0</a> so we’re close to the first Alpha release at this point.</p>

<p>Why the 4.0 version? A major version number change indicates breaking changes. 4.0 drops support for Adobe ColdFusion 9.0.x because it relies on closures. Frankly, I’d like to drop support for Adobe ColdFusion 10 so I could rely on using member functions, but I feel it’s important to support two major versions. Just bear in mind that Raijin – ColdFusion 2016 – is coming and when that’s released, I will drop support for ACF10!</p>

<p>Aside from the minimum version support, FW/1 4.0 includes a (potentially) breaking change around <code class="language-plaintext highlighter-rouge">property</code> declarations: if a <code class="language-plaintext highlighter-rouge">property</code> includes a type or default, it will no longer be considered for injection. In FW/1 3.5, typed properties could be excluded if you specified <code class="language-plaintext highlighter-rouge">omitTypedProperties : true</code>. That is the default in 4.0 so you can still restore the earlier behavior. In addition, 4.0 now ignores defaulted properties but you can specify <code class="language-plaintext highlighter-rouge">omitDefaultedProperties : false</code> to override that new behavior.</p>

<p>The next planned version of FW/1 will be 4.5 – a fairly major release that will pave the way for 5.0, in the same way 2.5 paved the way for 3.0. In 5.0, the request lifecycle methods will move from <code class="language-plaintext highlighter-rouge">Application.cfc</code> (or your custom CFC that extends <code class="language-plaintext highlighter-rouge">framework.one</code> in the <strong>Alternative Application Structure</strong>) to a separate CFC, and subsystems will also be able to specify a request lifecycle with a <code class="language-plaintext highlighter-rouge">subsystem.cfc</code> – and subsystems with such a CFC will be eagerly loaded at application startup (whereas subsystems are lazily loaded today). In order to provide a smooth upgrade path, FW/1 4.5 will support most of those features but disabled by default and will provide warnings or throw exceptions if the behavior would change in 5.0.</p>

<p>As always, I want FW/1 to be driven by your needs so please raise issues on the <a href="http://groups.google.com/group/framework-one/">mailing list</a> or on <a href="https://github.com/framework-one/fw1">GitHub</a> so that your voices are heard and can drive future versions of one of CFML’s most popular MVC/DI/AOP frameworks!</p>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FW/1 3.5.0 Released!]]></title>
    <link href="http://framework-one.github.io/blog/2015/10/21/fw1-3-5-0-released/"/>
    <updated>2015-10-21T12:00:00+00:00</updated>
    <id>http://framework-one.github.io/blog/2015/10/21/fw1-3-5-0-released</id>
    <content type="html"><![CDATA[<p>The <a href="https://github.com/framework-one/fw1/releases/tag/v3.5.0">Gold Release of FW/1 3.5.0</a> 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!<!-- more --></p>

<p>The major new features in FW/1 3.5.0 are:</p>

<ul>
  <li>Subsystems 2.0. A new, more streamlined way to add subsystems to an existing FW/1 application has been added. Thank you to <a href="https://github.com/sneiland">Steven Neiland</a> for the inspiration and guiding principles! Read about <a href="http://framework-one.github.io/documentation/using-subsystems.html">Subsystems 2.0</a> 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.</li>
  <li>An <strong>Alternative Application Structure</strong> is now supported that allows you to create FW/1 applications that do not require <code class="language-plaintext highlighter-rouge">Application.cfc</code> extends the FW/1 component. Read about <a href="http://framework-one.github.io/documentation/developing-applications.html#alternative-application-structure">the Alternative Application Structure</a>. Some of the examples have been updated to use this approach so you can see how it works in practice.</li>
  <li>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 <a href="http://framework-one.github.io/documentation/cfml-and-clojure.html">mixing CFML &amp; Clojure</a> for more details. An example of Clojure integration is provided in the repository (you’ll need <a href="http://leiningen.org">Leiningen</a> installed for that example to run).</li>
  <li>ForgeBox / CommandBox support. FW/1 now has a <code class="language-plaintext highlighter-rouge">box.json</code> file and is hosted on ForgeBox so it can be easily installed via CommandBox.</li>
</ul>

<p>In addition to the major features, the following enhancements have been added:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">redirect()</code> allows <code class="language-plaintext highlighter-rouge">queryString</code> to be a struct, like <code class="language-plaintext highlighter-rouge">buildURL()</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">isFrameworkReloadRequest()</code> is now public in case an application needs to take action when the framework is reloaded.</li>
  <li><code class="language-plaintext highlighter-rouge">getSubsystemSectionAndItem()</code> added to supplement <code class="language-plaintext highlighter-rouge">getFullyQualifiedAction()</code> (the latter omits the subsystem if it is empty).</li>
  <li>The WireBox adapter now supports custom binders.</li>
  <li>The conventions used for various folder names can now be overridden in the framework configuration.</li>
</ul>

<p>And the following bugs have been fixed:</p>

<ul>
  <li><a href="https://github.com/framework-one/fw1/issues/377">377</a> - AOP/1 now allows a single interceptor to be applied to multiple objects.</li>
  <li><a href="https://github.com/framework-one/fw1/issues/361">361</a> - <code class="language-plaintext highlighter-rouge">renderData()</code> could kill sessions (this was backported to 3.1.1).</li>
  <li><a href="https://github.com/framework-one/fw1/issues/336">336</a> - account for <code class="language-plaintext highlighter-rouge">expandPath()</code> returning the wrong directory on ACF11 when the path has a trailing <code class="language-plaintext highlighter-rouge">/</code>.</li>
</ul>

<p>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 <code class="language-plaintext highlighter-rouge">.lc</code> or <code class="language-plaintext highlighter-rouge">.lucee</code> files and FW/1 will use them.</p>

<p>You can read the <a href="https://github.com/framework-one/fw1/issues?q=is%3Aissue+milestone%3A3.5+is%3Aclosed">full list of changes since 3.1</a> on GitHub, along with
<a href="https://github.com/framework-one/fw1/pulls?q=is%3Apr+is%3Aclosed+milestone%3A3.5">accepted pull requests since 3.1</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FW/1 3.5.0 Release Candidate 2 Available!]]></title>
    <link href="http://framework-one.github.io/blog/2015/10/06/fw1-3-5-0-rc-2/"/>
    <updated>2015-10-06T15:40:00+00:00</updated>
    <id>http://framework-one.github.io/blog/2015/10/06/fw1-3-5-0-rc-2</id>
    <content type="html"><![CDATA[<p>The <a href="https://github.com/framework-one/fw1/releases/tag/v3.5.0-rc2">second Release Candidate of FW/1 3.5.0</a> is available for testing.</p>

<p>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!</p>

<p>You can read the <a href="https://github.com/framework-one/fw1/issues?q=is%3Aissue+milestone%3A3.5+is%3Aclosed">full list of changes since 3.1</a> on GitHub, along with
<a href="https://github.com/framework-one/fw1/pulls?q=is%3Apr+is%3Aclosed+milestone%3A3.5">accepted pull requests since 3.1</a>..</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FW/1 3.5.0 Release Candidate 1 Available!]]></title>
    <link href="http://framework-one.github.io/blog/2015/09/22/fw1-3-5-0-rc-1/"/>
    <updated>2015-09-22T12:35:00+00:00</updated>
    <id>http://framework-one.github.io/blog/2015/09/22/fw1-3-5-0-rc-1</id>
    <content type="html"><![CDATA[<p>The <a href="https://github.com/framework-one/fw1/releases/tag/v3.5.0-rc1">first Release Candidate of FW/1 3.5.0</a> is available for testing.</p>

<p>This Release Candidate contains just bug fixes since Beta 2. Beta 2 contained mostly bug fixes since Beta 1, with one small enhancement to DI/1 (<code class="language-plaintext highlighter-rouge">liberal</code> plural support, e.g., <code class="language-plaintext highlighter-rouge">libraries</code> becomes <code class="language-plaintext highlighter-rouge">library</code>).</p>

<p>You can read the <a href="https://github.com/framework-one/fw1/issues?q=is%3Aissue+milestone%3A3.5+is%3Aclosed">full list of changes since 3.1</a> on GitHub.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FW/1 3.5.0 Beta 1 Available!]]></title>
    <link href="http://framework-one.github.io/blog/2015/09/10/fw1-3-5-0-beta-1/"/>
    <updated>2015-09-10T13:35:00+00:00</updated>
    <id>http://framework-one.github.io/blog/2015/09/10/fw1-3-5-0-beta-1</id>
    <content type="html"><![CDATA[<p>The <a href="https://github.com/framework-one/fw1/releases/tag/v3.5.0-beta1">first Beta release of FW/1 3.5.0</a> is available for testing.</p>

<p>The focus of this release is integration:<!--more--></p>

<ul>
  <li>Support for controllers and services to be written in CFML (<code class="language-plaintext highlighter-rouge">.cfc</code>), Clojure (<code class="language-plaintext highlighter-rouge">.clj</code>), or Lucee (<code class="language-plaintext highlighter-rouge">.lucee</code>)</li>
  <li>Support for views and layouts to be written in CFML (<code class="language-plaintext highlighter-rouge">.cfm</code>) or Lucee (<code class="language-plaintext highlighter-rouge">.lucee</code>)</li>
  <li>Configurable folder names to set your own conventions (for <em>controllers</em>, <em>layouts</em>, <em>subsystems</em>, and <em>views</em>)</li>
  <li>Support for <code class="language-plaintext highlighter-rouge">Application.cfc</code> to use FW/1 without extending <code class="language-plaintext highlighter-rouge">framework.one</code></li>
  <li>A new, cleaner, more consistent set of conventions for adding subsystems to an existing application</li>
</ul>

<p>You can read the <a href="https://github.com/framework-one/fw1/issues?q=is%3Aissue+milestone%3A3.5+is%3Aclosed">full list of changes since 3.0</a> on GitHub.</p>

<p>The <a href="/documentation/3.5/">documentation for 3.5</a> has been completely overhauled with complete descriptions of all the new features, as well as many
clarifications and expansions of existing features. In particular, you’ll want to check out:</p>

<ul>
  <li><a href="/documentation/3.5/developing-applications.html#alternative-application-structure">Alternative Application Structure</a></li>
  <li><a href="/documentation/3.5/using-subsystems.html#subsystems-10-vs-20">Subsystems 1.0 vs 2.0</a></li>
  <li><a href="/documentation/3.5/cfml-and-clojure.html">Using Clojure with CFML</a></li>
</ul>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FW/1 Out of the Box]]></title>
    <link href="http://framework-one.github.io/blog/2015/09/06/out-of-the-box/"/>
    <updated>2015-09-06T23:00:00+00:00</updated>
    <id>http://framework-one.github.io/blog/2015/09/06/out-of-the-box</id>
    <content type="html"><![CDATA[<p>FW/1 is up on <a href="http://www.coldbox.org/forgebox">ForgeBox</a>. 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 <a href="https://www.ortussolutions.com/products/commandbox">Command Box</a>. Wait! You haven’t heard of that either? Gosh, you’ve got some reading to do! It’ll change the way you do development!</p>

<p>Go get it installed, then read on!<!--more--></p>

<p>Now you have <code class="language-plaintext highlighter-rouge">box</code> installed, here’s how to get up and running with FW/1 easily:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&gt; box
CommandBox:mydir&gt; install fw1-commands
... you only need to do this once ...
CommandBox:mydir&gt; mkdir example
CommandBox:mydir&gt; cd example
CommandBox:example&gt; fw1 create app example basic
CommandBox:example&gt; install fw1
... installs stable 3.1.2 version ...
CommandBox:example&gt; start
</code></pre></div></div>

<p>At this point it’ll open a browser running your new skeleton FW/1 app. Happy coding!</p>

<p>Note that you don’t need to have installed a CFML server, or set up a webroot - <code class="language-plaintext highlighter-rouge">box</code> can start a CFML server in any directory so you can get up and running quickly!</p>

<p>You can check out the various <a href="https://github.com/framework-one/fw1-commands">FW/1 commands</a> available inside <code class="language-plaintext highlighter-rouge">box</code> but, like Ruby on Rails, they let you quickly add new controllers, views, subsystems and so on to your application. Huge kudos to Tony Junkes for contributing this to the FW/1 family of projects!</p>

<p>Going forward, my plan is that <code class="language-plaintext highlighter-rouge">install fw1</code> will always install the current stable (master) version — I just need to remember to keep it up to date! — and you can also install specific versions (currently <code class="language-plaintext highlighter-rouge">fw1-3.1.2</code> and <code class="language-plaintext highlighter-rouge">fw1-3.5.0</code>). The latter installs from the develop branch. Support for true multiple version installs is planned for <code class="language-plaintext highlighter-rouge">box</code>, possibly next month.</p>

<p>One of the things that is really nice about this is you can switch FW/1 versions as easily as:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>CommandBox:example&gt; uninstall fw1
CommandBox:example&gt; install fw1-3.5.0
</code></pre></div></div>

<p>Now your app is running 3.5.0 (Alpha 2) instead of the stable release!</p>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FW/1 New Releases etc]]></title>
    <link href="http://framework-one.github.io/blog/2015/09/06/fw1-news/"/>
    <updated>2015-09-06T22:25:00+00:00</updated>
    <id>http://framework-one.github.io/blog/2015/09/06/fw1-news</id>
    <content type="html"><![CDATA[<p>A couple of months have passed since <a href="http://framework-one.github.io/blog/2015/07/12/fw1-3-1-released/">FW/1 3.1 was released</a> but things have been busy behind the scenes!</p>

<p>As indicated in July, work on FW/1 3.5 had been progressing in parallel (the first time two releases of FW/1 have been worked on concurrently!) and you can already download <a href="https://github.com/framework-one/fw1/releases/tag/v3.5.0-alpha2">FW/1 3.5 Alpha 2</a>.
Yes, there was an <a href="https://github.com/framework-one/fw1/releases/tag/v3.5.0-alpha1">Alpha 1</a> as well, but as work progressed on the <a href="http://framework-one.github.io/documentation/3.5/">massively overhauled 3.5 documentation</a>, some important usability enhancements
appeared and a new alpha was released within 24 hours! In particular, the <a href="http://framework-one.github.io/documentation/3.5/cfml-and-clojure.html">Clojure and CFML Sitting in a Tree</a> section has been extensively updated and includes a fully worked example of
how to create FW/1 application from scratch using the REPL to create Clojure services and controllers, with CFML views and layouts!</p>

<p>You’ll also probably notice that the FW/1 website has had a facelift, finally getting the look’n’feel that Kevin Stannard designed five years ago. Better late than never, and huge thanks to Kevin again for his wonderful logo design and choice of colors!
The 3.5 documentation now includes a table of contents on each page, making it easier to navigate (this will probably get backported to 3.1 and 3.0 at some point).</p>

<p>In addition to the ongoing work on FW/1 3.5, we also have an <a href="https://github.com/framework-one/fw1/releases/tag/v3.1.1">important bug fix release for the 3.1.x version</a> which addresses a potential problem with REST APIs.</p>

<p>Finally, if you’re a <a href="https://www.ortussolutions.com/products/commandbox">CommandBox</a> fan, we have good news: you can now easily install FW/1 3.1.2 and 3.5.0 (prerelease) via <code class="language-plaintext highlighter-rouge">box</code>. I’ll be blogging about this shortly. The 3.1.2 release is exactly the same as 3.1.1 (including the version number!)
but it includes <code class="language-plaintext highlighter-rouge">box.json</code> for compatibility with ForgeBox / CommandBox. In addition, Tony Junkes has contributed an <a href="https://github.com/framework-one/fw1-commands">initial set of <code class="language-plaintext highlighter-rouge">box</code> commands for FW/1</a> that let you get up and running quickly. This will be covered in the next blog post.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FW/1 3.1 Released!]]></title>
    <link href="http://framework-one.github.io/blog/2015/07/12/fw1-3-1-released/"/>
    <updated>2015-07-12T20:00:00+00:00</updated>
    <id>http://framework-one.github.io/blog/2015/07/12/fw1-3-1-released</id>
    <content type="html"><![CDATA[<p>The “gold” release of FW/1 3.1 (3.1.0) is now available for production use! You can <a href="https://github.com/framework-one/fw1/releases/tag/v3.1.0">download FW/1 3.1.0 from GitHub</a>.</p>

<p>FW 3.1 is a maintenance release of the 3.x series, containing a number of bug fixes and enhancements. The main new feature of release 3.1 is the addition of AOP/1, thanks to the tireless work of <a href="https://github.com/dbudde">Daniel Budde</a>.<!--more--></p>

<h2 id="aop1">AOP/1</h2>
<p>AOP/1 brings Aspect-Oriented Programming to FW/1 applications by extending the capabilities of DI/1 with “interceptors” that can be automatically woven into your beans to allow you to call additional methods before, after, or instead of (“around”) the native methods on your beans.
Please read <a href="http://framework-one.github.io/documentation/using-aop-one.html">the all new AOP/1 documentation</a> provided by Daniel Budde for more details on how to use this powerful new feature.</p>

<h2 id="enhancements">Enhancements</h2>

<ul>
  <li><code class="language-plaintext highlighter-rouge">renderData()</code> now supports both <code class="language-plaintext highlighter-rouge">html</code>, <code class="language-plaintext highlighter-rouge">rawjson</code> and <code class="language-plaintext highlighter-rouge">jsonp</code> data types.</li>
  <li><code class="language-plaintext highlighter-rouge">redirect()</code> now supports a <code class="language-plaintext highlighter-rouge">header</code> argument to allow for custom redirect-like behavior such as might be needed in a Single-Page-Application or heavy ajax usage.</li>
  <li>Routes:
    <ul>
      <li>Regex support for <code class="language-plaintext highlighter-rouge">^</code> to anchor the match to the start of the request string.</li>
      <li>Placeholders can now have matches restricted by regex patterns (e.g., to match numeric-only portions of the request string).</li>
      <li>Regex matching can now be made case-sensitive via the new <code class="language-plaintext highlighter-rouge">routesCaseSensitive</code> option.</li>
    </ul>
  </li>
  <li>Per-subsystem configuration now supports <code class="language-plaintext highlighter-rouge">diEngine</code>, <code class="language-plaintext highlighter-rouge">diComponent</code>, <code class="language-plaintext highlighter-rouge">diLocations</code>, and <code class="language-plaintext highlighter-rouge">diConfig</code>.</li>
  <li>Per-environment configuration is now merged recursively, including appropriate parts of <code class="language-plaintext highlighter-rouge">diConfig</code>.</li>
</ul>

<h2 id="bug-fixes">Bug Fixes</h2>

<ul>
  <li>Route matching for placeholders was too eager. Placeholder names are now restricted to alphanumeric plus <code class="language-plaintext highlighter-rouge">_</code> and <code class="language-plaintext highlighter-rouge">-</code> characters only. <em>This is potentially a breaking change if you have used unusual characters in placeholder variable names that are legal in CFML identifiers!</em></li>
  <li>If the first request to an application was also a reload request, initialization was sometimes attempted twice if an exception was thrown during initialization.</li>
  <li>Framework reloads were not always thread safe and could produce strange behavior if an application was reloaded under load.</li>
  <li>DI/1’s <code class="language-plaintext highlighter-rouge">isConstant()</code> method could fail for manually created and managed beans.</li>
  <li><code class="language-plaintext highlighter-rouge">Application.cfc</code> was not always correctly autowired as a Controller.</li>
  <li>If content had been produced in a request that used <code class="language-plaintext highlighter-rouge">renderData()</code>, that content could corrupt the result. A content reset is now performed in such cases.</li>
  <li>DI/1 no longer attempts to instantiate interfaces that it discovers in the model.</li>
</ul>

<h2 id="platform-support">Platform Support</h2>

<ul>
  <li>ColdFusion 9.0.1 and Railo 4.0 are no longer officially supported by FW/1. FW/1 3.1 applications will probably still run on them but there are some bugs in both engine versions that can impact some of the new functionality in this release.
FW/1 3.1 officially supports ColdFusion 9.0.2 or later, Railo 4.1 or later, and Lucee 4.5.1.000 or later.</li>
</ul>

<h2 id="code-of-conduct">Code of Conduct</h2>
<p>As part of my commitment to diversity in IT, Framework One now has a <a href="https://github.com/framework-one/fw1/blob/master/CODE_OF_CONDUCT.md">Code of Conduct</a> that encompasses all aspects of interaction with the project: on GitHub, on the mailing list, and in presentations given by community members to promote the framework.
This brings Framework in line with a number of progressive open source projects that have adopted a Code of Conduct as a way to make the open source software community more welcoming and more inclusive.</p>

<h2 id="contributors">Contributors</h2>
<p>The star contributor for this release is <a href="https://github.com/dbudde">Daniel Budde</a> for rewriting AOP/1 (twice!) so it is ready for inclusion with FW/1! Thank you!</p>

<p>Other contributors, in alphabetical order of GitHub name:</p>

<ul>
  <li>atuttle - Adam Tuttle</li>
  <li>cybersonic - Mark Drew</li>
  <li>GiancarloGomez - Giancarlo Gomez</li>
  <li>guillaume-boivin - Guillaume Boivin</li>
  <li>jcberquist - John Berquist</li>
  <li>jochemd - Jochem van Dieten</li>
  <li>Ronner</li>
  <li>ryanguill - Ryan Guill</li>
</ul>

<p>And, yeah, I did a bit too, but FW/1 wouldn’t be where it is today without contributions from the open source CFML community - thank you everyone!</p>

<h2 id="additional-information">Additional Information</h2>
<p>For a complete list of changes since 3.0:</p>

<ul>
  <li><a href="https://github.com/framework-one/fw1/issues?q=is%3Aissue+is%3Aclosed+milestone%3A3.1">Issues Closed</a></li>
  <li><a href="https://github.com/framework-one/fw1/pulls?q=is%3Apr+is%3Aclosed+milestone%3A3.1">Pull Requests Merged</a></li>
</ul>

<p>Release 3.5 Alpha 1 will follow shortly, with a focus on language integration, bringing
automatic support for Clojure code in the Model and Controllers, as well as first class support for the Lucee Language in the Model, the Views, and the Controllers.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FW/1 3.1 Release Candidate 2 Available!]]></title>
    <link href="http://framework-one.github.io/blog/2015/07/07/fw1-3-1-rc-2/"/>
    <updated>2015-07-07T16:40:00+00:00</updated>
    <id>http://framework-one.github.io/blog/2015/07/07/fw1-3-1-rc-2</id>
    <content type="html"><![CDATA[<p>The second Release Candidate of FW/1 3.1 is now available for testing. You <a href="https://github.com/framework-one/fw1/releases/tag/v3.1-rc2">download FW/1 3.1 RC 2 from GitHub</a>.</p>

<p>These are the changes since RC 1:</p>

<ul>
  <li>Major overhaul of AOP/1; intercept by CFC type; intercept by CFC name regex (Daniel Budde).</li>
  <li>Routes now support regex restriction on placeholder variables (Guillaume Boivin).</li>
</ul>

<p>For a complete list of changes since 3.0:</p>

<ul>
  <li><a href="https://github.com/framework-one/fw1/issues?q=is%3Aissue+is%3Aclosed+milestone%3A3.1">Issues Closed</a></li>
  <li><a href="https://github.com/framework-one/fw1/pulls?q=is%3Apr+is%3Aclosed+milestone%3A3.1">Pull Requests Merged</a></li>
</ul>

<p>At this point, release 3.1 should be considered “production ready” and only critical bug fixes will be included between now and the “gold” release. It will be merged to master tomorrow in preparation for the final release at the weekend.</p>

<p>As noted before, release 3.5 will follow fairly quickly after that, with a focus on language integration, bringing
automatic support for Clojure code in the Model and Controllers, as well as first class support for the Lucee Language in the Model, the Views, and the Controllers.</p>
]]></content>
  </entry>
  
</feed>
