Skip to main content

Introduction

What is Keywrite?

Keywrite is a JavaScript Input Method Editor (IME) library that enables users to input text in languages that cannot be easily represented on a standard QWERTY keyboard.

Built with flexibility and ease of use in mind, Keywrite allows developers to add multi-lingual typing capabilities to web applications through configurable input methods.

Example: Type "ni" → "ን", "na" → "ና" in Ethiopic script

What is an Input Method Editor (IME)?

An Input Method Editor (IME) is a utility that provides options to input text in languages that use a keyboard layout other than QWERTY. IMEs help users enter text in languages with larger, more complex character sets, such as Ethiopic, Japanese, Chinese, and Korean.

How IMEs Work:

  1. Keystroke Conversion: You type phonetic sounds or Roman characters (e.g., "ni hao")
  2. Character Mapping: The IME converts them into the target script (e.g., 你好)
  3. Visual Feedback: Characters appear on screen as you type

IMEs are essential for languages such as:

  • Ethiopic (Amharic, Tigrinya, Ge'ez)
  • East Asian languages (Chinese, Japanese, Korean)
  • Indic languages (Hindi, Bengali, Tamil)
  • Arabic and Hebrew scripts

Why Keywrite?

Keywrite solves several key challenges when building multi-lingual web applications:

  • No Native Keyboard Support: Many languages lack native keyboard layouts on standard devices
  • Configurable Input Methods: Define custom key mappings for any language or script
  • Easy Integration: Works seamlessly with standard HTML input elements
  • Lightweight: Pure JavaScript with no external dependencies
  • Flexible: Support multiple input methods in a single application

Key Features

  • Configurable Input Methods: Define custom keystroke-to-character mappings
  • Multi-level Key Sequences: Support complex character composition with nested mappings
  • Multiple Input Methods: Switch between different input methods at runtime
  • Standard Element Binding: Works with <input> and <textarea> elements
  • Runtime Control: Enable/disable input methods dynamically
  • Pre-made Input Methods: Available for various Ethiopic languages
  • Extensible Core: Extend the core package for custom implementations