RideKit
Full source · one-time purchase · live demo running now

The localization-first
ride-hailing platform

One config-driven codebase that ships as a genuinely local product in 37 preset markets — local payment rails, 14 languages with RTL, local emergency numbers, local fare conventions. Not a currency-symbol swap. Four verticals: city rides, parcels, rentals, intercity.

🇰🇪Kenya
currencyKES
railsmpesa · flutterwave · stripe
languages1
one config row — zero code changes
🇸🇦Saudi ArabiaRTL
currencySAR
railsmoyasar · stripe
languages2
e-invoicingzatca
one config row — zero code changes
🇧🇷Brazil
currencyBRL
railspix · stripe
languages2
e-invoicingnfse
one config row — zero code changes
🇵🇭Philippines
currencyPHP
railsgcash · stripe
languages1
one config row — zero code changes
🇲🇽Mexico
currencyMXN
railsstripe · oxxo
languages2
e-invoicingcfdi
one config row — zero code changes
🇮🇳India
currencyINR
railsupi · razorpay · stripe
languages8
e-invoicingindia_gst
one config row — zero code changes
🇳🇬Nigeria
currencyNGN
railspaystack · flutterwave · stripe
languages1
one config row — zero code changes
🇦🇪United Arab EmiratesRTL
currencyAED
railsstripe
languages2
one config row — zero code changes
🇹🇭Thailand
currencyTHB
railsstripe
languages2
one config row — zero code changes
🇰🇪Kenya
currencyKES
railsmpesa · flutterwave · stripe
languages1
one config row — zero code changes
🇸🇦Saudi ArabiaRTL
currencySAR
railsmoyasar · stripe
languages2
e-invoicingzatca
one config row — zero code changes
🇧🇷Brazil
currencyBRL
railspix · stripe
languages2
e-invoicingnfse
one config row — zero code changes
🇵🇭Philippines
currencyPHP
railsgcash · stripe
languages1
one config row — zero code changes
🇲🇽Mexico
currencyMXN
railsstripe · oxxo
languages2
e-invoicingcfdi
one config row — zero code changes
🇮🇳India
currencyINR
railsupi · razorpay · stripe
languages8
e-invoicingindia_gst
one config row — zero code changes
🇳🇬Nigeria
currencyNGN
railspaystack · flutterwave · stripe
languages1
one config row — zero code changes
🇦🇪United Arab EmiratesRTL
currencyAED
railsstripe
languages2
one config row — zero code changes
🇹🇭Thailand
currencyTHB
railsstripe
languages2
one config row — zero code changes

cards rendered from backend/src/markets/country-presets.ts at build time — the same table the product seeds from

860
backend test cases · 69 suites
437
admin + rider + driver test cases
24 + 7
Playwright E2E · Maestro flows
37
preset markets
9
payment rails
14
app languages · RTL included
every number above is counted from the repository at build time — never typed into marketing copy · how we count
Four verticals, one platform

A person, a package, an hour, or another city

All four run on the same dispatch, ledger, pricing and safety spine — each with the domain logic that actually makes it work, not a renamed ride type.

City rides

  • Fixed upfront quotes or inDrive-style bidding, per market
  • Multi-stop (up to 3) with per-leg fare + driver stop progression
  • Women-only rides, market-gated, fails closed before pricing
  • Fare integrity: recompute from actuals, waiting meter both sides watch

Parcel delivery

  • OTP at both ends + photo proof of delivery, codes hidden from courier
  • Priced failure paths: free retry → return-to-sender at 60%
  • Chain of custody in the admin, per-market size/weight tiers
  • Courier paid for both legs on a return

Hourly rentals

  • Package ladder (1h/10km … 12h/120km) seeded from each market's own economy fare
  • Live overage meter mirrored in rider and driver apps
  • Mid-trip destination edits, package-expiry sweeper
  • Rider-ends-the-trip semantics

Intercity / outstation

  • One-way 1.3× · round-trip 0.85× with a 250 km/day floor
  • Driver daily/night allowances, tolls + permits as line items
  • Driver opt-in is a dispatch predicate — no surprise long-hauls
  • 30-minute dispatch lead on scheduled departures
The localization story

37 markets that each feel local — because they are

One canonical preset table drives currency, timezone, dial code, distance unit, payment rails, tax engine, top-up amounts and languages for every market — seeding, the installer and both apps read the same source, so nothing drifts. Launching a country is a config row and an admin toggle, not a fork.

14 app languages, parity-tested

