Skip to content

Release 3.0.0

Latest

Choose a tag to compare

@kadiraydinli kadiraydinli released this 30 Jul 21:54

v3 is a full rewrite on React Native's New Architecture. The Android module moved from Java to Kotlin built on WindowInsetsControllerCompat, the API was redesigned around a smaller and more consistent surface, and iOS is supported for the first time.

Breaking changes

  • Requires React Native 0.76 or newer with the New Architecture enabled. Projects still on the legacy architecture should stay on 2.8.0.
  • getBarColor() no longer takes a bar argument and always resolves { status, navigation }.
  • lowProfile() is removed. The dimmed-bar mode it wrapped no longer exists on supported Android versions.
  • Every other v2 method still works as a deprecated alias with a one-time dev warning, and will be removed in v4. The README has a migration table.

API

hide · show · setImmersive · setBarStyle · setBarColor · getBarColor · setDividerColor · setContrastEnforced · setEdgeToEdge · isEdgeToEdgeEnabled · getNavigationMode

Colors now accept any React Native color value, and translucency is an explicit translucent option rather than a magic 'translucent' string. setImmersive replaces the four separate mode functions and can also leave a mode. Two new queries, isEdgeToEdgeEnabled and getNavigationMode, let you branch on what the device is actually doing.

iOS

The package previously shipped no iOS code. It now controls the two things iOS exposes — the home indicator and the bottom-edge system gesture — through setHomeIndicatorAutoHidden and setSystemGesturesDeferred. No AppDelegate changes or view controller subclassing required.

These are deliberately separate: UIKit ignores gesture deferral while the home indicator is auto-hidden, so one combined method could not express both behaviours.

Fixes

  • Concurrent calls could settle the same promise twice and crash the app (#64)
  • Hidden bars came back on any screen tap instead of staying hidden (#56)
  • Bar colors appearing not to apply on Android 15+ is enforced edge-to-edge, now documented with what each navigation mode does (#65)
  • Translucent and transparent are no longer conflated (#49)

Android 15+

Devices running Android 15 or newer with targetSdk 35+ are edge-to-edge by force. In three-button mode the system composites your bar color as a translucent scrim; in gesture mode it ignores the color entirely. This is a platform decision, not a library limitation — the README explains what still works and what does not.

Install

npm install react-native-system-navigation-bar
# or
yarn add react-native-system-navigation-bar