Release - Mun v0.3.0

April 11, 2021, The Mun Team

It’s been almost eleven months since the previous major Mun release. A lot has happened; in the world, in the Core Team members’ personal lives, and with Mun. The ambitions that we set for Mun v0.3 were big - and the delays equally so - but we are excited to finally present Mun v0.3.0. This tock-release was focused on usability improvements; multi-file projects, a language server with diagnostics and autocompletion, and improvements to robustness and developer workflow to name a few.

What’s Mun?

Mun is an embeddable programming language empowering creation through iteration. The idea to create Mun originated out of frustration with the Lua dynamic scripting language and a desire to have similar hot reloading functionality available in Rust. As such, it’s not a direct competitor with Rust, but instead is intended to be used with Rust (or C/C++) as a host/embedded language pairing. Actually, Mun is completely written in Rust, building on similar crates as rust-analyzer and rustc. Its key features include:

  • Ahead of time compilation - Mun is compiled ahead of time (AOT), as opposed to being interpreted or compiled just in time (JIT).
  • Statically typed - Mun resolves types at compilation time instead of at runtime, resulting in immediate feedback when writing code and opening the door for powerful refactoring tools.
  • First class hot-reloading - Every aspect of Mun is designed with hot reloading in mind. Hot reloading is the process of changing code and resources of a live application, removing the need to start, stop and recompile an application whenever a function or value is changed.

What’s new?

Mun v0.3 brings an insane amount of updates. When we say insane, we mean insane! In total, this release contains 52 pull requests from 7 of our community contributors and our two Core Team members. For a full list have a look at the changelog, but the main improvements are:

  • Type inferencing

    fn integer() -> i32 {
      0 // inferred as i32
    fn large_unsigned_integer() -> u128 {
      0 // inferred as u128
    fn with_let() -> u16 {
      let b = 4;    // inferred as u16
      let a = 4;    // inferred as u16
  • Modules & multi-file projects

    // mod.mun
    struct Foo;
    fn main() -> self::Foo {
    fn bar() -> Foo {
        super::Foo  // undefined value
    fn baz() -> Foo {
    // foo.mun
    struct Foo;
    fn bar() -> Foo {
        super::Foo  // mismatched type
    fn baz() -> package::Foo {
    fn nested() -> self::Foo {
  • Visibility & use keyword

    // /foo.mun
    pub struct Ok;
    // /bar.mun
    pub use package::foo::Ok as ReallyOk;
    pub struct Ok;
    // /baz.mun
    use package::bar::ReallyOk;
  • Autocompletion in editors through LSP

    Autocomplete working for Mun in VSCode
  • Diagnostics in editors through LSP

    Diagnostics in VSCode
  • Type aliases

    type Foo = u32;
    fn main() {
      let a: Foo = 1;
  • Better compile times, hot reload times, and runtime marshalling times

    Performance improvements for Mun struct marshalling
  • Decreased unsafe code usage and simplified code
  • Automatic testing of C/C++ bindings & documentation
  • Better developer tools
  • Assorted bug fixes

Make It or Break It

A new release also means the end of our first season of Make It or Break It. Our request for contenders, was answered by a lot of reporters filing bugs in the Break It track, but we only had a single contributor in the Make It track. After some discussion, we decided to skip a poll and instead decide on the - to us - unanimous winner: this Spaceship game created by legendiguess using Mun & Rust:

Spaceship game written with Mun and Rust

Congratulations, your contribution will forever be remembered on our Make It or Break It hall of fame!

What’s next?

Mun is still in early development, so there is a lot to do. The Mun Core Team operates according to a tick-tock release cycle. Development of a tock release (Mun v0.3) focuses on using and improving existing features, whereas a tick release (Mun v0.4) focuses on implementing new features.

When planning Mun v0.3, we bit off more than we could chew, resulting in large delays. To avoid the same pitfalls, we’re limiting the scope Mun v0.4. In particular, we’ll focus on adding support for arrays and optimising our Mun ABI format. For a complete roadmap, please visit our GitHub milestones.

How can I learn more?

To get started, read the Mun Book and have a look at our Rust and C++ examples.

If you are interested in helping develop Mun feel free to reach out to us on Discord or Twitter, or pick up one of our good first issues on GitHub.

If you cannot personally contribute but would still like to support our cause, please consider donating to our Open Collective or Github Sponsors.


This release would not have been possible without the incredible contributions from the Mun Community. We are extremely grateful to all of you!