githubEdit

1.3.0

June 23, 2025

We're excited to announce BoxLang v1.3.0, a significant update that brings new features, performance improvements, and important bug fixes to enhance your development experience.

🎉 New Features

Compression & Serialization Enhancements

Enhanced Zip Component (BL-1508)

Added compressionLevel parameter to zip component and utilities for better control over compression settings. The default compressionLevel is 6 which is a balanced approach.

Example:

// Zip Component
bx:zip compressionLevel="9"

// Compress BIF
compress( compressionLevel: 9 )

Pretty JSON Serialization (BL-1542)

Added pretty argument to jsonSerialize() function to enable formatted JSON output for improved readability and storage.

Example:

data = {
    name: "John Doe",
    age: 30,
    address: {
        street: "123 Main St",
        city: "Anytown",
        country: "USA"
    },
    hobbies: ["reading", "cycling", "photography"]
};

// Standard compact JSON (default behavior)
compactJson = jsonSerialize( data );
// Output: {"name":"John Doe","age":30,"address":{"street":"123 Main St","city":"Anytown","country":"USA"},"hobbies":["reading","cycling","photography"]}

// Pretty formatted JSON (new feature)
prettyJson = jsonSerialize( data, pretty=true );
/* Output:
{
  "name" : "John Doe",
  "age" : 30,
  "address" : {
    "street" : "123 Main St",
    "city" : "Anytown",
    "country" : "USA"
  },
  "hobbies" : [ "reading", "cycling", "photography" ]
}
*/

// Useful for debugging and configuration files
writeFile( "config.json", jsonSerialize( appConfig, pretty=true ) );

Array, List, Query & Struct Operations

New xNone() Functions (BL-1533)

Introduced xNone() functions for BIF operations across arrays, lists, queries, and structs to check if no elements match specified criteria.

Array Example:

List Example:

Query Example:

Struct Example:

Build & Security Improvements

Binary Checksums (BL-1512)

Added checksums to all binary creations in the build process for enhanced security and integrity verification.

Usage in CI/CD:

🚀 Improvements

Documentation & Developer Experience

  • Enhanced Documentation (BL-1471): Added comprehensive examples to documentation for Built-in Functions (BIFs) and Components

  • Command Line Help (BL-1521, BL-1522): Added --help and -h flags to Mini Server, Feature Audit, CFTranspiler, Scheduler, BoxRunner, and other command-line tools

Performance & Architecture

  • HTTP Response Compression (BL-1511): Added support for compressed HTTP responses to improve performance

  • Query Concurrency (BL-1534): Significant improvements to query concurrency handling, resolving inconsistencies when adding data to queries in parallel threads

  • Lazy Cache Expiration (BL-1528): Implemented lazy expiration for caching to optimize memory usage and performance

  • Scope Security (BL-1494): Prevented scopes from being overridden through scope hunting for better security

Error Handling & Type Safety

  • Array Type Matching (BL-1516): Updated arrayFind() to handle mismatched types gracefully without throwing exceptions

  • Compile-time Annotations (BL-1537): Refactored @NonNull and @Nullable annotations to use compile-time checkers instead of runtime dependencies

Dependency Updates

  • Semver4j Update (BL-1526): Bumped org.semver4j:semver4j from 5.7.0 to 5.7.1

  • Jackson Update (BL-1536): Bumped com.fasterxml.jackson.jr:jackson-jr-stree from 2.19.0 to 2.19.1

  • Runtime Dependencies (BL-1519): Optimized to ensure only runtime dependencies are stored in the lib folder

CFML Compatibility

  • CFQuery Parameter Mapping (BL-1544): Created transpiler rule for cfquery params, mapping cfsqltype to sqltype for better CFML compatibility

🐛 Bug Fixes

Image Processing

  • Image Scaling (BL-1216): Fixed issue where scaleToFit was creating black images

  • Member Function Resize (BL-1217): Resolved image resize functionality when used as member function

Database & Transactions

  • JDBC Transaction Handling (BL-1472): Fixed transaction defaults to use app-default datasource instead of ignoring named datasources in queries

  • DATETIME Parameter Aliasing (BL-1527): Resolved issue where DATETIME was not being properly aliased by query parameters in prepared statements

Mathematical Operations

  • Timestamp Math Operations (BL-1501): Updated math operations encountering timestamps to cast as fractional days for CFML compatibility

  • fix() Function Behavior (BL-1513): Aligned fix() function behavior with Lucee's implementation

Parallel Processing

  • Tiered Execution (BL-1503): Updated parallel computations (xSome, xEvery, xMap, xFilter, xEach) to use improved tiered execution approach

  • Loop Group Handling (BL-1504): Fixed issue where looping groups would break instead of continuing properly

