A personal Devanagari input method (IME): type Sanskrit in IAST, Harvard-Kyoto, ITRANS, or Velthuis and get live, space-triggered conversion to Devanagari — powered by the real Aksharamukha transliteration engine, running entirely in the browser (or natively on macOS). Nothing typed here ever leaves the device.
Akṣarapada (अक्षरपद, from akṣara "syllable/letter" + pada "word/foot") — a keyboard, in Sanskrit's own words. Sibling project to Lipyantara.
🔗 Live site → 🔗 Open the composer → 💾 Download for macOS →
- Web — the full site at the live link above, composer embedded in the hero.
- Installed web app (iPhone/iPad/Android) — open the composer, then Share → Add to Home Screen in Safari. Offline-capable after first load.
- Native macOS app — a real
.app/.dmg, built withdeno desktop. See Building the macOS app below.
- Four keyboard schemes: IAST, Harvard-Kyoto, ITRANS, and Velthuis — switch anytime, mid-sentence
- Space (or Enter) triggers conversion — type a word, hit space, it becomes Devanagari immediately
- Insert special characters: the complete Unicode Vedic Extensions block (U+A8E0–U+A8FD, U+1CD0–U+1CF9) — svara/accent marks, anusvara variants, avagraha, and more, each labeled with its Unicode name
- Copy and clear controls on the composer
- Light / dark / system theme switcher
- Installable as a PWA on iOS/Android, or as a native app on macOS
The engine is the actual Aksharamukha Python package by Vinodh Rajan, compiled to WebAssembly via Pyodide and wrapped for browser use by Aksharamukha.js, loaded once from a CDN (~17 MB) and cached afterward.
The IME behavior itself — buffering what you type and converting on space —
is not a special engine feature; Aksharamukha's own web IME implements
this as frontend logic on top of the same conversion call. This project does
the same: ime.js tracks the "current word" back to the last space/newline,
calls engine.processAsync(scheme, 'Devanagari', word) on that word when you
press space or Enter, and splices the Devanagari result back into the
textarea.
Aksharamukha's own web IME offers a fifth scheme, "Akshara" (internally
RomanReadable) — a readable ASCII convention (double letters for long
vowels, e.g. akṣarā → AKSHARAA). It's not included here: testing showed
engine.processAsync('RomanReadable', 'Devanagari', 'uu') returns उउ
instead of ऊ — the reverse direction (Devanagari → RomanReadable) works
correctly, suggesting the scheme's forward (input) conversion has a real
bug in the current engine build, independent of anything in this project's
own code. IAST, Harvard-Kyoto, ITRANS, and Velthuis were all verified
correct in both directions and are the four schemes offered here.
site/ deployed to GitHub Pages
├── index.html marketing page, composer embedded via iframe
├── app.html the composer — also the PWA start_url
├── ime.js shared IME logic (identical to app/ime.js)
├── manifest.json PWA manifest
├── sw.js service worker (offline caching)
├── icons/ PWA / favicon icons
app/ native macOS app source (deno desktop)
├── index.html same composer UI as site/app.html
├── ime.js identical to site/ime.js
├── main.ts deno desktop entrypoint
├── deno.json app name, bundle identifier, icon config
└── icons/
└── app.icns macOS app icon
site/{app.html,ime.js} and app/{index.html,ime.js} are intentionally
near-duplicates — kept in sync by hand when making UI/logic changes, exactly
like Lipyantara.
Web:
cd site
python3 -m http.server 8000Native app (dev mode with hot reload):
cd app
deno desktop --hmr --include index.html --include ime.js --include fonts --icon icons/app.icns --allow-read=. main.tscd app
deno desktop --include index.html --include ime.js --include fonts --icon icons/app.icns --allow-read=. \
--output Aksharapad.dmg main.tsBuilt .app/.dmg files are not committed to this repository — they're
distributed as GitHub Release
assets, named Aksharapad.dmg so the download links keep working.
deno desktop is experimental as of Deno 2.9 — expect some rough edges.
The web site (site/) deploys via GitHub Pages through
.github/workflows/deploy-pages.yml.
Set Settings → Pages → Source to GitHub Actions.
This repository's own code is licensed under the MIT License.
The transliteration engine — Aksharamukha
by Vinodh Rajan — is licensed under
GNU AGPL 3.0 and used here unmodified, loaded at runtime. See
NOTICE.md for full third-party attribution.
The browser port, Aksharamukha.js, is by Param.