<div align="center">
<img src="https://firebasestorage.googleapis.com/v0/b/devaloop-labs.firebasestorage.app/o/devalang-teal-logo.svg?alt=media&token=d2a5705a-1eba-4b49-88e6-895a761fb7f7" alt="Devalang Logo">
</div>









[](https://marketplace.visualstudio.com/items?itemName=devaloop.devalang-vscode)
## πΌ Devalang, by **Devaloop Labs**
πΆ Compose music with code β structured, expressive, and fast.
Devalang is a tiny domain-specific language (DSL) for music makers, sound designers, and audio hackers.
Compose loops, control samples, render and play audio β all in clean, readable text.
π¦ Whether you're building a track, shaping textures, or performing live, Devalang helps you think in rhythms. Itβs designed to be simple, expressive, and fast β because your ideas shouldnβt wait.
From studio sketches to live sets, Devalang gives you rhythmic control β with the elegance of code.
> π§ **v0.0.1-alpha.8 Notice** π§
>
> NEW: Devalang VSCode extension is now available !
> [Get it here](https://marketplace.visualstudio.com/items?itemName=devaloop.devalang-vscode).
>
> NEW: Devalang supports conditional statements (`if`, `else`, `else if`) for more dynamic compositions !
>
> Currently, Devalang CLI is only available for **Windows**.
> Linux and macOS binaries will be added in future releases via cross-platform builds.
---
## π Quick Access
- [π Documentation](./docs/)
- [π‘ Examples](./examples/)
- [π§© VSCode Extension](https://marketplace.visualstudio.com/items?itemName=devaloop.devalang-vscode)
- [π¨ Prettier Plugin](https://www.npmjs.com/package/@devaloop/prettier-plugin-devalang)
- [π Project Website](https://devalang.com)
## β Why Devalang?
- πΉ Prototype audio ideas without opening a DAW
- π» Integrate sound into code-based workflows
- ποΈ Control audio parameters through readable syntax
- π§ͺ Build musical logic with variables and conditions
> Producer, coder, or both β Devalang gives you musical structure, instantly.
## π Features
- π΅ **Audio Engine**: Integrated audio playback and rendering
- π§© **Module system** for importing and exporting variables between files
- π **Structured AST** generation for debugging and future compilation
- π’ **Basic data types**: strings, numbers, booleans, maps, arrays
- ποΈ **Watch mode** for `build`, `check` and `play` commands
- π **Project templates** for quick setup
- ποΈ **Custom samples**: easily load and trigger your own audio files
- π **Looping and grouping**: create complex patterns with ease
## π Installation
### For users
> - β οΈ Requires [Node.js 18+](https://nodejs.org/en/download)
Install the package globally (NPM)
```bash
npm install -g @devaloop/devalang@latest
```
Usage without install (NPX)
```bash
npx @devaloop/devalang@latest
```
### For contributors
> - β οΈ Requires [Node.js 18+](https://nodejs.org/en/download)
> - β οΈ Requires [Rust 1.70+](https://www.rust-lang.org/learn/get-started#installing-rust)
```bash
git clone https://github.com/devaloop-labs/devalang.git
cd devalang
npm install
```
Development usage (you can customize arguments in package.json)
```bash
# For syntax checking test
npm run rust:dev:check
# For building test
npm run rust:dev:build
```
## β Usage
NOTE: Commands are available via `devalang` or `npx @devaloop/devalang`.
NOTE: Arguments can be passed to commands using `--<argument>` syntax. You can also use a configuration file to set default values for various settings, making it easier to manage your Devalang project.
NOTE: Some commands require a mandatory `--entry` argument to specify the input folder, and a `--output` argument to specify the output folder. If not specified, they default to `./src` and `./output` respectively.
For more examples, see [docs/COMMANDS.md](./docs/COMMANDS.md)
### Initialize a new project
In the current directory
```bash
devalang init
```
Or use optional arguments to specify a directory name and a template
```bash
devalang init --name <project-name> --template <template-name>
```
### Checking syntax only
```bash
devalang check --watch
```
### Building output files
```bash
devalang build --watch
```
### Playing audio files (once by file change)
```bash
devalang play --watch
```
### Playing audio files (continuous playback, even without file changes)
```bash
devalang play --repeat
```
## βοΈ Configuration
You can use a configuration file to set default values for various settings, making it easier to manage your Devalang project.
To do this, create a `.devalang` file in the root of your project directory.
See [docs/CONFIG.md](./docs/CONFIG.md) for more information.
## π Syntax example
For more examples, see [docs/SYNTAX.md](./docs/SYNTAX.md)
```deva
# index.deva
@import { globalBpm, globalBank, kickDuration } from "global.deva"
@load "./examples/samples/kick-808.wav" as customKick
bpm globalBpm
# Will declare the tempo at the globalBpm variable beats per minute
bank globalBank
# Will declare a custom instrument bank using the globalBank variable
# Loops
loop 5:
.customKick kickDuration {reverb=50, drive=25}
# Will play 5 times a custom sample for 500ms with reverb and overdrive effects
# Groups
group myGroup:
.customKick kickDuration {reverb=50, drive=25}
# Will play the same sample in a group, allowing for more complex patterns
# Will be executed line by line (sequentially)
call myGroup
# Will be executed in parallel (concurrently)
# β οΈ Note: `spawn` runs the entire group in parallel, but the groupβs internal logic remains sequential unless it uses `spawn` internally.
# spawn myGroup
```
> π§ Note: `call` and `spawn` only work with `group` blocks. They do not apply to individual samples or other statements.
```deva
# variables.deva
let globalBpm = 120
let globalBank = 808
let kickDuration = 500
@export { globalBpm, globalBank, kickDuration }
```
## π§― Known issues
- No smart modules yet, all groups, variables, and samples must be explicitly imported where used
- No support yet for `pattern`, `function`, ... statements
- No support yet for cross-platform builds (Linux, macOS)
## π§ͺ Roadmap Highlights
For more info, see [docs/ROADMAP.md](./docs/ROADMAP.md)
- β³ Other statements (e.g `function`, `pattern`, ...)
- β³ Cross-platform support (Linux, macOS)
- β³ More built-in instruments (e.g. snare, hi-hat, etc.)
## π‘οΈ License
MIT β see [LICENSE](./LICENSE)
## π€ Contributing
Contributions, bug reports and suggestions are welcome !
Feel free to open an issue or submit a pull request.
## π’ Contact
π§ [contact@devaloop.com](mailto:contact@devaloop.com)