Blog

Brad Wood

November 01, 2017

Spread the word


Share your thoughts

We're wrapping up the release of CommandBox 3.9.0 which is available now as a release candidate.  I'd like to get as many eyes as possible to ensure everything is working good before we finalize the release. 

Installation

The easiest way to get ahold of the release candidate is to run the following command.  It will provide you with the URL to download:

CommandBox> upgrade --latest

The pre-release binaries are located on our artifacts server here:

http://integration.stg.ortussolutions.com/artifacts/ortussolutions/commandbox/3.9.0-rc/

What's New

We've closed 36 tickets in this release and here's a rundown of the most important stuff.

UNC Network path support

This has been pretty big for Windows users who access files on their servers over a UNC network path like \\server-name\foo\bar.  You can now cd into paths starting with \\, perform file operations like cat against those paths, etc.  Note backslashes need escaped in the CommandBox shell.

CommandBox> cd \\\\server-name/share
CommandBox> cd \\\\192.168.123.105/share

This was pretty straightforward since Java already supports this, but I had to change a lot of core path handling to make sure the correct slashes were preserved.  This needs a fair amount of testing to make sure we nailed it down for good.  If your network share requires permissions, you'll need to have saved those in Windows Explorer already  or execute a "net use" OS command from the shell.

Task Runner Improvements

When running a task from the CLI, the user will be automatically prompted if they don't supply all the required args.  This is just like commands work now.

CommandBox> task run myTask
Please enter required field "Foo": _

We also fixed several bugs with passing positional parameters and flag to task runners.  

# positional
CommandBox> task run taskFileName targetName value1 value2 true
# named
CommandBox> task run taskFile=taskFileName target=targetName :param1=value1 :param2=value2 :param3=true
# Use a Flag
CommandBox> task run taskFileName targetName value1 value2 --:param3
CommandBox> task run taskFile=taskFileName target=targetName :param1=value1 :param2=value2 --:param3

"package link" and "package unlink" for module development

This has been a long time coming, but if you want to work on a CommandBox module now, you don't have to keep copying files over to your CommandBox installation just to test. Instead, just run this from the root of your module's repo:

CommandBox> package link

This will symlink (works on Windows and *nix) your module into the core CLI's modules folder and reload the shell so you can immediately start testing.  When you're done, just run package unlink.  If you'd like to use this same feature, but to link a ColdBox module's repo over to a test application so you can test it without making a copy, you can pass in the path to the remote modules folder you'd like to link to.

CommandBox> package link /path/to/test/app/modules

This is a little easier than using your OS's native symlink commands and can be used in recipes that will work across operating systems!

Everything Else (mostly)

The rest of the changes don't really need a dedicated section but they're worth mentioning, so I've put them in this tidy list :)  If you'd like the ticket numbers, you can get them out of this full list of tickets in JIRA: https://ortussolutions.atlassian.net/secure/ReleaseNote.jspa?projectId=11000&version=20400

  • box install returns failing exit code if a package install fails. This helps builds fail correctly if things go wrong
  • When prompted to type in something like a missing parameter, your answer is no longer added to the command history
  • The --debug flag works correctly when starting a server from your OS shell like $> box server start --debug
  • box.json dependencies are stored with forward slashes so Mac and Windows devs stop fighting over which file to commit
  • config set no longer prints out the value to avoid leaking secrets in build script output.
  • Updating a package now uninstalls the previous version first to ensure a fresh start since the new version may have removed files.
  • If you're setting CommandBox behind an AJP proxy, we exposed the flag and ports for that as first class citizens of server.json.
  • Visual markers for private packages in the forgebox search command.
  • The package init command creates a valid slug for private packages in the @user/slug format.
  • Command parameters defaults work on all the aliases for a command now.
  • New --local flag to server list to show all servers that have been started in the current working directory
  • If for some reason you want to supply some ad-hoc JVM args to the actual CLI process, you can create a new environment var called BOX_JAVA_PROPS="foo=bar;brad=wood"
  • You can now touch files in a non-existent directory and it will create the directory instead of erroring.
  • Viewing a ForgeBox package via package show with a markdown based description, now has basic formatting in the CLI
  • The default URL rewrite file doesn't try to rewrite requests to /favicon.ico even when it doesn't exist.
  • Our CF11 servers no longer have secure profile enabled. That was causing issues due to some of the settings like returning 200 on error.   If you were making use of that default, please use CFConfig to set what you need.
  • At John Farrar's request, several URLs in output messages have had space put before and after them so capable shells will auto-link them correctly. 
  • Improved the Java networking error messages on server start if the host name wasn't correct in your host file and you were letting CommandBox pick a random port for you.
  • Prevented unnecessary saves to box.json when installing to keep file updated dates from being touched.
  • Added friendly check for Java 9 since it's not supported yet and the error that displayed made zero sense.
  • Commands like forgebox show and forgebox list now can provide their data in JSON format. ex: forgebox show coldbox --json

 

 

 

 

 

 

Add Your Comment

Recent Entries

Hotfix Hell: Why Legacy ColdFusion Systems Become Operationally Fragile

Hotfix Hell: Why Legacy ColdFusion Systems Become Operationally Fragile

Many legacy CFML systems do not fail suddenly.

Instead, they slowly become fragile.

At first, the application works. Then small operational issues start appearing: unexpected slowdowns, random restarts, patches applied late at night, fixes that introduce new bugs.

Eventually teams find themselves trapped in what many engineers call “hotfix hell.”

This pattern is common in environments still running:

  • Adobe ColdFusion 2021 or earlier<...

Cristobal Escobar
Cristobal Escobar
March 09, 2026
Introducing the BoxLang IDE Plugin for IntelliJ

Introducing the BoxLang IDE Plugin for IntelliJ

The IntelliJ ecosystem is one of the most powerful development environments for JVM developers. Today, we’re excited to introduce the official BoxLang IDE plugin for IntelliJ, bringing modern BoxLang development directly into the JetBrains IDE family.

Whether you're building new BoxLang applications or maintaining existing CFML codebases, this plugin gives you first-class tooling inside IntelliJ.

...

Eric Peterson
Eric Peterson
March 06, 2026
BoxLang Is Heading to JavaLand 2026! 🚀

BoxLang Is Heading to JavaLand 2026! 🚀

We’re excited to announce that the team behind BoxLang will be attending JavaLand 2026 as Startup Sponsors!

From March 10–12, 2026, the Java community will gather at Europa-Park for one of the most unique and immersive developer conferences in Europe. With nearly 130 presentations across multiple tracks, workshops, and community activities, JavaLand brings together developers, architects, and technology leaders from across the JVM ecosystem.

For the BoxLang team, this is a fantastic opportunity to connect with the Java community and continue our mission: modernizing software development on the JVM while empowering developers with productive, flexible tools.

Maria Jose Herrera
Maria Jose Herrera
March 06, 2026