Jitzu
An interactive shell and a typed scripting language.
Same task. Less noise.
Get-ChildItem -Recurse -Filter *.cs find -ext cs $obj | Select-Object -ExpandProperty Name obj.name try { } catch [System.Exception] { $_ } let val = risky()? result=$(cmd) && echo $result let result = cmd(); print(result) everything is a string Int, String, Bool, Result<T, E>, Option<T> 60+ built-in commands
Everything you need at the prompt.
Tab Completion
Files, commands, variables, and types — all completable with Tab.
Typed Pipes
Pipe OS command output into Jitzu functions. Types flow through the pipeline.
History & Search
Ctrl+R reverse search, arrow-key predictions, and a git-aware prompt.
Name your directories.
Use them everywhere.
No symlinks. No drive mapping. No editing fstab. Just give a directory a name and use it as a path prefix — in cd, ls, cat, anywhere.
cd git:jitzu/site // Label a directory
label git ~/git/
// Now use it anywhere
cd git:jitzu/site
ls git:jitzu/Tests/
cat git:jitzu/README.md
// List all your labels
labels
// git: → /home/simon/git/
// proj: → /home/simon/projects/
// Remove one
unlabel proj
Oh, it's also
a full language.
Rust's enums. C#'s runtime. TypeScript's ergonomics. Compiled to bytecode, running on .NET's VM.
Pattern matching
Match on types, destructure fields, guard with conditions.
let result = match GetUser() {
Ok(user) => `Hello, {user.name}!`,
Err(e) => `Failed: {e}`,
}Result<T, E> and the ? operator
Propagate errors without try/catch. Compose fallible operations.
fun load_config(): Result<Config, Error> {
let file = try read_file("config.json")
let parsed = try parse_json(file)
return Ok(parsed)
}Traits and impl blocks
Define shared behavior, implement it on any type.
trait Greet {
fun greeting(self): String
}
impl Greet for User {
fun greeting(self): String {
`Hey, {self.name}!`
}
}Types with type inference
Define types with pub fields. Types are inferred from context.
type Point {
pub x: Double,
pub y: Double,
}
let origin = Point { x = 0.0, y = 0.0 }
let dist = (origin.x ** 2 + origin.y ** 2) ** 0.5NuGet packages
Import any .NET package with a single line.
#:package Newtonsoft.Json@13.0.4
open "Newtonsoft.Json" as { JsonConvert }
let json = JsonConvert.SerializeObject(user)
print(json)