The BoxLang team is thrilled to announce the release of BoxLang 1.7.0, a landmark update that brings powerful new capabilities for modern web development, distributed systems, and AI-powered applications. This release introduces Server-Sent Events (SSE) for real-time streaming, a JDBC Cache Store for distributed caching, AST generation tools for code analysis, bytecode compatibility versioning, and significant performance improvements across the runtime.
Plus, we're excited to announce several new BoxLang+ modules for our subscribers, expanding BoxLang's ecosystem with Redis, CSV processing, LDAP, spreadsheet operations, and PDF generation capabilities.
🚀 What's New in 1.7.0
You can find our full developer release notes here: https://boxlang.ortusbooks.com/readme/release-history/1.7.0
Real-Time Streaming with Server-Sent Events (SSE)
BoxLang 1.7.0 introduces first-class support for Server-Sent Events, enabling you to build real-time applications, AI agents with streaming responses, live dashboards, and progressive loading experiences with ease.
AI Response Streaming:
// Stream AI responses in real-time
SSE(
callback : ( emitter ) => {
var response = callAIService();
while ( !emitter.isClosed() && response.hasMoreTokens() ) {
emitter.send( response.getNextToken(), "token" );
}
emitter.send( { complete : true }, "done" );
},
async : true,
keepAliveInterval : 30000,
timeout : 300000
);
Live Dashboard Updates:
// Stream real-time analytics data
SSE(
callback : ( emitter ) => {
var startTime = now();
var updateInterval = 5000; // Update every 5 seconds
while ( !emitter.isClosed() && dateDiff( "s", startTime, now() ) < 300 ) {
var metrics = {
activeUsers : getActiveUserCount(),
requestsPerSecond : getCurrentRPS(),
avgResponseTime : getAvgResponseTime(),
timestamp : now()
};
emitter.send( metrics, "metrics" );
sleep( updateInterval );
}
emitter.close();
},
async : true,
keepAliveInterval : 15000
);
Progress Updates for Long-Running Tasks:
// Stream progress updates for file processing
SSE(
callback : ( emitter ) => {
var files = directoryList( uploadPath );
var total = arrayLen( files );
files.each( ( file, index ) => {
if ( emitter.isClosed() ) {
return; // Client disconnected
}
// Process the file
processFile( file );
// Send progress update
emitter.send(
{
processed : index,
total : total,
percentage : round( ( index / total ) * 100 ),
currentFile : getFileFromPath( file )
},
"progress",
index
);
} );
emitter.send( { status : "complete", total : total }, "done" );
},
async : true,
timeout : 600000 // 10 minute timeout
);
The SSE implementation includes:
- Async execution for non-blocking streaming
- Automatic keep-alive to maintain connections
- CORS support for cross-origin requests
- Client disconnect detection with graceful cleanup
- Large data chunking (automatically splits >32KB messages)
Perfect for building AI chatbots, live notifications, progressive content loading, and real-time analytics dashboards.
Distributed Caching with JDBC Cache Store
Scale your applications horizontally with the new JDBC Cache Store, enabling cache sharing across multiple BoxLang instances backed by your existing database infrastructure.
// Configure in boxlang.json
{
"caches" : {
"distributedCache" : {
"provider" : "BoxCache",
"properties" : {
"objectStore" : "JDBCStore",
"datasource" : "myDatasource",
"table" : "boxlang_cache",
"autoCreate" : true,
"maxObjects" : 1000,
"evictionPolicy" : "LRU"
}
}
}
}
The JDBC Cache Store supports all major databases (Oracle, MySQL, PostgreSQL, SQL Server, Derby, HSQLDB, SQLite) with automatic schema management, vendor-optimized SQL generation, and full eviction policy support. All cache stores now expose an isDistributed() method for ecosystem tools to detect distribution capabilities.
Code Analysis with BoxAST()
Build powerful code analysis tools, linters, formatters, and migration utilities with the new BoxAST() BIF, providing programmatic access to BoxLang's Abstract Syntax Tree.
// Parse BoxLang code
ast = BoxAST( source : "x = 1 + 2; y = x * 3;" );
// Or use the convenient member method
ast = "function hello() { return 'world'; }".toAST();
// Parse from files
ast = BoxAST( filepath : "myScript.bx" );
// Return as JSON for external tools
astJson = BoxAST(
source : "function hello() { return 'world'; }",
returnType : "json"
);
// Parse CFML code for migration tools
cfAst = BoxAST(
source : "<cfset x = 1><cfoutput>#x#</cfoutput>",
sourceType : "cftemplate"
);
Perfect for building custom linters, code generators, refactoring tools, documentation generators, and CFML-to-BoxLang migration utilities.
Bytecode Compatibility Versioning
BoxLang 1.7.0 implements bytecode compatibility versioning, ensuring compiled classes remain compatible across runtime versions. This enhancement improves module stability and provides better guarantees when distributing compiled BoxLang code.
With bytecode versioning, you can:
- Deploy with confidence - Compiled modules maintain compatibility across BoxLang updates
- Manage dependencies - Better tracking of compiled code versions in your ecosystem
- Optimize module loading - Runtime can validate bytecode compatibility before execution
- Improve stability - Prevent runtime errors from bytecode incompatibilities
This is especially important for BoxLang module authors and teams managing large codebases across multiple environments.
⚡ Performance Improvements
BoxLang 1.7.0 delivers significant performance gains across the board:
- Scheduled Tasks: Major performance boost through optimized concurrent maps
- Static Initializers: Faster class initialization
- ASM Generation: Streamlined bytecode generation eliminating disk operations
- Cache Operations: Performance tuning across all cache store implementations
🔧 Developer Experience Enhancements
Dynamic Object Creation with Custom Class Loaders
customLoader = createObject( "java", "java.net.URLClassLoader" )
.init( [ url ] );
proxy = createDynamicProxy(
listener,
[ "com.example.Interface" ],
customLoader
);
HTTP Client Certificate Support
http url="https://secure-api.com" {
httpparam type="certificate" file="client-cert.p12" password="secret";
}
Improved Dumping
All built-in dump() member methods have been renamed to .bxDump() to prevent conflicts with user-defined methods, with better handling of Java types, recursive references, and restricted fields.
🎁 New BoxLang+ Modules for Subscribers
We're excited to announce several new modules available exclusively to BoxLang+ subscribers:
- bx-redis - High-performance Redis integration
- bx-csv - Advanced CSV processing capabilities
- bx-ldap - LDAP directory services integration
- bx-spreadsheet - Excel and spreadsheet operations
- bx-pdf - PDF generation and manipulation
Coming Soon: bx-couchbase, bx-mongodb, bx-elasticsearch, and more!
Not a subscriber yet? Learn more about BoxLang+ and unlock these powerful modules.
🐛 Bug Fixes & Stability
This release includes over 40 bug fixes improving stability across:
- Database operations and stored procedures
- File operations and uploads
- HTTP handling and query parameters
- Path resolution and mappings
- CFML compatibility
- Windows platform support
📦 Installation & Upgrade
Quick Installer
Mac/Unix
/bin/bash -c "$(curl -fsSL https://install.boxlang.io)"
Powershell
/bin/bash -c "$(curl -fsSL https://install.boxlang.io)"
BoxLang Version Manager (BVM)
bvm install latest
bvm use latest
Maven
<dependency>
<groupId>io.boxlang</groupId>
<artifactId>boxlang</artifactId>
<version>1.7.0</version>
</dependency>
Direct Download
Download from boxlang.io/download
⚠️ Migration Notes
Breaking Change: The dump() member method has been renamed to .bxDump() to avoid conflicts with user-defined methods. Update your code:
// Old
array.dump();
// New
array.bxDump();
🙏 Thank You
A huge thank you to our community for your continued feedback, bug reports, and contributions. Your input drives BoxLang forward!
📚 Resources
Ready to experience real-time streaming, distributed caching, and blazing performance? Upgrade to BoxLang 1.7.0 today!
Download
Please visit our download page or our quick installation guides to upgrade your installation.
Professional Open Source
BoxLang is a professional open-source product, with three different licences:
- Open-Source Apache2
- BoxLang +
- BoxLang ++
BoxLang is free, open-source software under the Apache 2.0 license. We encourage and support community contributions. BoxLang+ and BoxLang ++ are commercial versions offering support and enterprise features. Our licensing model is based on fairness and the golden rule: Do to others as you want them to do to you. No hidden pricing or pricing on cores, RAM, SaaS, multi-domain or ridiculous ways to get your money. Transparent and fair.
BoxLang is more than just a language; it's a movement.
Join us and redefine development on the JVM Ready to learn more? Explore BoxLang's Features, Documentation, and Community.
Join the BoxLang Community ⚡️
Be part of the movement shaping the future of web development. Stay connected and receive the latest updates on Into the Box 2025, product launches, tool updates, and more.
Subscribe to our newsletter for exclusive content.
Follow Us on Social media and don’t miss any news and updates:
- https://x.com/ortussolutions
- https://www.facebook.com/OrtusSolutions
- https://www.linkedin.com/company/ortus-solutions-corp
- https://www.youtube.com/OrtusSolutions
- https://github.com/Ortus-Solutions
Join the BoxLang and CFML legends at Into the Box 2025. Let’s learn, share, and code together for a modern, cutting-edge web development future.
Add Your Comment