Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Can we build a DAW with Compose Multiplatform? ...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Atsushi Eno Atsushi Eno
May 21, 2026
4

Can we build a DAW with Compose Multiplatform? Maybe!

at KotlinConf 2026

Avatar for Atsushi Eno

Atsushi Eno

May 21, 2026

More Decks by Atsushi Eno

Transcript

  1. Can we build a desktop DAW on JVM? There already

    is. But not on Android and Web yet.
  2. atsushieno/uapmd A library for audio plugin hosting and sequencer engine

    (DAW) for MIDI 2.0 and audio tracks. And a PoC music sequencer. MIT license. Wasm version at: https://atsushieno.github.io/uapmd/ (no available synth yet)
  3. Audio plugin formats supported • Desktop: VST3, AudioUnit (v2 /

    v3), LV2, CLAP • iOS: AUv3 (not much tested) • Web: WebCLAP • Android: AAP (my own plugin format) ◦ ADC Japan 2026 (Jun. 3rd.)
  4. Sequencer (playback engine + editor) multiple tracks of audio clips

    and MIDI 2.0 (UMP) clips. can import MIDI 1.0 SMF, and split audio tracks (demucs-cpp) audio warps supported. (static time stretch so far. ARA2/3 in the future) DAG-based audio plugin graphs. (The PoC app has primitive editor features like PianoRoll, but UX isn't great.)
  5. Problems It is a C++ desktop app (ImGui) It works

    surprisingly great on Android (SDL3), but mobile UX is hard. => Why not use Compose Multiplatform? (Not rewriting everything in Kotlin; audio requires hard real-time safety.)
  6. Binding C++ library => let AI generate C API (not

    only for Kotlin in the long term) => cinterop first, for consistent API entrypoints to - JNA for (JVM and Android) - Emscripten (Wasm) => let AI generate bindings for to the cinterop-generated API for each platform (I don't target JS and Ktor for now; it is for CMP app with plugin UI)
  7. Porting the PoC app to Compose Multiplatform We have bindings

    for most app API (also for JS + MCP) so it should be almost only about GUI rewrites. "Create ImTimeline replacement in CMP" "Create ImNodes replacement in CMP" "Create a PianoRoll replacement in CMP"
  8. atsushieno/uapmd-kmp It runs! (on desktop and Android) The UX is

    horrible No Android plugin UI yet Android plugin UI works! No Wasm yet
  9. Current Status • The sequencer works well. The Compose UI

    is 2-3 days of AI slop. • Plugin UIs does not work perfectly ◦ need some special event loop handling (especially on Linux) • sluggish UI ◦ maybe I will have to remove extra cinterop layer. • dependencies are not organized well (at C++ layer)