Kodama

January 21, 2026 · View on GitHub

Kodama Screenshot

A digital delay plugin with shared Rust DSP core and dual runtime support (VST3/AU via JUCE, Web via WASM).

Features

  • Digital delay effect with 4 parameters:
    • Voices: 1-16 (multi-tap delay for layered "mountain echo" effect)
    • Delay Time: 0-2000ms
    • Feedback: 0-100%
    • Mix: 0-100% (Dry/Wet)
  • Real-time waveform visualization with per-voice color coding (HSL-based)
  • Adjustable waveform speed/zoom with efficient min-max downsampling
  • Modern UI built with Vue 3 + TypeScript + Tailwind CSS
  • Real-time parameter synchronization via JUCE WebSliderRelay

Architecture

┌─────────────────────────────────────────────────────────────┐
│                      Shared UI (Vue 3)                      │
└─────────────────────────────────────────────────────────────┘

        ┌─────────────────────┴─────────────────────┐
        │                                           │
        ▼                                           ▼
┌───────────────────┐                   ┌───────────────────┐
│   Native Runtime  │                   │    Web Runtime    │
│  (JUCE + C++ FFI) │                   │  (WASM + Worklet) │
└───────────────────┘                   └───────────────────┘
        │                                           │
        └─────────────────────┬─────────────────────┘


                   ┌───────────────────┐
                   │   Rust DSP Core   │
                   │   (kodama-dsp)    │
                   └───────────────────┘
  • dsp/: Rust DSP core (delay algorithm)
    • Native: staticlib → C FFI → JUCE plugin
    • Web: cdylib → WASM → AudioWorklet
  • plugin/: JUCE C++ wrapper (VST3/AU)
  • ui/: Vue 3 frontend (shared between both runtimes)

Prerequisites

PlatformRequirements
AllNode.js 18+, Rust (rustup), CMake 3.22+
macOSmacOS 10.15+, Xcode Command Line Tools
Linuxbuild-essential, libasound2-dev, libwebkit2gtk-4.1-dev
WindowsMSVC (Visual Studio 2022+)
# Install Rust WASM target
rustup target add wasm32-unknown-unknown

Quick Start

Clone

git clone --recursive https://github.com/your-username/kodama.git
cd kodama
npm install         # Install all dependencies (including ui/)

Note: If you cloned without --recursive, run: git submodule update --init --recursive

Web Development

npm run build:dsp   # Build WASM
npm run dev:web     # Start dev server (http://localhost:5173)

JUCE Development

cmake -B build -DCMAKE_BUILD_TYPE=Debug && cmake --build build --config Debug
npm run dev:juce    # Start Vite dev server with HMR
# Then open build/plugin/Kodama_artefacts/Debug/Standalone/Kodama[.app] in your DAW or run standalone

npm Scripts

ScriptDescription
setup:webInstall UI deps, build DSP to WASM
setup:juceInstall UI deps, build Debug plugin
dev:webStart web dev server with HMR
dev:juceStart Vite dev server with HMR (Debug plugin connects to localhost:5173)
build:dspBuild Rust DSP to WASM
release:webProduction build for web deployment
release:vstProduction build for VST3/AU (Release)

Project Structure

kodama/
├── dsp/                # Rust DSP core
│   ├── src/
│   │   ├── lib.rs      # Library entry
│   │   ├── delay.rs    # Delay algorithm
│   │   ├── ffi.rs      # C FFI bindings
│   │   └── wasm.rs     # WASM bindings
│   └── Cargo.toml
├── libs/juce/          # JUCE 8 (git submodule)
├── plugin/             # JUCE C++ wrapper
│   ├── include/Kodama/
│   └── src/
└── ui/                 # Vue 3 frontend
    ├── src/
    │   ├── components/
    │   ├── composables/
    │   └── types/
    └── public/
        ├── wasm/       # Built WASM (generated)
        └── worklet/    # AudioWorklet processor

Build Artifacts

TargetLocation
VST3build/plugin/Kodama_artefacts/Release/VST3/Kodama.vst3
AUbuild/plugin/Kodama_artefacts/Release/AU/Kodama.component
Standalonebuild/plugin/Kodama_artefacts/Release/Standalone/Kodama.app
Webui/dist-web/

Tech Stack

  • DSP: Rust
  • Audio Plugin: JUCE 8 (C++)
  • UI: Vue 3 + TypeScript + Tailwind CSS
  • Build: Vite, CMake, Cargo
  • Web Audio: WASM + AudioWorklet

License

MIT