File Handling & HTTP

  • File Upload Errors (BL-1507): Resolved HTTP errors occurring during file uploads

  • Multi-part Form Fields (BL-1523): Fixed issue where all multi-part form fields were being unnecessarily written to disk

Exception Handling

  • CFCatch Support (BL-1524): Improved CFCatch support when catch variable is defined in bx-compat-cfml

Caching System

  • Cache Concurrency (BL-1529): Resolved several concurrency issues affecting cache entries, creation timeouts, and last access timeouts

  • Cache Entry Collisions (BL-1530): Fixed cache entry equals evaluation that was incorrectly evaluating hash codes and causing collisions

Class & Component System

  • Remote Method Templates (BL-1531): Improved base template setting for remote methods in super classes

  • Class Metadata (BL-1541): Fixed type property in class metadata to properly reference "class" instead of "component"

  • XML Object Duplication (BL-1547): Resolved issue with duplicate function being broken when using XML objects

Path Handling

  • Servlet Path Resolution (BL-1532): Enhanced handling of ../ patterns in servlet paths for better security and reliability


📋 Summary

BoxLang v1.3.0 delivers significant improvements across performance, reliability, and developer experience. With enhanced concurrency handling, improved caching mechanisms, and comprehensive bug fixes, this release strengthens BoxLang's foundation while maintaining excellent CFML compatibility.

Key Highlights:

  • New compression and serialization capabilities

  • Major query concurrency improvements

  • Enhanced caching with lazy expiration

  • Comprehensive documentation updates

  • Critical bug fixes for image processing, database operations, and parallel processing

We recommend all users upgrade to v1.3.0 to benefit from these improvements and fixes.

For technical support or questions about this release, please visit our documentation or contact our support team.


Raw Release Notes

New Feature

BL-1508arrow-up-right Add `compressionLevel` to the zip component and utilities

BL-1512arrow-up-right Add checksums to all binary creations in the build process

BL-1533arrow-up-right xNone() for bif operations: array, list, query, struct

BL-1542arrow-up-right Added `pretty` argument to jsonSerialize() to allow for pretty serialization

Improvement

BL-1471arrow-up-right Add Examples to docs for BIFs and Components

BL-1494arrow-up-right Don't allow scopes to be "overridden" with scope hunting

BL-1511arrow-up-right Add Support for Compressed HTTP responses

BL-1516arrow-up-right arrayFind shouldn't throw on mismatched types

BL-1519arrow-up-right Small update to make sure only runtime dependencies are stored in the `lib` folder using our maven pom in the Boxlang home.

BL-1521arrow-up-right Add --help -h to Mini Server

BL-1522arrow-up-right Add --help -h to Feature Audit, CFTranspiler, Scheduler, BoxRunner and more

BL-1526arrow-up-right Bumps org.semver4j:semver4j from 5.7.0 to 5.7.1.

BL-1528arrow-up-right Add lazy expiration for caching

BL-1534arrow-up-right Query Concurrency Improvements : There are some inconsistencies and issues when dealing with adding data to queries in parallel threads

BL-1536arrow-up-right Bumps com.fasterxml.jackson.jr:jackson-jr-stree from 2.19.0 to 2.19.1.

BL-1537arrow-up-right Refactor @NonNull and @Nullable to use compile time checkers instead of runtime dependencies

BL-1544arrow-up-right Create a transpiler rule for cfquery params: `cfsqltype` to `sqltype`

Bugs

BL-1216arrow-up-right Image scaleToFit creating black images

BL-1217arrow-up-right Image resize not working as member func.

BL-1472arrow-up-right JDBC - Transaction defaults to app-default datasource, and ignores the datasource named in the first query

BL-1501arrow-up-right Compat: Math Operations Which Encounter Timestamps Should Cast as Fractional Days

BL-1503arrow-up-right Update parallel computations to use a tiered execution approach; xSome, xEvery, xMap, xFilter, xEach

BL-1504arrow-up-right looping groups breaks when it should continue

BL-1507arrow-up-right HTTP Errors When Uploading File

BL-1513arrow-up-right fix() behaviour is not equal to Lucee's behaviour

BL-1523arrow-up-right All multi-part form fields are being written to disk

BL-1524arrow-up-right CFCatch support when catch variable defined in bx-compat-cfml

BL-1527arrow-up-right DATETIME is not being aliased by query parameters in prepared statements

BL-1529arrow-up-right Several concurrency issues on cache entries created and last access timeouts

BL-1530arrow-up-right cache entry equals evaluating the hash codes incorrectly and causing collisions

BL-1531arrow-up-right Set base template for remote methods in super class

BL-1532arrow-up-right Better handle ../ in servlet paths

BL-1541arrow-up-right The `type` property in class metadata still references "component" instead of being "class"

BL-1547arrow-up-right duplicate function broken when using xml objects

Last updated

Was this helpful?