@capgo/capacitor-native-navigation

July 24, 2026 · View on GitHub

Capgo - Instant updates for Capacitor

Get instant updates for your app with Capgo

Missing a feature? We can build the plugin for you

Native navbar, tabbar, safe-area handling, and WebView snapshot transitions for Capacitor apps. Your web framework keeps routing and page rendering while this plugin owns the platform surfaces users expect to feel native.

Demo

Demo of capacitor-native-navigation in action

Native navigation tap flow

Animated native navigation tap flow showing tab selection, push transition, and native back

SVG icon descriptors

Animated native SVG icon demo showing inline SVG icons, native tint, labels, and tab selection

Native styling and zoom options

Animated native navigation options demo showing dynamic colors, selected labels, custom indicators, badges, system Liquid Glass, and zoom transitions

Native Liquid Glass screenshots

iOS native Liquid GlassAndroid Liquid Glass style
iOS native Liquid Glass navbar and tabbar screenshotAndroid Liquid Glass-style native navbar and tabbar screenshot

Curved native tabbar screenshot

Android native curved tabbar with raised center camera action and side margin

Features

  • Drive native top navigation and bottom tabs from JavaScript state.
  • Use system-owned iOS navigation bars, tab bars, tab gestures, and Liquid Glass rendering.
  • Emit native intent events such as navbarBack, navbarItemTap, and tabSelect.
  • Enable an optional Android Liquid Glass-style blurred backdrop for native bars on Android 12+.
  • Capture WebView snapshots for native-feeling push, back, root, tab, and zoom transitions.
  • Configure tab labels, selected icons, badges, indicators, ripples, tint colors, and dynamic colors.
  • Write CSS inset variables so web content can scroll behind native bars without being hidden.
  • Work with React, Vue, Angular, Svelte, Solid, vanilla JS, and any router that exposes imperative navigation.

How It Fits

  • Your router still owns route state and page rendering.
  • The app still uses one full-screen WebView.
  • Icons must be serializable descriptors such as SVG strings, SF Symbols, or native resource names.

Compatibility

@capgo/capacitor-native-navigation targets Capacitor 8 and Node.js 22+.

Install

You can use our AI-Assisted Setup to install the plugin. Add the Capgo skills to your AI tool using the following command:

npx skills add https://github.com/cap-go/capacitor-skills --skill capacitor-plugins

Then use the following prompt:

Use the `capacitor-plugins` skill from `cap-go/capacitor-skills` to install the `@capgo/capacitor-native-navigation` plugin in my project.

If you prefer Manual Setup, install the plugin by running the following commands and follow the platform-specific instructions below:

npm install @capgo/capacitor-native-navigation
npx cap sync

Minimal Usage

import { NativeNavigation } from '@capgo/capacitor-native-navigation';

await NativeNavigation.configure({
  contentInsetMode: 'css',
  animationDuration: 360,
});

await NativeNavigation.setNavbar({
  title: 'Home',
  subtitle: 'Native chrome',
  transparent: true,
  backButton: { visible: false },
  rightItems: [
    {
      id: 'compose',
      title: 'Compose',
      icon: {
        svg: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 20h9"/><path d="M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z"/></svg>',
      },
    },
  ],
});

await NativeNavigation.setTabbar({
  selectedId: 'home',
  labelVisibilityMode: 'labeled',
  icons: true,
  colors: {
    dynamic: true,
  },
  tabs: [
    {
      id: 'home',
      title: 'Home',
      icon: {
        svg: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 10.5 12 3l9 7.5"/><path d="M5 10v10h14V10"/></svg>',
      },
    },
    {
      id: 'settings',
      title: 'Settings',
      icon: {
        svg: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="3"/><path d="M12 2v3M12 19v3M2 12h3M19 12h3"/></svg>',
      },
    },
  ],
});

await NativeNavigation.addListener('tabSelect', ({ id }) => {
  router.navigate(`/${id}`);
});

Native Tab Styling

await NativeNavigation.setTabbar({
  selectedId: 'home',
  labelVisibilityMode: 'selected',
  indicatorColor: '#0A84FF',
  rippleColor: '#330A84FF',
  badgeBackgroundColor: '#FF3B30',
  badgeTextColor: '#FFFFFF',
  colors: {
    dynamic: true,
    tint: '#0A84FF',
    inactiveTint: '#8E8E93',
  },
  tabs: [
    {
      id: 'home',
      title: 'Home',
      icon: { ios: { sfSymbol: 'house' }, android: { resource: 'ic_home' } },
      selectedIcon: { ios: { sfSymbol: 'house.fill' }, android: { resource: 'ic_home_filled' } },
    },
  ],
});

