Build command-line tools, transform data, and write application logic with Topaz. Run the same source on your computer or build a package for the browser.
Run this program today and get the output shown here.
function greet(name: string) -> string {
return "Hello, {name}!"
}
print(greet("Topaz"))Hello, Topaz!
Explore Topaz
Start with what Topaz is for. Then follow the guided path, scan the syntax map when you need a quick answer, or choose a toolchain destination.
See what Topaz is designed for, what its code looks like, and where it fits before writing your first program.
Meet Topaz →02Start with one small program and continue step by step to a checked, tested, two-module application.
Start learning →03Scan everyday syntax and jump straight to the focused manual page for each language feature.
Open the syntax map →04Run files, manage packages, and build for your computer or browser.
Explore the tools →Use Korean, Russian, or English names for variables and functions.
Learn one form for each common task. Developers and code generators use the same rules.
The compiler you install is itself a substantial working program written in Topaz. It recompiles its own source to the same generated code, byte for byte.
How the compiler checks its own build →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!]