Changelog
This release includes major internal rewrites and multiple breaking changes. If you already have existing scripts, they may require updates before working correctly on this version.
Breaking Changes
Type System Overhaul
The type system has been fully redesigned.
- Exact types are now known throughout parsing
- Stronger guarantees and clearer validation
- Legacy type behavior has been removed
Global Variables Rewritten
Global variables have been completely revamped.
- Improved consistency
- Better type-awareness
- Cleaner internal behavior
- Trying to use the old global syntax will immediately throw
Explicit Nullability
Null handling is now explicit and type-aware.
- Variables cannot be assigned
noneunless declared nullable from the start- Variables that are meant to be nullable must provide the exact type
Coercion Removed
Automatic coercion has been removed.
Previously, a variable declared as one type could sometimes receive another type. That behavior is gone.
Example:
This prevents many runtime surprises.
- Declared as
string→ cannot assignint- Declared as
int→ cannot assign unrelated types
Lists and Maps Updated
Lists and maps have been partially rewritten.
- Typed collections are now emphasized
- Legacy untyped collections will immediately throw an error
Fixes & Improvements
Much Better Error Messages
Almost all diagnostics have been significantly improved.
- Clearer explanations
- Better highlights
- More actionable help messages
Smarter Unknown Pattern Handling
Unknown statements, conditions, expressions, loop sources, and blocks are now handled far better.
Instead of throwing a generic "Unknown X" even when the issue is only a typo, the matcher can now detect:
- Extra tokens
- Typos
- Missing values
- Type binding failures
- Closest-match suggestions
Fewer Runtime Surprises
With coercion removed and stronger typing, many issues are now caught earlier instead of failing later at runtime.
Data Classes Expanded
Data classes now support all types instead of being limited to only a small subset.
General Stability Improvements
Many additional fixes, cleanups, and internal improvements were made across the project.
Pattern Changes
Many patterns now use required groups instead of duplicated matching logic.
Performance
Faster Parsing
Parsing performance is now significantly faster (2.5x+ in many cases).
This was achieved through:
- Parallel parsing of independent blocks
- Faster pattern indexing
- Cheaper pattern matching
Experimental Compiler: Vanta
A new experimental compiler backend, Vanta, is available.
Benefits:
- Much faster startup compilation
- Up to 35x faster compile times in many scenarios (average about 10x faster)
Vanta is currently in beta.
API Changes
Statement Form Handlers Removed
Statement form handlers have been removed.
Ref Types Removed
Legacy Ref Types and related classes are gone, replaced by unified LumenType.
Single parameter handlers
Instead of inconsistent signatures in statements, expressions, and conditions. All of them now receive a unified HandlerContext.
Final Note
This release is a major step forward in correctness, tooling quality, performance, and long-term architecture.
However, keep in mind, this version is more beta than other releases due to the many breaking changes. There will be more edge cases.
Changelog - Lumen 1.1.0 (Combined with 1.0.9)
This release combines changes from the unreleased 1.0.9 and includes a large set of improvements, fixes, and internal refactors.
Breaking Changes
A much larger breaking change is planned for the next release. It will likely break around 90% of existing scripts due to a full type system overhaul.
Current breaking changes in this release:
- Overhauled the entire variable system, including global variables
This resolves many inconsistencies and internal issues
See more at: https://github.com/LumenLang/lumen/pull/18Features
- Added instant inventory hot reload
Saving a script now updates currently open inventories in place without closing and reopening
Supports title, size, and item changes
Documentation: https://docs.lumenlang.dev/01-user/09-inventories/03-instant-reload- Added custom event bus for Lumen
See more at: https://github.com/LumenLang/lumen/pull/19- Added support for event priorities
Documentation: https://docs.lumenlang.dev/01-user/01-basics/07-events#event-priority- Added support for ignoring already cancelled events
Documentation: https://docs.lumenlang.dev/01-user/01-basics/07-events#ignoring-cancelled-events- Allowed checking if an event is already cancelled
- Allowed uncancelling an event
- Allowed events to add imports through the API
- Added raw Java support in ConfigOption
- Exposed block access in EnvironmentAccess
- Allowed accessing CodegenContext inside TransformContext
- Implemented hover logic in MiniColorize
Improvements
- Made several conditions and patterns more natural
- Improved internal and user-facing descriptions
- Updated stop pattern to support "(stop|return)"
- Refactored event variable definitions to only include reference type or Java type
Fixes
- Fixed chat event not being cancellable
- Fixed inventory click event variables
- Fixed global variable default value not being set
- Fixed addon classpaths not being properly added
- Fixed raw Java line number preservation
- Fixed math operator coercion issues
- Removed showing experimental features in emit
Internal Changes
- General cleanup and consistency improvements across the variable system, events, and pipeline
Bug Fixes
Scripts now properly disable on plugin disable (https://github.com/LumenLang/lumen/commit/4758aabb2e33bfffe2f593c3e5f13074323dea49).
API Changes
Injectable handlers (https://github.com/LumenLang/lumen/pull/17)
Injectable handlers allow writing real Java code (via lambdas or static methods) instead of generating Java source as strings. The compiled bytecode is extracted and injected directly into the generated script class.
This introduces a completely new way of defining patterns, removing the need for manual Java string emission while enabling full IDE support, type checking, and significantly cleaner implementations.
Note: This feature is currently in beta and may evolve in future versions.
Internal Changes
The documentation format has been refactored into something more better long-term (https://github.com/LumenLang/lumen/pull/16).
This version adds code transformers. They can statically remove, replace, or add lines of code, and can be enabled through the config.
Breaking Changes
Support for implicit arguments has been removed.
Previously, it was possible to omit certain arguments, for example:
message "Test"
You must now explicitly provide the variable:
message player "Test"
This change improves determinism in pattern matching and simplifies tooling.
Internal Changes
- Refactored the type system, including multiple small bug fixes and improvements to inline expression handling.
- The defaults module has been restructured and split into multiple files.
- documentation.json has been updated on lumendocs.dev.
