Build interfaces
closer to the metal.
ENKI is a production-grade C++20 GUI framework for teams who need modern declarative productivity without a managed runtime, browser engine, or platform rewrite.
Native performance.
Human-scale APIs.
ENKI combines a three-tree reactive architecture, an in-house Flexbox engine, Skia GPU rasterization, and a BLoC-inspired state layer into one cohesive native toolkit.
Business logic lives in Cubits. The UI stays declarative. Subscriptions follow the Element tree and disappear deterministically when a surface unmounts.
Read the architectureCompiled C++20, no garbage collector, deterministic memory, and sub-millisecond frame pacing.
Direct X11, Wayland, Win32, Android NDK, DRM/KMS, and WASM backends.
Only the BlocBuilder subtree changes when state changes. Pages remain static and cheap.
Lottie, SVG, FFmpeg/VA-API video, live audio spectrum, particles, and path morphing.
CLDR plurals, BCP-47 parsing, RTL detection, and live locale switching for global products.
Cubits and widget trees run without a display server, GL context, or Skia surface.
Compiler baseline: GCC 13+ / Clang 16+ / MSVC 2022 · C++20 · Meson ≥ 1.1
Core Engine
Widget, Element, RenderObject, reconciler, keys, BuildContext, and gesture recognition.
Anu Layout
A complete Flexbox engine with wrapping, grow/shrink, baseline alignment, caching, and pixel-grid snapping.
Skia Rendering
Canvas, Paint, Path, SVG, fonts, shader masks, blur, filters, clipping, and Lottie through GPU rasterization.
Cubit State
Cubit, BlocProvider, BlocBuilder, BlocListener, and granular rebuilds that keep pages static and predictable.
Platform Layer
Native backends for X11, Wayland, DRM/KMS, Win32, Android NDK, and WebAssembly.
Media Systems
FFmpeg and VA-API video, live audio FFT, native web technology hosting, and desktop shell surfaces.
Hello,
ENKI.
Start with a clean C++20 application or let the CLI scaffold the project for you.
Read the full guide#include "enki/app/app.hpp"
#include "enki/widgets/text.hpp"
using namespace enki;
int main() {
AppConfig config;
config.title = "My ENKI Application";
config.width = 1280;
return runApp(app, config);
}From source
to surface.
enki doctorDiagnose compilers, SDKs, backends, and available targets.enki devicesDiscover desktop, DRM, and Android surfaces.enki create my_appScaffold a clean production application.enki run gallery desktopBuild and run an app on the desktop target.Build once.
Render natively.
ENKI is released under Apache 2.0. The next milestones expand widget coverage, then transition the rendering core from Skia to the in-house Nisaba 2D engine.