Episode Transcript
Available transcripts are automatically generated. Complete accuracy is not guaranteed.
(00:05):
Hello and welcome to the Modernize or Die Podcast.
This is episode 240.
It is September 2nd, 2025.
My name is Eric Peterson and I'm joined today by Mr.
Jacob Beers.
How's it going, Jacob?
I'm doing good.
Glad to be here.
Glad to have you here as well.
Happy September everybody, you made it through August.
Made it back to school for those of you with school age children or in school yourself.
(00:29):
Well, let's talk about some Ortus news to kick things off.
We had a couple of blog posts this week.
One is about TestBox.
TestBox, what's coming?
Talks about what is new and what is coming in TestBox.
So TestBox currently has full BoxLang compatibility, including, being able to write specsin BoxLang, or you can mix it with your existing CFML tests.
(00:51):
Running BoxLang specs from the BoxLang CLI and support for the new language key in your.JSON.
The BoxLang Runner, as mentioned, lets you execute tests in the serverless environmentwith full mock web support, so you can have very fast tests there.
...and tons of new matchers and debuggers as well as some VS Code Test Explorer IDEintegration, which is one of my favorite parts.
(01:14):
I love being able to see the test on the side and all the green check boxes.
Coming soon, code coverage for BoxLang.
That will be nice, especially code coverage in CFML is possible, but it is quite the stepsand quite the hassle to set up.
Async testing support and more enhancements to our test explorers and data providers.
(01:36):
Nothing's stopping you from testing right now in BoxLang and great things are coming inthe future with it.
Yeah, absolutely.
All right, well, I guess we'll move on to the state of CommandBox and what we've gotcoming up there.
There's some really exciting CommandBox improvements that are coming out.
It looks like we are officially on version 6.2 point something.
(01:57):
We actually did a little bit of, in our most recent blog post for it, we did a little bitof statistics sharing just to...
to show all the progress that we've made over the years.
So it looks like CommandBox has been around for 12 years now, which is pretty awesome.
47 total releases, 765 pull requests, probably 95 % from Brad Wood 35 tickets closed thisyear and more and more people are beginning to contribute from the community, which is
(02:23):
awesome because is a really fantastic tool.
We've got millions of installations of
the various ColdFusion engines, where we've got a growing number of BoxLang installationsthrough .
And the CommandBox-based Docker image itself has 1.8 million pulls, which is prettyspectacular.
I love the CommandBox Docker image.
(02:45):
That thing is fantastic.
Another interesting thing is that we've got four different JDK versions that are supportednow.
Java 11, Java 17, Java 21, and 24.
So we've got quite a bit of support there for all of your Java needs.
And let's look at what's new in 6.1 and 6.2.
We've got a new command for Lucee servers, server Lucee-deploy.
(03:10):
I'm not actually sure what that's for.
Eric, do you know what that does?
like a Lex extension into your Lucee server.
Oh, okay, cool.
That's handy.
wow, he knew that right off the bat.
No, I looked it up earlier when I too was like, what is that?
Cool, so it's like a CFPM for, um but for Lucee.
have a lex file you want to throw into your Lucee's has like a deploy folder and then itpicks it up from there.
(03:36):
So yeah.
Okay, cool, that's awesome.
We've got binary hash verification and package management, which is good.
This is one feature that I'm really excited about, WebSocket support with SocketBox.
Works with Adobe ColdFusion, Lucee, and BoxLang.
It's modeled after SocketIO.
It supports basic messaging, stomp broker, custom authentication, and message routing.
I'm actually really fortunate to have gotten to use this on a project.
(03:59):
just this past week and I have been, I've used SocketBox IO and Node.js on severaldifferent projects.
And so that's kind of my reference for this and SocketBox has blown me away.
It's really awesome.
So definitely go give that a check out.
I'm mentioning ITB has its call for speakers open and that's the one I feel like I just, Iwant to put the talk forward for SocketBox just cause I want to use it.
(04:22):
Not cause I'm, you know, intensely qualified, but I just want to get to know SocketBoxmakes, it just sounds really fun building UIs that are reactive with web sockets.
I think all our apps would benefit from some of that.
Oh yeah, absolutely.
Well, you should definitely go and put it out for that.
as a, I don't know if we have this in the notes for later, but I'm going to go ahead andspill the beans on it.
(04:43):
Just this past week, we released an update for SocketBox that adds clustering support soyou can use it in a load balanced environment.
Which is pretty snazzy.
That's usually a pretty big barrier for web sockets, but we do it out of the box now.
Then we've got some new servlet support.
And one cool feature is a server warmup URL that you can define in your, I believe in yourbox JSON that will, or maybe your server JSON that will tell your server how to warm up
(05:10):
your application when it finally comes online.
So it's kind of a nice little feature.
I know a lot of us have kind of jerry-rigged that in the past, but.
And then there's a what's next section for BoxLang?
And the reason is because the idea is to run CommandBox on BoxLang for a smaller, faster,lightweight experience.
So that's going to be one of our targets going into the future.
(05:30):
And so you can run CommandBox right on top of BoxLang.
Maven endpoint for better jar management.
I'm very excited for that one because whenever I have to deal with a maven project I getsad I'm sure it's just familiarity, but I'm still sad about it More enterprise cache model
modules server dashboard and metrics cloud-based config management and of courseprofessional Ortus support.
(05:51):
I Did look it up for you
I was curious about your claim that Brad made most of those pull requests and For The Coreat least only six of them were made by Brad Which makes sense.
He just doesn't do pull requests for his own code so But yeah, that is still awesomethough.
So three hundred and thirty three pull requests by people who were not named Bradwood
(06:12):
Yeah, that is cool.
That shows community involvement.
All right.
We have some videos to share with you, a little CBWire Bytes, if you will, some tutorialsabout getting started with CBWire and BoxLang.
They're kind of a precursor, especially for those of you who will be coming to the CBWireworkshop after CF Summit later this month.
(06:35):
So we're going to throw those links into the show notes.
Have a quick side trail.
Eric, have you had a chance to work with CB WireBox much?
ah No, no I have not.
I laugh only because I wouldn't call it competing, but I built a CB inertia which workswith inertia.js which is like, it's kind of like the opposite philosophy.
(06:58):
So where CB wire is like, let's write less JavaScript and put it all into CFML and nowBoxLang code.
Inertia was, okay, your views are no longer in CFML or BoxLang at all.
It's all JavaScript.
You want to use React.
You want to use Vue.
I don't think there's a problem with either, but because of that, the ones I work onhappen to be inertia projects.
(07:19):
So I'm taking that you have.
ah I've worked on it on some personal projects and I've really enjoyed it, but I lookforward to someday getting to use it on an actual project, so I just wanted to check in.
it seems like maybe I found out that you and Grant Copley are actually mortal enemies.
no, not at all.
I think CB wire is really cool.
I just, it's just not the one I use.
I, I would say my favorite thing in using something like inertia is I'm always pulling in,a view component or a react component, you know, off of NPM that's my client wants to use.
(07:50):
And it's a lot easier there than, I know Alpine's built in here.
So if you can build an Alpine, great.
Mm-hmm.
it's built in vanilla JS, you can integrate it.
Awesome.
but for at least the clients I work with, it was much easier to just stay in view.
That was their view.
JS was their, framework of choice.
So
out.
Well, the good thing I'm hearing is that we have options.
(08:11):
Whichever direction you decide to go, we've got it, you covered.
Yes, we do.
Awesome.
Okay, well, ColdBox tips and tricks series.
It looks like we've got a couple of really great blog posts for you to look at.
The first one covers environment variables in your .envconfig.
This looks like a really great, if you're not familiar with environment variables, thislooks like a really great introduction to help get you up to speed on what they're useful
(08:34):
for and specifically how they work in the ColdBox environment, ColdBox slash CommandBoxenvironment.
But it also looks like a really great refresher or reference even if you do use them justto get it double check best practices and things like that.
So definitely go give that a read and see if it provides anything useful for you.
The second one is about fluent if statements.
(08:57):
And this is kind of interesting.
I've seen patterns like this used in different frameworks.
I didn't realize we actually had this in ColdBox, so that's kind of cool.
Actually, I'm most familiar with this in QB, Eric, because you use this for Query Builder,but it's nice to know we have it available in handlers and things like that as well.
Yeah, so the idea of it is instead of an if statement, you can have this when statementwhich takes the Boolean and then gives you some callbacks.
(09:20):
And you might be sitting here like, why in the world would I do this?
That's an if statement.
And it's all about chaining, right?
After that if statement, you want to continue chaining on the current object you are onand just keep going.
And so is it better than an if statement?
No, it's the same thing.
Could it look better in your code?
Maybe.
So there you go.
I like it.
I also like at the end it talks about using this as a WireBox delegate meaning you canTell your uh class or component: 'Hey, I want to use these flow delegates from the core
(09:52):
delegates' and then all those methods get added into your Class as if they were there inthe first place so kind of like traits in other languages or partial mix-ins or
What's the weirdest one?
uh Multiple inheritance, that one.
ah That's the weird one though.
So, yeah.
I feel like multiple inheritance is one of those things that all the programming languagestried out, I don't know, like in the 90s, and then a year or two after they all
(10:17):
implemented it, they immediately abandoned it, and nobody's done it since.
Yeah, I wonder what languages, if any, support multiple inheritance.
Let's see.
Google will tell us C++ Python does?
Interesting.
I don't know if this is right.
This is AI.
Who knows if it's right?
Says Scala via mixing classes.
(10:37):
See, that's, no, that's traits.
That's not multiple inheritance.
So yeah, I think some of these are probably not right because AI.
wants to be helpful.
All right, cool.
If you have it though, use delegates or you probably have a use case for it where you wantthese functions in all of your classes.
Delegates are great for that.
love delegates.
(10:58):
So came out in ColdBox seven, six.
Seven.
There we go.
All right.
Well, let's tell you about our sponsor for this week.
Our sponsor is the building reactive UIs with CBWire Workshop that is happening at the endof this month after CF Summit.
So this is September 24th and 25th, two day training led by Luis Majano and Grant Copley,which as we said before, Grant is the author of CBWire.
(11:23):
So you are learning from the feet of the master, right?
If you are going to be anywhere near the Vegas area and this is worth your time, even ifyou haven't done anything with CBWire yet.
So maybe especially if you haven't done anything with CBWire yet.
So we'll put the link in the show notes and in our chat.
We hope to see you there.
Yeah, that'll be really cool.
some BoxLang news.
(11:44):
We have a new version to talk about.
Version 1.5, it has landed according to the blog post.
So I was wondering with, so version 1.5 is out, you these all been non-breaking changes,right?
And it made me wonder Lucee has kind of a, what do they call it?
It's like paradigm versioning, right?
Where they make the first number go up.
Maybe it's not Lucee.
(12:05):
Maybe I think it's something else, but the first number can go up just when you want likea big marketing splash, right?
Not necessarily.
know Laravel does it to like throw out in PHP land.
where they're like, this is Laravel 12.
And it's like, did you have breaking changes?
They're like, no, breaking changes are the second number.
So 12.1 could be breaking.
And I'm like, this is confusing.
But then you can say big number.
(12:26):
So I was trying to think, are we in BoxLang?
Are we going to have a big splashy 2.0 because it's splashy?
And that's fine.
Or are we going to be the weird ones that are like, we're on version 1.38 because we justnever had to do a breaking change?
I don't know.
Stay tuned.
We'll find out.
you
Well, as much fun as it is to speculate about the future, ah this is what we've actuallygot in 1.5.
(12:50):
It looks like we've got some really great stuff regarding the AWS Lambda runtime.
I haven't had a chance to use this at all, but I've heard some really good things aboutit.
looks like, I know Luis has put some effort into that, Eric, I don't know if you've gottento use it, but it sounds like it's been made really straightforward and easy.
Yeah.
ah So it looks like there's some cool stuff with performance boosts for the AWS kickingoff the first run, which actually if you'd like to see that in action, you can go and
(13:16):
check out tryboxlang.io.
I think it's try.boxlang.io and that's actually powered by an AWS Lambda and it's quitesnappy.
So we've also got some...
convention-based multi-function Lambdas.
um So that's kind of nice, being able to handle multiple things through one configurationsetup.
We've also got some new stuff going on with virtual threads.
(13:36):
And this will actually connect up with something that we've got later on.
that will be referencing a talk that John Clausen did on parallel processing and Boxlanguage, which really cool.
It was a great talk.
But we've got some really cool things where we've made some of the array functions have aparallel argument.
And then we handle the way that that executes through virtual threads instead of regularthreads, non-virtual ones.
(13:57):
And they perform really, really well.
Yeah, so basically if you've used any of the parallel, you know, X each, X map forstructs, arrays, queries, any of those in Lucee or Adobe, you know, you can pass true
after your callback function and then an optional number of threads.
And that threads has always been the platform threads, right?
(14:18):
Threads on your CPU.
Java supports virtual threads and now BoxLang lets you pass it in right there with
the Instead of putting in 10 you can pass in another true.
And that's just saying, use virtual threads, which are not bound by the number of threadson your CPU.
They're much more lightweight.
You're not going to run into the same issue.
(14:40):
So each functions, map functions, filters, all of those, now support virtual threads, inaddition to the platform threads, so
Which is awesome.
think in my mind this and feel free to be like 'no, Jacob your theory is entirely wrong'.
But in my mind this is almost like a hybrid of like how node JS works, plus Java, like ifthe two of them got together and had a BoxLang baby, because no JS is single threaded, and
(15:06):
uses the event loop.
So when you want to do something a sink.
uh It's lightweight, but you're not really getting the full power of concurrency.
In traditional Java, you get concurrency, but they're heavyweight full threads.
So now we get something that's kind of like, you get something that's nice andlightweight, but truly concurrent.
And it's almost like the best of both worlds.
Yeah, so I think the virtual threads are basically Java handling when they put it on aplatform thread, right?
(15:34):
Right, it's like being the scheduler in that case.
But I bet both of us would learn what it actually is if we go listen to John's workshopthat he gave.
Yeah, probably.
Well, next thing is database operations have gotten smarter in BoxLang and I shouldprobably stop riffing on some of these theory ideas and Eric, you'd be the much better one
(15:55):
to talk about this between the two of us.
can talk about this one.
So a lot of work was put in to have multiple SQL statements.
So adding a colon in between and running multiple statements if you've never dealt withJDBC on the lower level.
They don't like doing multiple statements by default, so you have to do some work to getthat through.
But it's also giving you the right metadata back, the right update count.
(16:16):
So if you do like six updates and one statement, it will give you the full update count.
um And like you'll have to check out the metadata but like you can get some great metadatafrom the BoxLang queries more than in the other engines so, you know, try some of these
out these examples in the blog post and and and see what you get there
Yeah, that's really interesting.
(16:37):
As someone who's just a SQL consumer and doesn't do much under the hood with JDBCconnections, executing multiple statements is something that I thought just was.
I didn't realize it needed to be layered on top of.
No, working on SQL stuff in BoxLang like made me very much appreciate the query executelike the function.
(16:58):
It looks so simple and there's so much work that goes into that.
I know there was also work put in for better compatibility with different database enginesas well as part of all of this moving around.
So smarter database calls more.
Accurate update counts, multiple statements, great improvements all around.
Yeah, awesome.
Our Java interop just got smarter.
(17:20):
Looks like it's now more intuitive than ever.
And we've got improved method resolution for overloaded Java methods and handling ofprimitive types.
If you haven't checked it out, we put a lot of work into BoxLang's.
Java Interop, and it is first class, in my opinion.
So it works really well if you're wanting to do some, if you want to stay in the BoxLangworld, but you want to do some Java heavy work.
(17:41):
It's really excellent at that.
You got some security and reliability improvements, enhanced file upload security, whichlooks like you can provide a blocked extension argument to make sure that you're dealing
with
malicious stuff, malicious user actions right from the beginning.
And then we've also got some memory leak protection that is improved handling of threadsin long running applications, which is great.
(18:04):
And then I think our last, the last enhancement is CFML compatibility enhancements, scriptcustom tag support.
So Adobe ColdFusion developers can now use their favorite script-based custom tags,
way of creating the custom tags.
So usually it's in a template tag, right?
And now you can put it in these functions inside the component.
(18:26):
So for the three of you out there using custom tags.
You can write them in script.
So yeah, no breaking changes as part of BoxLang 1.5.
You can update today and take advantage of all of those performance boosts really, right?
Performance boosts and bug fixes.
We did have one question in the chat.
(18:47):
Are the virtual threads available in the CFML compatibility mode?
I believe the answer is yes, though of course if you tried to switch engines back.
that second true instead of being the number will not work on other engines.
So.
All right, that was a great release.
uh Congrats to the entire BoxLang team knocking it out of the park.
(19:08):
All right, we got a few blog posts out in the community about BoxLang.
The first one I want to pull up is one by Ray Camden about his first stab at the BoxLanglog viewer.
So he points out, we are working on an administrator desktop client that you can connectto your BoxLang apps and get all these things.
Or if you're running in CommandBox box, you can get the logs really easily, server log.
(19:30):
But.
Ray wanted to build a tool that he could load the log file and see it.
And he does so with BoxLang.
So we'll link to that here and let you go ahead and see how he handled that.
We've also got a couple of blog posts from Robert Zehnder, the first of which is about aBoxLang-based static site generator.
If you're not familiar with static site generators, there's a lot of really popular oneslike 11D or...
(19:56):
the one that the GitHub uses.
They're not ghosts, right?
Jekyll.
Jekyll, yeah.
And essentially it just takes a, it takes your raw files and spits out static HTML pagesthat you can distribute to a web server without having to actually have a web runtime
running.
So this is an example of using BoxLang to run.
(20:18):
oh
run your static site generator at build time and then be able to deploy static codes witha little bit less overhead.
So that's kind of cool.
And then the second one is about um creating a CLI script that can convert an API to CSVdata.
And the cool thing about that blog post is that it does a little bit of like, what is thatcalled in a shell script when you use like a hash bang to be able to reference the runtime
(20:40):
that you want.
ah It's a great article and it does a good job of going over some of the built-infunctions we we've added in BoxLang like CLI get args to help you write your CLI scripts.
So definitely give that a check out.
I was gonna ask for if Robert when you listen to this you got the BoxLang static sitegenerator you have the CommandBox static site generator like which is gonna win you've
(21:03):
done both of them
Okay, last one we want to talk about, we have a deploying BoxLang in the cloud videoseries that's out on CFCast and on BoxLang Academy that you can check out.
We will have the link to that here in the show notes.
And that will tell you again how to deploy it on some different services and differentoperating systems in the cloud.
(21:24):
AWS using Ubuntu Red Hat Windows with without CommandBox So some great options for youthere.
And now we go into the CFML corner, which is not really alliterative, even though it's thesame letter.
I'm gonna keep going.
We got a couple from Ben Nadal this week, and I can wrap both of these up by saying Adobehas some async bugs with their...
(21:46):
parallel function iteration, the ones that we were talking about earlier, the each maps,filters.
So the first one seems crazy that both parallel and sequential in an array each, it'sAdobe is outputting to the console, the SQL that you're executing.
So even when you're not trying to output anything, that's fun.
(22:08):
He said it leaks sequel to the output.
mean, hopefully that output isn't publicly visible.
So it's not really a concern, but it's still like, why is it doing that?
And then the second one was about closed over variables being undefined in like a too deepparallel closure.
(22:28):
So I don't know Adobe, he's giving you bugs.
There you go.
Those are hard.
I don't blame Adobe for not getting
all the parallel stuff right by the that that's the gist of those two blog posts.
We've got some events that we want to touch on as well.
This is an in case you missed it, leveling up your async game with BoxLang with JohnClausen.
This is the one that we referenced earlier.
(22:49):
If you're interested in learning a little bit more...
about some of the the async functions we've been talking about the array parallelfunctions or virtual threads in general and job and Boxlang go check out that talk.
John did a great job with it.
It's got a lot of really good information.
Coming up this month, we'll have part two of our Build an App in Boxlang with Ray Camden.
(23:10):
You can register at the link in the show notes and in the chat.
It will be September 29th at 11 AM Central.
So that will be right soon after CF Summit, right?
Like the next week.
yeah, just a few days, yeah.
So there you go.
Speaking of CF Summit, that's coming up.
CF Summit is coming up.
We're just a few weeks out now.
A couple of us from Ortus will be there, so that'll be pretty exciting.
(23:33):
You should come say hi to us.
And another cool thing we have is a CBWire workshop post-conference that Luis and Grant,Luis Majano and Grant Copley will be putting on together.
So that's a pretty exciting thing.
If you're interested in CBWire, you should definitely attend that and get some informationabout it.
straight from the people who wrote it.
Are you one of the lucky people that's going to be there?
(23:53):
I am, yeah, I've got a talk on 20 Git tips using Git Smarter.
Nice.
All right, I mentioned this earlier.
The Into the Box 2026 Call for Speakers is open, as well as, I believe, ticket sales.
We call them our blind ticket sales.
Let me see.
Are they up?
They are.
So these are blind ticket sales because you don't know what's going to be presented at theconference yet, but you trust that it's going to be great.
(24:19):
And in return, we give you a great discount.
So you can grab those tickets.
You can go.
to the call for speakers, which we have up on our blog and we'll put here in the shownotes.
You can put in any topic except for the ones I wanna talk about, okay?
I'm just kidding.
I'm joking.
Put in any topic we'd love to hear from you.
We love getting all of these submissions put in.
(24:40):
There's always a lot of really creative ones too.
that is, let's see, when is the call for speakers closing?
November 15th.
So you got a couple of months to think about that, put it in.
Kind of like what I said before, though, if you have a topic that you're just interestedin, not necessarily when you're an expert in yet, you should put it in because then it
will give you a reason to become that expert.
(25:02):
I can't tell you the number of times, so that's how I've built things.
I think my last, my one last year on pass keys, like, yeah, I put that in because I wantedto figure out how to make pass keys work.
And it got accepted and then I had to figure out how to make pass keys work.
you know, it's a desperation driven development.
(25:25):
I kind of need that.
So great.
I mean, in my completely unbiased opinion, the best event of the year.
So.
Yep, it's always a good time.
Speaking of Into The Box if you missed the last one you can go watch it on CFCast if youwere an attendee you already have access and if you weren't you can purchase it and get
(25:46):
access right now and See everything that was talked about at the last Into The Box
Well, we've also got some international news for you regarding BoxLang arriving in Japan.
Just a few weeks ago, our CEO Luis Majano
got a chance to attend a Java user group in Japan and get to share some of the work thatwe've been doing on BoxLang.
(26:07):
And from what I hear, it went really well.
And we've got a couple of blog posts up kind of documenting his experience and thereception there.
So go check those out.
I there's some cool stuff happening over in Japan.
And finally, there's one more series we want to tell you about up on CFCast.
It is the Inside the Box series, kudos to marketing for that name, which is interviewsthat were conducted at Into the Box So Into the Box, Inside the Box, I love it.
(26:35):
You can go check that out now.
Link in the description.
That brings us to the end for the day.
Thank you for joining us.
And a special thank you to anybody supporting us as a Patreon supporter, funding our opensource initiatives like CommandBox ForgeBox , ColdBox , ContentBox , TestBox , all the
other great boxes.
You can support us yourselves on patreon.com slash Ortus Solutions and get lots of perkslike access to a private forum on the community website and the private channel on our
(27:02):
BoxTeam Slack.
a neat profile badge to show off how cool you are for supporting us.
And of course, bronze packaging up, you'll get a Forgebox Pro and a CFCast subscription aspart of that.
So thank you to all our sponsors.
You can see an up-to-date list at ortussolutions.com slash about dash us slash sponsors.
And thanks to all of you for coming and listening today.
(27:25):
We've enjoyed having you here and we'll catch you in a couple of weeks.
All right, thank you all, see you later.