AstonJ

AstonJ

Lunatic - An Erlang inspired runtime for all programming languages (WebAssembly)

More cool tech inspired by erlang :nerd_face:

By combining the fault-tolerance and massive concurrency of Erlang with the capability-based security of WebAssembly, it creates a powerful programming model.

Architecture

Lunatic is a single executable and runs on Windows, macOS and Linux. It spawns lightweight processes from WebAssembly modules that have their own heap/stack. These processes are preemptively scheduled on a multi-threaded executor.

Processes

Lunatic’s design is all about super lightweight processes. Processes are fast to create, have a small memory footprint and a low scheduling overhead. They are designed for massive concurrency.

Isolation

Lunatic sits between your operating system and the running processes. This allows it to decide on a per process basis what syscalls are going to be forwarded to the operating systems.

If you would like to run some untrusted code, you can. Just spawn it inside of a process without any privileges.

Most Liked

mindriot

mindriot

This looks pretty interesting and I’ve not fully got my head into the details yet however I think you have possibly put this into the wrong category. The first thought I got from the first few paragraphs was this was looking like something in the realm of Lumen but taking inspiration from BEAM / Erlang rather than implementing it. It seems however it is a server side thing.

From the FAQ page:

What is Lunatic?
Lunatic is a universal runtime for fast, robust, and scalable server-side applications. It’s inspired by Erlang and can be used from any language that compiles to WebAssembly.

From what I can wrap my head around this seems to be an Erlang inspired web assembly runtime environment allowing people to run web assembly modules of some kind as something similar to processes. It claims to do many of the core things like isolation, own stack/heap, inter process messaging, pre-emptive scheduling, super light processes, big concurrency… but the processes themselves execute WASM and it seems like runtime features are surfaced through libraries. I think the idea is building backends from loads of tiny WASM things that live in and talk to each other on a BEAM like runtime layer.

bkolobara

bkolobara

Creator of Lunatic

Hi! I’m Bernard, the creator of Lunatic.

Thanks you @AstonJ for sharing our project.

I think @mindriot pretty much nailed the core idea behind it.

It doesn’t need to be just “loads of tiny WASM” things, it can only be one WASM module that spawns processes from functions defined inside it. Lunatic should be usable for small projects to really big one. I love using it myself to play around with small side projects.

Lunatic can offer a bit more powerful per process isolation than you get on the BEAM. E.g:

  1. You can spawn a process that can only use a limited amount of memory or CPU.
  2. You can use C bindings without fear. Once everything is compiled to WebAssembly, long running code will still be preempted and crashes don’t escape the process boundary.
  3. You can limit syscalls on a per process level, e.g. spawn this process but don’t let any code running in it open a network connection.
  4. Redirect syscallls, e.g. if this process writes to a log file redirect the stream over the network to an Elastic cluster.
  5. You can use it from you favourite language if it compiles to WebAssembly. Currently we only provide libraries for Rust and AssemblyScript.

A long term goal of the project is to be able to take some codebase, let’s say a C project, recompile it to WebAssembly and run it on top of Lunatic. If you use threads in your project, we abstract them with much more lightweight processes that share memory. If you do a blocking network read, we just take this thread off the executor until the data arrives. We want to bring as many benefits of Erlang to other languages with the least amount of work required from the developer and stay close to the existing APIs of each language.

If anyone has some questions, I would be happy to answer them.

dimitarvp

dimitarvp

So glad having you here!

One starting question from my side would be: do you have any testing harness in place that confirms that Lunatic has the runtime guarantees that the OTP has?

I am really loving Elixir and the BEAM but speed and efficiency can be a concern. If we get to a point where a Rust levels of performance runtime exists with all OTP guarantees then I’ll be an immediate convert.

Where Next?

Popular Backend topics Top

First poster: bot
Julia v1.5.2 has been released. Link: Release v1.5.2 · JuliaLang/julia · GitHub
New
First poster: bot
phel-lang/phel-lang. Phel is a functional programming language that compiles to PHP. It is a dialect of Lisp inspired by Clojure and Jan...
New
First poster: bot
Circle is a new programming language that extends C++ 17 to support data-driven imperative metaprogramming. Circle combines the immediacy...
New
First poster: OvermindDL1
Today we are happy to announce axum: An easy to use, yet powerful, web framework designed to take full advantage of the Tokio ecosystem. ...
New
First poster: bot
A new R blog post/announcement has been posted! Get the full details here: Enhancements to HTML Documentation - The R Blog
New
NewsBot
Quarkus 3.21.0.CR1, 3.20.0.CR1 and 3.19.3 has been released. Link: Release 3.21.0.CR1 · quarkusio/quarkus · GitHub Link: Release 3.20...
New
NewsBot
Node.js v22.15.0 has been released. Link: Release 2025-04-23, Version 22.15.0 'Jod' (LTS), @UlisesGascon prepared by @RafaelGSS · nodej...
New
NewsBot
Node.js v24.1.0 and v22.16.0 has been released. Link: Release 2025-05-21, Version 24.1.0 (Current), @aduh95 · nodejs/node · GitHub Li...
New
NewsBot
A new PostgreSQL blog post/announcement has been posted! Get the full details here: PostgreSQL: PostgreSQL 18 Beta 2 Released!
New
NewsBot
Node.js v24.5.0 and v22.18.0 has been released. Link: Release 2025-07-31, Version 24.5.0 (Current), @aduh95 · nodejs/node · GitHub Li...
New

Other popular topics Top

PragmaticBookshelf
Brace yourself for a fun challenge: build a photorealistic 3D renderer from scratch! In just a couple of weeks, build a ray tracer that r...
New
PragmaticBookshelf
Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you’ll go beyond the syntax—and...
New
dimitarvp
Small essay with thoughts on macOS vs. Linux: I know @Exadra37 is just waiting around the corner to scream at me “I TOLD YOU SO!!!” but I...
New
PragmaticBookshelf
Learn different ways of writing concurrent code in Elixir and increase your application's performance, without sacrificing scalability or...
New
AstonJ
Continuing the discussion from Thinking about learning Crystal, let’s discuss - I was wondering which languages don’t GC - maybe we can c...
New
foxtrottwist
A few weeks ago I started using Warp a terminal written in rust. Though in it’s current state of development there are a few caveats (tab...
New
AstonJ
If you get Can't find emacs in your PATH when trying to install Doom Emacs on your Mac you… just… need to install Emacs first! :lol: bre...
New
First poster: bot
zig/http.zig at 7cf2cbb33ef34c1d211135f56d30fe23b6cacd42 · ziglang/zig. General-purpose programming language and toolchain for maintaini...
New
PragmaticBookshelf
A masterclass in the fundamentals and principles of functional programming. Minh Quang Tran The Art of Functional Programming is a ma...
New
PragmaticBookshelf
As digital systems increasingly run the world, mastery of the recurring patterns of software development risk is the key to fast and effe...
New