One tab of the dynamic bottom bar: the Eitri-App it opens plus how it presents itself.

interface DynamicBottomBarItem {
    badge?: string;
    icon?: string;
    initParams?: Record<string, unknown>;
    slug: string;
    title?: string;
}

Properties

badge?: string

Initial badge text drawn over the tab's icon. Omit for no badge.

Colors come from the bar-wide badgeBackground / badgeTextColor. To set, change or clear a badge on the running bar, use BottomBar.updateTabBadge — updateStyle only restyles badges, it never changes their content.

icon?: string

URL of the tab's icon. The app downloads it when the bar is rendered and keeps it cached afterwards.

The URL must be https — an http URL is refused, and the tab is left without an icon.

The bar repaints the icon in the tab's color: only the image's transparent and non-transparent areas matter — the shape they draw is what you see, filled with selectedColor or unselectedColor. The icon's own colors are discarded, so a full-color image comes out as a flat colored blob.

  • Format: PNG with a transparent background (a real alpha channel). A white or otherwise opaque background is itself painted over, so the tab renders as a solid square of the tab color.
  • Draw the glyph in a single flat color (black is the usual choice) and let the bar tint it. Do not bake in the brand color or the selected/unselected states — the bar applies both.
  • Square image (1:1). The image is resized to iconSize (default 24) without being stretched, so a non-square image ends up with empty space around it and looks smaller than its neighbors.
  • Around 96x96 px is the reference size — large enough to stay sharp on high-density screens without wasting bytes. Using it across a brand's icons keeps them consistent.
  • Keep the padding uniform across a brand's set: the glyph should occupy the same fraction of the canvas in every icon, otherwise some tabs look bigger than others even though the boxes are identical.

An icon is re-downloaded only when its URL differs from the one currently displayed, so reusing the same URL avoids flicker.

initParams?: Record<string, unknown>

Parameters handed to the Eitri-App when the tab opens — the way repeated slug values are disambiguated (e.g. { "route": "Categories", "tabIndex": 1 }).

slug: string

Slug of the Eitri-App this tab opens. Several tabs may repeat the same slug and tell themselves apart through initParams.

title?: string

The tab's label. An empty title makes the tab label-less (icon only) regardless of the theme's labels setting.