Android Native Kotlin Jetpack Compose

Pastel Keyboard App for Android

About this project

Pastel Keyboard is a lightweight, fully offline custom Android keyboard (IME) built entirely with Kotlin and Jetpack Compose. It comes with five handcrafted pastel themes, smart action-key detection, accurate auto-capitalization, an emoji keyboard, and word suggestions. It behaves correctly in real messaging apps like WhatsApp, with no network permissions and no data collection.

Objectives

Build a good-looking custom keyboard that behaves correctly in real apps (for example, showing a real Enter key in multi line chat boxes), while staying light, fast, and private.

Key Features

  • 5 pastel themes
  • Smart typing & auto-capitalization
  • Emoji keyboard & word suggestions
  • Adjustable keyboard height
  • Sound & haptic feedback
  • Smart Enter/Send/Search actions
  • 100% offline & privacy-focused

Development Process

  1. Built with AI assistance
  2. Manually reviewed and refined the IME behavior
  3. Tested in real messaging apps like WhatsApp

Challenges & Solutions

  • Correct action key per field: Reading the field's IME options and input type so chat boxes get a real Enter or Send key instead of always showing "Done"
  • Accurate auto-capitalization: Using the field's input type and cursor position, with a reliable single-tap Shift and double-tap Caps Lock
  • Compose inside a keyboard: Rendering the full Compose UI inside an InputMethodService using ComposeView

Technologies & Frameworks

Jetpack ComposeMaterial 3SplashscreenCoroutines

Integrations & APIs

Android InputMethodServiceInputConnectionEditorInfo input typesSystem keyboard settings shortcuts

Architecture & Libraries

  • Jetpack Compose
  • DataStore
  • Coroutines
  • StateFlow
  • Material 3
  • AndroidX Core Splashscreen

Backend & Database

  • No backend: 100% offline, no network permissions
  • DataStore Preferences for theme, height, sound, haptics, and popup settings

Outcomes & Results

  • Working custom keyboard with themes, emoji, suggestions, and settings
  • Correct behavior in real messaging apps
  • Privacy-first: no network permissions, no data collection

Need something similar?

Farhan Saeed · Available for new projects