# Sonic Pi in the browser

**URL:** <https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910>\
**Category:** Support, Help & Resources\
**Created:** [January 15, 2026, 8:35am UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910 "2026-01-15T08:35:09Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![keys](https://avatars.discourse-cdn.com/v4/letter/k/96bed5/32.png) [@keys](https://in-thread.sonic-pi.net/u/keys)\
**Post date:** [January 15, 2026, 8:35am UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910/1 "2026-01-15T08:35:09Z")

</div>

I checked out the Supersonic demo and it looks amazing!

> **[SuperSonic - SuperCollider's Synthesis Engine in the Browser](https://sonic-pi.net/supersonic/demo.html)**
>
> SuperCollider's powerful scsynth audio synthesis engine running in the browser as an AudioWorklet. Zero installation.

What I’m really looking for, though, is a place where students can compose music using commands—something like Sonic Pi. Unfortunately, we have restrictions on installing software on students’ PCs. Does anyone know of a web-based tool that could work for this?

---

<div class="post-metadata">

**Author:** ![brendanmac](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/brendanmac/32/2809_2.png) [@brendanmac](https://in-thread.sonic-pi.net/u/brendanmac)\
**Post date:** [January 15, 2026, 4:31pm UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910/2 "2026-01-15T16:31:38Z")

</div>

Hi

You may find mention here of Strudel and Tidal Cycles, both web- and text-based music /sound sequencing tools. The language and syntax are a bit esoteric (but easy to learn), for me at least 😄, so used to Sonic Pi, SC, PD etc

Strudel REPL [Strudel REPL](https://share.google/lvQ3ZVyax6yr78iTB)

PD-Pi

---

<div class="post-metadata">

**Author:** ![keys](https://avatars.discourse-cdn.com/v4/letter/k/96bed5/32.png) [@keys](https://in-thread.sonic-pi.net/u/keys)\
**Post date:** [January 17, 2026, 4:28pm UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910/3 "2026-01-17T16:28:34Z")

</div>

Thank you so much for the advice. I’ve now looked at a few tutorials for Strudel and it looks super-interesting. However I hope one day there will be a web version of Sonic Pi but Strudel is absolutely something I can use. Thanks.

---

<div class="post-metadata">

**Author:** ![brendanmac](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/brendanmac/32/2809_2.png) [@brendanmac](https://in-thread.sonic-pi.net/u/brendanmac)\
**Post date:** [January 18, 2026, 11:48am UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910/4 "2026-01-18T11:48:22Z")

</div>

@keys this topic has of course come up before:

> [@SuperSonic - SuperCollider's synth engine in the browser](https://in-thread.sonic-pi.net/t/supersonic-supercolliders-synth-engine-in-the-browser/9889/16):
>
> Hi, thanks again for your answers and sorry for the confusion. I was just wandering how feasible it would be for me to re-implement my current sonic-pi script as a “pure supercollider” thing so it can run in the browser. I don’t know how sonic-pi and supercollider communicate (well, via the OSC api), but I thought that there might be a way to “capture” the messages that sonic-pi sends to scsynth so that I can replicate that somehow in the browser. Does this sound like something I should not even…

Can I ask what and where you are teaching sound synthesis coding?

PD-Pi

---

<div class="post-metadata">

**Author:** ![keys](https://avatars.discourse-cdn.com/v4/letter/k/96bed5/32.png) [@keys](https://in-thread.sonic-pi.net/u/keys)\
**Post date:** [January 18, 2026, 1:10pm UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910/5 "2026-01-18T13:10:47Z")

</div>

I am personally considering using this in secondary school. In addition, I work at a university college where I teach other teachers. In many municipalities, they do not have the possibility to install software on the computers, so for that reason I need something that is web-based.

---

<div class="post-metadata">

**Author:** ![HarryLeBlanc](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/harryleblanc/32/2813_2.png) [@HarryLeBlanc](https://in-thread.sonic-pi.net/u/HarryLeBlanc)\
**Post date:** [January 18, 2026, 2:56pm UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910/6 "2026-01-18T14:56:40Z")

</div>

I came across this a while back, but never explored it:

> **[Fragment Synthesizer](https://www.fsynth.com/)**
>
> Web-based collaborative real-time audiovisual live coding environment

If you explore it, please let me know what you think!

---

<div class="post-metadata">

**Author:** ![In\_SPi\_AR](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/in_spi_ar/32/3056_2.png) [@In\_SPi\_AR](https://in-thread.sonic-pi.net/u/In_SPi_AR)\
**Post date:** [January 25, 2026, 2:03am UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910/7 "2026-01-25T02:03:28Z")

</div>

Hi Keys,

Definitely keep looking for ways to implement Sonic Pi. Try to access independent hardware i.e. Raspberry Pi’s or re-purposed laptops… some Linux distros can run Sonic with a bit of a tweak but a bit tricky due to the variations of Linux distros. I installed old laptops with Linux Ubuntu (totally free and after some web searches found a way to get Sonic Pi configured to run with Ubuntu).

With the RPis I used mini-screens, old keyboards (free), mouse and class sets of headphones. Worked really well. I also grabbed our old out of lease dated laptops and installed Ubuntu, tweaked to get Sonic to run properly. Then, purchased a nice pair of studio monitors for performances. I combined this with the usual mix of classroom instruments and learning outcomes match to the performing arts and STEM curriculum. It’s worth a note that the Raspian and Linux Os are free and overcome school based software limitations. Good luck Keys… students will love it 🙂 . BTW… I ended up getting 30 desktop installs with Sonic Pi in my computer lab due to the success of Sonic on the old laptops and Raspberry Pis. The installs were all individually done running on a network and worked beautifully. I taught between 22-27 students at a time. Sonic Pi’s entry points makes so accessible in the context of student diversity and ability ranges. I found that i could reach almost every student and they really loved it. The classroom dynamic was never dull. Students love to create and share… very excited.

---

<div class="post-metadata">

**Author:** ![nlb](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/nlb/32/997_2.png) [@nlb](https://in-thread.sonic-pi.net/u/nlb)\
**Post date:** [August 20, 2026, 1:45pm UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910/8 "2026-08-20T13:45:50Z")

</div>

hi there,

I just have a question : how to communicate with the osc api via the browser ?

> **[SuperSonic - SuperCollider's Synthesis Engine in the Browser](https://sonic-pi.net/supersonic/demo.html)**
>
> SuperCollider's powerful scsynth audio synthesis engine running in the browser as an AudioWorklet. Zero installation.

Is there an IRL example ? Just tell me the OSC command to play a C4 with the piano synth using an osc software able to send an osc message.

I am lost 🙂

Cheers

---

<div class="post-metadata">

**Author:** ![ethancrawford](https://avatars.discourse-cdn.com/v4/letter/e/a88e4f/32.png) [@ethancrawford](https://in-thread.sonic-pi.net/u/ethancrawford)\
**Post date:** [August 20, 2026, 2:01pm UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910/9 "2026-08-20T14:01:36Z")

</div>

@nlb - does this help?

> <https://github.com/samaaron/supersonic/blob/main/docs/QUICKSTART.md>

and maybe this?

> <https://github.com/samaaron/supersonic/blob/main/docs/SCSYNTH_COMMAND_REFERENCE.md>

Plus anything else that may be of interest in the /docs folder there?..

---

<div class="post-metadata">

**Author:** ![ethancrawford](https://avatars.discourse-cdn.com/v4/letter/e/a88e4f/32.png) [@ethancrawford](https://in-thread.sonic-pi.net/u/ethancrawford)\
**Post date:** [August 20, 2026, 2:19pm UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910/10 "2026-08-20T14:19:11Z")

</div>

(Ah, you mention you want to communicate with it from ‘an osc software’ - presumably an external program, not a browser-based script?)

…In which case you’d need to have a separate ‘bridge script’ (eg Node.js or Python script for example) to forward the OSC messages via websockets to the browser.

---

<div class="post-metadata">

**Author:** ![nlb](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/nlb/32/997_2.png) [@nlb](https://in-thread.sonic-pi.net/u/nlb)\
**Post date:** [August 20, 2026, 2:30pm UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910/11 "2026-08-20T14:30:53Z")

</div>

thanks your quick answer !

yep i want to use openStageControl to send osc command to the SonicPiWeb version. I got OpenStageControl installed on my machine. On this same machine i visit [SuperSonic - SuperCollider's Synthesis Engine in the Browser](https://sonic-pi.net/supersonic/demo.html) . How can they communicate ? 🙂

---

<div class="post-metadata">

**Author:** ![ethancrawford](https://avatars.discourse-cdn.com/v4/letter/e/a88e4f/32.png) [@ethancrawford](https://in-thread.sonic-pi.net/u/ethancrawford)\
**Post date:** [August 20, 2026, 2:53pm UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910/12 "2026-08-20T14:53:13Z")

</div>

Sure. You could probably do it in one of two ways:

- Use a bridge script as mentioned above, and have a separate javascript snippet that listens to the websocket and forwards OSC commands to SuperSonic, or
- Use WebMIDI to receive MIDI commands, and have a javascript snippet that converts MIDI commands to OSC commands for SuperSonic.

---

<div class="post-metadata">

**Author:** ![nlb](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/nlb/32/997_2.png) [@nlb](https://in-thread.sonic-pi.net/u/nlb)\
**Post date:** [August 20, 2026, 3:48pm UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910/13 "2026-08-20T15:48:54Z")

</div>

i installed this [Releases · samaaron/supersonic · GitHub](https://github.com/samaaron/supersonic/releases)

 ![image](https://europe1.discourse-cdn.com/flex017/uploads/sonic_pi/original/2X/0/0632beddbda91e286a0dc43b0455eb7ed8476023.png)

so i have openstagecontrol on the same machine, what osc command can i send to SuperSonic ? which port ?

 ![image](https://europe1.discourse-cdn.com/flex017/uploads/sonic_pi/original/2X/7/708334d58ffe2dd2dd0e641d5262ce5b443ad1a5.png)

ah ah supersonic is there 🙂

i guess i have to discover how to translate  
supersonic.send(“/s\_new”, “sonic-pi-prophet”, -1, 0, 0, “note”, 28, “release”, 8, “cutoff”, 70);

into a button instruction in OpenStageControl

---

<div class="post-metadata">

**Author:** ![HelenMarsh](https://avatars.discourse-cdn.com/v4/letter/h/a183cd/32.png) [@HelenMarsh](https://in-thread.sonic-pi.net/u/HelenMarsh)\
**Post date:** [August 21, 2026, 8:30am UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910/14 "2026-08-21T08:30:16Z")

</div>

The translation is mostly a matter of getting the OSC type tags right, since scsynth is strict about them. In a button widget, set the address to /s\_new and put the fixed arguments in the widget’s preArgs list rather than in the value: the synth name is a string, the node id, add-action and target group are integers, and every control name is a string followed by its value as a float. So the ordering is “sonic-pi-prophet”, -1, 0, 0, then the pairs “note” 28.0, “release” 8.0, “cutoff” 70.0.

Two things usually bite here. First, a controller UI will happily send 28 as a float and 0 as a float too, and scsynth will reject the message if the node id / add-action / target aren’t ints, so type those entries explicitly as integers (in most controllers you do that by declaring the arg as {type: ‘i’, value: 0}). Second, -1 as the node id means “let the server pick”, which is fine for one-shot notes, but you then have no handle to free the node; if the synth has no self-terminating envelope you’ll pile up voices. For a button it’s safer to allocate your own ids from a counter and send /n\_set or /n\_free to that id on release.

If you want to sanity-check the message before wiring the UI, send it from a plain command-line OSC client to the server’s UDP port and watch the server’s stdout: a bad type tag prints a parse/mismatch error immediately, which tells you the shape is wrong rather than the routing. Once the raw message works, the widget config is just the same list in the controller’s syntax.

And if the browser side is involved rather than a native server, remember the page can’t speak UDP at all, so the same message has to go over a websocket to a small relay that re-emits it as UDP; the argument typing question is identical, it just happens on the relay side.

---

<div class="post-metadata">

**Author:** ![nlb](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/nlb/32/997_2.png) [@nlb](https://in-thread.sonic-pi.net/u/nlb)\
**Post date:** [August 21, 2026, 9:31am UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910/15 "2026-08-21T09:31:59Z")

</div>

hello,

so i installed on my ubuntu machine SonicPi version 5 using appImage.  
Note that i had to install libopengl.dev for sonicpi can be launched.

then i create a button into openStageControl (oSC) to send an osc message /s\_new

DEBUG, OSC) Out: { address: ‘/s\_new’, args: [  
{ type: ‘s’, value: ‘sonic-pi-prophet’ },  
{ type: ‘f’, value: -1 },  
{ type: ‘f’, value: 0 },  
{ type: ‘f’, value: 0 },  
{ type: ‘s’, value: ‘note’ },  
{ type: ‘f’, value: 60 },  
{ type: ‘s’, value: ‘release’ },  
{ type: ‘f’, value: 8 },  
{ type: ‘s’, value: ‘cutoff’ },  
{ type: ‘f’, value: 70 },  
{ type: ‘f’, value: 0 }  
] } To: 127.0.0.1:4560

this is the log console of oSC

and in sonic pi

the osc message is received but no sound…

What do i miss ?

 ![image](https://europe1.discourse-cdn.com/flex017/uploads/sonic_pi/original/2X/0/0c2c589b460120012f7308eb9a018262b02d6fac.png)

---

<div class="post-metadata">

**Author:** ![ethancrawford](https://avatars.discourse-cdn.com/v4/letter/e/a88e4f/32.png) [@ethancrawford](https://in-thread.sonic-pi.net/u/ethancrawford)\
**Post date:** [August 21, 2026, 11:14am UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910/16 "2026-08-21T11:14:54Z")

</div>

The `s_new` and other predefined message names are specific to SuperSonic when used separately from Sonic Pi - and when using Sonic Pi, they’re considered more of an internal API for the Spider server to talk to SuperSonic. To communicate via OSC from Open Stage Control to Sonic Pi, you’d just use your own naming, just like we’ve done in the past.

---

<div class="post-metadata">

**Author:** ![nlb](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/nlb/32/997_2.png) [@nlb](https://in-thread.sonic-pi.net/u/nlb)\
**Post date:** [August 21, 2026, 12:19pm UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910/17 "2026-08-21T12:19:05Z")

</div>

thank you for this point ! happy to learn it 🙂

so i have to use supersonic ?

it seems there a big path before i understand all this stuff and make music. so let’s play ukulele 🙂

To be honest, supersonic must be a super software but without real examples it seems to me it is very hard to see the user cases. When i read the doc it is clearly very developpers oriented.

Bref, see you next time maybe 🙂

---

<div class="post-metadata">

**Author:** ![ethancrawford](https://avatars.discourse-cdn.com/v4/letter/e/a88e4f/32.png) [@ethancrawford](https://in-thread.sonic-pi.net/u/ethancrawford)\
**Post date:** [August 21, 2026, 12:25pm UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910/18 "2026-08-21T12:25:45Z")

</div>

I’m happy to help you make sense of it all if you want to. Want me to continue via your messages inbox?

---

<div class="post-metadata">

**Author:** ![nlb](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/nlb/32/997_2.png) [@nlb](https://in-thread.sonic-pi.net/u/nlb)\
**Post date:** [August 21, 2026, 12:29pm UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910/19 "2026-08-21T12:29:18Z")

</div>

if you want but not sure i will spend lot of time on this exploration 🙂 it is up to you but thank you for your help

---

<div class="post-metadata">

**Author:** ![samaaron](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/samaaron/32/7_2.png) [@samaaron](https://in-thread.sonic-pi.net/u/samaaron)\
**Post date:** [August 22, 2026, 6:48am UTC](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910/20 "2026-08-22T06:48:18Z")

</div>

For the record, SuperSonic is 100% developer focussed. It’s a realtime engine for building new apps and not intended for casual use by people without significant programming experience.

Sonic Pi is the app that is intended for people who want to make music. SuperSonic is for developers who want to build music apps.

[Next page](https://in-thread.sonic-pi.net/t/sonic-pi-in-the-browser/9910.md?page=2)
