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

v0.17.1 — 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. Built for AI integration, cloud automation, and everyday data/CLI scripting with English operators, pipes, onerr, and a friendly stdlib (fetch, concurrent, llm, table, color).

Get Started →

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

AI integration

Prompt-injection-aware LLM calls, JSON-mode decoding, and MCP servers/clients without a framework. safe.Wrap untrusted input, chat.JSONMode for structured replies, mcp for tool servers.

Cloud & deploy automation

One static binary that drives cloud APIs from readable scripts. Drop kukicha build output onto a server and run, no runtime to install.

Data & CLI scripting

Pipes, concurrent.MapWithLimit, table, regex, json; the stuff you'd reach for Python or shell for, in one typed, compiled binary.

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.

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

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

Familiar if you know Go

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

Compile-time lints flag SQL injection, XSS, SSRF, path traversal, command injection, and open redirects, paired with stdlib functions (safe.Wrap, fetch.NewExternal, http.SafeHTML). 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 has Kukicha s 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