Kanopi
A live coding environment in the browser that plays several languages on one shared clock, BPscript included.
experimental licence AGPL-3.0-or-later
Kanopi starts from an observation, the one in its README: Flok edits several live coding languages at once, Estuary shares a clock, Max/MSP talks to hardware, and no tool brings the three together. Its main limitation: this is an alpha that does not install from its public repository, which depends on eleven local packages, several of them private; the online version dates from 6 July 2026.
The online version opens without installing anything, with two example scenes.
One editor per language, one transport for all
Think of Kanopi as a code editor in which each file is written in its own language, topped by a sequencer transport: a clock, a tempo, a position in bars and beats. Each language is plugged in through an adapter that keeps the tools of its original editor; Strudel, for instance, keeps its highlighting and its helpers through its own modules.
A BPscript scene acts as the conductor: it names actors, the voices, says which language each one plays, and decides through its rules who plays when.
Getting started
Open the online version, then the file main.bps in the left column. It is a scene with three code voices, switched by a flag:
@library.strudel "dirt-samples"
@actor drums transport.audio eval.tidal
@actor visuals transport.video eval.hydra
@actor bass transport.audio eval.strudel
@flag scene: intro:1, drop:2, break:3
[scene==intro] S -> visuals
[scene==drop] S -> { drums, visuals, bass }
[scene==break] S -> { visuals, bass }
drums -> `stack(s("bd*4").gain(0.9), s("~ cp").room(0.4), s("hh*8").gain(0.5).pan(sine.range(0.2, 0.8).slow(4)))`
visuals -> `osc(60, 0.1, 1.5).modulate(noise(3)).rotate(() => time/10).out()`
bass -> `note("c2 c2 eb2 g2").s("sawtooth").gain(0.4)`
The editor accepts it (“COMPILES”) and the Actors panel shows the three voices. Observed on 28 September 2026 on the online version, whose status bar reads v0.1.0-alpha. The transport then shows three scene buttons: intro, drop, break.
What it does
- Play six code languages in the browser: Strudel, Hydra, p5.js, Mercury, Csound and JavaScript.
- Derive BP3 grammars and BPscript scenes, which order these voices in time (BPscript).
- Keep a shared transport: play, stop, tap tempo, position in bars and beats.
- Switch scenes by flag, as in the example above.
- Offer a library: 113 BP3 grammars and 328 BPscript scenes, as of 7 September 2026.
- Modulate sounds: a value between 0 and 1, mapped onto the range of the chosen input (S14).
Common issues
A clone of the repository does not install. The interface package points to eleven local folders (file:), including the @kairos/core and @kronos/core engines, which are not public.
SuperCollider and Python do not play. .scd and .py files are recognised and open, but no adapter runs them: that will take a local bridge, planned for a desktop version.
The README promises more than the code. It lists Tidal, SuperCollider and Python among the languages; native Tidal, through GHCi and SuperDirt, is not plugged in, and the code of the example’s eval.tidal actor is written in Strudel.
Where it stands
Version 0.1.0-alpha, unpublished; 1,211 commits between 13 April and 7 September 2026. As of 7 September 2026, 127 test suites are declared (86 unit test files, 41 browser scenarios); the 86 unit files pass, but the full check still stopped at type checking (the repository’s baseline-status.json).
The public repository has not moved since 7 September 2026: work continues in a private repository that brings together Kanopi, BPscript and their engines.
Repository · Online version · S7 · S11 · osc-bridge
Thanks to the authors of Strudel, Hydra, Mercury, p5.js and Csound: Kanopi embeds their engines without rewriting them.
How it was made. Claude Code (Claude Opus 5.5), from the repository, its README and its release notes. Method