인터페이스는 현지화되어 있으며, Skill 소개와 설명 문서는 선택한 언어로 AI가 자동 번역합니다. 코드·명령어·경로·전문 용어는 원문을 유지하며 원작자 문서가 우선합니다.
Skills 둘러보기
디자인 및 창작 · SKILL.md

namma-yatri

namma-yatri

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.

Independent GitHub snapshot · Automated classification · Original documentation governs

Skill 문서

GitHub

name: namma-yatri description: 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. metadata: author: ankitjh4 category: transport tags: namma-yatri, ride-hailing, open-source, beckn, ondc, mobility, haskell, purescript, rust, juspay

Namma Yatri

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! 🇮🇳

저장한 Skills