DeanChensj/jiangshan-map

▲ 789 stars today★ 3,364⑂ 400

江山时序 · 中国历史交互地图时间轴 (403 BCE – Present) | Interactive Historical Atlas of China across 18 dynasties, 164 territory snapshots, ancient-to-modern place genealogy & classical poetry routes

About DeanChensj/jiangshan-map

DeanChensj/jiangshan-map is an open-source project on GitHub, mainly written in JavaScript. 江山时序 · 中国历史交互地图时间轴 (403 BCE – Present) | Interactive Historical Atlas of China across 18 dynasties, 164 territory snapshots It currently holds 3,364 stars and 400 forks with 5 open issues, and was last pushed on 2026-11-02 (repository created 2026-07-23).

Project Overview

Git Homed tracks it on the Today's Trending board, currently at rank #10 with 789 new stars today.

GitHub Repository Details

Repository DeanChensj/jiangshan-map · default branch main · size 127006 KB · watchers 12 · source: GitHub REST API and repository README

README

Chronicles of the Realm · 江山时序

English · 简体中文 (Chinese)

An Interactive Historical Atlas of China from the Warring States (403 BCE) to the Present — Scrub Through Time, Trace Ancient Cities, and Walk in the Footsteps of History

Play Live Demo (English UI) → https://deanchen.me/jiangshan-map/?lang=en

The story behind it (in Chinese): From textbook maps to 1k GitHub stars

https://github.com/DeanChensj/jiangshan-map/blob/HEAD/Chronicles of the Realm — 15s Interactive Overview (Warring States Unification, 2,400-Year Dynastic Scrubbing, Chang'an Place Genealogy & Su Shi's Exile Route)

---

Why It's Fun to Explore

Have you ever wondered while reading Chinese history or classical poetry:

Chronicles of the Realm (jiangshan-map) brings together 2,400+ years of Chinese history across 18 historical periods into a single interactive parchment atlas—featuring multi-stage territorial and prefecture snapshots, ancient cities, strategic mountain passes, poetic and battlefield landmarks, chronological milestones, and reigning monarchs & imperial eras. No heavy print atlases required—just drag the timeline and click any city to travel through space and time.

---

Feature 1: Scrub the Timeline to Watch Realms Rise & Fall, Track Monarchs, and Compare Ancient & Modern Borders

Try It Live: Ming Dynasty Yongle 13 (1415 CE) · Two Capitals, Thirteen Provinces & "Yingtian Prefecture" Inspection →
Ming Dynasty 1415 CE · Yingtian Prefecture Hover Preview

---

Feature 2: Click Any Ancient City or Strategic Pass to Uncover 2,400 Years of History (Trace Place)

Click any ancient city or mountain pass on the map (or double-click anywhere on the canvas) to open its Trace Place genealogy card:

Try It Live: High Tang Kaiyuan 29 (741 CE) · Open Chang'an's 2,400-Year Genealogy Card →

High Tang 741 CE · Chang'an Trace Place & Key Events

---

Feature 3: Person Chronicles — Trace Any Historical Figure Across Time & Space

Click the top-left Universal Search Box (with a rotatable e.g. figure preview and quick-search chips, or type any monarch, general, statesman, monk, or poet such as Cao Cao, Huo Qubing, Sima Qian, Yue Fei, or Zheng He) to open Person Chronicle (点人溯事), plotting every milestone of their life with delicate cartographic hairline arcs and directional ticks across changing dynastic borders:

Each time you step to the next event (‹ / ›, ← / →, or Space to auto-play), the timeline year, reigning monarch, imperial era, and dynastic territories evolve in sync with their footsteps, highlighting the active transition arc alongside bilingual primary-source excerpts and poems written at that exact site.

Try It Live: Follow Su Dongpo's Exile to Mizhou & Huangzhou (1075–1082 CE) →
Person Chronicle · Su Shi's Life & Exile Route

---

Feature 4: Easter Egg · Map Pinpoint Challenge — What Imperial Court Rank Would You Earn?

Think you know Chinese historical geography? Click Quiz › in the corner of the Universal Search Box guide bar (or type quiz for Map Pinpoint · Ancient Place Quiz):

Try It Live: Western Han Emperor Wu, Yuanshou 2 (121 BCE) · Start the Map Pinpoint Challenge →

Western Han 121 BCE · Map Pinpoint Challenge Preview

---

Keyboard Shortcuts & Shareable Deep Links

Keyboard Shortcuts

