Strudel Icon

Welcome to the Strudel documentation pages! You’ve come to the right place if you want to learn how to make music with code.

What is Strudel?

With Strudel, you can expressively write dynamic music pieces.
It is an official port of the Tidal Cycles pattern language to JavaScript.
You don’t need to know JavaScript or Tidal Cycles to make music with Strudel. This interactive tutorial will guide you through the basics of Strudel.
The best place to actually make music with Strudel is the Strudel REPL

What can you do with Strudel?

  • live code music: make music with code in real time
  • algorithmic composition: compose music using tidal’s unique approach to pattern manipulation
  • teaching: focussing on a low barrier of entry, Strudel is a good fit for teaching music and code at the same time.
  • integrate into your existing music setup: either via MIDI or OSC, you can use Strudel as a really flexible sequencer


Here are some examples of how strudel can sound:

// "coastline" @by eddyflux
// @version 1.0
let chords = chord("<Bbm9 Fm9>/4").dict('ireal')
  stack( // DRUMS
    s("bd").struct("<[x*<1 2> [~@3 x]] x>"),
    s("~ [rim, sd:<2 3>]").room("<0 .2>"),
    n("[0 <1 3>]*<2!3 4>").s("hh"),
    s("rd:<1!3 2>*2").mask("<0 0 1 1>/16").gain(.5)
  .mask("<[0 1] 1 1 1>/16".early(.5))
  , // CHORDS
  , // MELODY
  n("<0!3 1*2>").set(chords).mode("root:g2")
  chords.n("[0 <4 3 <2 5>>*2](<3 5>,8)")
  .rarely(ply("2")).chunk(4, fast(2))
  .gain(perlin.range(.6, .9))
  .mask("<0 1 1 0>/16")
.late("[0 .01]*4").late("[0 .01]*2").size(4)

These examples cannot fully encompass the variety of things you can do, so check out the showcase for some videos of how people use Strudel.

Getting Started

The best way to start learning Strudel is the workshop. If you’re ready to dive in, let’s start with your first sounds