About culebra
Programming language with a bytecode VM, JIT, and AOT compiler
Programming language with a bytecode VM, JIT, and AOT compiler
Programming language with a bytecode VM, JIT, and AOT compiler
Highlights
- Audio: a namespace of its own for sound, with or without a window. Tones, samples, streamed music and Audio.PCM (samples a script computes), Audio.Graph (native parts, worked out as they play), Audio.Capture (the microphone), and functions that measure a sound: Audio.decode, spectrum, stft/istft, resample, pitch, harmonics, loudness, integrated_loudness.
- Kauai, a language for writing music as a band plays it: a lead sheet of chords and melody, and grooves written against the chord. culebra play song.kau plays one, --wav writes it to a file, --from/--to render a part, --watch plays it again whenever a file is saved. Instruments made from recordings (a soprano and an alto saxophone) play phrase by phrase from real notes, with the tools to make more.
- LLM: a client for large language models in the standard library (LLM.ask, a conversation that keeps its history and runs the tools the model asks for, and a request sent as it is), and Http reads Server-Sent Events.
- Isolates send more: a @value or @derive instance, a class, an enum's constructor and a bound method now cross an isolate boundary, and a child's throw that cannot cross back fails the join with an error that says so.
- Dir: one trait over the places files come from. Dir.disk, Dir.memory, Dir.zip (read ZIP archives; Compress.zip writes them) and Dir.embedded; Http serves any Dir.
- XML namespace and Encoding.utf16; String.pack/String.unpack for numeric arrays and @packable records.
Changes
Breaking
- Embed.dir(name) is now Dir.embedded(name), a Dir like the others; the Embed namespace is gone. exists(""), exists(".") and exists("sub") are true for a directory that holds a file.
- Sound moved out of Canvas into Audio: Canvas.tone, Canvas.Sound, Canvas.music and the rest are now Audio.tone, Audio.Sound and Audio.music, and play with no window. Canvas forwards none of them.
- Time.parse is strict: the whole string must match, with one date, and Time.from_parts has defaults. UTC is now computed directly from the calendar in both directions.
Language / interpreter
- Names and scopes: a read that nothing visible declares is a NameError at load; if, cond and ?: arms are scopes of their own; a declaration or a defer takes no trailing if/unless; fn is declared nowhere, however a binding spells it; a typed static field is a static field. …
| Publisher | Yuji Hirose |
|---|---|
| Version | 0.8.0 |
| Release date | 2026-10-26 |
| License | MIT |
| Installer type | zip |
| Architecture | x64 |
| Package ID | yhirose.culebra |
winget install --id=yhirose.culebra -ewinget upgrade --id=yhirose.culebra -ewinget uninstall --id=yhirose.culebra -eYes. culebra is free and open-source software released under the MIT license.
The latest version is 0.8.0, released on Oct 26, 2026.
The download button links to the official installer published on github.com, the same file Windows Package Manager installs. You can verify the downloaded file by comparing its SHA-256 checksum with 9c04d2367daf0e737c96fc67f723e1ae8a2e2a45c2bd806533a72f32885755e5.
culebra runs on Windows and is available for 64-bit (x64) systems.
Open Settings › Apps › Installed apps, find culebra and select Uninstall. From the command line, run winget uninstall --id=yhirose.culebra -e.
Yes. culebra is available as a portable ZIP archive (culebra-windows-x64.zip, 64-bit (x64)) that runs without installation. Copy it to any folder or USB drive and run it from there.