LangX connects you with native speakers so you can practise the language you are learning by teaching the one you already know. Speak, chat, correct each other's sentences — and keep a streak while doing it.
iOS, Android and the web all come out of one Expo codebase, with a single Fastify API behind them. BSD-3, open source, same as v1.
Screens are rendered from the app's own layouts with demonstration data; the faces are AI-generated portraits. The full press kit is in langx/branding.
💻 Website: https://langx.io/
📲 Apps: https://get.langx.io
🪙 Token Website: https://token.langx.io/
📜 Litepaper: https://docs.langx.io
📊 Insights: https://insight.langx.io
🟢 Status : https://status.langx.io/
🔧 Backlog: https://backlog.langx.io/
✉️ Mail: hi@langx.io
| Layer | Choice |
|---|---|
| Mobile/web | Expo SDK 57 · expo-router · TanStack Query + Zustand · NativeWind |
| API | Node 24 · Fastify 5 · Better Auth · Socket.io — a single container |
| Data | MongoDB Atlas, official driver (no Mongoose) |
| Storage | S3-compatible (Backblaze B2 in production; Cloudflare R2 works too) |
| Billing | RevenueCat — StoreKit / Play Billing / RevenueCat Web + Stripe |
What each one is, where it is hosted and which values are copied between
them by hand: docs/repo-map.md.
- 🟢 website SvelteKit — langx.io
- 🟢 token-website HTML/CSS — token.langx.io
- 🟢 docs GitBook source — docs.langx.io
- 🟢 branding logos, icons, store artwork, press kit
- 🟡 copilot Discord assistant; live, not developed
- 🌱
v1branch — this repository before v2; the Expo rewrite that was never released - 📦️ api (Archived) v1's Express API; served api.langx.io until v2 took the hostname
- 📦️ langx-angular (Archived) Originally developed; v0.15, the last v1 on the stores, was built from it
- 📦️ langx-flutter (Archived) (Not completed)
MongoDB has to run as a replica set — Better Auth wraps its writes in
transactions, which standalone mongod does not support. Full setup, including
the one-line Docker version, is in
CONTRIBUTING.md.
pnpm install
cp .env.example .env # set MONGODB_URI and BETTER_AUTH_SECRET
pnpm dev # API on :4000, Expo on :8081pnpm dev:api— API onlypnpm dev:web— Expo web onlypnpm typecheck·pnpm lint·pnpm test
Press i or a in the Expo output for a simulator, or open
http://localhost:8081 for the web build. Running on a
physical phone needs a development build rather than Expo Go — see
CONTRIBUTING.md.
apps/api Fastify API — auth, REST, realtime, scheduled jobs
apps/mobile Expo app (iOS + Android + web)
packages/shared zod schemas, language + level tables, PLAN_LIMITS, TOKEN_RULES
docs/architecture.md describes how they fit together
and docs/decisions.md says why — several choices look
arbitrary until you know what went wrong the first time.
Your own instance needs MongoDB, an S3-compatible bucket and an email key.
Billing, translation and analytics are optional and degrade cleanly when they
are not configured. See docs/self-host.md.
We welcome contributions. Start with CONTRIBUTING.md, and say hello in the #codebase channel on Discord.
If you find a security vulnerability, please email hi@langx.io rather than opening a public issue. See SECURITY.md.
-
Be A Patron: https://backer.langx.io/
-
Github Sponsor: https://github.com/sponsors/langx
This work is based on data from GeoNames, licensed under CC BY 4.0.
See docs/data-sources.md.
This project is licensed under the BSD-3-Clause License - see the LICENSE file for details.