Jump to a component
Core · Navigation
TabBar
TabBar is the phone's main navigation: a floating glass capsule with four destinations and a separate round Create button.
Native on iOS and Android
Sakuga for iOS and Android is coming
TabBar is native on iOS and Android: each platform draws it in its own language, so the web package has none to show here.
iOS
Coming soon
TabBar is native on iOS: the system draws it, and Sakuga for iOS will give it Sakuga’s tokens.
Android
Coming soon
TabBar is native on Android: the system draws it, and Sakuga for Android will give it Sakuga’s tokens.
- Use it for
- The phone's main navigation: four destinations (Home, Shorts, Manga, You) and the separate Create button.
- Not for
- Navigation on desktopTopNav
- Switching between views of the same thingSegmentedControl
- Choices that belong to the current screenSheet
Guidelines
- Exactly four items: Home, Shorts, Manga, You. The current item fills with
tabbar-item-active-bg; the fill slides to a new item onmotion-base. - Create is separate from the destinations because it starts a task rather than going somewhere. Pass
onCreate={null}to hide it. - Float it 12px from the sides and above the home indicator; content scrolls under it.
- On iOS use the system tab bar with Liquid Glass and these four items, not a re-drawn copy.
- It stays silent, on the web and in the apps (README · Sound).
Props
TabItem
labelrequiredstringiconrequiredIconNamehrefstringcurrentbooleanonClickMouseEventHandlerTabBarProps
itemsrequiredTabItem[]onCreateMouseEventHandler | nullcreateLabelstringlabelstringclassNamestringTypeScript
export interface TabItem { label: string; icon: IconName; href?: string; current?: boolean; onClick?: MouseEventHandler; } export interface TabBarProps { items: TabItem[]; onCreate?: MouseEventHandler | null; createLabel?: string; label?: string; className?: string; }
Each token reads a role, and the role lands on a value in each theme. Change the role and every component that reads it follows.
Colour
tabbar-bgTabBar: the glass capsule.bg-glassglass-light-a62rgba(250,250,252,0.62)bg-glassglass-dark-a42rgba(28,28,34,0.42)tabbar-borderTabBar: capsule edge.border-glasswhite-a70rgba(255,255,255,0.7)border-glasswhite-a16rgba(255,255,255,0.16)tabbar-item-fgTabBar: idle items.text-secondaryneutral-800#2e2d36text-secondaryneutral-200#dcdcdetabbar-item-active-bgTabBar: the current item capsule.action-primaryneutral-925#0b0a10action-primaryneutral-0#fffffftabbar-item-active-fgTabBar: the current item glyph and name.text-inverseneutral-0#fffffftext-inverseneutral-925#0b0a10tabbar-create-fgTabBar: the Create button glyph.text-primaryneutral-925#0b0a10text-primaryneutral-0#ffffffSpace and shape
tabbar-heighttabbar-radiusradius-2xltabbar-gapgap-mdtabbar-bar-padding-xinset-xstabbar-bar-blurblur-glasstabbar-bar-inset-ring-widthline-hairlinetabbar-item-heightsize-control-lgtabbar-item-min-widthtabbar-item-padding-xinset-smtabbar-item-radiusradius-fulltabbar-item-gapgap-2xstabbar-item-icon-sizeicon-size-mdtabbar-item-icon-active-scalescale-press-smtabbar-bar-glide-radiusradius-fullType
tabbar-font-familyfont-sanstabbar-item-font-sizetext-small-strong-sizetabbar-item-line-heighttext-small-strong-line-heighttabbar-item-font-weighttext-small-strong-weightMotion
tabbar-item-durationmotion-fasttabbar-item-easingease-standardtabbar-item-icon-active-durationmotion-instanttabbar-item-icon-durationmotion-fasttabbar-item-icon-easingease-standardChecked automatically with axe-core 4.11.4 against WCAG 2.2 A and AA, on the live preview above, in light and dark, on 26 October 2026.
- Result
- No issues found, in light or in dark.
- By design
- A navigation named by
label(default "Tabs"): Tab moves through each destination, a link read by its text with the current one marked "current page", then the round Create button, named bycreateLabel(default "Create"). Icons are hidden. - Not tested
- The automated check doesn't test keyboard use, focus order or what a screen reader says. The lines above are the design system's own account of them.