Skip to content
WebViewGold Vibe Coding to App Store
English
Get WebViewGold

Bolt + navigation

Native tab bar and navigation for your Bolt app

A hamburger menu and a website header are the fastest way to make a Bolt app feel like a bookmark, and that is exactly what reviewers judge under Guideline 4.2. WebViewGold adds a native tab bar or sidebar on iOS and a Material bottom navigation or drawer on Android, each configured in one file, while your web app keeps doing the routing.

From $109 one-time per platform, or let our team do it all from $698.

  • Approval guarantee – or money back within 14 days
  • No coding needed
  • One-time payment, free updates
  • 24/7 human support
  • Made in Germany since 2014 · ISO 27001

Four native navigation options

All four load a URL of your web app in the main WebView when tapped, so nothing about your routing changes. Pick one primary pattern per platform.

iOS tab bar (navigation footer)

Set showNavFooter to true in Config.swift and describe three to five tabs in FooterBar.json: a label (name), an SF Symbol (sf_symbol) and the URL the tab opens (redirection_link), plus colour dark or light for the whole bar.

iOS sidebar

Set enableSidebar to true and fill Sidebar.json with the same fields. A floating button opens a native sliding menu, handy when you have more sections than fit in a tab bar. It works alone or next to the footer (sidebar docs).

Android bottom navigation

ENABLE_NAVIGATION_FOOTER in Config.java adds a Material 3 bottom navigation bar. Its entries, icons and labels come from res/menu/menu_drawer.xml; Google recommends three to five top-level destinations. Dark and light mode follow the system automatically.

Android navigation drawer

ENABLE_NAVIGATION_DRAWER adds a floating menu button that opens a Material drawer, driven by the same menu file. Bottom navigation and drawer can run together, for example main sections below and settings, help and legal pages in the drawer.

Prompt for Bolt

Paste this into Bolt to implement the web-app side. Review the result, publish, then test inside the WebViewGold app.