Android Liquid Glass

Enable glass.effect: 'liquidGlass' to draw a live blurred WebView backdrop behind Android native bars. Android 12+ uses a platform RenderEffect blur; older Android versions keep the translucent tint surface without live blur.

await NativeNavigation.configure({
  glass: {
    effect: 'liquidGlass',
    blurRadius: 18,
    surfaceAlpha: 0.62,
  },
});

await NativeNavigation.setTabbar({
  selectedId: 'home',
  tabs,
  colors: {
    background: '#F8FFFFFF',
  },
});

Transition Flow

const transition = await NativeNavigation.beginTransition({ direction: 'forward' });

router.navigate('/detail');
await router.ready?.();

await NativeNavigation.setNavbar({
  title: 'Detail',
  backButton: { visible: true, title: 'Back' },
});

await NativeNavigation.finishTransition({
  id: transition.id,
  direction: 'forward',
});

Use With @capgo/capacitor-transitions

Use @capgo/capacitor-native-navigation for the native navbar, tabbar, safe-area insets, and native intent events. Use @capgo/capacitor-transitions for the WebView page stack underneath that native chrome.

npm install @capgo/capacitor-native-navigation @capgo/capacitor-transitions
npx cap sync

Initialize both packages once when the app starts:

import { NativeNavigation } from '@capgo/capacitor-native-navigation';
import '@capgo/capacitor-transitions';
import { initTransitions, setupRouterOutlet, setDirection } from '@capgo/capacitor-transitions/react';

initTransitions({ platform: 'auto' });

const outlet = document.querySelector('cap-router-outlet');
if (outlet) {
  setupRouterOutlet(outlet, { platform: 'auto', swipeGesture: 'auto' });
}

await NativeNavigation.configure({
  contentInsetMode: 'css',
});

Keep the transition outlet focused on pages. Do not render a web header or footer when native chrome owns those surfaces:

<cap-router-outlet platform="auto" swipe-gesture="auto">
  <cap-page>
    <cap-content slot="content" fullscreen>
      <main class="page">Inbox content</main>
    </cap-content>
  </cap-page>
</cap-router-outlet>
.page {
  min-height: 100dvh;
  padding-top: var(--cap-native-navigation-top);
  padding-bottom: var(--cap-native-navigation-bottom);
}

Drive both packages from the same router actions:

async function openMessage(id: string) {
  setDirection('forward');
  await router.push(`/messages/${id}`);
  await NativeNavigation.setNavbar({
    title: 'Message',
    backButton: { visible: true, title: 'Inbox' },
  });
}

await NativeNavigation.addListener('navbarBack', () => {
  setDirection('back');
  router.back();
});

await NativeNavigation.addListener('tabSelect', ({ id }) => {
  setDirection('root');
  router.push(`/${id}`);
});

Pick one animation layer per navigation. For normal route pushes, let @capgo/capacitor-transitions animate the WebView pages and update native bars with setNavbar / setTabbar. For shared-element or zoom routes, use beginZoomTransition / finishZoomTransition from this plugin and skip the web page transition for that navigation.

Zoom Transition

import { beginZoomTransition, finishZoomTransition } from '@capgo/capacitor-native-navigation';

const card = document.querySelector('[data-photo-card]');
if (card) {
  const transition = await beginZoomTransition(card, { cornerRadius: 18 });

  router.navigate('/photo/42');
  await router.ready?.();

  await finishZoomTransition(undefined, {
    id: transition.id,
    cornerRadius: 18,
  });
}

CSS Insets

With contentInsetMode: 'css', the plugin updates these variables on document.documentElement:

.app-scroll {
  height: 100dvh;
  overflow: auto;
  padding-top: calc(var(--cap-native-navigation-top) + 24px);
  scroll-padding-bottom: calc(var(--cap-native-navigation-bottom) + 24px);
}

.page {
  min-height: 100dvh;
  padding-bottom: calc(var(--cap-native-navigation-bottom) + 24px);
}

Available variables:

  • --cap-native-navigation-top
  • --cap-native-navigation-right
  • --cap-native-navigation-bottom
  • --cap-native-navigation-left
  • --cap-native-navbar-height
  • --cap-native-tabbar-height

Web Components

The package can register optional custom elements for framework-agnostic declarative setup:

import { defineNativeNavigationElements } from '@capgo/capacitor-native-navigation';

