Constraints for plugin developers

The few rules Maru's architecture depends on, for developers coming from JUCE or another framework, with links to the guides that own the details.

If you have built plugins before, most of Maru will feel familiar: parameters, presets, audio and MIDI processing, a UI and a set of plugin formats. A few rules differ, and they are what let one source play in a browser, a DAW and other targets. This page names them. The details belong to the linked guides, and they evolve as the platform does.

Realtime code stays realtime

Sound processing is written as restricted TypeScript that compiles to each target. The audio callback must not allocate, lock, block or do I/O. State is prepared ahead of processing, and controls change through the building blocks' own setters. Model inference, file access and network calls happen outside it. See the Audio SDK and DSP library.

A module owns the sound; the host owns services

A module declares its ports, parameters, presets, assets and interface. Devices, files, sign-in, account access and other services come from the host. Faces never produce audio or open devices. See How it works.

Parameters mean the same thing everywhere

Each parameter's range, steps and response curve are declared once, on the parameter. Host automation, MIDI CC and the interface all read that declaration, so they agree position for position. Shape a parameter's feel there, not in the face. See Contracts.

One source, qualified targets

The browser, native plugin formats and devices are built from the same source. Each target is built and checked separately, and each release lists what it supports. A browser demo does not by itself establish a native or hardware target. See Check, build and export and Native plugins.

Reuse before writing new DSP

Prefer the library's effects and building blocks, and extend a shared building block rather than copying it into a module. maru dsp effects, maru dsp nodes and maru module list show what exists. See Effects, instruments and custom DSP.

Availability and licensing

The maruaudio package is published on npm. The local workbench and plugin builds currently need a toolchain provided in the selected-developer beta; see the Quickstart. The SDK, CLI and generated plugin shells are not published under a general open-source license; see Licensing. Choosing Maru compares the approach with JUCE, Cmajor and RNBO.