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

v0.13.0 — latest release ↗

Brewed from Go

Readable Single Binary

A readable language that ships as a single binary, brewed from what Go leaves on the table. English operators, pipes, onerr, and a friendly stdlib — fetch, concurrent, llm, table, color — out of the box.

Get Started →

Stem Panic is a game written in Kukicha, running live as WASM.

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.

Readable by design

English operators, pipes that flow left-to-right, onerr for error handling, and named enums. Skim a file and follow what it does — no dense syntax to decode first.

Batteries included

fetch, concurrent, llm, mcp, db, shell, html, table, color — 40+ packages with the same readable API. Reach for a stdlib package, not a third-party dependency.

No lock-in, ever

Rename a .go file to .kuki and it compiles unchanged. Run kukicha brew to convert any .kuki file back into standalone, idiomatic Go.

Familiar if you know Go

Most Go compiles unchanged — &&, *T, if err != nil. Kukicha just adds readable forms on top. Mix and match in the same file.

Plain 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 forms

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

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

Every .go file is valid .kuki unchanged.

Safe by default

The compiler catches SQL injection, XSS, SSRF, path traversal, and command injection before your code runs. Errors are values, handled with onerr.

Friendly stdlib

fetch.GetJson, slice.Filter, concurrent.MapWithLimit, sort.ByKey, safe.Wrap, table.PrintWithStyle. Reads the same whether your code is Kukicha forms or plain Go.

Ships as one file

kukicha build produces a single static binary — copy it to a server and run. Built-in WASM support, no runtime, Go's concurrency.

Start here