RideKit
← All features

Genuinely local, by construction

“Localization-first” is an architecture, not a translation pass. One canonical preset table — backend/src/markets/country-presets.ts — is the single source of truth for every market's currency, timezone, dial code, distance unit, payment rails, tax engine, top-up presets and languages. Seeding, the installer and both mobile apps derive from it, so backend and apps can never drift apart.

14 languages the apps actually ship

Rider and driver apps carry 14 catalogs (Arabic, Bangla, English, Español, Gujarati, Hindi, Indonesia, Kannada, Marathi, Português, Tamil, Telugu, Thai, Việt); the admin carries 15. Arabic renders true right-to-left layouts, not mirrored English. Parity tests fail the build if a new string ships in English only.

Each market lists the languages it offers (English first), and the clients read that list from the server — adding a language to a market is data, not an app release.

Money formatted like a local, stored like an accountant

Currency formatting respects each currency's true minor units — including zero-decimal JPY and three-decimal KWD, a bug class this codebase found, fixed and now tests against. Distances render in km or miles per market. Dates render in the market's timezone and locale while storage stays UTC.

Local emergency numbers and safety conventions

The SOS flow carries each market's real emergency numbers in market config — the button in Nairobi doesn't dial 911. Phone placeholders, dial codes and national number lengths come from the same preset table.

Government e-invoicing where it's law (4 engines)

India GST e-invoicing · Brazil NFS-e (municipal ISS) · Mexico CFDI 4.0 · Saudi ZATCA (TLV QR). Each engine is credential-gated: with GSP/PAC/authority credentials configured it files for real; without them it issues a deterministic local invoice and says so — invoicing never blocks a completed ride, and gapless invoice numbering holds either way.

The market wall

Every chip below is parsed from the preset table at build time — flag, currency, lead rail, dial code, RTL. Hover for the full rail list.

South Asia

1 markets
India
INR · upi · +91

Southeast Asia

5 markets
Indonesia
IDR · stripe · +62
Malaysia
MYR · stripe · +60
Philippines
PHP · gcash · +63
Thailand
THB · stripe · +66
Vietnam
VND · stripe · +84

Middle East

6 markets
EgyptRTL
EGP · stripe · +20
KuwaitRTL
KWD · stripe · +965
OmanRTL
OMR · stripe · +968
QatarRTL
QAR · stripe · +974
Saudi ArabiaRTL
SAR · moyasar · +966
United Arab EmiratesRTL
AED · stripe · +971

Africa

7 markets
Ghana
GHS · stripe · +233
Kenya
KES · mpesa · +254
MoroccoRTL
MAD · stripe · +212
Nigeria
NGN · paystack · +234
South Africa
ZAR · stripe · +27
Tanzania
TZS · stripe · +255
Uganda
UGX · stripe · +256

Latin America

7 markets
Argentina
ARS · stripe · +54
Brazil
BRL · pix · +55
Chile
CLP · stripe · +56
Colombia
COP · stripe · +57
Ecuador
USD · stripe · +593
Mexico
MXN · stripe · +52
Peru
PEN · stripe · +51

Other

11 markets
Australia
AUD · stripe · +61
Canada
CAD · stripe · +1
France
EUR · stripe · +33
Germany
EUR · stripe · +49
Italy
EUR · stripe · +39
Netherlands
EUR · stripe · +31
New Zealand
NZD · stripe · +64
Spain
EUR · stripe · +34
TunisiaRTL
TND · stripe · +216
United Kingdom
GBP · stripe · +44
United States
USD · stripe · +1