Skip to main content

Menus & navigation

Liquid tab bar

A bottom navigation bar where a liquid pill glides between five tabs — Home, Search, Create, Inbox, Profile. It is the most practical component here: a drop-in tab bar for mobile apps and PWAs that feels native and alive.

  • 3.4 KB compiled
  • 420 × 170 artboard
  • 1 input
  • 9 runtimes
Live

How it works

  1. A Number input, selected (0–4), drives five states — one per tab.
  2. Changing tabs plays a transition that glides the liquid pill to the new tab.
  3. Because the state is a plain number, your router can set it directly.
InputTypeWhat it does
selectedNumberIndex of the active tab, 0 to 4.

When to use it

  • Mobile app bottom navigation
  • PWA and web-app tab bars
  • Dashboard section switchers

Accessibility

Use role="tablist" buttons in your app to set selected, and keep visible labels for each icon.

Also searched as: bottom navigation bar · animated tab bar · mobile tab navigation

Use it in your app

One component, one file. Pick your stack:

import { ExodeUICanvas } from 'exodeui';

export function LiquidTabBar() {
  return (
    <ExodeUICanvas
      src="/liquid-tabbar-menu.bexode"
      autoPlay
      onReady={(engine) => {
        // drive it from your own UI:
        // engine.setInputNumber('selected', 2);
      }}
    />
  );
}

React loads the compact .bexode; the other runtimes load the .exode JSON source — both come from the same design.

Questions

How do I sync it with my router?

Map each route to an index and call engine.setInputNumber("selected", index) on navigation.

Can I have fewer tabs?

Yes — remove a tab and its state in the editor.

Make it yours in ExodeUI.

Change the colours, the timing, the logic — then ship the same file.