Package Exports
- @devaloop/devalang
- @devaloop/devalang/out-tsc/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@devaloop/devalang) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
๐ฆ Devalang โ Write music with code
Devalang is a compact domain-specific language (DSL) for music makers, sound designers, and creative coders. Compose loops, control samples, synthesize audio, and render your ideas โ all in clean, readable text.
Whether you're prototyping a beat, building generative music, or performing live, Devalang gives you rhythmic precision with the elegance of code.
From studio sketches to live sets, Devalang puts musical ideas into motion.
๐ v0.1.0 - Complete Rewriting
NEW: Devalang Playground V2.0 is now available โ Try it in your browser!
๐ Quick Access
- โถ๏ธ Playground โ Try Devalang in your browser
- ๐ Documentation โ Complete language reference
- ๐งฉ VSCode Extension โ Syntax highlighting & snippets
- ๐ Changelog โ Version history
- ๐ก Examples
- ๐ Website โ Project homepage
- ๐ฆ npm Package
- ๐ฆ Rust Crate
โก Quick Start
Try in Your Browser
Launch the Playground to try Devalang without installing anything.
Install via npm (Recommended)
npm install -g @devaloop/devalangInstall via Cargo (Rust)
cargo install devalangCreate Your First Project
# Initialize a new project
devalang init my-project
# Navigate to the project
cd my-project
# Check syntax
devalang check --entry examples/index.deva
# Build audio files
devalang build --path examples/index.deva --formats wav mid
# Play audio (live mode)
devalang play --live --input examples/index.deva๐ต Your First Devalang Script
Create a file hello.deva:
# Set the tempo
bpm 120
# Load a bank of sounds (make sur you have the bank installed)
bank devaloop.808 as drums
# Create a simple kick pattern
pattern kickPattern with drums.kick = "x--- x--- x--- x---"
# Define a synth and a melody
let mySynth = synth saw
# Define a melody using a group to organize notes
group myMelody:
mySynth -> note(C5)
-> duration(500)
mySynth -> note(E5)
-> duration(500)
mySynth -> note(G5)
-> duration(500)
# Play the melody
spawn myMelody
# Play the kick pattern
spawn kickPatternBuild the audio
# Build to WAV
devalang build --path hello.deva --formats wav
# Output: ./output/audio/hello.wavPlay the audio
# Play the audio file
devalang play --input hello.deva
# Play live (repeats and watch until stopped)
devalang play --live --input hello.deva๐ Features
๐ต Core Language
- โ Lexer & Parser โ Complete tokenization and AST generation
- โ Patterns โ Rhythmic notation with swing, humanize, velocity
- โ Synths โ Built-in synthesizers with ADSR envelopes
- โ Filters โ Lowpass, highpass, bandpass audio filtering
- โ Effects โ Reverb, delay, distortion, drive, chorus
- โ
Variables โ
let,const,varwith scoping - โ Groups & Spawn โ Organize and parallelize execution
- โ
Loops & Conditions โ
for,if,elsecontrol flow - โ Triggers โ Conditional audio triggering
- โ
Events โ Event system with
onandemit
๐ ๏ธ CLI Tools
- โ
devalang initโ Scaffold new projects (3 templates) - โ
devalang buildโ Compile to WAV/MIDI - โ
devalang checkโ Validate syntax - โ
devalang playโ Audio playback - โ
devalang addonโ Manage addons (install, list, discover) - โ
devalang login/logoutโ Authentication - โ
devalang telemetryโ Privacy controls
๐ WASM API
- โ
render_audio()โ Browser audio rendering - โ
render_midi_array()โ MIDI export - โ
debug_render()โ Debug information - โ
parse()โ Parse Devalang code - โ TypeScript types included
๐ฆ Output Formats
- โ WAV โ 16/24/32-bit audio export
- โ MIDI โ Standard MIDI file export
- โ MP3/FLAC โ Planned
๐ฏ Performance
- โก Fast builds โ 7-10ms for typical projects
- โก Low latency โ Optimized audio engine
- โก Release builds โ 5-6x faster than debug
๐ Learning Resources
- โ Online Docs โ Complete language reference
- โ VSCode Extension โ Syntax highlighting
๐ก Why Devalang?
- ๐น Prototype audio ideas without opening a DAW
- ๐ป Integrate sound into code-based workflows
- ๐๏ธ Control audio parameters with readable syntax
- ๐งช Build musical logic with variables and conditions
- ๐ Create patterns with expressive notation
- ๐จ Live code with fast iteration cycles
- ๐ฆ Version control your music with git
๐ Documentation
- Complete syntax reference
- API documentation
- WASM integration guide
- CLI command reference
- Advanced tutorials
- Best practices
๐ง Development
Build from Source
# Clone the repository
git clone https://github.com/devaloop-labs/devalang.git
cd devalang
# Build CLI (Rust)
cargo build --release --features cli
# Build WASM
cargo build --release --features wasm --lib
# Build TypeScript
npm install
npm run ts:build
# Run tests
cargo test --features cli
npm test๐ค Contributing
We welcome contributions! See CONTRIBUTING.md for guidelines.
Ways to Contribute
- ๐ Report bugs via GitHub Issues
- ๐ก Suggest features in discussions
- ๐ Improve docs with pull requests
- ๐ต Share examples of your creations
- ๐งช Write tests for new features
๐ License
MIT License โ See LICENSE for details.
Copyright (c) 2025 Devaloop
Star โญ the repo if you like it!