defineNativeNavigationElements();
<cap-native-navigation-provider enabled="true" content-inset-mode="css"></cap-native-navigation-provider>

<cap-native-navbar
  title="Home"
  subtitle="Native chrome"
  transparent
  right-items='[{"id":"compose","title":"Compose","icon":{"ios":{"sfSymbol":"square.and.pencil"}}}]'
></cap-native-navbar>

<cap-native-tabbar
  selected-id="home"
  tabs='[{"id":"home","title":"Home","icon":{"ios":{"sfSymbol":"house.fill"}}}]'
></cap-native-tabbar>

Icon Descriptors

const icon = {
  svg: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 10.5 12 3l9 7.5"/></svg>',
  width: 24,
  height: 24,
  template: true,
  src: 'shared_asset_name',
  ios: {
    svg: '<svg viewBox="0 0 24 24"><path d="M3 10.5 12 3l9 7.5"/></svg>',
    sfSymbol: 'house.fill',
    image: 'BundledAssetName',
  },
  android: {
    svg: '<svg viewBox="0 0 24 24"><path d="M3 10.5 12 3l9 7.5"/></svg>',
    resource: 'ic_menu_view',
    image: 'bundled_drawable_name',
  },
};

Inline SVG supports the icon-focused subset used by common sets such as Lucide and Feather: path, line, polyline, polygon, circle, and rect. The SVG is rendered as a template image by default, so native tint colors can recolor it without bundling a platform asset.

Platform Notes

  • iOS uses UIKit UINavigationBar, UITabBar, and UITabBarController so the system owns tab interaction, Liquid Glass rendering, and safe-area behavior.
  • Android uses an AppCompat Toolbar and a native bottom tab surface with edge-to-edge placement.
  • Web mirrors inset variables and events for local development.

Example App

The example-app/ folder is a vanilla JS Capacitor demo linked with file:...

cd example-app
npm install
npm run build
npx cap add ios
npx cap add android
npx cap sync

API

Framework-agnostic native navigation chrome API.

configure(...)

configure(options?: NativeNavigationConfigureOptions | undefined) => Promise<NativeNavigationInsetsResult>

Configure the native chrome host and content inset behavior.

ParamType
optionsNativeNavigationConfigureOptions

Returns: Promise<NativeNavigationInsetsResult>


setNavbar(...)

setNavbar(options: NativeNavigationNavbarOptions) => Promise<NativeNavigationInsetsResult>

Render or update the native navbar.

ParamType
optionsNativeNavigationNavbarOptions

Returns: Promise<NativeNavigationInsetsResult>


setTabbar(...)

setTabbar(options: NativeNavigationTabbarOptions) => Promise<NativeNavigationInsetsResult>

Render or update the native tabbar.

ParamType
optionsNativeNavigationTabbarOptions

Returns: Promise<NativeNavigationInsetsResult>


beginTransition(...)

beginTransition(options?: NativeNavigationBeginTransitionOptions | undefined) => Promise<NativeNavigationTransitionResult>

Capture the current WebView and prepare a native transition.

ParamType
optionsNativeNavigationBeginTransitionOptions

Returns: Promise<NativeNavigationTransitionResult>


finishTransition(...)

finishTransition(options?: NativeNavigationFinishTransitionOptions | undefined) => Promise<NativeNavigationTransitionResult>

Animate from the captured WebView snapshot to the current live WebView.

ParamType
optionsNativeNavigationFinishTransitionOptions

Returns: Promise<NativeNavigationTransitionResult>


getPluginVersion()

getPluginVersion() => Promise<PluginVersionResult>

Returns the platform implementation version marker.

Returns: Promise<PluginVersionResult>


addListener('navbarBack', ...)

addListener(eventName: 'navbarBack', listenerFunc: (event: NativeNavigationBackEvent) => void) => Promise<PluginListenerHandle>
ParamType
eventName'navbarBack'
listenerFunc(event: NativeNavigationBackEvent) => void

Returns: Promise<PluginListenerHandle>


addListener('navbarItemTap', ...)

addListener(eventName: 'navbarItemTap', listenerFunc: (event: NativeNavigationBarItemTapEvent) => void) => Promise<PluginListenerHandle>
ParamType
eventName'navbarItemTap'
listenerFunc(event: NativeNavigationBarItemTapEvent) => void

Returns: Promise<PluginListenerHandle>


addListener('tabSelect', ...)

