Tab navigation is a solved problem — until it isn't. Most navigation libraries handle the basics. Few handle them the way users actually expect.
InstaNav is a Kotlin Multiplatform (KMP) library built to replicate the tab navigation behavior found in apps like Instagram and YouTube. It targets Android, JVM, and other Kotlin-native platforms. The pitch is straightforward: bring the familiar, fluid tab-switching experience of major consumer apps to your own Compose Multiplatform project.
But does it deliver? Here's what you need to know before you add it to your stack.
Most navigation libraries give you tabs. InstaNav gives you tabs that behave the way users expect them to.
The difference is in the back stack. Standard navigation implementations reset a tab's state when you leave it or collapse the entire back stack in ways that feel jarring. InstaNav maintains an independent stack per tab. Switch tabs, navigate deep into one, come back — your state is exactly where you left it.
This is the behavior Instagram, YouTube, and most major consumer apps use. Users have been trained to expect it. When your app doesn't match it, the friction is subtle but real.
You don't need to architect around InstaNav. You drop it in and configure it.
The library exposes a clean API for defining your tab structure, managing the active tab, and handling back navigation across stacks. For teams already working in Compose Multiplatform, the integration maps directly onto existing patterns. There's no parallel routing system to learn, no competing abstractions to reconcile.
For a new project, you can have a working multi-tab navigation structure running in under an hour.
Back navigation in multi-tab apps is where most libraries cut corners. InstaNav treats it as a first-class concern.
When a user presses back, InstaNav navigates within the current tab's stack before exiting the tab. When that stack is exhausted, it handles tab exit behavior consistently. You define the rules; InstaNav enforces them.
This matters most on Android, where the system back button creates behavioral expectations that differ from iOS swipe-back gestures. InstaNav accounts for both contexts within its KMP architecture.
Some "multiplatform" libraries are Android libraries with a thin wrapper. InstaNav is built as a KMP library from the ground up.
It targets Android, JVM, and Kotlin/Native. For teams building cross-platform apps with Compose Multiplatform, this means consistent navigation behavior across targets without platform-specific workarounds. You write the navigation logic once. It runs the same way everywhere you deploy.
This is a meaningful distinction if your project spans more than one platform.
InstaNav does one thing. That's a feature, not a limitation.
The library doesn't bundle analytics, deep link resolution, transition animations, or route serialization. If you need those, you add them yourself — or use purpose-built tools alongside InstaNav. What you get is a focused, low-overhead dependency that handles tab stack management without expanding your project's footprint unnecessarily.
For teams that have been burned by heavyweight navigation dependencies that shipped with assumptions baked in, this is a meaningful advantage.
InstaNav is not a mature, enterprise-backed navigation framework. It's an open-source library maintained by an individual developer.
That means the feature surface is narrower than alternatives like Jetpack Navigation or Decompose. Documentation exists, but it's concise rather than exhaustive. Community resources — tutorials, Stack Overflow answers, third-party integrations — are limited compared to more established options.
If your project requires advanced features like animated transitions between routes, nested navigation graphs, or deep link handling, you'll be building those on top of InstaNav rather than pulling them from it.
Jetpack Navigation handles complex navigation graphs with deep link support and official Google backing. Decompose offers full lifecycle-aware navigation with state preservation across the component tree. Voyager provides a broader navigation API for Compose Multiplatform teams.
InstaNav doesn't compete directly with any of them. It solves a narrower problem — consumer-grade tab navigation with proper back stack management — and solves it with less configuration than any of the alternatives require for the same outcome.
The right question isn't whether InstaNav beats Jetpack Navigation. It's whether InstaNav handles your specific use case faster and more cleanly than the alternatives. For tab-based apps targeting Compose Multiplatform, the answer is often yes.
The use case is specific. InstaNav is the right choice if you are:
Building a Compose Multiplatform app with a primary tab-based navigation structure
Frustrated by the back stack behavior of existing solutions
Looking for a focused dependency that doesn't force architectural trade-offs
Working on a consumer-facing app where familiar navigation patterns matter
It's not the right choice if you need deep link handling, complex nested navigation, or a library with extensive community documentation.
InstaNav is not a universal navigation solution. It's a targeted tool that handles one category of navigation problem better than most of its alternatives.
If your app uses tab navigation and you want the back stack to behave the way users expect from Instagram or YouTube, InstaNav delivers that with minimal setup and genuine KMP support. For that use case, it's hard to beat.
Evaluate your navigation requirements first. If tab stack management is the pain point, InstaNav belongs in your project. If your requirements extend beyond that, consider using it alongside a broader routing solution — or evaluate whether a more full-featured library handles your entire surface area.
The library is open source and available on GitHub and Maven Central. Review the source, check the version history, and test it against your target platforms before committing. For a focused dependency, the overhead of that evaluation is low.