Alive by default
Live preview, hot reload, and source-aware inspection are part of the runtime — not a bolted-on dev server.
A small native UI runtime for desktop, mobile, browser, and embedded work. Write .kry, inspect KIR, then ship readable C99 or portable KRB cartridges.
Features
The runtime owns the whole UI lifecycle: build the widget tree, reconcile state, layout nodes, route input, render, and draw overlays. You describe intent; Kryon handles ordering, focus, inspection, and overlay behavior.
Pages and reusable widgets stay in concise source files with explicit typed variables, node declarations, and direct compiler errors for unknown syntax.
#import "kryon.h"
Counter :: (state: *CounterState) {
col {
Text("Count: " + to_string(state->n))
Button("Increment") {
state->n += 1
}
}
}
The frontend resolves .kry into KIR once. k2c emits readable C for native apps; k2js emits browser-loadable ESM; k2b emits portable KRB cartridges for renderers.
k2ir counter.kry
k2c counter.kir
k2js counter.kry
k2b counter.kir
Edit a .kry file and see the running app update through Kryon's own preview host. Preview, capture, and hot-reload behavior stay inside the runtime toolchain.
# edit app.kry, save, watch it reload
$ kryon preview my-app
Preview widgets carry source metadata, so an inspection click selects the generated UI element and opens the exact .kry line. The tree is the inspector.
// click a node in preview → jump to source
AppHome: app.kry:7
Text("Sample App") app.kry:9
BottomNav(...) app.kry:10
Why Kryon
Everything visible is a node. Source stays primary. KIR keeps the compiler debuggable, C keeps native integration direct, and KRB opens a portable renderer path.
Live preview, hot reload, and source-aware inspection are part of the runtime — not a bolted-on dev server.
Source, bounds, state, focus, and inspection all belong to the widget tree. One model for the whole UI.
.kry files own #ui functions and reusable hierarchy pieces. KIR is the source-mapped compiler truth; C and KRB are outputs.
Only exported functions enter generated headers, so build boundaries stay tiny and dependency-free.
Direct C where native integration matters, portable KRB where renderer portability matters, and explicit imports between them.
Layout, text, inputs, navigation, overlays, inspection, themes, and runtime assets — covered out of the box.
Compiler Pipeline
Kryon lowers .kry into debuggable KIR, then emits readable C for native applications or compact KRB cartridges for portable renderers.
#import "kryon.h"
Greeting :: (name: string) {
row {
Icon(ICON_ROCKET)
Text("Hello, " + name)
}
}
Greeting.kir
source spans
widget tree
event logic
imports
Greeting.c # native backend
Greeting.krb # portable cartridge
Showcase
The showcase tracks shipped Kryon applications and ranks public submissions by stars from public source platforms. Add a project through the public metadata repo.
Platforms
The same interface source builds for the environments real apps ship to — no platform-specific forks of your UI code.
Mobile runtime and KRB host capabilities.
Mobile renderer through the portable runtime contract.
Small KRB renderers with constrained capability sets.
Embedded targets for draw primitives, input, timers, and storage.
Native C builds and KRB renderers.
Native C builds and KRB renderers.
Native C builds and KRB renderers.
Native desktop, servers, and embedded targets.
Portable runtime target with a small native host layer.
Browser renderer, WASM logic, and KRB preview.
Get started
Kryon is free and open source. Clone, build, and install in a few commands.
Build the runtime:
git clone https://github.com/kryonlabs/kryon.git
cd kryon
make
make install
The clean compiler tool direction:
k2ir app.kry
k2c app.kry # or app.kir
k2js app.kry
k2b app.kry # or app.kir
A simple .kry shape:
#import "kryon.h"
AppHome :: (app: AppState*) #ui {
Screen root: {
y: int = ScaleUIPx(24)
Text("Sample App", ScaleUIPx(20), y, ScaleUIPx(24))
BottomNav(app->bottom_nav)
}
}
FAQ
Kryon is a native app development stack built around .kry source files, debuggable KIR, readable C output, portable KRB cartridges, and a small runtime. You write intent; the runtime handles the UI lifecycle.
Flutter ships a Dart VM and its own rendering layer. Kryon keeps native C as a first-class backend and adds KRB as a portable cartridge path with explicit host capabilities. The same source can target desktop, mobile, browser, and embedded renderers.
Godot is a game engine with UI controls. Kryon is a dedicated app UI runtime — the widget tree owns layout, input routing, focus, overlays, and source-aware inspection for building product interfaces, not just game HUDs.
A concise declarative source file describing pages and reusable widgets with explicit typed variables and node declarations. The frontend lowers each file into KIR, then backends emit readable C or portable KRB.
Yes — Kryon is free and open source, developed by Kryon Labs. Clone and build from github.com/kryonlabs/kryon.
Linux, Windows, macOS, Android, the browser via WebAssembly, and FreeBSD — including embedded targets. One interface source builds for all of them.