addListener(eventName: 'tabSelect', listenerFunc: (event: NativeNavigationTabSelectEvent) => void) => Promise<PluginListenerHandle>
ParamType
eventName'tabSelect'
listenerFunc(event: NativeNavigationTabSelectEvent) => void

Returns: Promise<PluginListenerHandle>


addListener('safeAreaChanged', ...)

addListener(eventName: 'safeAreaChanged', listenerFunc: (event: NativeNavigationSafeAreaChangedEvent) => void) => Promise<PluginListenerHandle>
ParamType
eventName'safeAreaChanged'
listenerFunc(event: NativeNavigationSafeAreaChangedEvent) => void

Returns: Promise<PluginListenerHandle>


addListener('transitionStart', ...)

addListener(eventName: 'transitionStart', listenerFunc: (event: NativeNavigationTransitionEvent) => void) => Promise<PluginListenerHandle>
ParamType
eventName'transitionStart'
listenerFunc(event: NativeNavigationTransitionEvent) => void

Returns: Promise<PluginListenerHandle>


addListener('transitionEnd', ...)

addListener(eventName: 'transitionEnd', listenerFunc: (event: NativeNavigationTransitionEvent) => void) => Promise<PluginListenerHandle>
ParamType
eventName'transitionEnd'
listenerFunc(event: NativeNavigationTransitionEvent) => void

Returns: Promise<PluginListenerHandle>


Interfaces

NativeNavigationInsetsResult

Returned by methods that may change safe content bounds.

PropType
insetsNativeNavigationInsets

NativeNavigationInsets

Insets exposed to web content.

PropType
topnumber
rightnumber
bottomnumber
leftnumber
navbarHeightnumber
tabbarHeightnumber

NativeNavigationConfigureOptions

Global plugin configuration.

PropTypeDescription
enabledbooleanEnables or disables the native chrome host.
platformStyleNativeNavigationPlatformStyleNative style preference. auto uses the current platform.
contentInsetModeNativeNavigationContentInsetModeWhen css, the plugin writes CSS variables on document.documentElement.
animationDurationnumberDefault native transition duration in milliseconds.
colorsNativeNavigationColorsShared color hints for native bars.
glassNativeNavigationGlassOptionsShared glass background defaults for native bars.

NativeNavigationColors