| Key / Action | Effect | | :--- | :--- | | / or Cmd/Ctrl + K | Focus the Universal Search Box: search historical figures (Qin Shi Huang/Zhang Qian/Su Shi), ancient & modern cities (Xianyang/Chang'an/Luoyang/Kaifeng), reigning monarchs (Emperor Wu of Han/Taizong of Tang/Liu Che/Li Shimin), imperial eras (Zhenguan/Yongle/Kangxi), poetic & battlefield landmarks (Red Cliffs/Wuzhang Plains/Languan/Lanting), mountain passes (Hangu Pass/Jianmen Pass/Yumen Pass), historical events, or the Ancient Place Quiz | | ← / → or bottom ‹ / › | Jump to the previous / next historical phase, milestone event, or person event stop (hold Shift + ← / → to step by 10 years) | | Space | Auto-play / pause timeline evolution (or auto-advance stops in Person Chronicle mode) | | Esc | Close active popups/cards, clear search highlights, or exit custom multi-stop routes | | Single-click city / Double-click map | Open the 18-era Trace Place & Key Events genealogy card for that location | | Hover / Click legend swatch | Hover to isolate & highlight that polity's territory; click to auto-zoom to its bounding box |

Shareable Deep Links

Append query parameters to share any historical moment, battle, city genealogy, or multi-stop route:

Embed in Your Page

Put any view of the atlas into a blog post, Notion page, or course site:

1. Open the atlas and set up the view you want (a year, a regime profile, a place card, or a person's trajectory). The address bar always mirrors what you see. 2. Copy the URL and add &embed=1. 3. Paste it into an `


The embedded map hides the site chrome and keeps only the map, a compact timeline, a title chip, an "Open in Jiangshan Atlas ↗" link, and a note that historical borders are approximate. Readers click once to start panning and zooming, so scrolling your page never gets stuck on the map.

| Parameter | Effect | |---|---| | embed=1 | Turn on embed mode (required) | | year, polity, person, stop, trace, lang | Same as the share links above | | from=1072&to=1126 | Limit the timeline to this range; the timeline zooms to show only it | | lock=1 | Freeze the map at year and hide the timeline | | autoplay=1 | Play a person's trajectory stop by stop (with person), or play the timeline |

WeChat Official Accounts, Zhihu, and Xiaohongshu do not allow iframes; share the plain link there instead.

---

AI Agent, MCP & LLM Integration

Chronicles of the Realm works out of the box as a historical-geography visualization engine for LLMs, MCP Clients, and AI Agents. Models never need to guess latitude/longitude coordinates—simply extract two semantic parameters from a poem or historical text, year and place, and the atlas automatically resolves ancient/modern place names, centers the camera, renders dynastic borders and multi-stop trajectories, and opens the Trace Place genealogy card:

  • Machine-Readable Specification: llms.txt
  • Zero-Dependency Local MCP Server (stdio): scripts/mcp_server.js — add to Claude Desktop, Cursor, Windsurf, or Gemini CLI mcpServers:
json { "mcpServers": { "jiangshan-atlas": { "command": "node", "args": ["/absolute/path/to/jiangshan-map/scripts/mcp_server.js"] } } }
  Exposes 3 native MCP tools (<5ms offline response, zero npm dependencies):
  • inspect_place({ year, place, lang? }): Returns reigning monarch/era, controlling regime (polity), macro-region (dao/lu/province), prefecture (jun/zhou/fu), modern province/city, 2,400-year lore, and shareable deep-link URL.
  • inspect_person({ person, stop?, lang? }): Returns a historical figure or monarch's biography, chronological geocoded stops across dynasties, and shareable deep-link URL.
  • search_atlas({ query, limit?, lang? }): Searches across all ancient cities, poetic & battlefield landmarks, mountain passes, historical figures, imperial eras, and chronological milestones.
  • Ready-to-Use Agent Skill: skills/jiangshan-atlas/SKILL.md (includes the zero-dependency CLI renderer skills/jiangshan-atlas/scripts/jiangshan.py)
bash # Install into Claude Code / Gemini / Jetski global skills directory: mkdir -p ~/.claude/skills ~/.gemini/config/skills && cp -r skills/jiangshan-atlas ~/.claude/skills/ && cp -r skills/jiangshan-atlas ~/.gemini/config/skills/

1. Zero-Coordinate Dual-Parameter URL Protocol (0D Pinpoint / 1D Same-Year Route / 4D Multi-Year Route)

| Mode | Example URL | Automatic Rendering Behavior | | :--- | :--- | :--- | | Single-Point Pinpoint (0D) | ?year=819&place=蓝关&lang=en
(Han Yu's 819 CE exile poem at Languan Pass) | Jumps to Tang Yuanhe 14 (819 CE), drops a pin on Languan Pass in the Qinling Mountains, and opens its 2,400-year administrative genealogy card | | Same-Year Multi-Stop Route (1D) | ?year=763&place=剑外,巴峡,巫峡,襄阳,洛阳&lang=en
(Du Fu's 763 CE poem on recapturing Henan & Hebei) | Plots numbered vermilion arcs 1 → 5 across the 763 CE Tang map and auto-fits the viewport; click any stop to inspect its genealogy | | Multi-Year Space-Time Route (4D) | ?year=1079,1080,1094,1097&place=湖州,黄州,惠州,儋州&lang=en
(Su Shi's career across Huzhou, Huangzhou, Huizhou & Danzhou) | Pairs year[i] with place[i], labeling stops with their historical years and switching the underlying dynastic map whenever you click a stop |

2. CLI One-Command Screenshot & JSON Lookup (for Agent Tool Calls)

bash

Single-point poetic landmark screenshot

python3 skills/jiangshan-atlas/scripts/jiangshan.py --year 819 --place 蓝关 --out /tmp/languan_819.png

Same-year multi-stop trajectory screenshot

python3 skills/jiangshan-atlas/scripts/jiangshan.py --year 763 --place 剑外,巴峡,巫峡,襄阳,洛阳 --out /tmp/dufu_763.png

Multi-year space-time trajectory screenshot

python3 skills/jiangshan-atlas/scripts/jiangshan.py --year 1079,1080,1094,1097 --place 湖州,黄州,惠州,儋州 --out /tmp/sushi_exile.png

3. Browser JavaScript API (window.atlasAPI) & In-Browser WebMCP (navigator.modelContext)

In browser automation environments (Playwright) or WebMCP-enabled AI browsers (navigator.modelContext), the page automatically registers jiangshan_locate, jiangshan_inspect, and jiangshan_open_person, and exposes window.atlasAPI:

  • window.atlasAPI.locate({ year, place, zoom? }): Drives the map to a single location or multi-stop trajectory and returns structured historical-geographic metadata.
  • window.atlasAPI.inspect({ year, place, person?, stop? }): Read-only query returning the controlling polity, ancient prefecture, modern province/city, leg distances, person events, and canonical shareable URL.
  • window.atlasAPI.resolvePlace(place, year?): Resolves ancient and modern names for cities, strategic passes, poetic landmarks, and battlefields.
  • window.atlasAPI.openPerson(person, stop?) & window.atlasAPI.search(query): Opens a person chronicle on the map or searches across the entire atlas.
---

Run Locally

No dependencies or build steps required. Clone and serve with any static HTTP server:

bash git clone https://github.com/DeanChensj/jiangshan-map.git cd jiangshan-map python3 -m http.server 8000

Then open http://localhost:8000 in your browser.

---

GeoJSON Export (for Leaflet / MapLibre / QGIS)

The app ships its geometry as compact topology-deduplicated VLQ bundles. To use the vector layers in other projects, generate standard RFC 7946 GeoJSON (EPSG:4326, lon/lat) locally; the output goes to geojson/ and is not committed. The export covers 403 BCE to 1948; later years and the modern province layer are not included.

bash node scripts/export_geojson.js # or: node scripts/export_geojson.js ```

GitHub Stars & Activity

3,364Stars
400Forks
5Open issues
JavaScriptLanguage

GitHub Popularity

GitHub stars3,364
Forks400
Open issues5
Primary languageJavaScript
LicenseGPL-3.0
Stars gained today789
Created2026-07-23
Last pushed2026-11-02

Trending History

Daily boardrank #10 · ▲ 789 stars
Weekly boardrank #41 · ▲ 1,995 stars

Related GitHub Projects

1

github / awesome-copilot

JavaScript★ 40,746⑂ 5,276▲ 52 stars
→
2

techjarves / Portable-Local-Studio

JavaScript★ 1,819⑂ 450▲ 73 stars
→
3

public-apis / public-apis

Python★ 495,702⑂ 55,345▲ 1,311 stars
→
4

obra / superpowers

Shell★ 311,516⑂ 27,719▲ 647 stars
→
5

mattpocock / skills

Shell★ 310,749⑂ 26,134▲ 858 stars
→
6

avelino / awesome-go

Go★ 191,825⑂ 13,695▲ 219 stars
→
7

ripienaar / free-for-dev

HTML★ 141,707⑂ 15,210▲ 274 stars
→
8

2dust / v2rayN

C#★ 119,847⑂ 16,259▲ 83 stars
→

More Trending Repositories