devalang 0.1.3

Write music like code. Devalang is a domain-specific language (DSL) for sound designers and music hackers. Compose, automate, and control sound โ€” in plain text.
Documentation
<div align="center">
    <img src="https://devalang.com/images/devalang-logo-min.png" alt="Devalang Logo" width="100" />
</div>

![Rust](https://img.shields.io/badge/Made%20with-Rust-orange?logo=rust)
![TypeScript](https://img.shields.io/badge/Built%20with-TypeScript-blue?logo=typescript)
![Node.js](https://img.shields.io/badge/Node.js-16%2B-brightgreen?logo=node.js)

![Project Status](https://img.shields.io/badge/status-preview-blue)
![Version](https://img.shields.io/npm/v/@devaloop/devalang)
![License: MIT](https://img.shields.io/badge/license-MIT-green)

![Linux](https://img.shields.io/badge/linux-supported-blue?logo=linux)
![macOS](https://img.shields.io/badge/macOS-supported-blue?logo=apple)
![Windows](https://img.shields.io/badge/windows-supported-blue?logo=windows)

![npm](https://img.shields.io/npm/dt/@devaloop/devalang)
![crates](https://img.shields.io/crates/d/devalang)

# ๐ŸฆŠ 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]https://playground.devalang.com โ€” Try it in your browser!

---

## ๐Ÿ“š Quick Access


- [โ–ถ๏ธ Playground]https://playground.devalang.com โ€” Try Devalang in your browser
- [๐Ÿ“– Documentation]https://docs.devalang.com โ€” Complete language reference
- [๐Ÿงฉ VSCode Extension]https://marketplace.visualstudio.com/items?itemName=devaloop.devalang-vscode โ€” Syntax highlighting & snippets
- [๐Ÿ“œ Changelog]./docs/CHANGELOG.md โ€” Version history
- [๐Ÿ’ก Examples]./examples/
- [๐ŸŒ Website]https://devalang.com โ€” Project homepage
- [๐Ÿ“ฆ npm Package]https://www.npmjs.com/package/@devaloop/devalang
- [๐Ÿ“ฆ Rust Crate]https://crates.io/crates/devalang

---

## โšก Quick Start


### Try in Your Browser


> **[Launch the Playground]https://playground.devalang.com** to try Devalang without installing anything.

### Install via npm (Recommended)


```bash
npm install -g @devaloop/devalang
```

### Install via Cargo (Rust)


```bash
cargo install devalang
```

### Create Your First Project


```bash
# 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`:

```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 kickPattern
```

### Build the audio


```bash
# Build to WAV

devalang build --path hello.deva --formats wav

# Output: ./output/audio/hello.wav

```

# Play the audio


```bash
# 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`, `var` with scoping
- โœ… **Groups & Spawn** โ€” Organize and parallelize execution
- โœ… **Loops & Conditions** โ€” `for`, `if`, `else` control flow
- โœ… **Triggers** โ€” Conditional audio triggering
- โœ… **Events** โ€” Event system with `on` and `emit`

### ๐Ÿ› ๏ธ **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


**[Visit docs.devalang.com](https://docs.devalang.com)** for:
- Complete syntax reference
- API documentation
- WASM integration guide
- CLI command reference
- Advanced tutorials
- Best practices

---

## ๐Ÿ”ง Development


### Build from Source


```bash
# 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](./CONTRIBUTING.md) for guidelines.

### Ways to Contribute


- ๐Ÿ› **Report bugs** via [GitHub Issues]https://github.com/devaloop-labs/devalang/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](./LICENSE) for details.

Copyright (c) 2025 Devaloop

---

<div align="center">
    <strong>Made with โค๏ธ by the Devaloop team</strong>
    <br />
    <sub>Star โญ the repo if you like it!</sub>
</div>