Learn the Windows Myanmar (Visual order) keyboard through focused, private practice.
MyanTyper is a free, open-source touch-typing tutor built specifically for the
Windows Myanmar (Visual order) keyboard (KBDMYAN). It turns Myanmar
Unicode’s multi-code-point syllables and visual input order into a clear
physical-key learning path—from finger placement to fluent sentences.
No ads. No tracking. No account required. Practice history is always written to the browser first. An optional Google account adds free cross-device history sync while signed-out practice remains fully local.
MyanTyper combines Myan and Typer. Myan points to Myanmar and echoes the Burmese word မြန်, meaning fast. The name describes someone learning to type Myanmar text quickly, accurately, and with confidence.
MyanTyper ဆိုသည်မှာ Myan နှင့် Typer ကို ပေါင်းစပ်ထားသော အမည်ဖြစ်သည်။ Myan သည် Myanmar ကို ကိုယ်စားပြုသလို “မြန်” ဟူသော အဓိပ္ပာယ်လည်း ပါဝင်သည်။ မြန်မာစာကို မြန်မြန်၊ မှန်မှန်၊ ယုံကြည်မှုရှိရှိ ရိုက်တတ်သူကို ဆိုလိုသည်။
Myanmar typing is not a one-character, one-keystroke system. A syllable may combine a consonant, medials, vowels, tone marks, and a coda, while the order shown on screen can differ from the order typed on the keyboard.
MyanTyper keeps canonical Unicode readable and derives the physical key sequence separately. For example, ဖေ is displayed normally, but the Visual-order layout expects ေ before ဖ. The tutor teaches that movement directly instead of asking learners to imitate rendered text.
- Six progressive tracks covering finger anchors, vowels, medials, stacked forms, complete keyboard coverage, and fluency.
- An on-screen KBDMYAN keyboard with Shift state, physical-key, and finger guidance.
- Keys mode for explicit input-order scaffolding and Reader mode for natural Myanmar text.
- Free Type sessions generated from any pasted Myanmar Unicode text.
- Local WPM, accuracy, rhythm, keystroke, and session-history feedback.
- Optional Google sign-in for local-first, cross-device session-history sync.
- Four visual themes and multiple bundled Myanmar fonts.
Core typing and curriculum rules are kept separate from the interface so contributors can understand, test, and extend one area at a time.
- Deterministic typing engine. A framework-independent state machine owns matching, visual-order advancement, Shift handling, timing, errors, and completion. React is a thin adapter around tested domain logic.
- Unicode-aware input model. Canonical display text, Myanmar syllable segmentation, and physical keystroke order are separate immutable views of the same target.
- Data-driven curriculum. Typed curriculum modules generate the catalogue, practice routes, navigation, and sitemap. Tests enforce unique lesson IDs, introduction order, valid key mappings, and complete keyboard coverage.
- Local-first persistence. Browser data is validated, SSR-safe, and synchronized across tabs. IndexedDB remains the immediate history store; signed-in history syncs to Postgres in the background. Practice remains fully usable without an account or network connection.
- Browser security. Production responses include Content Security Policy, restrictive browser permissions, HSTS, clickjacking protection, and related headers.
- Contributor workflow. Strict TypeScript, Biome, Vitest, pinned GitHub Actions, Dependabot, and a reproducible pnpm lockfile help contributors make changes with confidence.
The deeper runtime contracts and design decisions are documented in Architecture.
- Next.js 16 App Router and React 19
- TypeScript 6 in strict mode
- Tailwind CSS 4 with semantic design tokens
- Better Auth with Google OAuth
- Neon Postgres with Drizzle ORM
- Vitest 4 and Biome 2
- pnpm, Lefthook 2, and GitHub Actions
- Node.js 20 or newer
- pnpm 11
git clone https://github.com/PhilixTheExplorer/myantyper.git
cd myantyper
pnpm install
pnpm devOpen http://localhost:3000.
The local typing experience needs no environment variables. To enable optional Google sign-in and cross-device history sync:
- Create a free Neon Postgres database.
- Create Google OAuth web credentials with
http://localhost:3000/api/auth/callback/googleas a local authorized redirect URI. Usehttps://your-domain.example/api/auth/callback/googlein production. - Copy
.env.exampleto.env.local, fill in the database and Google credentials, and generate a randomBETTER_AUTH_SECRETof at least 32 characters. - Run
pnpm db:migrate, then restartpnpm dev.
BETTER_AUTH_URL must be the app origin, such as http://localhost:3000 or the
production origin.
| Variable | Purpose |
|---|---|
DATABASE_URL |
Neon Postgres connection string |
BETTER_AUTH_SECRET |
Random authentication secret of at least 32 characters |
BETTER_AUTH_URL |
Public origin of this deployment |
GOOGLE_CLIENT_ID |
Google OAuth web client ID |
GOOGLE_CLIENT_SECRET |
Google OAuth web client secret |
These values remain server-only. After the migrations are applied, Better Auth stores account sessions and signed-in practice history synchronizes with Postgres through the authenticated history API.
| Command | Purpose |
|---|---|
pnpm dev |
Run the development server |
pnpm lint |
Check formatting and lint rules with Biome |
pnpm test |
Run the Vitest suite |
pnpm build |
Create a production build and type-check the app |
pnpm format |
Apply Biome formatting |
pnpm db:generate |
Generate a Drizzle migration from the schema |
pnpm db:migrate |
Apply pending Drizzle migrations |
pnpm db:check |
Check the generated migration history |
src/app/ Routes, metadata, and page composition
src/components/ Feature UI, providers, and shared primitives
src/components/typing/ Pure engine, browser adapters, and session views
src/db/ Neon connection and Drizzle schemas
src/lib/curriculum/ Reviewed lesson data organized by track
src/lib/ Auth, keyboard, Unicode, storage, and statistics logic
src/styles/ Theme tokens, fonts, and global styles
docs/ Architecture, curriculum, and provenance records
- Bilingual learner guide
- Architecture
- Curriculum design
- Content and asset provenance
- Contributing guide
- Security policy
- Release history
MyanTyper grows through feedback and contributions from people who use and teach Myanmar typing. Native-speaker review, curriculum improvements, KBDMYAN verification, accessibility fixes, and focused bug reports are all welcome. Read CONTRIBUTING.md before opening a pull request.
Learner-facing Myanmar text must be original or compatibly licensed, have documented provenance, and pass the project’s review policy.
Source code is licensed under the GNU Affero General Public License v3.0. Project-authored curriculum, documentation, and artwork are licensed under Creative Commons Attribution-ShareAlike 4.0. Bundled fonts retain their own licences; see font attributions.
