Namma Yatri

SkillCloud & infra

Build, contribute to, and deploy Namma Yatri — India's open-source, zero-commission ride-hailing platform. Covers Haskell backend, PureScript frontend, Rust services, Beckn/ONDC mobility protocol, Nix-based dev setup, and API integration. Use when working with Namma Yatri, ride-hailing, Beckn protocol, or open mobility.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Namma Yatri skill

What this skill tells your AI

The instructions your AI receives, as published by ankitjh4/indic-ai-skills in skills/namma-yatri/SKILL.md and read by ahel’s review.

Open-source, zero-commission, driver-centric ride-hailing platform built by JusPay. Powers 71M+ rides across Bengaluru, Chennai, Kolkata, Delhi, Hyderabad, Kochi, and Mysuru.

  • Zero commission — drivers keep the full fare
  • No surge pricing — transparent, stable fares
  • Open source — AGPL-3.0 licensed
  • Beckn/ONDC native — built on India's open mobility protocol

Repository: https://github.com/nammayatri/nammayatri Open Data Dashboard: https://nammayatri.in/open/ Community: https://github.com/orgs/nammayatri/discussions

Architecture

Namma Yatri follows the Beckn Protocol for open, interoperable mobility:

┌─────────────┐    Beckn     ┌──────────────┐    Beckn     ┌─────────────┐
│  Rider App  │◄────────────►│    Beckn     │◄────────────►│ Driver App  │
│    (BAP)    │   search/    │   Gateway    │   on_search/ │    (BPP)    │
│             │   confirm    │              │   on_confirm │             │
└─────────────┘              └──────────────┘              └─────────────┘
       │                                                          │
       ▼                                                          ▼
┌─────────────┐                                          ┌──────────────┐
│   Rider     │                                          │   Provider   │
│  Dashboard  │                                          │  Dashboard   │
└─────────────┘                                          └──────────────┘

Key Beckn concepts:

  • BAP (Beckn Application Platform) — consumer/rider side
  • BPP (Beckn Provider Platform) — driver/provider side
  • Beckn Gateway — routes requests between BAP and BPP
  • Registry — service discovery and trust layer

Tech Stack

LayerTechnologyPurpose
BackendHaskellCore business logic, APIs, ride matching
FrontendPureScriptRider and driver mobile apps
Location trackingRustReal-time GPS tracking service
NotificationsRustPush notifications via gRPC + Redis Streams
GTFS serverRustPublic transit data
Build systemNixReproducible builds and dev environments
Haskell buildCabalPackage management and compilation
ConfigurationDhallType-safe config files
DatabasePostgreSQLPrimary data store
CacheRedisSession/location caching
MessagingKafkaEvent streaming between services
RoutingOSRMOpen-source route calculations

Project Structure (Monorepo)

nammayatri/
├── Backend/                         # Haskell backend (main codebase)
│   ├── rider-platform/
│   │   ├── rider-app/               # Rider-facing APIs (port 8013)
│   │   └── public-transport/        # Public transit integration
│   ├── provider-platform/
│   │   └── dynamic-offer-driver-app/
│   │       ├── Main/                # Driver-facing APIs (port 8016)
│   │       └── Allocator/           # Ride matching engine (port 9996)
│   ├── dashboard/
│   │   ├── rider-dashboard/         # Rider ops dashboard
│   │   └── provider-dashboard/      # Provider ops dashboard
│   ├── kafka-consumers/             # Async event processors
│   ├── mocks/                       # Mock third-party services
│   ├── dhall-configs/               # Dhall configuration files
│   └── load-test/                   # Load testing suite
├── Frontend/                        # PureScript frontend
│   ├── ui-customer/                 # Rider mobile app
│   └── ui-driver/                   # Driver mobile app
└── docs/                            # Documentation

Related Repositories

RepositoryLanguagePurpose
nammayatri/shared-kernelHaskellShared types, utilities, and business logic
nammayatri/location-tracking-serviceRustReal-time driver location tracking
nammayatri/notification-serviceRustPush notification delivery
nammayatri/beckn-gatewayHaskellBeckn protocol routing
nammayatri/commonNixShared Nix configuration

Development Setup

Prerequisites

  • Nix package manager (with flakes enabled)
  • direnv for automatic shell activation
  • ~16GB RAM recommended

Backend Setup

# Clone the repository
git clone https://github.com/nammayatri/nammayatri.git
cd nammayatri

# Activate backend dev environment
ln -sf .envrc.backend .envrc
direnv allow

# Build all backend packages
cd Backend
cabal build all