Native bar colors. Use CSS-style hex strings (#RRGGBB or #AARRGGBB).

PropTypeDescription
dynamicbooleanWhen true, Android 12+ derives unspecified bar colors from Material You system palettes. Explicit color fields still win.
tintstringTint color for active buttons/items.
inactiveTintstringColor for inactive tab items. Ignored on iOS 26+ unless experimentalBakedTintColors is enabled.
backgroundstringOptional background tint. Ignored on iOS 26+ so UIKit can preserve the system Liquid Glass navigation appearance.
foregroundstringTitle and label text color where the native platform supports it.
badgeBackgroundstringBadge background color for native tab badges.
badgeTextstringBadge text color for native tab badges.
indicatorstringActive tab indicator color on Android.
ripplestringTab press ripple color on Android.

NativeNavigationGlassOptions

Native glass background configuration.

PropTypeDescription
effectNativeNavigationGlassEffectliquidGlass enables the Android 12+ live blurred WebView backdrop for native bars. Android 11 and older keep a translucent surface fallback. iOS uses the platform-owned Liquid Glass behavior.
blurRadiusnumberAndroid blur radius in native dp for liquidGlass. Defaults to 18.
surfaceAlphanumberAlpha multiplier for the tint surface over the glass backdrop. Defaults to 0.62.

NativeNavigationNavbarOptions

Native navbar state.

PropTypeDescription
hiddenbooleanHide the native navbar.
titlestringMain title.
subtitlestringSecondary title where supported by the platform.
largebooleanPrefer a large iOS title style.
transparentbooleanPrefer transparent/scroll-edge style.
blurEffectNativeNavigationBlurEffectiOS blur/material effect for the navbar background when glass is not available. Defaults to systemChromeMaterial for transparent bars.
glassNativeNavigationGlassOptionsOptional glass background behavior. Overrides configure({ glass }) for this navbar update.
backButtonNativeNavigationBackButtonBack button state.
leftItemsNativeNavigationBarButton[]Left-side action buttons.
rightItemsNativeNavigationBarButton[]Right-side action buttons.
colorsNativeNavigationColorsNavbar color hints.
animatedbooleanAnimate native navbar changes.

NativeNavigationBackButton

Native back button configuration.

PropTypeDescription
visiblebooleanShow the native back affordance.
titlestringOptional back title.

NativeNavigationBarButton

A button shown in the native navbar.

PropTypeDescription
idstringStable id returned in navbarItemTap.
titlestringVisible text label.
iconNativeNavigationIconNative icon descriptor.
enabledbooleanWhether the action is enabled. Defaults to true.

NativeNavigationIcon

A serializable icon descriptor. Framework nodes are intentionally not accepted because icons are rendered by native UI.

PropTypeDescription
srcstringCross-platform asset path or URL fallback.
svgstringCross-platform inline SVG markup. The native renderers support common icon shapes such as path, line, polyline, polygon, circle, and rect. SVG icons are rendered as template images by default so native tint colors still apply.
widthnumberPreferred rendered icon width in native points/dp. Defaults to 24.
heightnumberPreferred rendered icon height in native points/dp. Defaults to 24.
templatebooleanWhen true, native tint colors are applied to the rendered SVG/image. Defaults to true.
ios{ sfSymbol?: string; image?: string; svg?: string; }iOS-specific SF Symbol, bundled image name, or inline SVG.
android{ resource?: string; image?: string; svg?: string; }Android-specific drawable resource, asset name, or inline SVG.

NativeNavigationTabbarOptions

Native tabbar state.

PropTypeDescription
hiddenbooleanHide the native tabbar.
tabsNativeNavigationTab[]Tab definitions.
selectedIdstringCurrently selected tab id.
labelsbooleanShow text labels. Defaults to true.
labelVisibilityModeNativeNavigationTabLabelVisibilityModeNative label visibility mode. Overrides labels when provided.
iconsbooleanShow icons. Defaults to true.
colorsNativeNavigationColorsTabbar color hints.
blurEffectNativeNavigationBlurEffectiOS blur/material effect for the tabbar background when glass is not available.
glassNativeNavigationGlassOptionsOptional glass background behavior. Overrides configure({ glass }) for this tabbar update.
experimentalBakedTintColorsbooleanOpt into the iOS 26 Liquid Glass tint workaround that renders active and inactive tab items into baked images. This can affect badge positioning and icon sizing, so it is disabled by default.
disableTransparentOnScrollEdgebooleanKeep the iOS scroll-edge tabbar appearance from becoming transparent. Mirrors Expo Router native tabs' disableTransparentOnScrollEdge option. Defaults to false.
disableIndicatorbooleanDisable the Android active tab indicator.
indicatorColorstringActive tab indicator color on Android. colors.indicator is also supported.
rippleColorstringTab press ripple color on Android. colors.ripple is also supported.
badgeBackgroundColorstringBadge background color. colors.badgeBackground is also supported.
badgeTextColorstringBadge text color. colors.badgeText is also supported.
styleNativeNavigationTabbarStyleOptional native tabbar layout and shape customization.
animatedbooleanAnimate native tabbar changes.

NativeNavigationTab

A native tab item.

PropTypeDescription
idstringStable tab id returned in tabSelect.
titlestringVisible tab label.
iconNativeNavigationIconNative icon descriptor.
selectedIconNativeNavigationIconOptional selected-state icon.
badgestring | numberOptional badge. Numeric badges are supported on both platforms; text badge support depends on platform capabilities.
enabledbooleanWhether the tab is enabled. Defaults to true.
hiddenbooleanHide the tab item from the native tabbar. When the hidden tab is selected, native platform constraints may keep it visible until another tab is selected.
roleNativeNavigationTabRoleOptional tab role. On floating tabbars, search (or prominent when available) becomes a detached trailing circular action beside the capsule — including the iOS 26+ system Liquid Glass tab bar, Android floating layout, and the custom floating capsule path. Only one detached trailing role is used; if multiple tabs set search or prominent, the last one wins. Curve-shaped bars ignore role and keep using the included center action. Defaults to normal.

NativeNavigationTabbarStyle

Native tabbar layout and background shape options.

PropTypeDescription
shapeNativeNavigationTabbarShapefloating keeps the capsule tabbar. On iOS 26+ this uses the system-owned Liquid Glass UITabBarController unless a custom capsule path is required; earlier iOS and the custom capsule path use UIGlassEffect on iOS 26+ (blur material fallback otherwise). curve draws a full-width bar with an included center action.
heightnumberBar height in native points/dp. Defaults to 64 for floating and 76 for curve.
horizontalMarginnumberHorizontal margin in native points/dp. Defaults to 24 for floating and 0 for curve.
maxWidthnumberMaximum tabbar width in native points/dp. Defaults to 430 for floating; curve uses the available width unless this is set.
bottomGapnumberBottom gap above the platform safe area in native points/dp. Defaults to 10 for floating and 0 for curve.
cornerRadiusnumberBackground corner radius in native points/dp. Defaults to a capsule radius for floating and 0 for curve.
centerItemIdstringTab id promoted into the included center button for curve. Defaults to the middle tab.
centerButtonDiameternumberIncluded center button diameter in native points/dp. Defaults to 56.
centerButtonLiftnumberDistance from the top of the center button to the top edge of the bar in native points/dp. Defaults to half of centerButtonDiameter.
centerButtonColorstringIncluded center button color. Defaults to the active tint color.
centerButtonIconColorstringIncluded center button icon color. Defaults to white.

NativeNavigationTransitionResult

Native transition result.

PropType
idstring
directionNativeNavigationTransitionDirection
durationnumber

NativeNavigationBeginTransitionOptions

Begin a native transition transaction before JS changes route content.

PropTypeDescription
idstring
directionNativeNavigationTransitionDirection
durationnumber
sourceRectNativeNavigationRectSource rectangle for zoom transitions. Use viewport coordinates such as those returned by Element.getBoundingClientRect().
targetRectNativeNavigationRectDestination rectangle for shared-element-style zoom transitions.
cornerRadiusnumberCorner radius used while animating a zoom transition.

NativeNavigationRect

A rectangle in WebView viewport coordinates, expressed in native points/dp.

PropType
xnumber
ynumber
widthnumber
heightnumber

NativeNavigationFinishTransitionOptions

Finish a native transition transaction after JS has changed route content.

PropTypeDescription
idstring
directionNativeNavigationTransitionDirection
durationnumber
sourceRectNativeNavigationRectSource rectangle for zoom transitions when no active source was recorded.
targetRectNativeNavigationRectDestination rectangle for shared-element-style zoom transitions.
cornerRadiusnumberCorner radius used while animating a zoom transition.

PluginVersionResult

Plugin version payload.

PropTypeDescription
versionstringVersion identifier returned by the platform implementation.

PluginListenerHandle

PropType
remove() => Promise<void>

NativeNavigationBackEvent

PropType
source'navbar'

NativeNavigationBarItemTapEvent

PropType
idstring
titlestring
placement'left' | 'right'

NativeNavigationTabSelectEvent

PropType
idstring
indexnumber
titlestring

NativeNavigationSafeAreaChangedEvent

PropType
insetsNativeNavigationInsets

NativeNavigationTransitionEvent

PropType
idstring
directionNativeNavigationTransitionDirection
durationnumber

Type Aliases

NativeNavigationPlatformStyle

Platform rendering preference for the native bars.

'auto' | 'ios' | 'android'

NativeNavigationContentInsetMode

How the plugin exposes native bar sizes to web content.

'css' | 'none'

NativeNavigationGlassEffect

Native glass background rendering preference.

'none' | 'liquidGlass'

NativeNavigationBlurEffect

Native material/blur effect preference.

'none' | 'systemDefault' | 'extraLight' | 'light' | 'dark' | 'regular' | 'prominent' | 'systemUltraThinMaterial' | 'systemThinMaterial' | 'systemMaterial' | 'systemThickMaterial' | 'systemChromeMaterial' | 'systemUltraThinMaterialLight' | 'systemThinMaterialLight' | 'systemMaterialLight' | 'systemThickMaterialLight' | 'systemChromeMaterialLight' | 'systemUltraThinMaterialDark' | 'systemThinMaterialDark' | 'systemMaterialDark' | 'systemThickMaterialDark' | 'systemChromeMaterialDark'

NativeNavigationTabRole

Native tab role for Liquid Glass tab bars.

search (and prominent when the OS supports it) renders as a detached trailing circular action beside the floating tab capsule — the Apple News / Photos pattern. Only one detached trailing role is used; if multiple tabs set search or prominent, the last one wins. Curve-shaped bars ignore role and keep using the included center action instead.

'normal' | 'search' | 'prominent'

NativeNavigationTabLabelVisibilityMode

Native tab label visibility behavior.

'auto' | 'selected' | 'labeled' | 'unlabeled'

NativeNavigationTabbarShape

Native tabbar background shape.

'floating' | 'curve'

NativeNavigationTransitionDirection

Navigation animation direction.

'forward' | 'back' | 'root' | 'tab' | 'zoom' | 'none'