---
title: 0.2.0
description: "BoxLang prelude, tree-shaking, cross-compilation, Java interop and runAsync."
icon: phosphor-duotone:tag
order: 14
---

Released 2026-03-07. [GitHub release](https://github.com/ortus-boxlang/matchbox/releases/tag/v0.2.0) | [Downloads](https://downloads.ortussolutions.com/ortussolutions/matchbox/0.2.0/)

## Added
- **BoxLang-Authored Prelude**: Standard BIFs (e.g., `arrayMap`, `structEach`, `arrayFilter`, `isEmpty`) are now implemented in BoxLang, reducing core VM size.
- **Tree-Shaking Compiler**: Automated dependency analysis to exclude unused prelude functions from standalone binaries.
- **Cross-Compilation Support**: Embedded runner stubs for Linux, macOS, and Windows into "fat" CLI binaries via the `cross-compile` Cargo feature.
- **Multi-Stage CI**: Refactored GitHub Actions to natively build stubs on each OS and aggregate them into single distribution binaries.
- **Namespaced Function Attributes**: Support for `@matchbox-keep` to explicitly preserve symbols from tree-shaking.
- **New CLI Flags**:
  - `--keep <symbols>`: Manually preserve BIFs in the final binary.
  - `--no-shaking`: Disable tree-shaking to include the full prelude.
  - `--no-std-lib`: Completely exclude the standard library.
- **Java Interop**: Implemented dynamic JNI reflection bridge for automatic Java method discovery and invocation.
- **Asynchronous Execution**: Implemented `runAsync` BIF and VM-level fiber spawning.
- **Documentation**: Added comprehensive documentation structure in `/docs`.

## Changed
- Migrated multiple BIFs (Math, Array, Struct) from Rust implementations to the BoxLang prelude.
- Refactored `build.rs` to support pre-existing stub injection and multi-target compilation.
- Unified bytecode serialization to `u32` for better cross-platform compatibility.

## Fixed
- Fixed specialized integer math opcodes (`OpAddInt`, `OpSubInt`, `OpMulInt`) to correctly handle float-backed constants.
- Resolved grammar conflict between classic for-loop initialization and optional semicolons.
- Fixed case-insensitivity in member method resolution (e.g., `.toUpperCase()` correctly maps to `ucase`).