# Run the full mobility stack (starts all services + DB/Redis/Kafka/OSRM)
, run-mobility-stack-dev

The , prefix is a Nix-provided command runner. Run , alone to see all available commands.

Frontend Setup

# Enter frontend dev shell
nix develop .#frontend

# Rider app
cd Frontend/ui-customer
npm install && npm start

# Driver app
cd Frontend/ui-driver
npm install && npm start

Android builds require Android Studio, google-services.json, and MAPS_API_KEY.

Useful Dev Commands

CommandPurpose
, run-mobility-stack-devStart full stack via cabal (recommended)
, run-mobility-stack-nixStart full stack via Nix build
, ghcid lib/location-updatesFast compile feedback loop
, run-pgadminStart pgAdmin for DB inspection
, run-monitoringStart Prometheus + Grafana
, kill-svc-portsKill all running services
cabal test allRun test suite

Services & Ports

ServicePort
rider-app8013
beckn-gateway8015
dynamic-offer-driver-app8016
mock-registry8020
transporter-scheduler8053
allocation-service9996

Swagger docs available at http://localhost:<port>/swagger.

API Overview

Rider APIs (BAP — port 8013)

Core rider-side flows following Beckn lifecycle:

Endpoint PatternPurpose
/searchSearch for available rides
/selectSelect a ride option
/initInitialize booking (address, payment)
/confirmConfirm and place the booking
/statusCheck ride status
/trackTrack driver location
/cancelCancel a ride
/ratingRate the driver

Driver APIs (BPP — port 8016)

Driver-side operations:

Endpoint PatternPurpose
/on_searchReceive ride requests
/on_selectRespond to ride selection
/on_initConfirm driver availability
/on_confirmAccept ride booking
/on_statusSend ride status updates
/on_trackSend location updates
/on_cancelHandle cancellation

Allocator (port 9996)

The ride matching engine that connects riders with nearby drivers. Handles:

  • Proximity-based driver search
  • Dynamic offer management (drivers quote their price)
  • Ride assignment optimization

Dashboard APIs

Ops dashboards for fleet management, analytics, and administration:

  • Rider dashboard — user management, ride history, support
  • Provider dashboard — driver management, earnings, compliance

Contributing

Commit Convention

<sub-project>/<type>: #<issue-number> <short summary>

Sub-projects: backend, frontend

Types: feat, fix, chore, ci, docs, perf, refactor, test

Examples:

backend/feat: #341 Driver onboarding flow
frontend/fix: #322 Font size in ride request popup
backend/refactor: #400 Extract payment module

Branch Naming

<sub-project>/<type>/<issue-number><short-description>

Examples:

backend/feat/GH-341/driver-onboarding
frontend/fix/GH-322/font-size

Contribution Flow

  1. Find or create an issue on GitHub Issues
  2. Fork and create a branch following naming conventions
  3. Make changes with atomic commits
  4. Ensure cabal build all and cabal test all pass
  5. Submit a PR with clear description
  6. PRs are typically squash-merged

Code Style

  • Haskell: follow existing patterns in the codebase; HLS (Haskell Language Server) configured via Nix
  • PureScript: standard PS conventions
  • Use direnv + VSCode with recommended extensions for best IDE experience

Key Concepts

Dynamic Offer Model

Unlike fixed-price platforms, Namma Yatri uses a dynamic offer model:

  1. Rider searches for a ride
  2. Nearby drivers receive the request
  3. Each driver quotes their own price
  4. Rider selects from available offers

services-flake

External services (PostgreSQL, Redis, Kafka, OSRM) are managed via services-flake, a Nix-based alternative to docker-compose. Services start automatically with , run-mobility-stack-dev.

Shared Kernel

Common types, utilities, and business logic live in the shared-kernel repo. To develop against a local checkout:

# In flake.nix, change:
inputs.shared-kernel.url = "path:/path/to/local/shared-kernel";

Then run nix flake lock --update-input shared-kernel.

Troubleshooting

IssueSolution
Segfault during linkingulimit -s 9999 (stack size limit)
Services won't stop after Ctrl-C, kill-svc-ports
VSCode direnv errorunset NIX_STORE && direnv reload
Slow nix buildCheck Nix binary cache is configured
Slow cabal buildIncrease jobs in cabal.project or uncomment dev flags
Find Nix dependency sourcenix run github:nix-community/nix-melt

References


Jai Hind! 🇮🇳

Signals

GitHub stars
65
Forks
10
Last commit
Apr 2026
Advanced
Catalog kind
skill
Gateway key
namma-yatri
Source
github.com/ankitjh4/indic-ai-skills