Skip to content

Upstream Jackdaw tab widget for bevy UI - #25515

Open
jbuehler23 wants to merge 4 commits into
bevyengine:mainfrom
jbuehler23:jackdaw/tabs-headless
Open

Upstream Jackdaw tab widget for bevy UI#25515
jbuehler23 wants to merge 4 commits into
bevyengine:mainfrom
jbuehler23:jackdaw/tabs-headless

Conversation

@jbuehler23

@jbuehler23 jbuehler23 commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Objective

Implement the "Tab Deck" item from the widgets roadmap (#19236).

This is the first PR in an effort to upstream the tab and docking functionality built for jackdaw, following the layered design
from the tab panes and docking specification written by @viridia here: https://hackmd.io/@dreamertalin/HkA2okNSzx. This starts with the first PR: headless tab behavior, with no styling.

Solution

  • Headless tab list and tab components in bevy_ui_widgets.
  • Selection is externally owned, matching the crate's controlled-widget convention: interaction emits a selection request, and the app either applies it itself or attaches the provided self-update observer.
  • Keyboard navigation with a roving tab index, in both orientations, with manual or automatic activation.
  • Accessibility roles, and disabled handling for individual tabs or whole strips.
  • A headless_tabs example and a release note.

Dragging tabs, reodering tabs, styling, and dock layout are all planned for follow-ups

Testing

  • cargo test -p bevy_ui_widgets tabs
  • cargo run --example headless_tabs:

Showcase

image
2026-08-22.21-18-58.mp4

AI Disclaimer

I used an LLM (claude code) to help with the transfer of code from jackdaw to bevy, and to post-check/review before committing/submitting the PR

@github-actions

Copy link
Copy Markdown
Contributor

The generated examples/README.md is out of sync with the example metadata in Cargo.toml or the example readme template. Please run cargo run -p build-templated-pages -- update examples to update it, and commit the file change.

@viridia viridia left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks great!

}
}

fn update_tablist_derived_state(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd like to see a comment describing the theory of operation here.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep will update!

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated @viridia

@Zeophlite Zeophlite added C-Feature A new feature, making something new possible A-UI Graphical user interfaces, styles, layouts, and widgets D-Modest A "normal" level of difficulty; suitable for simple features or challenging fixes S-Needs-Review Needs reviewer attention (from anyone!) to move forward labels Aug 23, 2026
@github-project-automation github-project-automation Bot moved this to Needs SME Triage in UI Aug 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-UI Graphical user interfaces, styles, layouts, and widgets C-Feature A new feature, making something new possible D-Modest A "normal" level of difficulty; suitable for simple features or challenging fixes S-Needs-Review Needs reviewer attention (from anyone!) to move forward

Projects

Status: Needs SME Triage

Development

Successfully merging this pull request may close these issues.

3 participants