rust_widgets
Pure Rust cross-platform native GUI architecture.
Quick Start
Runtime Profiles
default + full: complete desktop-oriented stack.embedded: full-weight embedded runtime path for lifecycle/render/supported-control behavior; module surface is intentionally trimmed at compile time (xml,i18n,theme, andbindingsexcluded).mobile-api: reserved unified extension points for mobile targets.
Feature Toggle Examples
# Full profile (default)
# Embedded profile
# Full profile + mobile API reservation
# Embedded profile + mobile API reservation
v2 Runtime and Validation Workflow
- Lifecycle routing is now profile-explicit:
- desktop (
not embedded) routesinit/run/quitdirectly to native platform backends - embedded routes lifecycle through
RenderEngine
- desktop (
- Runtime route diagnostics can be enabled with:
RUST_WIDGETS_TRACE_RUNTIME=1
- Unified validation scripts:
# default + examples + embedded profile matrix
# ABI consistency gate (version + symbols + generated header drift)
v3 Release Workflow
# demo smoke (default + embedded)
# package validation without upload
QA Harness
# cross-profile behavior matrix
# deterministic visual snapshot regression checks
Platform Scope
- Desktop: Windows (Win32), macOS (Cocoa), Linux (GTK), Harmony Desktop.
- Embedded: embedded Linux / embedded Harmony (full-weight runtime path under
embeddedfeature). - Mobile: Android / iOS / Harmony mobile reserved API (architecture-ready, implementation to be expanded later).
Runtime GUI Mode Contract (v18)
NativeInteractive: backend is expected to create visible native windows and run an interactive event loop.PreviewOrStub: backend may run state-model/poll loop behavior without visible native windows.demo_mainprints the resolved mode at startup so "no response" cases are explicit.- Unsupported widget creation paths return
0(invalid object id) explicitly; platform backends should not silently downgrade to unrelated controls.
Control Implementation Contract
- For supported backends, each control must be implemented end-to-end: native creation, state synchronization, event path, and data/model path where applicable.
- Minimal placeholder implementations are not accepted as complete control support.
- Missing backend capability must be explicit (
unsupported/0) with diagnostics where available and tracked in roadmap docs.
V19 Status Snapshot (2026-03-03)
- Completed in this cycle:
- Windows typed trigger routing for native controls is wired through
WM_COMMAND/WM_NOTIFYintopoll_widget_trigger_event. - Windows ComboBox event-path parity is in place (user selection and programmatic index-change sync emit deterministic typed triggers).
- ListBox full data-path API contract is implemented at platform level with Windows + stub backend coverage.
- Preview backends (Linux non-gtk-native, Harmony, macOS objc2 preview, mobile preview) now expose explicit unsupported diagnostics for ComboBox/ListBox data APIs (no silent fallback semantics).
- Focused ComboBox/ListBox regression tests are added and passing.
- GPU visual parity builders and regressions are completed for covered controls:
Window/Panel/Label/Button/CheckBox/RadioButton/LineEdit/ComboBox/ListBox/ProgressBar/Slider/ScrollBar/MenuBar/Menu/ToolBar/StatusBar/TabWidget/StackWidget. - GPU parity aggregate regression suite and end-to-end covered-control demo (
demo_wgpu_control_parity) are added.
- Windows typed trigger routing for native controls is wired through
- Remaining explicit gaps tracked in roadmap:
- GPU visual parity not yet covered for:
Dialog/MessageBox/FileDialog/ColorDialog/FontDialog/PopupWindow/TextEdit/RichEdit/SpinBox/ListView/TreeView/Table/Grid/Canvas/GroupBox/Splitter/DockPanel/MdiArea/ScrollArea. - Embedded host-control support expansion (
MenuBar/Menu/ToolBar/StatusBar) remains explicit unsupported in current embedded profile (0/false+ diagnostics).
- GPU visual parity not yet covered for:
Core Modules
core,object,event,signal,widget,layout,xml,i18nplatform,theme,style,bindingsprint,pdf,chart(feature-gated)
Documentation Index
- Changelog: CHANGELOG.md
- Future constrained work: FUTURE.md
- Architecture: docs/ARCHITECTURE.md
- ABI policy: docs/ABI_POLICY.md
- QA harness: docs/QA_HARNESS.md
- v3 handoff template: docs/V3_HANDOFF_TEMPLATE.md
- Commenting Guidelines: docs/COMMENTING_GUIDELINES.md
- Demo catalog: demos/README.md
- Help (English): docs/HELP.en.md
- 帮助(简体中文): docs/HELP.zh-CN.md
- 幫助(繁體中文): docs/HELP.zh-TW.md
- Aide (Français): docs/HELP.fr.md
- Справка (Русский): docs/HELP.ru.md
- C ABI Quickstart: docs/C_ABI_QUICKSTART.md
- Harmony Native Bridge: docs/HARMONY_NATIVE_BRIDGE.md
- 鸿蒙原生桥接(简体中文): docs/HARMONY_NATIVE_BRIDGE.zh-CN.md
- 鴻蒙原生橋接(繁體中文): docs/HARMONY_NATIVE_BRIDGE.zh-TW.md
- Pont natif Harmony (Français): docs/HARMONY_NATIVE_BRIDGE.fr.md
- Нативный мост Harmony (Русский): docs/HARMONY_NATIVE_BRIDGE.ru.md
Demo Highlights
- Main and architecture demos:
demo_main,demo_layout,demo_xml,demo_i18n - UI control demos: window/dialog/popup, input controls, data-view controls, containers, menu/tool/status controls, table/grid/chart/canvas
For the complete categorized list and command set, open demos/README.md.
C ABI Samples
- Header: examples/rust_widgets.h
- Typed trigger polling demo: examples/c_abi_poll_demo.c
- Harmony NAPI bridge sample: examples/harmony_napi_bridge_sample.c
- Harmony NAPI bridge flow: examples/harmony_napi_bridge_flow.md
- Python ctypes adapter: examples/python/rust_widgets.py
- Python basic demo: examples/python/demo_basic.py
- C++ wrapper skeleton: examples/cpp/rust_widgets.hpp
- C++ basic demo: examples/cpp/demo_basic.cpp
- Java native-method skeleton: examples/java/RustWidgets.java
- JNI bridge skeleton: examples/java/rust_widgets_jni_bridge.c
- Full build/run guide: docs/C_ABI_QUICKSTART.md
- Harmony direct callback bridge: docs/HARMONY_NATIVE_BRIDGE.md
Build and run (from project root):
# 1) Build dynamic library
# 2) Compile C sample (macOS)
# 3) Run (macOS)
DYLD_LIBRARY_PATH=target/debug
Linux:
LD_LIBRARY_PATH=target/debug
Windows (MSYS2/MinGW style): use set PATH=target\\debug;%PATH% before running the executable.