w/03 · programming language · tishlang.com
Tish
the native language for awesomeness.
what
a typescript-shaped language that compiles native
codebase
132k lines of rust · 33 crates
targets
interpreter · vm · native · wasm · js · gba
stack
rust · cranelift · llvm
steer the road, click to compile
overview
Tish keeps the syntax millions of developers already write — functions, objects, template strings, optional types — and removes what makes JavaScript slow and surprising: no undefined, strict equality only, and feature-gated I/O so a binary carries only the capabilities it needs.
The same file runs in an interpreter for fast iteration, a bytecode VM, or compiles ahead of time to a standalone native binary, WebAssembly, JavaScript — or a Game Boy Advance ROM.
6
execution targets
347
releases since february
140×
best-case typed native speedup
the challenge
Developers love the shape of JavaScript and hate shipping a runtime. A language that wants to be both familiar and fast has to lower dynamic code into real machine types — without breaking the programs that rely on dynamism.
And it had to be good enough to build real products on. So we did: Dune and Chuggie are written in Tish.
01 · syntax
familiar on purpose.
If you read TypeScript, you read Tish. Optional annotations aren't decoration: on the native backend, number becomes f64, number[] becomes Vec<f64> and interfaces become Rust structs.
- →fn shorthand & template strings
- →no undefined — only null
- →gradual type checking in the compiler and LSP

02 · native
no runtime to ship.
tish build lowers through Rust codegen, Cranelift or LLVM to a standalone binary. Typed code is lowered to unboxed values with a sound boxed fallback; packed number arrays keep the dynamic paths fast.

03 · capabilities
batteries, gated.
HTTP, filesystem, process, websockets, timers and Postgres are feature-gated capabilities — pass --feature to restrict a run or a binary to exactly what it needs. Rust crates import directly with cargo: imports and generated bindings.

04 · everywhere
wasm, js, the browser — and a gba.
WASM for web and WASI, JavaScript output for existing stacks, a Vite plugin, and a playground at tish.sh that compiles and runs in the browser. The same compiler targets the Game Boy Advance through a no_std portable core.
architecture
one front end, many back ends.
A Cargo workspace of 33 crates: a shared front end feeding an interpreter, a VM and four compilers — with conformance work against test262 and performance tracked in CI.
01
parse
lexer → parser → AST → resolve → optimize
02
run
tree-walking interpreter + REPL, bytecode VM
03
native
Rust codegen, Cranelift and LLVM backends
04
web
WASM (web + WASI) and JavaScript output, JSX
05
gba
no_std portable core + tish_runtime_gba
06
tools
LSP, formatter, linter (SARIF), tree-sitter, editor extension
the developer experience
types that become structs.
adapted from the typed-structs example and the README: on the native backend this interface compiles to a Rust struct.
1interface Vec2 { x: number; y: number }2interface Body { name: string; pos: Vec2; mass: number; vel: number }34function momentum(b: Body): number {5 return b.mass * b.vel6}78fn greeting(name) = `Hello, ${name}!`9console.log(greeting("World"))
brand & design system
A terminal-native identity: everything set in one monospace, lowercase, near-black — the language should look like the place you'll use it.
void
#040404
card
#090909
panel
#0f1117
violet
#ad8cff
pink
#fd6c95
text
#dedede
- ·the > tish wordmark is a prompt
- ·docs written as runnable examples
- ·MIT licensed
by the numbers
771
commits in the core
132k
lines of rust
33
crates
289
test programs
24
examples
22
repos in the tishlang org
counted from the source repositories



what we did
development
- language & compiler
- VM and native backends
- LSP, formatter, linter
- package & release automation
design
- language ergonomics
- docs & playground
brand
- terminal identity
- tishlang.com
ai
- experimental Polars and Candle bindings for data & inference
next world
Chuggiegame boy advance games, written in tish. →