bevy_vista
bevy_vista is a document-driven UI editor and runtime toolkit for Bevy UI.
It combines:
- an editor overlay built with pure Bevy UI
- inspector-driven widget editing
.vista.ronserialization for reusable UI documents- runtime APIs for loading, mutating, and spawning saved UI
Latest Version
bevy_vista = "0.17.1"- compatible with
bevy = "0.17"
What's New
Recent additions in the current API surface:
- clearer
core/runtime/editormodule split - runtime document utilities via
WidgetDocUtility - runtime asset loading and spawning example
- cleaner custom inspector driver registration flow
- slimmer custom inspector driver context API
- improved public exports and layered preludes
Layered Architecture
bevy_vista is organized into three layers:
bevy_vista::coreshared widgets, themes, asset/document models, inspector metadata, and built-in driversbevy_vista::runtimedocument loading, mutation, spawning, flushing, and live widget accessbevy_vista::editoreditor overlay, hierarchy, viewport, toolbar, and inspector panels
Plugin entry points:
VistaUiCorePluginVistaUiRuntimePluginVistaUiEditorPluginVistaUiPluginfull setup, combining editor and runtime layers
Prelude entry points:
bevy_vista::core::prelude::*bevy_vista::runtime::prelude::*bevy_vista::editor::prelude::*bevy_vista::prelude::*
Features
- editor UI based on pure Bevy UI
- floating + fullscreen editor modes
- viewport grid, zoom, pan, and preview workflow
- save / load
.vista.ronUI documents Widgetderive + auto-registration for custom widgetsShowInInspectorderive for inspector-editable properties- custom inspector driver registration
- runtime document APIs for document-first UI workflows
- 100+ editor icons
Quick Start
[]
= "0.17"
= "0.17.1"
Full editor + runtime:
use *;
use *;
Runtime only:
use *;
use *;
Runtime Document Workflow
The runtime layer keeps a document as the source of truth, then spawns one or more live instances from it.
Typical flow:
load_path- mutate document data with
with_widget_mut/with_style_mut spawn- later
flushafter document-side changes - or mutate live widgets directly with
with_live_widget_mut
Main API:
WidgetDocUtilityWidgetDocIdWidgetDocInstanceIdWidgetDocLiveRef<T>WidgetDocLiveMut<T>
See:
Custom Inspector Drivers
Built-in field rendering is string-driver based, so external code can replace or extend inspector rendering without modifying internal editor modules.
Typical customization flow:
- implement
InspectorDriver - register it with
app.register_inspector_driver(...) - bind a Rust type to that driver through
InspectorEditorRegistry
This now works with the streamlined runtime driver API instead of requiring editor-private internals.
See:
ShowInInspector Options
#[derive(ShowInInspector)] currently supports these field-level
#[property(...)] options:
label = "Text"custom display label in the inspectorhiddenomit the field from the inspectormin = 0.0numeric minimum used by runtime editing controlsheader = "Layout"start a grouped foldout section and implicitly close the previous open sectiondefault_open = falseonly valid together withheader = "..."end_headercloses the current header section explicitly
Example:
If a later field starts another header = "..." section, the previous section is
closed automatically even without end_header.
See the detailed guide in docs/USAGE.md for a fuller
breakdown.
Examples
cargo run --example quick_vista_editorcargo run --example quick_full_editorcargo run --example runtime_load_assetcargo run --example custom_inspector_drivercargo run --example layout_widgetscargo run --example text_field_showcasecargo run --example editor_icons_gallery
Documentation
- Usage Guide
- crate docs on docs.rs
Screenshots
Full editor layout
example: quick_full_editor.rs

Editor Icons
example: editor_icons_gallery.rs
![]()