A small, closed language for application intent, written by people and by agents, verified by the toolchain.
Explore Topaz
Learn the language, see how Topaz has evolved and where it is going next, or choose a build target.
Grammar, types, control flow, modules, the standard library, runtime behavior, and worked examples.
Read the manual →02The v5 release history, current roadmap, and Topaz Classic.
See the project story →03CLI, direct execution, Rust, Python, web targets, WASM, packages, and current support.
Explore the tools →Run this program today and get the output shown here.
function clean(words: Array<string>) -> Array<string> {
return filter(words, (w: string) => w != "")
}
function shout(words: Array<string>) -> Array<string> {
return map(words, (w: string) => w + "!")
}
let line = ["one", "", "way", "", "to", "say", "it"]
|> clean
|> shout
print("{line}")[one!, way!, to!, say!, it!]
One way to say it. The language decides policy, so you don’t have to.
Domain words stay in your language: 한글, Кириллица, emoji are first-class.
A small spec, machine-checkable profiles, docs verified against the parser.
sql, sh, and path templates preserve literal and interpolation structure.
Readable enough to review and precise enough to run.
Topaz is a compact, Unicode-first language for application intent. People and code generators use the same syntax, and the toolchain can run it directly or produce Rust, Python, and web artifacts.
Read the philosophy →function discount(customer: { tier: string, years: int }) -> float {
return match customer {
case { tier: "vip", years } if years > 5 => 0.3
case { tier: "vip" } => 0.2
case { years } if years > 1 => 0.1
case _ => 0.0
}
}
print("{discount({ tier: "vip", years: 7 })}")
print("{discount({ tier: "new", years: 0 })}")0.3 0.0
let result = concurrent {
answer: 6 * 7
status: "ready"
}
defer print("cleaned up")
print("{result.answer} {result.status}")42 ready cleaned up
function fibonacci(n: int) -> int {
return match n {
case 0 => 0
case 1 => 1
case _ => fibonacci(n - 1) + fibonacci(n - 2)
}
}
let series = map(0..<10, fibonacci)
print("{series}")[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
function clean(words: Array<string>) -> Array<string> {
return filter(words, (w: string) => w != "")
}
function shout(words: Array<string>) -> Array<string> {
return map(words, (w: string) => w + "!")
}
let line = ["one", "", "way", "", "to", "say", "it"]
|> clean
|> shout
print("{line}")[one!, way!, to!, say!, it!]
function 인사하기(이름: string) -> string {
return "안녕하세요, {이름}님!"
}
print(인사하기("토파즈"))안녕하세요, 토파즈님!
function greet(name: string) -> string {
return "Hello, {name}!"
}
print(greet("Topaz"))Hello, Topaz!
function привет(имя: string) -> string {
return "Привет, {имя}!"
}
print(привет("Топаз"))Привет, Топаз!
You write the intent. The compiler emits Rust and Python.
Available — 699 examples checked
Available — multi-file units
Available — every program on this page runs
Available — emits Rust and builds native programs
Available — emits Python with runtime support
Available — nominal closed sums with exhaustive match