Real React Native
Hermes + JSI + Fabric, hosted live inside the Android IME process and iOS's Custom Keyboard Extension. Not a schema interpreter, not a compiled subset — your actual component tree, rendered by Fabric.
One component, both platforms
Write View/Text/TouchableOpacity once. The exact same file runs on Android and iOS — no per-platform reimplementation, no native Kotlin or Swift UI code to maintain.
Any language, any script
commitText takes a plain Unicode string. Bangla, Arabic, Devanagari, CJK, and right-to-left layouts are first-class, not an afterthought bolted on for English.
Gestures & prediction, built in
Swipe-typing key-path matching and a pluggable word-prediction interface ship in the same package — bring your own dictionary or frequency model.
Get started in minutes
Four steps, and both platforms are running your keyboard.
Install
One package. JS bridge, native modules, and the iOS setup CLI all ship together.
yarn add react-native-keyboard-bridge
Write your keyboard
Register a plain component under the fixed name KeyboardApp.
import { AppRegistry } from 'react-native';
import KeyboardApp from './src/keyboard/KeyboardApp';
AppRegistry.registerComponent('KeyboardApp', () => KeyboardApp);
Wire up iOS
Apple requires a distinct App Extension target — one CLI command scaffolds it.
npx react-native-keyboard-bridge setup-ios
npx react-native-keyboard-bridge build-keyboard
Let users enable it
Prompt from your own app screen — neither platform allows a silent switch.
import { openInputMethodSettings } from 'react-native-keyboard-bridge';
<Button title="Enable keyboard" onPress={openInputMethodSettings} />
Works in every language, natively
commitText takes a plain Unicode string — no transliteration layer, no script whitelist, no special-casing for right-to-left.
commitText('বাংলা')commitText('العربية')commitText('हिन्दी')commitText('中文')commitText('Русский')commitText('English')How it works
The same live surface, hosted the native way each platform expects.
| Android | iOS | |
|---|---|---|
| Runtime | Real React Native (New Architecture, ReactHost) | Real React Native (New Architecture, RCTReactNativeFactory) |
| Your component | Runs live, unmodified | Runs live, unmodified |
| Rendering | Fabric, same as any RN screen | Fabric, same as any RN screen |
| Text editing | InputConnection | UITextDocumentProxy |
| Bridge module | KeyboardBridgeModule.kt | KeyboardBridgeModule.swift |
| Native module setup | Autolinked automatically | One-time setup-ios CLI command |
| Host process | InputMethodService | Custom Keyboard App Extension |
No native UI code to maintain
The Kotlin/Swift side only wires up a runtime and a text-editing bridge — every pixel comes from your JS.
One JS bundle, two hosts
The same registered "KeyboardApp" component is requested by ReactHost on Android and RCTRootViewFactory on iOS.
Autolinked where possible
Android needs zero manual wiring. iOS needs one Xcode App Extension target — Apple requires it, so one CLI command scaffolds it.
Ready to build your keyboard?
One install. Real React Native. Live on both platforms.