Announcing MoonBit Beta
Today weāre very proud to announce the beta release of MoonBit ā a programming language designed for tooling (AI focused) and user experience.
MoonBit supports multiple targets including WebAssembly, JavaScript and Native. Feature-wise, it is very close to Rust with GC but shipped with robust and extremely fast tooling.
If youād like to experiment with MoonBit, the MoonBit Tour is the best place to start ā complete with interactive examples and built-in value tracing.
What does it mean for MoonBit to be beta?ā
The MoonBit language has gone through rapid evolution over the past two years. That journey has been full of experiments, user feedback, and fast iteration. As a result, MoonBit today is not only more capable, but also more coherent, consistent, and production-ready than ever before.
The Beta release marks a clear commitment: MoonBitās core language features are now stable.
- The language covers all essential features needed for daily programming
- Language syntax is considered stable and changes will go through RFC process
While the language itself is stable, the standard library and toolchain will continue to improve. Work is underway to refine naming conventions, modularize packages, and simplify structure.
As we move forward, weāre placing a strong focus on documentation, package ecosystem growth, and community collaboration.
Async and checked error handling are in betaā
Unlike many languages where asynchronous support is delayed until 1.0, MoonBit ships builtin async support, checked error handling and provide nice IDE features to polish the user experience:
- Safety: All error propagation is statically checked by the compiler
- Simplicity: Async and error-aware functions are written just like regular onesāno
await
, no extra syntax - Readability: The IDE visually highlights async and fallible operationsāunderlined for errors, italicized for asyncāwithout requiring extra annotations
Hereās a simplified version of the classic cat
command implemented in MoonBit.
It combines multiple async data sources and error paths, yet remains clear and conciseāthanks to the languageās structured design and visual cues:
async fn cat(files : ArrayView[String]) -> Unit raise {
if files is [] {
@async.stdin.read_streaming() // read from stdin only once
} else {
for file in files {
if file is "-" {
@async.stdin.read_streaming() // read from stdin
continue
} else {
@async.path(file).read_all()
}
}
}
}
Roadmapā
Weāre moving forward with a clear roadmap toward 1.0, which we expect to lunch in 2026. If youād like to help shape the future of MoonBit, weād love to have you involved. From now on, all major language changes will follow a public RFC processāensuring transparency and inviting community participation.
If youād like to help shape the future of MoonBit, weād love to have you involved. You can:
- š Propose or comment on RFCs
- š Report bugs or suggest improvements
- š¬ Join discussions on Discord
- š¦ Contribute packages to mooncakes.ioāour growing package registry
MoonBit gets better with every idea, bug report, and line of code from the community. Join us on GitHub and help build what comes next.