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:
- Keystroke Conversion: You type phonetic sounds or Roman characters (e.g., "ni hao")
- Character Mapping: The IME converts them into the target script (e.g., 你好)
- 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