Skip to content

v0.2.0 — the general-purpose release

Choose a tag to compare

@Augani Augani released this 10 Jun 23:45
· 23 commits to main since this release
eea9f0d

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_uiTheme::custom(tokens) plus
    ThemeVariant::Custom let an app brand itself by starting from any of
    the 18 preset token sets and overriding fields with struct-update
    syntax. New custom_theme_demo example shows the full customization
    stack (brand theme, live switching, per-component Styled overrides).
  • Live theme switchingkael_ui::install_theme now 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), and workspace-app (file tree, tabbed syntax-highlighted
    editor, toolbar, status bar).
  • CI now verifies the UI surface on all three platforms
    verify-kael.sh/.ps1 lint (clippy -D warnings), unit-test, and
    type-check kael_ui, all 140+ examples, and the three template apps on
    macOS, Windows, and Linux.

Changed

  • kael_ui::prelude is 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 with use kael::*; is no longer
    needed or recommended: the dual-glob pattern made Button, 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_ui is clippy-clean under -D warnings; ValidationRules
    callback fields changed from Arc to Rc (they are UI-thread-only,
    and the stored closures were never Send).

Fixed

  • Input no longer overwrites a placeholder configured on its
    InputState with an empty string when the element-level placeholder is
    unset.

  • AnimatedSwitch now implements Styled, 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.md is 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_engines crate.
    kael_engines now contains only
    domain-neutral engines: bidi (UAX#9), linebreak (UAX#14), undo,
    crash_report, and the canvas/dashboard/ide data models. Code
    using kael_engines::{media, compositor, effects, export, transform, automation, audio_mix, generators, project, markers, playback, timecode, scopes, subtitles, frame_cache} should depend on
    kael_media_engines and update the crate prefix — module contents are
    unchanged. kael_engines no longer depends on kael_render_graph.

Added

  • New crate: kael_media_engines — the optional media/NLE leaf
    stack (timeline, compositing, audio mix, export), split out of
    kael_engines so 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 via naga, fragment +
    compute passes, and an executor for the kael_render_graph DAG,
    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-style theme system 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 in kael, exposing the
    non-overloaded form of canvas() for callers that want closure
    parameter types to be inferred.