1.2.0
May 29, 2025
Last updated
Was this helpful?
May 29, 2025
Last updated
Was this helpful?
We're excited to announce the release of BoxLang 1.2, a significant milestone that demonstrates our commitment to delivering both cutting-edge features and exceptional performance. This release represents how much innovation the entire BoxLang team can accomplish in just 2 weeks of focused development, bringing you powerful new capabilities while dramatically improving the runtime efficiency that makes BoxLang a compelling choice for modern applications.
BoxLang 1.2 isn't just another incremental update—it's a performance powerhouse packed with developer-friendly enhancements. We've implemented over 30 targeted optimizations across the runtime, from string operations and file handling to function invocations and memory management. These improvements mean your applications will run faster and more efficiently, often without requiring any changes to your existing code.
Enhanced Java Integration: The new Maven pom.xml
support for BoxLang Home opens up seamless integration with the entire Java ecosystem, making it easier than ever to leverage existing Java libraries in your BoxLang applications. You can now add any Java dependencies in your BoxLang Home's pom.xml
run mvn install
and your runtime will be seeded with all the Java Libraries your application needs!
Advanced Logging Control: Take complete control of your application's logging with new encoder options (text
or json
) and flexible appender choices between file and console output. Your logs, your way. You can also now chose between a file
or console
appender in all of your configuration files.
Developer Experience: From nested grouped output support to the new BoxModuleReload()
function for testing workflows, we've focused on making your development process smoother and more productive.
This release includes extensive performance optimizations that touch nearly every aspect of the runtime:
Optimized Hot Code Paths: Critical operations like string comparisons, numeric casting, and function invocations have been streamlined
Smarter Caching: From configuration lookups to file path resolution, we've added intelligent caching where it matters most
Reduced Overhead: Eliminated unnecessary operations in frequently-called code, including regex optimizations and stream-to-loop conversions
Memory Efficiency: Improved struct operations, hash encoding, and object creation patterns
We've strengthened BoxLang's compatibility with existing CFML codebases through numerous fixes and enhancements, including better date/time handling, improved query parameter support, and enhanced file operations. Whether you're migrating existing applications or building new ones, BoxLang 1.2 provides a more stable and predictable foundation.
BoxLang 1.2 includes 50+ improvements and bug fixes that enhance stability, performance, and developer experience. From small quality-of-life improvements to significant runtime optimizations, this release delivers value across the board.
The combination of new features, performance enhancements, and rock-solid stability makes BoxLang 1.2 our most compelling release yet. Whether you're building high-performance web applications, integrating with Java ecosystems, or modernizing legacy CFML code, BoxLang 1.2 provides the tools and performance you need to succeed.
Download BoxLang 1.2 today and experience the difference that thoughtful optimization and feature development can make.
Maven pom.xml for the BoxLang Home so you can integrate with any Java library
implement nested grouped output/looping
Logger appenders in the boxlang.json can now chose their own encoder: text or json
Added ability for loggers to chose between file and console appenders
new event ON_FUNCTION_EXCEPTION
Update the error template to include a section where the user can contact us if the error is not good enough or we can improve it.
Add executionTime to result object of bx:http
FileCopy( source, targetDirectory ) when using a target directory doesn't work on BoxLang but works on Lucee
File bifs have too many casts, do one cast for performance
Add a unique request id metadata header when making requests in http so it can track easily
Add missing contexts to data interceptors
Add a `request` struct to the bxhttp result object
Add Allow Arguments to FileCopy and FileMove for granular extension security overrides
server.java.defaultLocale, server.java.availableLocales
New bif: BoxModuleReload( [name] ) to easily reload modules for testing purposes
optimize when LocalizationUtil string casts
optimize Struct.putAll()
optimize when basescope creates lockname to on demand
optimize string compare check for unicode
optimize case insensitive instanceof check
optimize isNumeric locale parsing and casting
optimize file detection/reading from disk unless needed
optimize getConfig() by caching at request context
Improve performance of string lowercasing and key creation
Only include source lines in exceptions when in debug mode
Optimize hash base 64 encoding
Optimize regex cache key generation
Move/Copy BIFs should all default to an overwrite value of true
Update the way loggers are setup and retrieved to avoid string and key lookups and accelerate the runtime
bif invocation interceptors missing the actual bif
BIF Interceptors hot code, only create events if they are states for it
order keys in struct dump alphabetically
DateTime and Duration Math Should Represent Fractional Days in Math Operations
Compat: DateAdd Should accept numeric fractional days as date argument
Exclude javaparser and other debug libraries from final jar
Optimize FQN class by removing regex usage in hot code
optimize generated setter by caching resolved file path
Optimize dynamic object by converting stream to loop in hot code
optimize output check by caching recursive lookups
optimize isEmpty code paths
optimize getting function enclosing class by caching
optimize number caster true/false string checks
optimize BoxStructSerializer class by avoiding struct.entrySet()
optimize string compare by removing unnecessary string to lower case
Update to use StatusPrinter2 from deprecated StatusPrinter using LogBack
Speed improvements for function invocation on hot code
Better handle low level parsing errors like java.util.EmptyStackException
Improve error messages when registering interceptors using the registration bifs when sending things other than interceptors
Add function name to interceptor data for ease of use
Accelerate dynamic object method handle executions
postBIFInvocation event
Simple preFunctionInvoke interceptor throws errors due to recursing into itself
Module that defines an interceptor has to specify "too much" for the class path
ModuleService reload and reloadAll() methods to provide ability for module reloading on development
forgot to populate the `populateServerSystemScope` from the override boxlang.json
isValid Boolean Returning Incorrect Result on Struct
Move default disallowed file extensions to web support and keep CLI open
Compat: CreateTime Should Support 0 hour argument
FileSystemUtil not absoluting paths when checking existence
`replaceNoCase` does not handle `null` strings like Lucee or ACF
http not using the user agent if passed by the user
Compat: add `server.coldfusion.supportedLocales`
Add Application.bx/cfc support for overriding allowed and disallowed extensions
this.logger is null in when getting an attempt() from a box future
Compat: Support ACF/Lucee `blockedExtForFileUpload` Application Setting
parameterized QoQ with maxLength errors
function dump template doesn't work in compat
CF transpiler not turning off accessors for child classes
getPageContext().getRequest() has no getScheme()
empty file fields in forms throw error on submit
Boxlang does not pickup custom tags that are in the same folder as the file that calls them
Compat: DateDiff should support fractional days as date argument
when doing a boxlang {action} command it should break and execute
Custom tag search is case-sensitive
inline annotation errors when literal value is a negative number
parser errors on class annotation called abstract
self-closing defaultcase tag not parsing
if you use options or params that include file extensions, the runner explodes
cfqueryparam tag not allowed outside of cfquery tag
Building query fails when part of the query is build inside function that outputs directly
query escaping of single quotes only escapes the first one, not all
`this.sessionStorage` assignment with Application-defined cache throws error.
Errors within application startup leave app in unusable state
Compat: Error thrown in QueryCompat interception when null param is encountered
calling java method with invoke() and no args fails
filewrite operations on existing files were not truncating it and leaving content behind.
isSimpleValue doesn't work with Keys