So at Into The Box this week we unveiled our latest here at Ortus that we've been calling project Gideon. I'll note now that I'm blogging this to the Ortus blog because this is not beholden to the ColdBox MVC platform, but a new general tool we hope to help color the CFML developer's toolbox with. Of course, even though this is a general tool aimed at the CFML community, you can bet your bippy we're cooking up some sweet Box love for our existing libraries.
CommandBox is a standalone, native tool that will have binaries for Windows, Mac, and Linux. It provides a Command Line Interface (CLI) for developer productivity, tool interaction, package management, embedded CFML server, application scaffolding, and some sweet ASCII art. We are working on a number of command namespaces to easily interact with TestBox, ForgeBox, ContentBox, CacheBox, etc. Built-in help is completely integrated for every command. You can pop open a CommandBox shell in your terminal window and manually type commands, or even automate things externally via the CommandBox binary with your OS's native shell.
So one of the biggest things we think the CFML community is missing is a true package management platform. With this in mind, we are going to be reworking ForgeBox this year and opening it up to the entire community. We have created a spec for a box.json file which will go in the root of CFML packages to describe metadata about the package, how it should be installed, and dependencies that the package requires to run. Hand in hand with this move, is the complete modularization of the ColdBox platform. 75% of its code has been stripped from the core, and moved into modules on ForgeBox. CommandBox is getting a tight integration with the ForgeBox REST API to search, view, and install packages/modules directly into your app from the command line. We want the community to follow in this manner, and if they aren't writing modules for ColdBox (which are getting some sweet new features in ColdBox 4) at least start writing package-able CF code that can be distributed in a consistent and scriptable manner.
CommandBox will have tons of command for quickly building out applications. Create a new ColdBox app with "coldbox create app", add a handler with "coldbox create handler". You can even get actions added to it, views created, and BDD integration tests stubbed out at the same time. This can bring new productivity for people who like to live on the command line and especially for those who want to be able to automate stuff they do a lot of.
One of the cool things CommandBox brings to the table is the ability to spin up an ad hoc, lightweight, CFML server in any directory from the command line. Simply change your working directory to the root of your app, type "start" and a super fast Railo server spins up on a new port running your code. When you're done type "stop" from that directory or use the little icon that's showed up in your system tray.
Whiz Bang Cool
So one of the most interesting things about this entire project is that the actual commands are written in CFML itself! CommandBox is small, lightweight, integrated at the operating system level, but actually running on CFML at the same time. This means you will eventually be able to extend it with your own commands that do cool stuff for a different framework, or automate repetitive tasks you're tired of doing every day. All the code for CommandBox is open source and already available on GitHub. Tonight I did an informal demo of CommandBox to a BOF here at cf.Objective(). I recorded it on Connect. I start out talking a bit about ColdBox 4 and ForgeBox, but just stick with me-- I'm laying the groundwork to help paint the bigger picture we're trying to achieve here at Ortus. We're really trying to push the CFML world forward with tools no one else is making that fall into a bigger picture of productivity, automation, and modular applications. We hope to have an alpha out in the next week or so to play with and provide your feedback. Watch the 20 minute recording below and then fire off your thoughts in the comments.