No LLVM
Straight to machine code. 8 optimizer passes, RV32C compression. The whole compiler is about 10K lines of Rust.
A systems language for RISC-V embedded. No LLVM, no runtime, no external toolchain. Source code goes in, firmware comes out.
Debugger
Every cycle recorded. Drag the timeline to see registers change and GPIO pins toggle.
Features
No roadmap promises. This is what works right now.
Straight to machine code. 8 optimizer passes, RV32C compression. The whole compiler is about 10K lines of Rust.
Claim a GPIO pin twice and the compiler yells at you. Ownership is tracked at the type level, not at runtime.
Functions return values or errors. try unwraps or propagates. No exceptions, no hidden control flow.
Every CPU cycle gets recorded. Scrub backward through execution and see exactly what wrote that register.
RV32IM emulator with MMIO logging baked in. Write code, run it, see GPIO toggles. No hardware needed to start.
JSON errors, a check command, deterministic output. Built so AI agents can compile and verify without hand-holding.
Syntax
If you can read Rust, you can read Kov. Board definitions are part of the grammar.
// board definition is the language board esp32c3 { gpio: GPIO @ 0x6000_4000, uart: UART @ 0x6000_0000, clock: 160_000_000, } fn main(b: &mut esp32c3) { let led = b.gpio.pin(2, .output); let tx = b.uart.open(115200); loop { led.high(); delay_ms(500); led.low(); delay_ms(500); tx.write("blink\n"); } }
Comparison
| C | Rust | Kov | |
|---|---|---|---|
| LLVM required | Yes | Yes | No |
| Peripheral safety | None | Runtime | Compile-time |
| Stack overflow | Silent | Panic | Compile error |
| WCET analysis | External tool | External tool | Built-in |
| Interrupt safety | Manual | RTIC macro | Static analysis |
| Runs in browser | No | No | Yes (WASM) |
| Compile time | 2–10s | 10–60s | <1ms |
One person, Rust, no dependencies. Compiler, emulator, optimizer, and now a browser playground.
Follow on GitHub