v0.2.0 — the general-purpose release
Kael 0.2.0 — "the general-purpose release."
This is the release that re-centers Kael as a general-purpose, community-driven GPUI fork — see VISION.md. The crate layout now enforces the layering: kael_engines is domain-neutral, and the media/NLE stack moved to the new kael_media_engines crate (breaking for kael_engines users — module contents unchanged, update the crate prefix). Radial and conic gradients are already shipped in the core, and custom shaders are committed as public API — design proposal 0001 is open for feedback; other GPUI forks are welcome to align on the contract.
This is also kael_ui's first crates.io release: 100+ themable components, 18 theme presets plus user-defined brand themes (Theme::custom), live theme switching, and a single-import prelude. Note: the Lucide icon SVGs are not bundled in the crate — copy them from crates/kael_ui/assets/icons into your app's assets.
First-time publishes alongside it: kael_render_graph, kael_gpu_budget, kael_secrets, kael_media_engines.
Kael is the continuation of adabraka-gpui (same project, renamed) — an independent fork built on Zed Industries' GPUI, not a break with Zed.
Added
- Custom themes for
kael_ui—Theme::custom(tokens)plus
ThemeVariant::Customlet an app brand itself by starting from any of
the 18 preset token sets and overriding fields with struct-update
syntax. Newcustom_theme_demoexample shows the full customization
stack (brand theme, live switching, per-componentStyledoverrides). - Live theme switching —
kael_ui::install_themenow refreshes every
open window, so calling it again at runtime restyles the app
immediately. - Real template apps — the three
templates/members were stub
windows; they are now complete kael_ui applications to copy from:
dashboard-app(sidebar, stat cards with sparklines, line/bar charts,
data table),messaging-app(conversation list, chat bubbles,
composer), andworkspace-app(file tree, tabbed syntax-highlighted
editor, toolbar, status bar). - CI now verifies the UI surface on all three platforms —
verify-kael.sh/.ps1lint (clippy -D warnings), unit-test, and
type-checkkael_ui, all 140+ examples, and the three template apps on
macOS, Windows, and Linux.
Changed
kael_ui::preludeis self-sufficient — it now re-exports the Kael
essentials (div,px,Application,Render,Result,
AssetSource,ClickEvent, geometry types, …), so an app needs only
use kael_ui::prelude::*;. Mixing it withuse kael::*;is no longer
needed or recommended: the dual-glob pattern madeButton,Theme,
Select, and friends ambiguous between the core legacy widgets and the
component library (rustc and rust-analyzer resolved them differently).
All examples migrated.kael_uiis clippy-clean under-D warnings;ValidationRules
callback fields changed fromArctoRc(they are UI-thread-only,
and the stored closures were neverSend).
Fixed
-
Inputno longer overwrites a placeholder configured on its
InputStatewith an empty string when the element-level placeholder is
unset. -
AnimatedSwitchnow implementsStyled, accepting user style
overrides like every other component. -
Kael is re-centered as a general-purpose desktop application
framework. The project drifted toward being a video-editor toolkit;
this release corrects course. The new VISION.md states the
mission, the layering rule that keeps the core domain-neutral, the
adabraka-gpui→ Kael naming history, and the project's relationship
to Zed/upstream GPUI.PRODUCTION_ROADMAP.mdis retitled and re-read
through the general-app lens: production gates (accessibility,
packaging, update integrity, text correctness) come first, the GPU
substrate (render targets, custom shaders, render graph) ships as
public framework API, and the video-editor bar is the optional media
track. -
BREAKING (
kael_engines): the 15 media/NLE modules moved to the new
kael_media_enginescrate.kael_enginesnow contains only
domain-neutral engines:bidi(UAX#9),linebreak(UAX#14),undo,
crash_report, and thecanvas/dashboard/idedata models. Code
usingkael_engines::{media, compositor, effects, export, transform, automation, audio_mix, generators, project, markers, playback, timecode, scopes, subtitles, frame_cache}should depend on
kael_media_enginesand update the crate prefix — module contents are
unchanged.kael_enginesno longer depends onkael_render_graph.
Added
-
New crate:
kael_media_engines— the optional media/NLE leaf
stack (timeline, compositing, audio mix, export), split out of
kael_enginesso that crate stays domain-neutral. -
Design proposal 0001: public render targets, passes, and custom
shaders
(docs/design/0001-render-targets-and-custom-shaders.md)
— the API contract for app-allocatable typed render targets (incl.
Rgba16Float), WGSL shader registration vianaga, fragment +
compute passes, and an executor for thekael_render_graphDAG,
staged Metal-first with golden-image tests. -
New crate:
kael_ui— a complete shadcn-inspired component library
built into the Kael workspace. This is the continuation of
adabraka-ui (which depended
on the former adabraka GPUI fork, now Kael), ported in-tree so
applications no longer need to combine Kael with an external
component library. It ships 100+ components across seven modules:
components(buttons, inputs, selects, sliders, date/time/color
pickers, OTP input, file upload, tag input, rating, code editor with
tree-sitter highlighting, and more),display(tables, data grids,
cards, badges, accordions, markdown/HTML rendering),navigation
(sidebars, menus, tabs, breadcrumbs, toolbars, file trees, status
bars),overlays(dialogs, sheets, popovers, toasts, tooltips,
context menus, command palettes),charts(line, area, bar, pie,
donut, radar, gauge, heatmap, treemap, sparkline),layout
(VStack,HStack,Grid,ScrollContainer, responsive helpers),
and a shadcn-stylethemesystem with light/dark design tokens.
Bundles 1,600+ Lucide icons, Inter and JetBrains Mono fonts, and
140+ runnable examples (cargo run -p kael_ui --example button_demo). -
canvas_with_prepaint()is now public inkael, exposing the
non-overloaded form ofcanvas()for callers that want closure
parameter types to be inferred.