this is a very work in progress port of Tulip Desktop to the web.
Our goal is to have this be the official tulip desktop experience, if we can get it there. you can still run "native" tulip desktop on linux/mac by compiling it if you'd rather.
This will help us lessen our support load and also expose Tulip to people on other platforms (windows!) without having to download anything.
The easiest way to develop is the unified dev server (in tulip/), which builds
both web apps — sharing a single AMY build — and serves them at once:
cd .. # tulip/
python3 webdev.py
# Tulip Web -> http://localhost:8001/run/
# AMYboard Web -> http://localhost:8000/editor/
To build just this app's stage/ (what CI runs) without serving:
./build.sh
No manual step: every push to main builds stage/ and deploys it to the tulip
Vercel project (tulip.computer) via .github/workflows/tulip-web-release.yml, and
each PR gets a tulip-pr-<N>.vercel.app preview.
The tulip "sys" files will load into /tulip4/sys. /tulip4/user is there for your files. Unlike other tulip ports, /tulip4/sys is "read only" in the sense that it resets back to our shipped FS default every page load. /tulip4/user will persist in your browser as an IndexedDB localstorage thing.
- python REPL
- tulip BG functions, graphics layer, TFB, sprites etc
- LVGL
- AMY (loaded as a separate audioworklet), including sequencer
- keyboard & mouse via SDL
- persistent filesystem in localstorage, including
sysexamples folder - MIDI input & output w/ selectable devices
- Tulip world,
url_save
inputtime.sleep()- we boot AMY without audio in, because the UX for microphone access is scary and bad. We can later add an explicit opt in for it
T-sequencer running too slowly to hit every tick #, so % dividers get missed (see LEDs in drums)FS needs examples loaded on bootFS needs to persist to localstorageMIDI outputMIDI device selector dropdownaudio device dropdown if possible?- seems not fully supported yetrestart tulip buttondelete storage buttonget working on safari / iOS safari minus webmidistart LVGL before onclick for audio so it's not a black screen on launchsync my AMY changes to main AMYbuild in release.shspeed of LVGL object creation(?) (tryrun('drums'))startup bleep (and fix the juno bleep on macos desktop!)test changes on tulip desktop mac / linux and tulip cctest github hosting on tulip.computer/safari startup bleep sounds bad -- chrome is fine"sockets"/web requests - tulip world etcsome solution fortime.sleep/sleep_ms-- seeparallax,bunny_bounce,xanaduresizeable/responsive SDL canvasmaybe some simple intro HOWTO on the page- audio input opt-in checkbox