Latin phonetic
Type Khmer the way it sounds using Latin letters. No fixed romanization scheme to learn.
- khnomខ្ញុំ
- sousdeyសួស្តី
A local Khmer input engine and host-adapter layer for browser text fields and structured editors. It accepts phonetic Latin input, Khmer prefixes, loose Unicode sequences, and consonant skeletons, then returns ranked Khmer candidates without sending typed text to a service.
KKeyboard is not a strict transliteration table. It reads whatever you type — Latin or Khmer, complete or partial — and suggests the most likely Khmer words as you go.
Type a few letters, press Enter, and the full Khmer word is inserted. Shown: ខ្ញុំស្រឡាញ់កម្ពុជា (“I love Cambodia”).
Type Khmer the way it sounds using Latin letters. No fixed romanization scheme to learn.
Missing letters and common spelling variants still find the right word.
Short consonant-only forms such as khm or km expand to full Khmer words.
Type only the Khmer consonants and skip subscripts and vowels — KKeyboard fills in the rest.
Incomplete words or Khmer typed in the wrong Unicode order are normalized to the correct form.
Ranked suggestions appear beside the caret while you type, completing the current word. Next-word prediction can be switched on.
Auto mode detects Latin or Khmer input automatically. You can also lock the mode to Latin, Khmer, or Skeleton, and choose a formal or casual register.
This editor uses the packaged Khmer runtime, the React controller, and the Tiptap adapter. Candidate selection is committed through editor transactions so formatting and undo remain intact.
Your typing stays in this browser. The demo does not send your text to Somara.
The engine owns query interpretation and ranking. The host adapter owns document positions, selection, editor events, and text replacement.
Latin text is normalized into phonetic lookup keys. Khmer input is normalized for Unicode order, prefix lookup, and consonant-skeleton matching.
The engine combines reviewed aliases, generated phonetic keys, exact and prefix indexes, fuzzy matches, and skeleton matches.
Candidate scores can include frequency and a bounded local context model. Register can be automatic, formal, or casual.
Only the active composing range is replaced. Tiptap and Lexical commits use native editor transactions rather than DOM mutation.
Enter, Tab, number keys, or pointer selection commit a candidate. Escape dismisses suggestions; Space preserves the user’s text.
Use the ready-made React input or connect the headless controller to an editor adapter. Runtime data is cached in the browser and typed text is not sent to a service.
Ready-made input, headless lifecycle hook, and compact candidate popover.
Maps text offsets to ProseMirror positions and commits with Tiptap transactions.
Commits through Lexical updates and selections; it also supports MDXEditor integrations.
Matching, ranking, Unicode normalization and input sessions.
Browser controller, DOM suggestion list and cached runtime loader.
Versioned offline Khmer runtime bundle and context models.
npm install @kkeyboard/react'use client';
import {useState} from 'react';
import {KKeyboardInput} from '@kkeyboard/react';
import '@kkeyboard/react/styles.css';
export function KhmerInput() {
const [value, setValue] = useState('');
return (
<KKeyboardInput
value={value}
onChange={(e) => setValue(e.target.value)}
placeholder="វាយជាខ្មែរ ឬ khnom"
/>
);
}KKeyboard is free to use but is not open source at this stage. Integration packages and usage terms are available directly from Somara.