Playground
Kukicha
Output
Click Run to compile and execute your code.

v0.1.5 — latest release ↗

Built on Go

Strict Go Superset No Lock-in Single Binary

Kukicha adds pipes, onerr, enums, and if-expressions to the Go ecosystem. Rename .go to .kuki and it compiles without changes. Adopt new features one line at a time.

Get Started →

Stem Panic is a game written in Kukicha, running live as WASM. Built with Ebitengine by Hajime Hoshi.

View the Stem Panic source. Kukicha game stdlib wraps Ebitengine, a Go game engine.

Loading source…

Want to build your own? The 8-lesson game tutorial takes you from Hello World to a playable game in Kukicha.

Rename .go to .kuki. It compiles.

Kukicha is a strict superset of Go. Your existing code works without changes. No rewriting or new build systems required.

Adopt features gradually

Pipes, onerr, enums, if-expressions, and readable operators. Add these to your Go code one line at a time.

Convert back to Go anytime

The kukicha brew command converts your .kuki files into standalone, idiomatic Go. There is no vendor lock-in.

What Kukicha Adds on top of Go

Go

data, err := fetchData()
if err != nil {
    return fmt.Errorf("fetch: %w", err)
}
result, err := parse(data)
if err != nil {
    return fmt.Errorf("parse: %w", err)
}

label := ""
if count == 1 {
    label = "item"
} else {
    label = "items"
}

Kukicha

result := fetchData()
    |> parse()
    onerr return explain "pipeline failed"

label := if count == 1 then "item" else "items"

Kukicha is a strict superset of Go. Both syntaxes compile, so use whichever you prefer.

Compile-time security

The compiler detects SQL injection, XSS, SSRF, path traversal, and command injection before your code runs.

42+ stdlib packages

Includes support for fetch, slice, sort, MCP, LLM, HTML, and shell commands. Built for CLI tools and AI agents.

Native Go performance

Compiles to a single binary with no runtime overhead. Built-in WASM support and Go's concurrency model.

Start here