Flow

A programming language for making music. Write note streams, chords, and musical-context blocks as code — and hear them the instant you press play.

A pure tone

The hello-world — a one-second A4 sine. Press play to hear it.

hello.flow
use "@audio"
(play (createSineTone 440Hz 1.0 0.5))

A note-stream melody

A C-major run, written inline as a note stream at 120 BPM.

scale.flow
use "@audio"
use "@composition"

tempo 120 {
  (play | C4q D4q E4q F4q G4q |)
}

A chord progression

A ii–V–I in C, played from chord brackets inside a key context.

cadence.flow
use "@composition"

key Cmajor {
  (play | [D4 F4 A4]h [G3 B3 D4]h [C4 E4 G4]w |)
}

Why Flow

Flow turns musical ideas into code you can hear instantly. It reads like notation, chains like a pipeline, and speaks every genre. Three principles guide the whole language — and each one shows up directly in the syntax.

Ergonomics first

Composer ergonomics beat runtime efficiency and type strictness, every time. Common patterns stay terse and the awkward cases stay possible — you write what you mean musically, not what the machine needs to hear.

Genre-agnostic

Classical, EDM, jazz, pop, metal — one language for all of them. Nothing in Flow is tuned for a single style; chords, scales, grooves and synthesis are neutral building blocks you assemble however the piece wants.

Notation roots

Notes, chords, note streams and musical-context blocks — tempo, key, time signature, swing — are part of the syntax. A score-shaped idea stays score-shaped in code, then renders straight to audio or MIDI.

Note streams

Melodies are first-class. Pitches, durations, rests and chords go inline between bars.

| C4q E4q G4q C5h |

Chords & roman numerals

Inside a key, write the harmony you hear — roman numerals resolve to real chords.

key Cmajor {
  (play | I vi IV V |)
}

The flow operator

Chain transforms left-to-right with -> — transpose, then reverse, then play.

riff -> (transpose +7st) -> (retrograde)

Generative & improv

Hand a chord chart to jam and get a chord-aware solo back, in any style.

(jam over=chords style=#jazz length=8)