العربية · বাংলা · English · Español · ગુજરાતી · हिन्दी · Bahasa · ಕನ್ನಡ · मराठी · Português · தமிழ் · తెలుగు · ไทย · Tiếng — with true RTL layout enforced by parity tests so a new key can't silently ship English-only.

Local emergency numbers

The SOS button dials the right number in every market — not a hardcoded 911 shipped to Nairobi.

4 government e-invoicing engines

India GST e-invoicing · Brazil NFS-e (municipal ISS) · Mexico CFDI 4.0 · Saudi ZATCA (TLV QR) — credential-gated with a deterministic local fallback; invoicing never blocks a ride.

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
Payments & money

The rails people actually pay with — on a double-entry ledger

In Nairobi the norm is M-Pesa; in São Paulo it's Pix; in Manila, GCash. Every rail sits behind one provider interface with an async-outcome path for instruction-then-confirm rails, and the resolver prefers each market's local rail over cards.

Pix (Asaas)live-tested
Brazil
Instant bank transfer
Cash / manuallive-tested
Everywhere
No-gateway fallback
Moyasarlive-tested
Saudi Arabia
mada · cards
Razorpaylive-tested
India
Cards · UPI · netbanking
Stripelive-tested
Global cards
Cards · wallets
Flutterwaveunverified
Pan-Africa
10 African markets
GCashunverified
Philippines
E-wallet
M-Pesaunverified
Kenya
STK push mobile money
OXXOunverified
Mexico
Cash voucher top-up
Paystackunverified
Nigeria · Ghana
Cards · bank · MoMo

Read the amber pills. 5 newer rails declare integration: 'unverified-adapter' in code until they clear a real transaction against the live provider — and the admin panel shows operators exactly that, never a fake "Connected". With no keys configured, every market falls back to cash and nothing crashes. That honesty is a feature you inherit.

Every movement balances to zero

Settlements, refunds, credit notes, payouts and promo discounts post as double-entry journal lines in each currency's true minor units — JPY and KWD included, because that bug class was found and killed.

Refunds that respect reality

Wallet debit first, then the gateway leg with compensation on failure; refuses over-refunds stating the max refundable. Corporate rides get credit notes — there's no gateway leg to reverse.

Uncertainty never moves money

Payout reconciliation returns driver funds only on confirmed failure. Rails degrade to cash with no keys configured. DB-level ledger invariants reject corrupting writes.

Built for operating, not just demoing

The unglamorous parts are the product

Safety centre

  • Trusted contacts + SOS fan-out SMS with a live-trip link
  • Automatic ride check-in: long-trip & stationary signals escalate
  • Tokenized public trip sharing — identity, phone and money structurally excluded
  • Women-only rides, market-gated
More →

Corporate accounts

  • Book on the company account, credit limit enforced at booking
  • Org settlement is a first-class ledger account — negative balance is the invoice
  • Org-owner portal inside the rider app
  • Admin billing console: credit notes, company payments
More →

Driver retention

  • Destination mode (2/day, dropoff must close ≥25% of distance)
  • Trip preferences + auto-accept through the normal accept path
  • Quests/incentives with idempotent ledger-backed awards
  • Instant-payout limits with honest settlement estimates
More →

Operator console

  • Zero-UUID dispatch: search riders, click the map, assign by name
  • Driver/rider 360°, KYC queue, zones, surge editor, payout queue
  • Audit log with before-state snapshots
  • RBAC with a last-super-admin lockout guard
More →
Why trust source code you haven't read yet

This codebase tells you the truth about itself

Unverified means unverified

Payment adapters that haven't cleared a live transaction declare it in code, and the admin shows operators an amber pill — never a fake "Connected". You'll see the same honesty in the docs and this site.

Dormant by default

Anything that moves money or files with a government is credential-gated: no keys → deterministic local behavior (cash rail, local invoice), loudly logged, never a crash and never a silent fake success.

No fake anything

No invented testimonials, no sales counters, no fabricated logos here. Claims link to their proof: the live demo, the docs, the changelog, and test counts computed from the repo at build time.

See it

Operator console & both apps

placeholder
Admin — live dispatch queue
placeholder
Admin — trip detail: map, timeline, settlement, tax
placeholder
Rider — booking with local rails
placeholder
Driver — offer with countdown

Frames are placeholders on purpose — no mocked-up UI pretending to be the product. The real thing is one click away on the live demo; capture instructions for this wall live in site/scripts/capture-screens.md.

Own the platform. Launch your market.

One-time purchase, full source for all four surfaces, docs included, license key signed to you. Try everything on the live demo first.