Prompt to paste into Bolt
Prepare the navigation of this app for a native wrapper (WebViewGold) that provides its own bottom tab bar. Inside the wrapper, navigator.userAgent contains "WebViewGold".
1. Add public/_redirects with the line /* /index.html 200 so every route loads directly on Netlify, and confirm that every top-level route renders the right screen on a hard refresh.
2. Create src/lib/native.ts with isNativeApp() and use it to skip the top navigation bar, the mobile hamburger menu and the footer inside the app.
3. List the four or five top-level routes with a suggested SF Symbol name for each (for example house, magnifyingglass, bell, person.crop.circle) so I can copy them into FooterBar.json.
4. Add a back button to every detail screen header that uses history back when there is history and the parent route otherwise.
5. After login, return the user to the route they originally requested instead of always opening the dashboard.
Keep the browser experience exactly as it is.

I am very happy I bought this app! Extremely easy and great documentation. Was in contact with the customer service, they replied very quickly and very friendly. They solved my question within a day. 10/10 would recommend.

Nelis Geiger · CodeCanyon

Native bar, web tab bar or website menu?

Native bar (WebViewGold)Tab bar built in the web appWebsite header with hamburger
Looks likeThe system: SF Symbols on iOS, Material 3 on AndroidWhatever you design, matched to your brandA mobile website
Where you change itFooterBar.json, Sidebar.json, menu_drawer.xml; ships with a store updateIn your web app, live with every deployIn your web app
Home indicator and safe areaHandled nativelyNeeds env(safe-area-inset-bottom) paddingOften hidden behind the home indicator
What a tap doesLoads the tab URL in the WebView (a page load)Client-side route change; instant, keeps stateOpens a menu first, then navigates
Best forThree to five stable top-level sectionsSections that change often, badges and countersThe website only; hide it inside the app

Add a native tab bar to a Bolt app

About 30 minutes for both platforms, plus a rebuild.

  1. Pick three to five destinations

    Typically Home, a main list or search, an inbox or create action, and Account. Everything else lives inside those sections. Each destination needs its own URL in your Bolt app that opens the right screen when loaded directly, not only through in-app clicks.

  2. iOS: write FooterBar.json

    Set showNavFooter to true and add one entry per tab with name, sf_symbol (for example house, magnifyingglass, tray, person.crop.circle) and the full redirection_link on your production domain. Set colour to match your theme. Reference: iOS documentation.

  3. Android: fill menu_drawer.xml

    Set ENABLE_NAVIGATION_FOOTER (bottom bar) or ENABLE_NAVIGATION_DRAWER (side drawer) to true in Config.java, define items, icons and labels in res/menu/menu_drawer.xml and assign each entry its URL as shown in Android documentation.

  4. Hide the web navigation inside the app

    Set a custom user agent with a token such as "WebViewGold" in Config.swift (useragent_iphone, useragent_ipad) and Config.java (USER_AGENT), then stop rendering the website header menu, hamburger and footer link columns when your Bolt app detects it. Two navigation systems on one screen are the most common design remark.

  5. Give detail pages a back button

    iPhones have no system back button. Tabs open the sections; pages reached from them need a visible back arrow in your header. Leave enableswipenavigation on so the iOS edge swipe goes back too; Android users also have the system back gesture.

  6. Test every tab cold and logged out

    Tap each tab right after launch, after login and after the session expired. A tab that redirects to the login page should bring the user back to that tab afterwards, not to the dashboard.

FooterBar.json for a typical app

Replace the URLs with the routes of your Bolt app on your production domain. Sidebar.json uses the same structure. Check icon names in Apple's SF Symbols app.

json
{
  "colour": "light",
  "layout": [
    { "redirection_link": "https://app.yourdomain.com/", "sf_symbol": "house", "name": "Home" },
    { "redirection_link": "https://app.yourdomain.com/search", "sf_symbol": "magnifyingglass", "name": "Search" },
    { "redirection_link": "https://app.yourdomain.com/inbox", "sf_symbol": "tray", "name": "Inbox" },
    { "redirection_link": "https://app.yourdomain.com/account", "sf_symbol": "person.crop.circle", "name": "Account" }
  ]
}

Navigation mistakes reviewers notice

  • A native tab bar plus the website header with its own menu: the app looks unfinished. Hide one of them inside the app.
  • Tabs pointing at a preview or staging address, or at routes that return a 404 on a direct load. Open every tab URL in a fresh browser tab before you build.
  • More than five tabs, or tabs that open external sites. Keep tabs for your own top-level sections; legal and help pages go to the sidebar or drawer.
  • A layout that still expects the website footer for key links such as account deletion or privacy. Make sure those stay reachable inside the app, for example under Account.
  • Relying on the tab bar alone for Guideline 4.2. It helps the app feel native; push notifications, an offline screen and an app-like layout complete the picture (see the 4.2 guide).

Frequently asked questions

Do I need a native tab bar to pass App Store review?

No single feature is required. Guideline 4.2 asks whether the app offers more than a repackaged website, and 4.0 whether it follows iOS design conventions. A native tab bar is one of the clearest signals for both, especially next to push notifications and a proper offline screen, but it does not replace a mobile-friendly web app.

Can I change the tabs without a store update?

Not for the native bar: FooterBar.json, Sidebar.json and menu_drawer.xml ship inside the build. The pages behind the tab URLs update with every deploy. If your sections change often, build the tab bar in your web app instead and show it only inside the app.

Does the native tab bar work with single-page apps?

Yes. Each tab loads its URL in the WebView, so your hosting must answer every route with the app (an SPA fallback to index.html) and your router must open the right screen on a direct load. Test it by pasting a tab URL into a fresh browser tab.

Should I use the footer, the sidebar or both?

Use the footer for three to five main sections. Add the iOS sidebar or the Android drawer for secondary destinations such as settings, help and legal pages. Do not repeat the same links in both.

What happens to the menu Bolt generated?

Keep it for the website and skip it inside the app with a user-agent check. In the app the native bar takes over; a second menu icon in the header confuses users and reviewers.

Three ways to get your app into the stores

Same result, different amount of work on your side. All three come with the approval guarantee and 24/7 human support.

Do it yourself

$109 per platform, one-time

The WebViewGold license: a finished Xcode or Android Studio project. Paste your URL, set name and icon, switch on features, build and submit. Free updates forever.

See plans on the main page

Cloud Builder

$349 per license, one-time add-on

No Mac, no Xcode, no Android Studio: configure in the browser, we build both apps in the cloud and hand them to App Store Connect and the Play Console.

How the Cloud Builder works Try the free demo

Full Service

$698 per platform $798

Send us your URL and icon. Our team configures, builds and delivers your app within 72 hours, white-label, with source projects. Both platforms for $1,158.

Full Service details Powered by WeSetupYourWebViewApp

Winter Sale prices valid until December 31, 2026.

Ready to ship your Bolt app?

App Store & Google Play approval guarantee – or your money back within 14 days

Rather hand it over? Full Service: we configure, build and deliver within 72 hours, from $698 per platform. Questions? Chat with us 24/7.

Refunds are granted under the conditions listed in our FAQ: a non-content rejection by Apple and/or Google, claimed within 14 days after purchase.