Programming language
Musi
Language-first learning and practical command flow in one place.
Sample
Optional<Integer> configured = Optional.of(8080);
int port = configured.orElse(3000);let configured := Option.some[Int](8080);
Option.unwrap_or[Int](configured, 3000);let configured = Some(8080);
let port = configured.unwrap_or(3000);const configured: number | null = 8080;
const port = configured ?? 3000;Effects
Use effect, perform, handle, and resume directly in code.
Packages
Use musi for package workflows and music for direct source or artifact execution.
Surface
Docs focus on what, why, how, and when for each pattern.
Docs map
Explore the book
Start
Getting started
Install, PATH setup, and the difference between musi and music.
First program
A first Musi file without extra ceremony.
Files, packages, and entry
Packages, musi.json, and the resolved entry file.
Core language
Expressions and bindings
The base reading model for names, sequences, and branching.
Functions and calls
Functions, calls, and recursion without extra control syntax.
Imports and packages
Import expressions, @std, and the musi:* foundation namespace.
Data and pattern matching
Data definitions, constructors, and pattern matching.
Records and arrays
Structured values and the current writeable-data surface.
musi-lang.com