MNOLTH is the successor to monolith.

Source Code

A read-only fossil export to git can be found on sourcehut or github.

Differences from Monolith

(Other than having less letters in the name), mnolth differs slightly from monolith when it comes to design and scope. Generally, mnolth attempts to be a bit more portable and smaller.

Monolith comes included with realtime support (via JACK) and first-class support for monome devices such as arc or grid. Mnolth does not have built-in realtime support. It is mainly used for generating offline audio and video files. There's also no built-in monome support either.

mnolth is built on top of sndkit, and uses LIL as a DSL for making audio patches. Monolith uses runt as the intermediate language.

Monolith uses a fork of s9 scheme and Janet as frontend languages, with several language specific bindings. Mnolth uses tinyscheme, and also recently introduced lua. Overall, there are less C primitives defined compared to Monolith.

Mnolth can build and run on Termux on Android. Monolith will not.


Mnolth can be best thought of as sndkit, supercharged with goodies from other projects that aren't included in the sndkit distro.

The simplest mnolth patches are written in LIL, a tiny TCL-like scripting language. These have the lil extension, and are run via the mnolthprogram. Any sndkit patch written in LIL should be able to run with mnolth.

For more complex programs, one uses a sripting language on top of LIL. The most supported one currently is scheme via tinyscheme, but a lua frontend is being developed, and will probably end up being the preferred choice. The scheme interpreter is run via mnoscm, and the lua interpreter is run via mnolua. Both of these programs have ways of evaluating in-line chunks of LIL code, which abstractions can be built around.

LIL is not a fast or sophisicated language. But that's sort of the point. The main point of LIL is to be just usable enough to outline sndkit sound patches. Hence, the languages on top. Why do it this way? This design keeps the C abstraction from getting too tangled up with the more complex APIs like Lua.

Usually, LIL is only used to build up an audio graph at runtime, so performance is a non-issue. However, mnolth does have a number of simple drawing primitives exposed as LIL commands that must be called every frame. Graphics needs and scope are modest: tiny and non-realtime. At the moment, it's tolerable. More interactive and complex things may be beyond the scope of mnolth.

home | index