Skip to main content

Version 1.23 โ€” precise input tracking, fewer preload artifacts, and transparent KeyboardExtender ๐ŸŽฏ

ยท 4 min read
Kirill Zyusko
Library author

1.23.0 is intentionally a small release. There is no big new component this time โ€” instead it makes KeyboardAwareScrollView track the focused input more precisely, removes the remaining visual artifacts of the keyboard preload, and lets KeyboardExtender drop its background.

๐ŸŽฏ More precise focused input trackingโ€‹

KeyboardAwareScrollView scrolls to the caret of the focused input, so its accuracy depends entirely on how precisely the native side reports where that caret is. This release reworks how iOS collects this information: iOS now reports geometry similar to Android, and KeyboardAwareScrollView becomes more consistent across platforms.

bottomOffset and paddingTop

Previously, on iOS the caret position of a single-line TextInput ignored its paddingTop, so the caret was reported higher than it really was. Because of that KeyboardAwareScrollView stopped scrolling a bit too early and the text could end up under the keyboard. If you compensated for that with a bigger bottomOffset, you may now be able to reduce it on iOS.

๐Ÿงน preload with fewer artifactsโ€‹

KeyboardProvider preloads the keyboard on iOS by default to remove the lag of the very first focus. Some developers reported that the preload itself could be visible: the keyboard flashed over the first screen when the app was launched from Spotlight with the Spotlight keyboard still open. This is fixed in 1.23.0.

If you disabled preload or called KeyboardController.preload() manually at a "safe" moment to work around these artifacts, give the default behavior another try:

-<KeyboardProvider preload={false}>
+<KeyboardProvider>

If you still see the keyboard flashing or any other side effect โ€” please open an issue with the steps to reproduce it. I'd like to fix the remaining cases.

โฌœ transparent prop for KeyboardExtenderโ€‹

KeyboardExtender always wrapped its content in a keyboard-styled container: a full-width glass capsule on iOS 26+, and a keyboard background on earlier iOS versions and Android. That's a good default for a bar with several controls, but not for a lone control that should sit on the keyboard on its own โ€” a floating "Done" pill like the native UIToolbar draws for a single trailing item, or a row of buttons similar to the ones WhatsApp attaches to the keyboard in its image editor:

The new transparent prop removes that container, so your content draws its own surface:

import { KeyboardExtender } from "react-native-keyboard-controller";

function DoneExtender() {
return (
<KeyboardExtender transparent>
<DonePill />
</KeyboardExtender>
);
}
  • iOS 26+: the glass capsule is skipped, the content keeps the same offset above the keyboard.
  • iOS < 26: no keyboard background is drawn behind the content.
  • Android: the keyboard background view is skipped.

The prop defaults to false, so nothing changes for existing usages, and it can be toggled at runtime โ€” even while the keyboard is open. Thanks to kylesuss for proposing and implementing it (#1714). You can read more on the KeyboardExtender API page.

๐Ÿค” What's next?โ€‹

With the era of AI I've started to receive more bug reports โ€” and I actually like it. Now I can be confident that every next release produces fewer and fewer bugs and the package handles even more edge cases. Open issues remain my top priority:

  • Issues with more ๐Ÿ‘ reactions are prioritized first โ€” that's how I track what matters most to the community.
  • Issues labeled "sponsor ๐Ÿ’–" receive highest priority as part of dedicated sponsor support.

I'm also working on new exciting features and will be publishing previews of how they work on Twitter, so don't forget to subscribe.

Stay tuned and follow me on Twitter and GitHub for updates. Thank you for your support! ๐Ÿ˜Š