react-native-keyboard-controller is a free, open source design & prototyping project written in TypeScript and released under MIT. It has 3,740 GitHub stars, 202 forks and 127 open issues, and was last pushed 33 hours ago. On this registry it ranks #51 of 85 tracked projects in Design & Prototyping, with 5 head-to-head comparisons available.

What is react-native-keyboard-controller?

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.

project readme (upstream, from github) — read inline

react-native-keyboard-controller

A universal keyboard handling solution for React Native — lightweight, fully customizable, and built for real-world apps. Smooth animations, consistent behavior on both iOS and Android, with a developer-oriented design.

Key features

  • 🧬 Map keyboard movement to animated values
  • 🧪 keyboardWillShow / keyboardWillHide events now available on Android
  • 🔮 Change soft input mode on Android
  • ⚡ Preload keyboard to avoid first-time focus lag
  • 🚀 Reanimated support
  • 📱 Interactive keyboard dismissing 👆📱
  • 📚 Prebuilt components (KeyboardStickyView, KeyboardAwareScrollView, reworked KeyboardAvoidingView)
  • 📐 KeyboardToolbar with customizable previous, next, and done buttons
  • 🌐 Display anything over the keyboard (without dismissing it) using OverKeyboardView
  • 🎨 Match keyboard background with KeyboardBackgroundView
  • 🧩 Extend keyboard with custom buttons/UI via KeyboardExtender
  • 🌈 Enhance keyboard UI with KeyboardEffects
  • 💬 Build chat interfaces (messenger and 🤖 AI chats) easily with KeyboardChatScrollView
  • 📝 Easy retrieval of focused input info
  • 🧭 Compatible with any navigation library
  • ✨ More coming soon... stay tuned! 😊

Installation

Check out the installation section of the docs for detailed setup instructions.

Documentation

Full API reference and guides available at:
https://kirillzyusko.github.io/react-native-keyboard-controller/

Contributing

See the contributing guide to learn how to contribute to the repo and development workflow.

License

MIT

Frequently asked questions

Is react-native-keyboard-controller free to use?

react-native-keyboard-controller is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does react-native-keyboard-controller do?

⌨️ Keyboard manager which works in identical way on both iOS and Android

What is react-native-keyboard-controller written in?

react-native-keyboard-controller is primarily written in TypeScript. Its source is publicly available at https://github.com/kirillzyusko/react-native-keyboard-controller, and it has 3,740 GitHub stars.