K Kibo Get Kibo

Why a third-party keyboard lags the first time it opens

The extension is a separate process that iOS starts on demand and unloads when the keyboard hides, so the first appearance in a session pays for a launch the later ones do not.

The first time a third-party keyboard appears in a session it has to be launched as a process, and every appearance after that skips most of that work — the gap between the two is what people describe as lag.

A keyboard is a separate process, started on demand

A keyboard app is really two things: the app on your Home Screen, and a keyboard extension shipped inside it. The extension is not part of the app you are typing in, and it is not part of the app it was installed with. It is its own process, and iOS starts it only when a text field asks for a keyboard, then shuts it down again when the keyboard is dismissed.

A cold start therefore has real work to do before a single key can be drawn:

The second time you tap a field in the same session, most of that is already resolved. The process may still be alive, and what the system keeps cached for a recently used extension means the same work does not repeat from scratch. That is the whole of the difference between the first appearance and the rest.

Why some cold starts are worse than others

After a reboot

Nothing is in the file cache. Frameworks that would otherwise already be resident have to be read from storage, and the first launch of anything on a freshly booted phone is competing with everything else the system is doing at that moment.

After an app update

A new binary invalidates the caches built around the old one, and code is revalidated the first time it runs. The first keyboard appearance after an update is effectively a first-ever launch again. It is also why a keyboard sometimes behaves oddly exactly once after its app has updated in the background, then is fine.

Under memory pressure

Keyboard extensions run under a far tighter memory limit than ordinary apps — tens of megabytes rather than hundreds. When the phone is short of memory the extension is unloaded sooner and more often, so every appearance becomes a cold one. A keyboard sitting close to the limit can be terminated outright, which shows up as the keyboard flashing onto the screen and reverting to Apple’s mid-sentence.

What a keyboard can do about it, and what it cannot

The controllable part is almost entirely about how much work happens before the first frame is drawn.

What no keyboard can do is stay warm. It cannot run in the background, cannot ask iOS to keep it resident, cannot pre-launch itself before you tap a field, and cannot raise its memory limit. Those are system decisions and every third-party keyboard on iOS lives inside the same ones. A keyboard that never cold started would be a keyboard running while you are not typing, which is precisely what the design prevents.

A fraction of a second on the first appearance is normal and structural. What is not normal is that pause repeating on every appearance, or the keyboard showing and then vanishing — both point at the memory limit rather than at launch cost, and closing background apps is the quickest way to tell the two apart.

Where Kibo fits

Kibo is built around that budget rather than against it. The emoji and kaomoji panels are text rather than image assets, so there are no sprite sheets to decode on launch. The backlight effects are drawing code applied to key views that already exist, not stored animation frames. Photo backgrounds are downsampled once in the main app, so the extension never opens a full-size image.

The practical result is that a cold start reads one theme, one sound set and the languages actually enabled, rather than an entire library, and the keyboard has less to unload and reload when memory gets tight. The launch itself still belongs to iOS — that part is the same for every keyboard on the platform.

Frequently asked questions

Why is my keyboard slow only the first time and fine afterwards?

The extension is a separate process that iOS launches when a text field needs it. The first appearance pays for the process launch, reading settings, loading assets and laying out the keys; later appearances reuse work that is already done.

Why is it slower after restarting my iPhone?

A reboot clears the file caches, so frameworks and assets have to be read from storage again, and the first launch competes with everything else the system is starting at the same time.

My keyboard appears and then instantly disappears. Is that the same thing?

No. That pattern is the extension being terminated for exceeding the keyboard memory limit, not a slow launch. Closing background apps and turning off any photo background usually resolves it.

Can a keyboard preload itself so it is always fast?

No. Keyboard extensions cannot run in the background or keep themselves resident. A keyboard that was always warm would be one running while you are not typing, which iOS deliberately does not allow.

Try it on your own keyboard

Kibo is a free custom keyboard for iPhone with real mechanical key sounds, a wardrobe of themes and RGB backlight effects. No account, no ads, and it works with Full Access left off.

Download on the App Store

Related guides

All guides