Plinth is an open source modular synthesis system that runs in your web browser. It currently consists of a demo page that lets you load and patch a set of sample modules (aka blocks), and a draft spec of a module API.
If you have have any feedback or want to contribute to the project, open an issue on GitHub or drop me a line. My name is Russ Simmons, and my email is in the format first-name@first-initial-last-name.org.
Each block has ports that let them connect to other blocks. Switch to the back view of the rack (using the Flip button or space bar) and you can see the ports of each block. There are two types of ports: input and output. Input ports are on the left side, and output ports are on the right.
There are two ways to wire a connection between two ports. You can either click on the first port, then click on the second port, or you can click on the first port, drag to the second port, and release. To delete a wire, first toggle Delete Wires mode via the button or the D key. In Delete Wires mode, any wire that you click on will be deleted.
There are currently two different types of signals that wires can carry: audio and gate. Each block port is of a specific type, and only ports of the same type can be connected together. Audio signals can carry either "listenable" audio or audio-rate control signals (ala control voltages). Gate signals are either "on" or "off" at any given moment in time, and are typically used as the output of clocks and the input of sequencers or envelope generators. Note: Audio signals should be able to carry gate-type signals, but there are currently technical issues that make this inconvenient. When browsers support the upcoming Audio Worklets specification, we can get rid of gate signals and only have audio signals.
A single output port can be connected to multiple inputs, in which case the same output signal is broadcast to all the inputs. Multiple output ports can also be connected to a single input. If the ports are audio-type, the signals will be summed together at the input. (If the ports are gate-type, the results are currently undefined.)
Connecting blocks in a "feedback loop" will work only in certain circumstances. For audio signals, a short delay is required somewhere in the signal path, otherwise the looping connections will be ignored. With gate signals, it is possible to cause the system to freeze in an "infinite loop", so be careful.
The rack has a special block called Rack Outputs that is used to output a final audio signal for listening. This block cannot be deleted.
Icons are by Bernar Novalyi, CC BY 3.0.