A free, open-source music composition tool for beat-making, loops, and arrangements β built with Web Audio, WASM, and modern web tech.
| ComposeYogi | Traditional DAWs |
|---|---|
| Open source | Closed source |
| Runs in browser | Heavy desktop installs |
| Free forever | Paid subscriptions |
| Community-driven | Vendor-controlled |
| Hackable & extensible | Locked ecosystems |
- πΉ Multi-track Timeline β Audio, MIDI, and Drum tracks with drag-and-drop clips
- πΌ Piano Roll Editor β Full-featured MIDI note editor with scale lock
- π₯ Drum Sequencer β Step sequencer with pattern presets (Four on Floor, Hip Hop, Trap, etc.)
- πΈ Built-in Instruments β Synths, bass, keys, leads, and pads powered by Tone.js
- π Real-time Visualizer β Frequency bars and waveform display
- ποΈ Mixer Controls β Volume, pan, mute, and solo per track
- βΊοΈ Audio Recording β Record directly from your microphone with latency calibration
- πΎ Local-first Storage β Auto-save to IndexedDB, works offline
- π΅ MIDI Export β Export your compositions to MIDI files
- β¨οΈ Keyboard Shortcuts β Professional workflow with hotkeys
- π Dark/Light Theme β Easy on the eyes
- π Internationalization β English and Spanish supported
- Node.js 18.17 or later
- npm, yarn, or pnpm
# Clone the repository
git clone [email protected]:AppsYogi-com/ComposeYogi.git
cd ComposeYogi
# Install dependencies
npm install
# Start development server
npm run devOpen http://localhost:3000 in your browser.
npm run build
npm start# Clone the repository
git clone [email protected]:AppsYogi-com/ComposeYogi.git
cd ComposeYogi
# Start with Docker Compose
docker-compose up -d
# Access at http://localhost:3000# Build the image
docker build -t composeyogi .
# Run the container
docker run -p 3000:3000 composeyogidocker pull appsyogi/composeyogi:latest
docker run -p 3000:3000 appsyogi/composeyogi:latest| Category | Technology |
|---|---|
| Framework | Next.js 15 with App Router |
| Language | TypeScript |
| Audio Engine | Tone.js |
| State Management | Zustand + Zundo |
| Styling | Tailwind CSS |
| UI Components | Radix UI |
| Drag & Drop | @dnd-kit |
| Persistence | IndexedDB via idb |
| i18n | next-intl |
composeyogi.com/
βββ app/ # Next.js App Router
β βββ [locale]/ # i18n routing
β βββ compose/ # Main DAW page
β βββ page.tsx # Landing page
βββ components/
β βββ compose/ # DAW components
β β βββ editors/ # Clip editors (DrumSequencer, PianoRoll, WaveformEditor)
β β βββ AudioVisualizer.tsx
β β βββ BrowserPanel.tsx
β β βββ EditorPanel.tsx
β β βββ Inspector.tsx
β β βββ TrackList.tsx
β β βββ Transport.tsx
β βββ ui/ # Reusable UI primitives
βββ lib/
β βββ audio/ # Tone.js wrappers, recording, export
β βββ store/ # Zustand stores
β βββ persistence/ # IndexedDB operations
β βββ canvas/ # Canvas renderers
βββ hooks/ # Custom React hooks
βββ types/ # TypeScript definitions
βββ messages/ # i18n translation files
| Action | Shortcut |
|---|---|
| Play/Pause | Space |
| Stop (Return to start) | Enter |
| Toggle Record | R |
| Toggle Metronome | M |
| Toggle Loop | L |
| Undo | Cmd/Ctrl + Z |
| Redo | Cmd/Ctrl + Shift + Z |
| Duplicate Clip | Cmd/Ctrl + D |
| Delete Selection | Delete / Backspace |
| Toggle Browser | B |
| Toggle Editor | E |
| Toggle Inspector | I |
| Toggle Visualizer | V |
| Zoom In | + / = |
| Zoom Out | - |
π See our detailed roadmap for the full picture of what's coming next!
- Core DAW with multi-track timeline
- Audio engine with Tone.js (play, stop, seek, loop)
- MIDI and Drum clip editors
- Recording with latency calibration
- IndexedDB persistence with auto-save
- MIDI export
- Keyboard shortcuts
- Dark/Light theme
- i18n (English, Spanish)
- User authentication (Firebase/supabase)
- Cloud project sync
- Share links for projects
- WAV export
- Additional templates
- Multi-take recording with comping
- Automation lanes
- Collaboration features
- Remix/fork system
- Time-stamped comments
Contributions are welcome! Please read our Contributing Guide and Code of Conduct before submitting a Pull Request.
npm run dev # Start dev server with Turbopack
npm run build # Production build
npm run start # Start production server
npm run lint # Run ESLint
npm run type-check # TypeScript type checkingThis project is licensed under the MIT License - see the LICENSE file for details.
ComposeYogi is built on the belief that creative tools should be:
- Open and inspectable
- Free from lock-in
- Community-driven
- Accessible to everyone
We welcome contributors, musicians, designers, and developers.
If you find ComposeYogi useful, please consider:
- Starring the repository
- Reporting bugs or requesting features
- Sponsoring on GitHub
- Supporting on Patreon
- Tone.js for the amazing Web Audio framework
- Radix UI for accessible UI primitives
- Vercel for hosting
- The open source community π
Made with β€οΈ by AppsYogi

