Skip to content

WaveForge

A browser-based Digital Audio Workstation (DAW) built with React, TypeScript, and Vite.

Tech Stack

  • Frontend: React 18 + TypeScript
  • Build Tool: Vite
  • Testing: Vitest + React Testing Library + Playwright
  • Linting: ESLint
  • Formatting: Prettier

Getting Started

# Install dependencies
npm install

# Start development server
npm run dev

# Build for production
npm run build

# Run tests
npm test

# Run tests once
npx vitest run

# Run tests with coverage
npm run test:coverage

# Run accessibility lint checks
npm run lint:a11y

# Run browser accessibility checks
npm run test:a11y

# Run end-to-end tests
npm run test:e2e

# Lint code
npm run lint

# Format code
npm run format

Project Structure

src/
├── features/
│   ├── assets/      # Project asset collection and references
│   ├── audio/       # Audio engine, export, MIDI, and instruments
│   ├── mixer/       # Mixer state, routing, buses, and operations
│   ├── project/     # Project metadata, complexity, and events
│   ├── storage/     # Project persistence and serialization
│   ├── theme/       # Global light/dark theme initialization and state
│   ├── timeline/    # Timeline state management
│   └── ui/          # UI components and hooks
├── test/            # Test setup and utilities
└── App.tsx          # Main application

Features

  • Timeline-based audio, MIDI, drum, folder, and bus track arrangement
  • Track reordering, folder collapse/expand, track duplication, track deletion, and undo/redo support
  • Audio import, waveform previews, audio recording, clip gain, fades, splitting, copy/paste, and time-selection editing
  • Timeline markers with song-section colors, marker rename/delete actions, marker manager, and exact marker beat preservation
  • Playhead-aware playback, loop scheduling, metronome/count-in support, and large-project scheduling stats
  • Piano roll editing with note entry, velocity editing, quantize, scale helpers, fold-to-scale, fold-to-used-notes, ghost notes, and note audition
  • MIDI composition tools for chords, strums, grooves, and transform operations
  • Live MIDI input, MIDI capture buffering, MIDI recording, drum editing, and drum-note safety prompts when changing drum tracks to melodic instruments
  • Modular instrument manager with categorized built-in instruments:
    • Simple Synth oscillator instrument with waveform, velocity, ADSR, and volume controls
    • Sampler for imported samples with root-note pitch shifting, trim controls, ADSR controls, and persisted sample assets
    • Drum Kit with kick, snare, hats, clap, toms, crash, and dedicated drum-track defaults
    • Grand Piano and Electric Piano keyboard instruments
    • Bass, Organ, Lead, and Pad instruments with dedicated presets
    • Middle C instrument preview when selecting an instrument
  • Track inspector controls for instrument selection, sample import/preview, instrument ADSR, EQ, inserts, sends, output routing, and track metadata
  • Mixer with per-track and folder volume, pan, mute, solo, meters, send visualization, aux buses, bus presets, output routing, and master strip
  • Insert effects for gain, filter, compressor, delay, and reverb, with pre/post send modes and bus routing
  • Automation lanes for track volume, pan, EQ, sends, master volume, and effect parameters, including lane collapse and automation-point editing
  • Freeze and bounce-in-place rendering for tracks
  • WAV export for audio, MIDI, mixed timelines, sampler-backed MIDI tracks, stems, and rendered/frozen tracks
  • Local project storage with recorded audio, imported audio, sampler samples, stable asset references, and missing-asset handling
  • Startup project flow with immediate new-project persistence, recent projects, project browser, save/open/delete/duplicate/rename actions, project settings, and JSON export
  • Project recovery snapshots, autosave controls, explicit create/save status messaging, dirty-state prompts, and deterministic project serialization with schema migration support
  • Project complexity monitoring across tracks, clips, effects, automation, instruments, buses, and assets
  • Expanded keyboard shortcuts, shortcut help, contextual status messaging, and transient/persistent playback notices
  • Responsive, touch-friendly freeCodeCamp-inspired DAW UI with mobile, landscape, and viewport-height layout coverage
  • Performance-oriented code splitting for the piano roll, drum editor, mixer workspace, Tone.js, and offline rendering paths
  • Throttled playhead and meter updates to reduce unnecessary rerenders during playback

Project Persistence

WaveForge stores browser projects in IndexedDB. Creating a new project writes the initial project record before the new project becomes active, so the project browser can show it immediately without waiting for autosave. Autosave still handles later edits after the project has been created.

Deployment

Deployment configuration lives in platform.yaml.

  • Site: wave-forge
  • Build command: npm run build
  • Output directory: dist
  • Preview deploys: enabled

License

WaveForge is licensed under the BSD 3-Clause License. See LICENSE.

About

This is a free site where you can create music.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages