Native UI · readable source · portable builds Kryon

Kryon

A small native UI runtime for desktop, mobile, browser, and embedded work. Write .kry, inspect KIR, then ship readable C99 or portable KRB cartridges.

Built for
native apps embedded interfaces browser previews readable generated code agent-friendly projects

Features

One source, every platform

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.

Declarative .kry source

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
        }
    }
}

Why Kryon

Native first, alive by default

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.

Alive by default

Live preview, hot reload, and source-aware inspection are part of the runtime — not a bolted-on dev server.

Everything is a node

Source, bounds, state, focus, and inspection all belong to the widget tree. One model for the whole UI.

Source stays primary

.kry files own #ui functions and reusable hierarchy pieces. KIR is the source-mapped compiler truth; C and KRB are outputs.

Small native surface

Only exported functions enter generated headers, so build boundaries stay tiny and dependency-free.

Predictable runtime

Direct C where native integration matters, portable KRB where renderer portability matters, and explicit imports between them.

Real product UI

Layout, text, inputs, navigation, overlays, inspection, themes, and runtime assets — covered out of the box.

Compiler Pipeline

One frontend, native and portable backends

Kryon lowers .kry into debuggable KIR, then emits readable C for native applications or compact KRB cartridges for portable renderers.

app.krysource
#import "kryon.h"

Greeting :: (name: string) {
    row {
        Icon(ICON_ROCKET)
        Text("Hello, " + name)
    }
}
outputsC / KRB
Greeting.kir
  source spans
  widget tree
  event logic
  imports

Greeting.c    # native backend
Greeting.krb  # portable cartridge

Showcase

Real apps built with Kryon

The showcase tracks shipped Kryon applications and ranks public submissions by stars from public source platforms. Add a project through the public metadata repo.

View all

Platforms

One source, the targets apps ship to

The same interface source builds for the environments real apps ship to — no platform-specific forks of your UI code.

Android

Mobile runtime and KRB host capabilities.

iOS

Mobile renderer through the portable runtime contract.

ESP32

Small KRB renderers with constrained capability sets.

Microcontrollers

Embedded targets for draw primitives, input, timers, and storage.

Linux

Native C builds and KRB renderers.

Windows

Native C builds and KRB renderers.

macOS

Native C builds and KRB renderers.

FreeBSD

Native desktop, servers, and embedded targets.

Plan 9

Portable runtime target with a small native host layer.

Browser

Browser renderer, WASM logic, and KRB preview.

Get started

Build the runtime and tools

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)
    }
}

Documentation

FAQ

Questions

What is Kryon?

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.

How is Kryon different from Flutter?

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.

How is it different from Godot's UI?

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.

What is a .kry file?

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.

Is Kryon free?

Yes — Kryon is free and open source, developed by Kryon Labs. Clone and build from github.com/kryonlabs/kryon.

What platforms does it support?

Linux, Windows, macOS, Android, the browser via WebAssembly, and FreeBSD — including embedded targets. One interface source builds for all of them.