Lipi is a Gujarathi phonetic system that converts english text into Gujarathi. Basically, you type English sounds and it turns it into Gujurati.
Lipi's website:

I built Lipi because I wanted a faster way to message my family in Gujarati. The standard Gujarati keyboard is frustrating and led to me hunting for characters, switching layouts, losing though mid-sentence. I was getting by in English just to avoid the friction.
Then I came across Pinyin, the phonetic input system used for Chinese. You just type how the word sounds in Roman letters and it figures out the characters.I couldn't understand why something like that didn't exist for Gujarati — or most other Indic scripts for that matter.
That thought led me to build "Lipi". I started looking into it, and eventually landed on a word that felt right for the project: lipi (લિપિ) — which means script in Gujarati.
Lipi is my attempt to make typing Gujarati feel as natural as typing English.
See CONTROLS.md for the full mapping reference.
Lipi એ એક ગુજરાતી ફોનેટિક સિસ્ટમ છે જે English ટેક્સ્ટને ગુજરાતીમાં ફેરવે છે. Basically, તમે English અવાજ પ્રમાણે ટાઇપ કરો અને તે તેને ગુજરાતીમાં બદલી દે છે।
Lipi ની વેબસાઇટ: https://lipi.up.railway.app
મેં Lipi બનાવ્યું કારણ કે મને મારા પરિવાર સાથે ગુજરાતી માં વધુ ઝડપથી મેસેજ કરવો હતો। સામાન્ય ગુજરાતી કીબોર્ડ બહુ frustrating લાગતો હતો — અક્ષરો શોધવા પડતા, layouts બદલવા પડતા અને વચ્ચે વિચાર તૂટી જતો। આ friction ટાળવા માટે હું English માં લખતો હતો।
પછી મને Chinese માટે વપરાતી Pinyin phonetic input system વિશે ખબર પડી। તમે Roman letters માં શબ્દ જેમ બોલાય તેમ લખો અને સિસ્ટમ આપમેળે યોગ્ય characters બનાવી આપે છે। મને સમજાયું નહીં કે આવું કંઈ ગુજરાતી — અથવા બીજી Indic scripts — માટે કેમ નથી।
આ વિચારથી “Lipi” બનાવવાનો વિચાર આવ્યો। પછી મેં નામ શોધવાનું શરૂ કર્યું અને અંતે lipi (લિપિ) શબ્દ યોગ્ય લાગ્યો — જેનો અર્થ ગુજરાતી માં script થાય છે।
Lipi મારું એવું પ્રયત્ન છે કે ગુજરાતી ટાઇપ કરવું English જેટલું સરળ અને natural લાગે।
પૂર્ણ mapping reference માટે CONTROLS.md જુઓ。
Lipi एक गुजराती phonetic system है जो English टेक्स्ट को गुजराती में बदलता है। Basically, आप English sounds के अनुसार टाइप करते हैं और यह उसे गुजराती में बदल देता है।
Lipi की वेबसाइट: https://lipi.up.railway.app
मैंने Lipi इसलिए बनाया क्योंकि मैं अपने परिवार को गुजराती में जल्दी और आसानी से मैसेज करना चाहता था। सामान्य गुजराती कीबोर्ड इस्तेमाल करना काफी frustrating था — अक्षर ढूँढने पड़ते थे, बार-बार layouts बदलने पड़ते थे और बीच में सोच का flow टूट जाता था। इसलिए मैं इस परेशानी से बचने के लिए English में लिखता था।
फिर मुझे Chinese भाषा की Pinyin phonetic input system के बारे में पता चला। आप Roman letters में शब्द की आवाज़ के अनुसार टाइप करते हैं और सिस्टम अपने-आप सही characters बना देता है। मुझे समझ नहीं आया कि गुजराती — या बाकी Indic scripts — के लिए ऐसा कुछ क्यों नहीं है।
इसी सोच से “Lipi” बनाने का विचार आया। बाद में नाम खोजते-खोजते मुझे lipi (लिपि) शब्द सही लगा, जिसका अर्थ होता है script।
Lipi मेरा प्रयास है कि गुजराती टाइप करना उतना ही आसान और natural लगे जितना English टाइप करना।
पूरी mapping reference के लिए CONTROLS.md देखें।
| Type | Gujarati |
|---|---|
k'em chh'o |
કેમ છો |
p-r'em |
પ્રેમ |
Download the latest release for your platform from the releases page.
| Platform | File | Notes |
|---|---|---|
| Linux | Lipi-Linux-x86_64 |
Run chmod +x Lipi-Linux-x86_64 && ./Lipi-Linux-x86_64 |
| macOS | Lipi-macOS-Universal.zip |
Unzip, then right-click the app and select Open |
| Windows | Lipi-Windows-x86_64.exe |
Double-click to run |
macOS note: Since the app isn't signed, macOS will block it on first launch. Right-click the
.appand choose Open to bypass the warning.
-
Core translation engine (
core/)- Vowel mapping
- Short vowels (a, i, u)
- Long vowels (aa, ii, uu)
- Complex vowels (e, ai, o, au)
- Consonant mapping
- Velar consonants (k, kh, g, gh, ng)
- Palatal consonants (ch, chh, j, jh, ny)
- Retroflex consonants (T, Th, D, Dh, N)
- Dental consonants (t, th, d, dh, n)
- Labial consonants (p, ph, b, bh, m)
- Approximants (y, r, l, v)
- Sibilants (sh, Sh, s)
- Aspirate (h)
- Special (L, ksh, gny)
- Matra support (
'orxprefix)- Short matras (i, u)
- Long matras (aa, ii, uu)
- Complex matras (e, ai, o, au)
- Longest match parser
- Length 3 matching
- Length 2 matching
- Length 1 matching
- Fallback passthrough
- Conjunct consonants
- Design conjunct syntax (
-as halant connector) - Common conjuncts (ક્ત, સ્ત, ન્ત)
- Halant support (્)
- Parser support for conjuncts
- Add conjuncts to CONTROLS.md
- Design conjunct syntax (
- Extended characters
- Anusvara (ં)
- Visarga (ઃ)
- Chandrabindu (ઁ)
- Numbers
- Gujarati digit mapping (૦-૯)
- Auto convert or manual trigger
- Tests
- Unit test each vowel
- Unit test each consonant
- Unit test each matra
- Unit test full sentences
- Unit test edge cases
- Unit test conjuncts
- Unit test special characters
- Benchmark parser performance
- Vowel mapping
-
Web server (
server/)- Setup
- Create server/main.go
- net/http router setup
- Port configuration
- Graceful shutdown
- Endpoints
- POST /transliterate
- Parse request body
- Call core.Transliterate
- Return response
- Handle empty input
- Handle invalid UTF-8
- GET / (serve frontend)
- Embed static files with go:embed
- Serve index.html
- Serve CSS and JS
- Serve controls.html
- POST /transliterate
- Middleware
- CORS headers
- Rate limiting
- Request logging
- Error handling middleware
- Tests
- Unit test each endpoint
- Integration tests
- Setup
-
Web frontend (
web/)- Setup
- Create web/index.html
- Create web/style.css
- Create web/main.js
- Input
- Live input text box
- Debounce API calls
- Placeholder text with example
- Output
- Live Gujarati output display
- Large readable font
- Copy to clipboard button
- Controls reference panel
- Vowel table
- Consonant table
- Matra table
- Autocomplete mode
- Toggle autocomplete on/off (button or keyboard shortcut)
- On spacebar, transliterate current word in-place
- Preserve cursor position after replacement
- Works in both web and desktop frontends
- Sharing
- Shareable URL with encoded text
- Share button
- Copy link button
- Setup
-
Mobile app (
mobile/)- Setup
- Initialize Expo project (expo-router)
- Font loading (Inter via expo-google-fonts)
- Splash screen
- Navigation stack (index + controls screens)
- Error boundary
- Core engine
- Port transliterate logic to TypeScript (
utils/transliterate.ts) - Vowel mapping
- Matra mapping
- Consonant mapping
- Longest match parser
- Port transliterate logic to TypeScript (
- Main screen (
app/index.tsx)- Phonetic text input
- Live Gujarati output
- Copy to clipboard
- Haptic feedback on copy
- Link to controls reference screen
- Controls reference screen (
app/controls.tsx)- Vowel table
- Matra table
- Consonant table
- Back navigation
- Design
- Dark mode
- Features
- Autocomplete mode (transliterate word on space)
- Share / copy link
- Tests
- Unit test transliterate util
- Component snapshot tests
- Publishing
- Configure EAS Build
- iOS App Store submission
- Android Play Store submission
- Setup
-
Desktop app (
desktop/)- Setup
- Install Wails
- Initialize Wails project
- Connect core engine to Wails
- Bind Transliterate function
- UI
- Reuse web frontend
- Native window controls
- App icon design
- Splash screen
- Windows build
- Cross-compile from Linux
- Windows installer (.exe)
- Windows icon (.ico)
- Linux build
- .deb package
- .AppImage package
- AUR package (Arch Linux)
- Setup
-
Documentation
- README.md
- Title and description
- Live demo link
- Installation instructions
- Quick start example
- Screenshot
- Demo gif
- Link to CONTROLS.md
- CONTROLS.md
- Vowel table
- Consonant table
- Matra table
- Examples
- Conjunct examples
- Number examples
- README.md
-
Docker
- Production image
- Create Dockerfile
- Multi-stage build
- Minimize image size
- Non-root user setup
- Health check endpoint
- Build environment
- Create Dockerfile.build
- Go cross-compilation setup
- Windows target (GOOS=windows)
- Linux target (GOOS=linux)
- Build output artifacts
- Docker Compose
- Create docker-compose.yml
- Web server service
- Volume mounts
- Environment variables
- CI/CD (GitHub Actions)
- Create .github/workflows/
- Build and test on push
- Run Go tests
- Build all targets
- Report coverage
- Auto publish Docker image
- Push to Docker Hub
- Tag with version
- Tag with latest
- Auto release binaries
- Build Windows binary
- Build Linux binary
- Create GitHub release
- Upload binaries to release
- Production image
-
Desktop system integration
- System tray icon
- Global keyboard shortcut to open
- Minimize to tray
- Start on boot option
- Auto updater
- Version checking
- Download and install updates
- Release notes display
- Code signing (Windows)
-
Mobile app icon & assets
- Design app icon
- Generate all icon sizes (iOS + Android)
-
Web frontend polish
- Mobile responsive layout
- Dark mode toggle
- Font size controls
- Smooth transitions
- Keyboard shortcut hints
- Character count display
- Collapsible controls panel
- Search/filter controls
- Social media meta tags
-
Contributing & API docs
- CONTRIBUTING.md
- How to add new mappings
- How to run tests
- Pull request guidelines
- Code style guide
- API docs
- Endpoint reference
- Request/response examples
- Error codes
- CONTRIBUTING.md
-
Polish
- Edge cases
- Punctuation passthrough
- Whitespace handling
- Mixed Gujarati/English input
- Very long input handling
- Performance
- API response time targets
- Frontend debounce tuning
- Accessibility
- Screen reader support
- Keyboard navigation
- High contrast mode
- Font size accessibility
- Server load testing
- Edge cases