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.
BL-1453 Maven pom.xml for the BoxLang Home so you can integrate with any Java library
BL-1464 implement nested grouped output/looping
BL-1474 Logger appenders in the boxlang.json can now chose their own encoder: text or json
BL-1476 Added ability for loggers to chose between file and console appenders
BL-1482 new event ON_FUNCTION_EXCEPTION
BL-1485 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.
BL-1393 Add executionTime to result object of bx:http
BL-1397 FileCopy( source, targetDirectory ) when using a target directory doesn't work on BoxLang but works on Lucee
BL-1400 File bifs have too many casts, do one cast for performance
BL-1404 Add a unique request id metadata header when making requests in http so it can track easily
BL-1405 Add missing contexts to data interceptors
BL-1406 Add a `request` struct to the bxhttp result object
BL-1417 Add Allow Arguments to FileCopy and FileMove for granular extension security overrides
BL-1419 server.java.defaultLocale, server.java.availableLocales
BL-1420 New bif: BoxModuleReload( [name] ) to easily reload modules for testing purposes
BL-1421 optimize when LocalizationUtil string casts
BL-1422 optimize Struct.putAll()
BL-1423 optimize when basescope creates lockname to on demand
BL-1424 optimize string compare check for unicode
BL-1425 optimize case insensitive instanceof check
BL-1426 optimize isNumeric locale parsing and casting
BL-1427 optimize file detection/reading from disk unless needed
BL-1428 optimize getConfig() by caching at request context
BL-1429 Improve performance of string lowercasing and key creation
BL-1433 Only include source lines in exceptions when in debug mode
BL-1434 Optimize hash base 64 encoding
BL-1435 Optimize regex cache key generation
BL-1436 Move/Copy BIFs should all default to an overwrite value of true
BL-1437 Update the way loggers are setup and retrieved to avoid string and key lookups and accelerate the runtime
BL-1438 bif invocation interceptors missing the actual bif
BL-1439 BIF Interceptors hot code, only create events if they are states for it
BL-1443 order keys in struct dump alphabetically
BL-1445 DateTime and Duration Math Should Represent Fractional Days in Math Operations
BL-1446 Compat: DateAdd Should accept numeric fractional days as date argument
BL-1450 Exclude javaparser and other debug libraries from final jar
BL-1454 Optimize FQN class by removing regex usage in hot code
BL-1455 optimize generated setter by caching resolved file path
BL-1456 Optimize dynamic object by converting stream to loop in hot code
BL-1457 optimize output check by caching recursive lookups
BL-1458 optimize isEmpty code paths
BL-1459 optimize getting function enclosing class by caching
BL-1460 optimize number caster true/false string checks
BL-1461 optimize BoxStructSerializer class by avoiding struct.entrySet()
BL-1462 optimize string compare by removing unnecessary string to lower case
BL-1473 Update to use StatusPrinter2 from deprecated StatusPrinter using LogBack
BL-1481 Speed improvements for function invocation on hot code
BL-1486 Better handle low level parsing errors like java.util.EmptyStackException
BL-1489 Improve error messages when registering interceptors using the registration bifs when sending things other than interceptors
BL-1490 Add function name to interceptor data for ease of use
BL-1493 Accelerate dynamic object method handle executions
BL-1356 postBIFInvocation event
BL-1357 Simple preFunctionInvoke interceptor throws errors due to recursing into itself
BL-1385 Module that defines an interceptor has to specify "too much" for the class path
BL-1386 ModuleService reload and reloadAll() methods to provide ability for module reloading on development
BL-1394 forgot to populate the `populateServerSystemScope` from the override boxlang.json
BL-1396 isValid Boolean Returning Incorrect Result on Struct
BL-1398 Move default disallowed file extensions to web support and keep CLI open
BL-1399 Compat: CreateTime Should Support 0 hour argument
BL-1401 FileSystemUtil not absoluting paths when checking existence
BL-1402 `replaceNoCase` does not handle `null` strings like Lucee or ACF
BL-1403 http not using the user agent if passed by the user
BL-1409 Compat: add `server.coldfusion.supportedLocales`
BL-1412 Add Application.bx/cfc support for overriding allowed and disallowed extensions
BL-1414 this.logger is null in when getting an attempt() from a box future
BL-1416 Compat: Support ACF/Lucee `blockedExtForFileUpload` Application Setting
BL-1418 parameterized QoQ with maxLength errors
BL-1431 function dump template doesn't work in compat
BL-1432 CF transpiler not turning off accessors for child classes
BL-1441 getPageContext().getRequest() has no getScheme()
BL-1442 empty file fields in forms throw error on submit
BL-1444 Boxlang does not pickup custom tags that are in the same folder as the file that calls them
BL-1447 Compat: DateDiff should support fractional days as date argument
BL-1449 when doing a boxlang {action} command it should break and execute
BL-1451 Custom tag search is case-sensitive
BL-1452 inline annotation errors when literal value is a negative number
BL-1463 parser errors on class annotation called abstract
BL-1466 self-closing defaultcase tag not parsing
BL-1467 if you use options or params that include file extensions, the runner explodes
BL-1468 cfqueryparam tag not allowed outside of cfquery tag
BL-1469 Building query fails when part of the query is build inside function that outputs directly
BL-1470 query escaping of single quotes only escapes the first one, not all
BL-1475 `this.sessionStorage` assignment with Application-defined cache throws error.
BL-1477 Errors within application startup leave app in unusable state
BL-1479 Compat: Error thrown in QueryCompat interception when null param is encountered
BL-1483 calling java method with invoke() and no args fails
BL-1484 filewrite operations on existing files were not truncating it and leaving content behind.
BL-1488 isSimpleValue doesn't work with Keys