Blog

BoxLang 1.0.0 Beta 27 Launched

Luis Majano January 31, 2025

Spread the word

Luis Majano

January 31, 2025

Spread the word


Share your thoughts

We are excited to bring you Beta 27 with enhanced XML handling, new CLI app support, improved error handling, and expanded interoperability with Java and CFML runtimes. We've also added new HTTP event hooks, improved caching strategies, and a streamlined class resolution process to make your applications more performant, even in debug modes.

🌟 Highlights:

  • Enhanced XML Support – Improved cloning, merging, and namespace handling in XML operations.
  • Jakarta EE Support – Latest Jakarta EE support for the servlet runtime and CommandBox
  • Unified Template & Script Grammars – BoxLang now seamlessly integrates both styles, bringing performance updates to the parser.
  • Improved Java Interop – Automatic coercion of BoxLang arrays to native Java arrays and varargs support
  • Better Error Handling – More robust dump rendering and exception management.
  • New CLI Features – Built-in functions like cliRead(), cliGetArgs(), and cliExit() for pure CLI apps.
  • Improved HTTP Handling – Proxy support, authentication, and new request/response events.
  • Trusted Cache – Trusted cache is in the house, to get high performance in production
  • Class location caches – More performance updates for class resolutions for BoxLang classes

With over 40 improvements, new features, and fixes, this release makes BoxLang even more powerful and stable! 🔥

What is BoxLang?

BoxLang is a modern dynamic JVM language that can be deployed on multiple runtimes: operating system (Windows/Mac/*nix/Embedded), web server, lambda, iOS, android, web assembly, and more. BoxLang combines many features from different programming languages, including Java, CFML, Python, Ruby, Go, and PHP, to provide developers with a modern and expressive syntax.

It is also a drop-in replacement for Adobe ColdFusion and Lucee Engines.

How to get started?

Visit our docs at https://boxlang.ortusbooks.com and get coding today. If you want to try it out on the web then go to our online REPL at https://try.boxlang.io. You can also checkout our YouTube playlist: https://www.youtube.com/playlist?list=PLNE-ZbNnndB-40LvAbeSeT2Oi3V2gm_B8

Release Notes

Here are the latest release notes: https://boxlang.ortusbooks.com/readme/release-history/1.0.0-beta27

🚀 New Features

BL-843 Move defaultCache to the caches section as default, verify it exists, else create it anyways

BL-935 add http events: onHTTPRequest, onHTTPResponse

BL-952 Expose buildRegistry() and encapsulate per location registration

BL-989 CLI BIFS for working with pure cli apps: cliRead(), cliGetArgs(), cliExit()

BL-1009 Activate box resolvers cache according to request and app settings

BL-1016 New setting: classResolverCache : boolean [true] which controls if the class locators caches resolve lookups


🔧 Improvements

BL-953 Implement Node pass-through methods to handle cloning and merging of XML objects

BL-955 Combine template and script grammars for boxlang

BL-956 Error Getting method keyExists for class ortus.boxlang.runtime.types.XML

BL-958 StructFindKey returns two findings on the same node if top level key is array

BL-959 Better error handling when dump template errors

BL-964 Return callback return value from runThreadInContext()

BL-966 java interop coerce BL arrays to native arrays

BL-967 Add toOptional() method to Attempt

BL-968 coerce return values of proxied methods

BL-983 output class of non-simple valued fields in class output for cfdump

BL-984 prefer same mapping for relative class lookups in box resolver

BL-998 Client scope needs more consistencies like the session scope when validating and expiration determination

BL-999 Module service record was not registering interceptors with the module settings

BL-1002 HTTP Component - Implement Proxy Server handling

BL-1010 add default itnerface helper for the IBoxContext to get the running application name if any

BL-1013 Servlet to support Jakarta namespace


🐛 Bug Fixes

BL-389 varargs not working

BL-931 CF casts Class instances to a String

BL-947 Namespaced XML nodes not accessible by their non-namespaced names

BL-949 XMLSearch Not Finding Correct Results When Namespaces are Present

BL-950 XML asString Generates trailing line break

BL-951 StructFindKey Not Returning owner values correctly

BL-960 ASM compilation error

BL-961 query with empty column name can't be dumped

BL-965 WriteDump()/Dump() is broken in current snapshot build

BL-969 DateCompare on two zero-hour strings fails with long overflow

BL-970 XMLElemNew Illegal Character exception when using the namespace URI as the second argument

BL-977 HTTP Component - Implement Basic Authentication

BL-978 Cannot access variables scope in a static context -- but there is no variables access

BL-981 timezone not always used in datetime caster

BL-982 toUnmodifiableStruct() method not threadsafe

BL-985 directoryList filter param does not accept a closure

BL-991 Support for guid and uuid type

BL-994 getDirectoryFromPath returns different result to Lucee and ACF

BL-995 argument type of binary is not supported

BL-996 argument type of email is not supported

BL-1000 CGI scope reporting 0 items

BL-1003 JSONSerialize pretty prints JSON which blows up outbound NDJSON

BL-1004 CFHTTParam Encodes Query Strings By Default

BL-1005 URLEncodedFormat Replaces Spaces with Plus Symbols

BL-1015 Bracket Notation Usage on Java Hashmaps Does not work.

BL-1017 Detail and Extended Info Can Be Null In Thrown Exceptions

Add Your Comment

Recent Entries

BoxLang 1.0.0 RC1 Launched

BoxLang 1.0.0 RC1 Launched

After nearly a year of relentless iteration, rigorous testing, blood, sweat, lots of praying, tears, and over 1,000 resolved tickets, we proudly announce the first Release Candidate (RC1) of BoxLang! With 27 beta versions behind us, we are now on the final stretch toward the official 1.0 release.

Luis Majano
Luis Majano
February 18, 2025
Exploring BoxLang: A Modern Scripting Language for the JVM!

Exploring BoxLang: A Modern Scripting Language for the JVM!

The amazing CFML community leader Ray Camden recently shared his thoughts on BoxLang, a dynamic scripting language that runs on the Java Virtual Machine (JVM). BoxLang is lightweight (only 6 MB) and doesn’t require Java knowledge, making it accessible to developers from all backgrounds. Whether you're building CLI scriptsweb applications, or experimenting with serverless architecture, BoxLang has you covered.

Maria Jose Herrera
Maria Jose Herrera
February 14, 2025
Get a Free BoxLang+ License with Your ITB 2025 Ticket!

Get a Free BoxLang+ License with Your ITB 2025 Ticket!

At Ortus Solutions, we are dedicated to delivering the best experience for our Into the Box attendees. This year’s event will be an exciting opportunity to explore BoxLang and modern CFML development, and we want to ensure that attending in person is even more rewarding.

Maria Jose Herrera
Maria Jose Herrera
February 07, 2025