Repository navigation
Releases: strowk/bevy_superui
Release list
superui v0.4.0 (bevy 0.20)
Changed
- Target Bevy 0.20; rebased the Flair fork onto bevy_flair 0.9.
Per superui's versioning policy, a minor bump tracks a Bevy version bump and
carries only the changes needed to support it — there are no new superui
features or behavior changes in this release. main now tracks the Bevy 0.20
(0.4.x) line; the Bevy 0.19 (0.3.x) line continues as a maintained branch.
superui v0.3.6 (bevy 0.19)
Added
<img>tag: reconciled into a bevy_uiImageNode.srcresolves relative to
the document's own directory (recorded onUiRuntimeas its base dir, the same
way CSS and JS links already resolve), loads as aHandle<Image>, and is
load-guarded so a stablesrcloads only once. Sizing is CSS-driven
(NodeImageMode::Auto);object-fitis intentionally out of scope until
bevy_ui gains fit modes.cargo superui test: the end-to-end test runner is now included as a subcommand
of the CLI.UiRuntime::take_errors: drains uncaught JavaScript evaluation errors captured
since the last call. Previously these were logged and discarded; now apps and
tooling can read them to surface a failing author script.transpilercargo feature onsuperui: compiles the oxc.tsxtranspiler into
the build (including wasm), enabling in-browser transpilation for live
playgrounds.page.emit(name, value)in the end-to-end test engine: a spec can deliver a
game→UI bridge event to the UI'sbevy.on(name, …)handlers (the counterpart
of the game'scommands.trigger), so a headless test with no game side can
drive and assert the UI's reaction to bridge data..jsonimports:import x from "./data.json"— default,import * as x, and
import { x }all bind the whole value — inlines the file's parsed value as
a top-levelconst x, resolved relative to the importing file. Only the
whole value binds; picking a sub-path or member out of the JSON is out of
scope, and other cross-file imports are still stripped. A missing or invalid
file is fatal in the end-to-end test engine (the spec fails to transpile)
and a skipped-binding warning everywhere else (runtime/HMR and build);
editing the JSON hot-reloads the.tsxthat imports it.
Changed
cargo-superuiparses its arguments witharghinstead of hand-rolled flag
parsing.- Test engine
--uimode: specs are shown as a tree with their tests nested
underneath; each spec header carries a status icon (spinner while running,
check/cross once finished, hollow dot when not yet run) and each test a
pass/fail icon. Time-travel now records a frame per step, so the slider moves
the rendered image together with the DOM, and selecting a test jumps to its
final step. The shell starts at a slightly larger zoom.
Fixed
- The test engine now loads images, fonts, and class utilities, so
screenshot-based end-to-end tests render the same as the running app.
superui v0.3.5 (bevy 0.19)
Added
<input type=range>range slider: draggable and keyboard-controllable (arrow
keys, Home/End), withmin,max,step, andvalueattributes (value
clamped to range; defaults to the midpoint). Fires DOMinputwhile
interacting andchangeon commit, and.valueis readable and writable from
JS. Renders a browser-like slider by default, fully overridable via the new
::slider-track,::slider-fill, and::slider-thumbpseudo-elements.- Text
<input>backed by BevyEditableText: real text editing with a visible
text cursor. Placeholder text fades to the input's text color. <textarea>support as a multilineEditableText.- Tailwind-compatible class utilities: utility classes resolved at build time,
documented in the website CSS reference. widgets_showcaseexample demonstrating a text input, checkbox, and range
slider, with a screenshot-based end-to-end test.
Changed
- Keyboard focus and Tab navigation are unified on Bevy's
InputFocus. - Bevy 0.19 is the only actively developed line; the 0.17 and 0.18 lines are
maintenance-only.
Fixed
- Editable
<input>/<textarea>fields no longer lose focus on mouse release. A
field with no JS listener was treated as non-interactive and let the
release-click fall through to the layer behind it, which stole focus on
mouse-up; editable controls now block those picks. Button-family controls
(<button>,<input type=button|submit|reset|image>) stay pass-through unless
they carry a listener. - Fixing teardown: a mounted UI is correctly cleaned up when its root entity is despawned.
superui v0.3.4 (bevy 0.19)
This is a semver-patch release following schema of 0.3.x for bevy 0.19, but the JavaScript engine swap is a behavioral change worth reading before you upgrade.
JavaScript engine: Boa → V8 (native) / browser (web)
superui no longer ships the Boa engine. JavaScript now runs on:
- V8 (via
deno_core) on native targets, and - the browser's own engine on wasm.
- will probably not run at all if you build for android/ios and other targets where v8 cannot be built easily.
superui auto-selects the backend by target - native gets V8, wasm gets the browser engine, no config needed.
First native build downloads V8. deno_core pulls a prebuilt rusty_v8 static library on first build — a one-time network fetch and a noticeably longer initial compile. CI and offline builds need network access on that first run.
Mouse-wheel scrolling
overflow: scroll nodes now scroll under the pointer on wheel events, scrolling the nearest scrollable ancestor. The previous "scrolling is not supported" caveat is retired.
Fixes
- Reordered keyed rows stay dispatchable.
Compatibility
| superui | bevy |
|---|---|
| 0.3.x | 0.19 |
It is big and complex change with no backports: the 0.2.x (Bevy 0.18) and 0.1.x (Bevy 0.17) maintenance branches do not receive this release and starting forward 0.19+ only would be supported.
superui 0.3.3 (bevy 0.19)
Fixes a mounted UI eating the host app's world picking and click propagation. A superui root now blocks the pointer only where the DOM is actually interactive; PickingPolicy::Solid restores the old swallow-everything behaviour for menus and modals. Documented at https://strowk.github.io/bevy_superui/docs/concepts/picking.html
superui 0.2.3 (bevy 0.18)
Fixes a mounted UI eating the host app's world picking and click propagation. A superui root now blocks the pointer only where the DOM is actually interactive; PickingPolicy::Solid restores the old swallow-everything behaviour for menus and modals.
superui 0.1.3 (bevy 0.17)
Fixes a mounted UI eating the host app's world picking and click propagation. A superui root now blocks the pointer only where the DOM is actually interactive; PickingPolicy::Solid restores the old swallow-everything behaviour for menus and modals.
superui 0.3.2 (bevy 0.19)
Fixes since 0.3.0:
- HMR re-exec collision — author scripts are now scoped in an IIFE, so a hot reload no longer collides with the previous execution's top-level bindings.
- row index — the row index is now a reactive accessor, so bindings that read it update when a row moves.
- Deep-nesting stack overflow — the JS parser grows its stack on demand, so deeply nested transpiled JSX no longer overflows the Windows main thread or test worker threads.
0.3.1 was published with incorrect dependency versions and does not resolve; use 0.3.2.
superui 0.2.2 (bevy 0.18)
Fixes since 0.2.0:
- HMR re-exec collision — author scripts are now scoped in an IIFE, so a hot reload no longer collides with the previous execution's top-level bindings.
- row index — the row index is now a reactive accessor, so bindings that read it update when a row moves.
- Deep-nesting stack overflow — the JS parser grows its stack on demand, so deeply nested transpiled JSX no longer overflows the Windows main thread or test worker threads.
0.2.1 was published with incorrect dependency versions and does not resolve; use 0.2.2.
superui 0.1.2 (bevy 0.17)
Fixes since 0.1.0:
- HMR re-exec collision — author scripts are now scoped in an IIFE, so a hot reload no longer collides with the previous execution's top-level bindings.
- row index — the row index is now a reactive accessor, so bindings that read it update when a row moves.
- Deep-nesting stack overflow — the JS parser grows its stack on demand, so deeply nested transpiled JSX no longer overflows the Windows main thread or test worker threads.
0.1.1 was published with incorrect dependency versions and does not resolve; use 0.1.2.