loading…
Search for a command to run...
loading…
Description: Query India's open geo data in natural language. 8 tools: list layers, inspect schemas, filter/group any column, point-in-polygon locate, spatial p
Description: Query India's open geo data in natural language. 8 tools: list layers, inspect schemas, filter/group any column, point-in-polygon locate, spatial proximity search, downloads in 5 formats. Covers admin boundaries (state to village), city wards, forests, rivers, dams, hospitals, highways, airports, and more.
ci license: MIT v1.0 uptime Lighthouse: 98+ npm
A visual catalog, REST API, MCP server, drag-drop verifier, and anonymous contribution flow for India's geo data. Admin boundaries from state to village, plus community-submitted layers under open licences.
Live: https://bharatlas.com
catalog → India national boundary (LGD-dissolved)
+ state · district · subdistrict · block · village (LGD)
+ cross-source alternates (SOI · Bhuvan · geoBoundaries
· PMGSY per level — click "also: ..." on any card)
+ city wards across Indian cities
+ electoral constituencies, wildlife, eco-zones
+ 63k pincode polygons (bharatviz)
download → whole layer as Parquet · PMTiles · GeoJSON · KML ·
Shapefile, direct from the card
filter & slice → dynamic facets / range / typeahead search per
layer schema; export the slice in any format above
preview → drop GeoJSON · KML · KMZ · GPX · TCX · Parquet →
render + validate → optional Publish
view (/view/<id>) → curated layer with per-layer OG card
view (/c/<id>) → community submission, edge-rendered HTML, 👍 useful
vote, per-submission OG card
embed → /embed/<id> iframe + PNG export from any map
API (/api/v1) → REST API: list, query, filter, group_by any layer;
locate (point-in-polygon across all layers);
nearby (tile-based spatial proximity)
MCP (npx bharatlas-mcp) → 8 tools for LLMs: list, schema, query, locate,
nearby, categories, submissions, downloads
| Path | Contents |
|---|---|
web/ |
Vanilla TypeScript + Vite viewer + Cloudflare Pages Functions (web/functions/). |
web/migrations/ |
D1 SQL migrations: submissions, tokens, ratings, votes, originals. |
web/tests/ |
vitest unit tests for pure functions (validators, tokens, view rendering, votes). |
scripts/fetch.sh |
Pulls parquets + PMTiles from yashveeeeeeer/india-geodata releases. |
scripts/extract_per_state.py |
Slices pan-India parquets into per-state GeoJSON via DuckDB-spatial. |
scripts/bake_whole_layer.py |
Bakes whole-layer GeoJSON / KML / Shapefile per curated layer (parquet ≤ 100 MB). |
scripts/upload_r2.sh |
Mirrors sources/ + data/ to Cloudflare R2 via wrangler. |
scripts/upload_baked.py |
Pushes data/baked/* to R2 via boto3 (S3-compat fallback when wrangler is unavailable). |
scripts/admin/cleanup_submission.sh |
Delete community submissions by name pattern (R2 + D1). |
mcp/ |
MCP server for LLMs (npm). 8 tools: list, schema, query, locate, nearby, categories, submissions, downloads. |
catalog.json |
Curated-layer index used by the viewer. Single source of truth. |
| /about#caveats | Data caveats (cross-source drift, coverage gaps, precision). |
Large data files (sources/, data/) are not in git — they live in R2. See scripts/fetch.sh to rebuild locally.
| Layer | Tech |
|---|---|
| Frontend | Vanilla TypeScript, Vite, MapLibre GL JS, PMTiles, DuckDB-WASM (lazy) |
| Static hosting | Cloudflare Pages |
| Edge functions | Cloudflare Pages Functions (web/functions/) — REST API v1, submit, vote, sitemap, edge-rendered /c/<id> |
| Parquet query | hyparquet (pure JS, runtime reads from R2) |
| Spatial query | PMTiles tile reads + MVT decode + ray-casting PIP / Haversine proximity |
| MCP server | bharatlas-mcp — 8 tools for Claude, GPT, Gemini, Cursor, etc. |
| Storage | Cloudflare R2 (open data, no egress) |
| Submissions DB | Cloudflare D1 (SQLite at the edge) |
| Anti-abuse | Cloudflare Turnstile + per-IP rate limits |
| CI/CD | GitHub Actions — tests + build + auto-deploy on push to main |
# clone + viewer-only dev (no submissions, no D1)
git clone [email protected]:urbanmorph/geodata.git
cd geodata/web
npm install
npm run dev # http://localhost:5173
npm test
For the full submission flow (D1 + R2 + Turnstile + Pages Functions), see docs/full-dev.md (TODO) or read wrangler.toml + .dev.vars.example.
main: git checkout -b feat/short-nameweb/functions/lib/*. Pure functions are tested via vitest in web/tests/.npm test and npm run build both pass.main. CI runs tests + build automatically.Commit messages: short subject, body explains why not what. Examples in git log.
See releases and merged PRs.
Report vulnerabilities to [email protected] instead of opening a public issue. Acknowledgement within 72 hours.
Code: MIT. Data: each layer carries its own open licence — see the per-card line on the catalog. Curated data is sourced under CC0-1.0 / CC-BY-4.0 / GODL-India depending on provider.
Provided as-is, no warranty. For legal/administrative use, go to the upstream source. Full disclaimers: /about → Use of data.
Data sources, in approximate order of catalog footprint:
Pipelines + patterns:
Built by Urban Morph · Sathya Sankaran. Drop a ⭐ if you find it useful.
Status: v1.0. Curated layers, community submissions, REST API, MCP server ( npm), dynamic filters with typeahead, whole-layer downloads in 5 formats. API docs at /docs, MCP setup at /mcp. Community submissions are permanent under the open licence the contributor selected.
Run in your terminal:
claude mcp add bharatlas-mcp -- npx Security
Low riskAutomated heuristic from public metadata — not a security guarantee.