react-native-keyboard-controller is a keyboard handling library for React Native developers who need identical keyboard behaviour on both iOS and Android.
What it is
react-native-keyboard-controller is a TypeScript library, MIT-licensed, that gives React Native applications a unified keyboard management layer with smooth, animation-driven behaviour that matches on iOS and Android. It exposes keyboard movement as animated values, ships a set of prebuilt keyboard-aware components, and provides hooks and events for reading keyboard state, all with a developer-oriented API that plugs into Reanimated and works alongside any navigation library.
The concrete problem it solves is that React Native's built-in keyboard handling diverges between platforms: features such as showing and hiding events, soft input mode control, and interactive dismissal behave differently or are unavailable on one side. This project replaces the framework's KeyboardAvoidingView with a reworked version and adds capabilities that neither platform offers out of the box, such as preloading the keyboard to avoid first-time focus lag, changing the soft input mode on Android, and bringing keyboardWillShow / keyboardWillHide events to Android.
Key capabilities
- Map keyboard movement to animated values, with full Reanimated support for driving animations directly from keyboard frames.
- Access
keyboardWillShow / keyboardWillHide events on Android, previously an iOS-only behaviour, and change the soft input mode on Android.
- Use prebuilt components including
KeyboardStickyView, KeyboardAwareScrollView, and the reworked KeyboardAvoidingView.
- Assemble a
KeyboardToolbar with customisable previous, next, and done buttons, and retrieve focused input information easily.
- Render arbitrary content over the keyboard without dismissing it through
OverKeyboardView, and match the keyboard's appearance with KeyboardBackgroundView.
- Extend the keyboard with custom buttons and UI via
KeyboardExtender, and enhance its presentation with KeyboardEffects.
- Dismiss the keyboard interactively with a gesture, and preload the keyboard to eliminate the lag that appears on first focus.
Who uses it and how
- Teams building chat interfaces, from messenger-style conversations to AI chats, rely on
KeyboardChatScrollView to keep the input visible as messages stream in.
- Apps that must keep a focused field or a surrounding view clear of the keyboard use
KeyboardAvoidingView and KeyboardAwareScrollView rather than hand-rolling per-platform offsets.
- Developers working across both platforms use the identical event model so that keyboard animations, focus tracking, and toolbar placement behave the same on iOS and Android.
- Projects that customise keyboard appearance layer
KeyboardBackgroundView, KeyboardExtender, and KeyboardEffects over the system keyboard to add their own controls.
Getting started
The README directs you to the installation section of the documentation at https://kirillzyusko.github.io/react-native-keyboard-controller/docs/installation for the detailed, platform-specific setup steps, with the full API reference and guides hosted on the same site.
How it compares
react-native-keyboard-controller sits directly above React Native's built-in KeyboardAvoidingView, which it reworks and supersedes with a single component set that behaves identically on both platforms. Where the built-in component leaves gaps — missing keyboardWillShow / keyboardWillHide on Android, no interactive dismissal, no preload — this library supplies them as first-class features rather than platform-specific workarounds.
When to use it — and when not
Because it is a native module for iOS and Android, a self-hoster or app team must complete the per-platform installation described in the documentation rather than dropping in a pure-JavaScript package, and there is no hosted service, database, storage, or SMTP component involved. The project carries 127 open issues, which suggests that edge cases on particular device or framework combinations may still be under active resolution, so teams on unusual setups should verify the behaviour they depend on. It is a poor fit for projects that only need simple keyboard avoidance on a single platform, where the framework's own component may be sufficient.