Skip to main content

Announcing MoonBit Beta

Ā· 7 min read

cover

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.

  1. The language covers all essential features needed for daily programming
  2. 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:

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.