A custom iOS keyboard extension for typing Armenian (հայերեն) with a standard Armenian layout and a word suggestion bar. It supports Eastern and Western Armenian and is published on the App Store by Analysta.
- System-wide keyboard that works in all iOS apps
- Standard Eastern Armenian phonetic layout with a numbers and punctuation layer
- Word completion while typing and next-word prediction after a space
- Eastern and Western Armenian as two keyboards, Armenian (Eastern) and Armenian (Western), with identical keys and dialect-specific suggestions
- On-device learning of the words you type and accept, kept per keyboard
- Emoji keyboard
- Native iOS appearance with light and dark mode support
- All processing happens on the device; no network access
- iOS 15 and later
- Xcode 15.0 or later
- iOS 15.0 or later
- macOS for development
-
Open the project in Xcode:
open ArmenianKeyboard.xcodeproj
-
Select your development team:
- Click on the project in the navigator
- Select both targets (ArmenianKeyboard and ArmenianKeyboardExtension)
- Under "Signing & Capabilities", select your team
-
Update the bundle identifiers if you are building your own copy:
- Main app:
io.analysta.ArmenianKeyboard - Eastern keyboard:
io.analysta.ArmenianKeyboard.Extension - Western keyboard:
io.analysta.ArmenianKeyboard.WesternExtension
- Main app:
-
Build and run on a physical device. Keyboard extensions cannot be fully tested in the simulator.
- After installing the app, go to Settings > General > Keyboard > Keyboards
- Tap Add New Keyboard...
- Select Armenian (Eastern) or Armenian (Western) under Third-Party Keyboards. Add both to switch between dialects.
- To use a keyboard, tap and hold the globe key and select it
The keyboard does not request Full Access. Suggestions and learning work without it.
ArmenianKeyboard/
├── ArmenianKeyboard/ # Container app (SwiftUI)
│ ├── ArmenianKeyboardApp.swift # App entry point
│ ├── ContentView.swift # Setup status
│ ├── OnboardingView.swift # Setup instructions
│ ├── AboutView.swift # About and credits
│ ├── AppChrome.swift # Shared app styling
│ └── Info.plist # App configuration
│
├── ArmenianKeyboardExtension/ # Keyboard extensions (UIKit); one source tree, two targets
│ ├── KeyboardViewController.swift # Main keyboard controller
│ ├── ArmenianKeyboardLayout.swift # Key layout definitions
│ ├── ArmenianKeyboardView.swift # Keyboard UI
│ ├── EmojiKeyboardView.swift # Emoji layer
│ ├── SuggestionBar.swift # Word suggestion bar
│ ├── ArmenianWordPredictor.swift # Prediction logic
│ ├── NGramPredictor.swift # Next-word n-gram model
│ ├── ContextTracker.swift # Tracks recent words for context
│ ├── UserLearningStore.swift # On-device learned words
│ ├── DialectSettings.swift # Which dialect this bundle was built for
│ ├── Trie.swift # Prefix lookup (Eastern)
│ ├── SortedWordList.swift # Prefix lookup (Western)
│ ├── ArmenianDictionary.swift # Eastern word list
│ ├── armenian_ngram.json # Eastern n-gram model
│ ├── western_words.tsv # Western word list
│ ├── western_ngram.json # Western n-gram model
│ ├── Info.plist # Armenian (Eastern) configuration
│ └── Info-Western.plist # Armenian (Western) configuration
│
└── docs/ # Project website and privacy policy
The keyboard uses the standard Eastern Armenian phonetic layout:
Row 1: է թ փ ձ ջ ր չ ճ ժ ծ Row 2: ք ո ե ռ տ ը ւ ի օ պ Row 3: ա ս դ ֆ գ հ յ կ լ խ Row 4: զ ղ ց վ բ ն մ շ
The numbers layer includes Armenian punctuation (։ ՝ ՞ ՜) and the dram sign (֏).
- Shift: Single tap for uppercase, double tap for caps lock
- Delete: Delete previous character
- Globe: Switch between keyboards
- 123: Switch to numbers and punctuation
- Emoji: Open the emoji keyboard
- Space: Insert space
- Return: Insert newline
The suggestion bar shows up to three predictions and uses two modes:
- Prefix completion while typing a word. Eastern Armenian uses a trie built from a dictionary of about 1,500 common words. Western Armenian uses a sorted word list of about 120,000 inflected forms.
- Next-word prediction after a space. A 4-gram model with backoff to 3-gram, 2-gram, and unigram counts, trained on native Armenian text.
Words you type and accept are learned on the device, separately for each keyboard, and ranked higher in future suggestions.
- No network requests
- All data stored locally on the device
- No keystroke logging
- Full Access is not requested
The privacy policy is in docs/privacy.html.
The Western Armenian word list is derived from the Nayiri Armenian Lexicon, © Serouj Ourishian, licensed under CC BY 4.0. The Western n-gram model is trained on the Western Armenian Wikipedia and the UD Western Armenian ArmTDP treebank, both CC BY-SA 4.0.
The source code is licensed under the GNU General Public License v3.0 or later. See LICENSE for the full text.
Bundled language data (word lists and n-gram models) is licensed separately under Creative Commons and other terms. See NOTICE for the sources and their licenses.
The source is published for transparency so anyone can verify what the keyboard does with typed text. The project is not accepting contributions.