Not in the top 1,000 by GitHub stars

ashishkaloge/map-design

An agent skill for real maps: data maps and city posters as self-contained HTML, SVG and PNG. No API keys or runtime dependencies.

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

skills/map-design/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 4f228eed82ee

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 4f228eed82ee4eb555ac50d2723734a00c89eecf

git clone --filter=blob:none --no-checkout https://github.com/ashishkaloge/map-design.git .hotskills/ashishkaloge-map-design && git -C .hotskills/ashishkaloge-map-design checkout --detach 4f228eed82ee4eb555ac50d2723734a00c89eecf # Copy each selected skill directory from .hotskills/ashishkaloge-map-design into .claude/skills/<skill-name>/
10GitHub stars
0stars in 7 days
1skill in this repository
34commits in 30 days

Heat

1.7
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 25, 2026Oct 25, 202610

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

map-design

When your agent uses it

Make real, accurate maps as one self-contained HTML, SVG and PNG. Choropleths by country, state, province or US county, or by any boundaries in the user's own GeoJSON, TopoJSON or KML (districts, ZIP codes, wards, constituencies, sales territories); bubble, spike and point maps; routes, voyages and GPS tracks from GPX; flow maps; locator maps with an inset globe; and OpenStreetMap city posters. Use whenever the user asks for a map, a "where is" graphic, data by country/state/county/region/district, a trip, flight, run or ride, a city poster, or any geographic visualization. Ships Natural Earth, US Census and OurAirports data, so coastlines, borders and coordinates are real rather than drawn from memory.

What it loads into context

Frontmatter

187 tokens

Always available to the agent

SKILL.md

3,269 tokens

When the skill is activated

Reference documents

10,905 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. Workflow
  2. Choosing a kind
  3. Spec essentials
  4. Your own geometry
  5. Basemaps (street-level detail)
  6. Design rules
  7. Data you can use without fetching anything
  8. City posters
  9. When something goes wrong

Scripts executed separately

  • scripts/lib/basemap.mjs
  • scripts/lib/color.mjs
  • scripts/lib/data.mjs
  • scripts/lib/errors.mjs
  • scripts/lib/export.mjs
  • scripts/lib/fonts.mjs
  • scripts/lib/geo.mjs
  • scripts/lib/geofile.mjs
  • scripts/lib/hover.mjs
  • scripts/lib/html.mjs
  • scripts/lib/kinds/bubbles.mjs
  • scripts/lib/kinds/choropleth.mjs
  • scripts/lib/kinds/common.mjs
  • scripts/lib/kinds/flows.mjs
  • scripts/lib/kinds/locator.mjs
  • scripts/lib/kinds/points.mjs
  • scripts/lib/kinds/poster.mjs
  • scripts/lib/kinds/route.mjs
  • scripts/lib/labels.mjs
  • scripts/lib/layout.mjs
  • scripts/lib/locate.mjs
  • scripts/lib/osm.mjs
  • scripts/lib/polylabel.mjs
  • scripts/lib/render.mjs
  • scripts/lib/scales.mjs
  • scripts/lib/spec.mjs
  • scripts/lib/streets.mjs
  • scripts/lib/svg.mjs
  • scripts/lib/themes.mjs
  • scripts/lib/tiles.mjs
  • scripts/lib/vtiles.mjs
  • scripts/map.mjs
  • scripts/vendor/geo.iife.js
  • scripts/vendor/geo.mjs
  • scripts/vendor/licenses/d3-array-LICENSE
  • scripts/vendor/licenses/d3-geo-LICENSE
  • scripts/vendor/licenses/mapbox-point-geometry-LICENSE
  • scripts/vendor/licenses/mapbox-vector-tile-LICENSE
  • scripts/vendor/licenses/pbf-LICENSE
  • scripts/vendor/licenses/polylabel-LICENSE
  • scripts/vendor/licenses/topojson-client-LICENSE
  • scripts/vendor/licenses/us-atlas-LICENSE
  • scripts/vendor/vtile.mjs

Files

  • ../../.claude-plugin/marketplace.jsonasset508 bytes
  • ../../.claude-plugin/plugin.jsonasset528 bytes
  • LICENSEasset1,070 bytes
  • SKILL.mdcore12,438 bytes
  • SKILL.mdcore12,438 bytes
  • SKILL.mdcore12,438 bytes
  • SKILL.mdcore12,438 bytes
  • THIRD_PARTY_NOTICES.mddoc3,995 bytes
  • data/admin1/ABW.topo.jsonasset733 bytes
  • data/admin1/AFG.topo.jsonasset38,814 bytes
  • data/admin1/AGO.topo.jsonasset35,004 bytes
  • data/admin1/AIA.topo.jsonasset5,448 bytes
  • data/admin1/ALB.topo.jsonasset16,557 bytes
  • data/admin1/ALD.topo.jsonasset5,741 bytes
  • data/admin1/AND.topo.jsonasset3,144 bytes
  • data/admin1/ARE.topo.jsonasset14,120 bytes
  • data/admin1/ARG.topo.jsonasset41,886 bytes
  • data/admin1/ARM.topo.jsonasset12,440 bytes
  • data/admin1/ASM.topo.jsonasset2,021 bytes
  • data/admin1/ATA.topo.jsonasset51,529 bytes
  • data/admin1/ATC.topo.jsonasset540 bytes
  • data/admin1/ATF.topo.jsonasset5,438 bytes
  • data/admin1/ATG.topo.jsonasset3,686 bytes
  • data/admin1/AUS.topo.jsonasset47,976 bytes
  • data/admin1/AUT.topo.jsonasset18,215 bytes
  • data/admin1/AZE.topo.jsonasset46,829 bytes
  • data/admin1/BDI.topo.jsonasset12,041 bytes
  • data/admin1/BEL.topo.jsonasset14,060 bytes
  • data/admin1/BEN.topo.jsonasset11,917 bytes
  • data/admin1/BFA.topo.jsonasset41,283 bytes
  • data/admin1/BGD.topo.jsonasset26,029 bytes
  • data/admin1/BGR.topo.jsonasset26,959 bytes
  • data/admin1/BHR.topo.jsonasset3,228 bytes
  • data/admin1/BHS.topo.jsonasset21,847 bytes
  • data/admin1/BIH.topo.jsonasset17,393 bytes
  • data/admin1/BLM.topo.jsonasset596 bytes
  • data/admin1/BLR.topo.jsonasset29,075 bytes
  • data/admin1/BLZ.topo.jsonasset8,711 bytes
  • data/admin1/BMU.topo.jsonasset4,508 bytes
  • data/admin1/BOL.topo.jsonasset25,490 bytes
  • data/admin1/BRA.topo.jsonasset43,048 bytes
  • data/admin1/BRB.topo.jsonasset5,201 bytes
  • data/admin1/BRN.topo.jsonasset3,098 bytes
  • data/admin1/BTN.topo.jsonasset19,132 bytes
  • data/admin1/BWA.topo.jsonasset14,654 bytes
  • data/admin1/CAF.topo.jsonasset35,724 bytes
  • data/admin1/CAN.topo.jsonasset67,117 bytes
  • data/admin1/CHE.topo.jsonasset32,167 bytes
  • data/admin1/CHL.topo.jsonasset54,672 bytes
  • data/admin1/CHN.topo.jsonasset44,483 bytes
  • data/admin1/CIV.topo.jsonasset36,572 bytes
  • data/admin1/CLP.topo.jsonasset557 bytes
  • data/admin1/CMR.topo.jsonasset24,191 bytes
  • data/admin1/COD.topo.jsonasset35,481 bytes
  • data/admin1/COG.topo.jsonasset26,620 bytes
  • data/admin1/COK.topo.jsonasset3,636 bytes
  • data/admin1/COL.topo.jsonasset42,012 bytes
  • data/admin1/COM.topo.jsonasset2,095 bytes
  • data/admin1/CPV.topo.jsonasset10,218 bytes
  • data/admin1/CRI.topo.jsonasset16,125 bytes
  • data/admin1/CSI.topo.jsonasset1,478 bytes
  • data/admin1/CUB.topo.jsonasset37,938 bytes
  • data/admin1/CUW.topo.jsonasset938 bytes
  • data/admin1/CYM.topo.jsonasset1,290 bytes
  • data/admin1/CYN.topo.jsonasset2,495 bytes
  • data/admin1/CYP.topo.jsonasset6,758 bytes
  • data/admin1/CZE.topo.jsonasset25,934 bytes
  • data/admin1/DEU.topo.jsonasset36,474 bytes
  • data/admin1/DJI.topo.jsonasset4,263 bytes
  • data/admin1/DMA.topo.jsonasset5,158 bytes
  • data/admin1/DNK.topo.jsonasset21,940 bytes
  • data/admin1/DOM.topo.jsonasset20,687 bytes
  • data/admin1/DZA.topo.jsonasset41,263 bytes
  • data/admin1/ECU.topo.jsonasset36,272 bytes
  • data/admin1/EGY.topo.jsonasset34,515 bytes
  • data/admin1/ERI.topo.jsonasset11,917 bytes
  • data/admin1/ESB.topo.jsonasset1,578 bytes
  • data/admin1/ESP.topo.jsonasset46,797 bytes
  • data/admin1/EST.topo.jsonasset20,799 bytes
  • data/admin1/ETH.topo.jsonasset27,184 bytes
  • data/admin1/FIN.topo.jsonasset41,654 bytes
  • data/admin1/FJI.topo.jsonasset13,004 bytes
  • data/admin1/FLK.topo.jsonasset12,806 bytes
  • data/admin1/FRA.topo.jsonasset56,241 bytes
  • data/admin1/FRO.topo.jsonasset5,310 bytes
  • data/admin1/FSM.topo.jsonasset3,301 bytes
  • data/admin1/GAB.topo.jsonasset20,967 bytes
  • data/admin1/GBR.topo.jsonasset109,088 bytes
  • data/admin1/GEO.topo.jsonasset12,363 bytes
  • data/admin1/GGY.topo.jsonasset988 bytes
  • data/admin1/GHA.topo.jsonasset26,196 bytes
  • data/admin1/GIB.topo.jsonasset523 bytes
  • data/admin1/GIN.topo.jsonasset34,670 bytes
  • data/admin1/GMB.topo.jsonasset6,303 bytes
  • data/admin1/GNB.topo.jsonasset18,382 bytes
  • data/admin1/GNQ.topo.jsonasset5,980 bytes
  • data/admin1/GRC.topo.jsonasset51,979 bytes
  • data/admin1/GRD.topo.jsonasset2,957 bytes
  • data/admin1/GRL.topo.jsonasset52,415 bytes
  • data/admin1/GTM.topo.jsonasset23,188 bytes
  • data/admin1/GUM.topo.jsonasset971 bytes
  • data/admin1/GUY.topo.jsonasset18,396 bytes
  • data/admin1/HKG.topo.jsonasset9,946 bytes
  • data/admin1/HMD.topo.jsonasset1,060 bytes
  • data/admin1/HND.topo.jsonasset26,024 bytes
  • data/admin1/HRV.topo.jsonasset40,321 bytes
  • data/admin1/HTI.topo.jsonasset11,228 bytes
  • data/admin1/HUN.topo.jsonasset30,549 bytes
  • data/admin1/IDN.topo.jsonasset62,705 bytes
  • data/admin1/IMN.topo.jsonasset1,331 bytes
  • data/admin1/IND.topo.jsonasset43,989 bytes
  • data/admin1/IOA.topo.jsonasset1,182 bytes
  • data/admin1/IOT.topo.jsonasset1,487 bytes
  • data/admin1/IRL.topo.jsonasset43,429 bytes
  • data/admin1/IRN.topo.jsonasset44,254 bytes
  • data/admin1/IRQ.topo.jsonasset28,035 bytes
  • data/admin1/ISL.topo.jsonasset33,006 bytes
  • data/admin1/ISR.topo.jsonasset9,274 bytes
  • data/admin1/ITA.topo.jsonasset65,068 bytes
  • data/admin1/JAM.topo.jsonasset9,435 bytes
  • data/admin1/JEY.topo.jsonasset958 bytes
  • data/admin1/JOR.topo.jsonasset9,642 bytes
  • data/admin1/JPN.topo.jsonasset54,521 bytes
  • data/admin1/KAB.topo.jsonasset1,188 bytes
  • data/admin1/KAS.topo.jsonasset839 bytes
  • data/admin1/KAZ.topo.jsonasset47,021 bytes
  • data/admin1/KEN.topo.jsonasset25,408 bytes
  • data/admin1/KGZ.topo.jsonasset21,799 bytes
  • data/admin1/KHM.topo.jsonasset31,546 bytes
  • data/admin1/KIR.topo.jsonasset5,652 bytes
  • data/admin1/KNA.topo.jsonasset5,350 bytes
  • data/admin1/KOR.topo.jsonasset37,263 bytes
  • data/admin1/KOS.topo.jsonasset15,852 bytes
  • data/admin1/KWT.topo.jsonasset4,552 bytes
  • data/admin1/LAO.topo.jsonasset28,019 bytes
  • data/admin1/LBN.topo.jsonasset7,751 bytes
  • data/admin1/LBR.topo.jsonasset21,197 bytes
  • data/admin1/LBY.topo.jsonasset17,787 bytes
  • data/admin1/LCA.topo.jsonasset4,646 bytes
  • data/admin1/LIE.topo.jsonasset4,519 bytes
  • data/admin1/LKA.topo.jsonasset24,906 bytes
  • data/admin1/LSO.topo.jsonasset12,475 bytes
  • data/admin1/LTU.topo.jsonasset19,172 bytes
  • data/admin1/LUX.topo.jsonasset3,591 bytes
  • data/admin1/LVA.topo.jsonasset64,860 bytes
  • data/admin1/MAC.topo.jsonasset1,417 bytes
  • data/admin1/MAF.topo.jsonasset713 bytes
  • data/admin1/MAR.topo.jsonasset20,095 bytes
  • data/admin1/MCO.topo.jsonasset577 bytes
  • data/admin1/MDA.topo.jsonasset26,774 bytes
  • data/admin1/MDG.topo.jsonasset37,275 bytes
  • data/admin1/MDV.topo.jsonasset18,098 bytes
  • data/admin1/MEX.topo.jsonasset45,567 bytes
  • data/admin1/MHL.topo.jsonasset2,573 bytes
  • data/admin1/MKD.topo.jsonasset52,524 bytes
  • data/admin1/MLI.topo.jsonasset20,421 bytes
  • data/admin1/MLT.topo.jsonasset23,162 bytes
  • data/admin1/MMR.topo.jsonasset41,113 bytes
  • data/admin1/MNE.topo.jsonasset12,600 bytes
  • data/admin1/MNG.topo.jsonasset35,729 bytes
  • data/admin1/MNP.topo.jsonasset2,919 bytes
  • data/admin1/MOZ.topo.jsonasset35,435 bytes
  • data/admin1/MRT.topo.jsonasset15,991 bytes
  • data/admin1/MSR.topo.jsonasset1,366 bytes
  • data/admin1/MUS.topo.jsonasset6,217 bytes
  • data/admin1/MWI.topo.jsonasset26,567 bytes
  • data/admin1/MYS.topo.jsonasset37,568 bytes
  • data/admin1/NAM.topo.jsonasset23,209 bytes
  • data/admin1/NCL.topo.jsonasset10,259 bytes
  • data/admin1/NER.topo.jsonasset14,333 bytes
  • data/admin1/NFK.topo.jsonasset766 bytes
  • data/admin1/NGA.topo.jsonasset43,422 bytes
  • data/admin1/NIC.topo.jsonasset21,553 bytes
  • data/admin1/NIU.topo.jsonasset861 bytes
  • data/admin1/NLD.topo.jsonasset15,028 bytes
  • data/admin1/NOR.topo.jsonasset51,625 bytes
  • data/admin1/NPL.topo.jsonasset22,739 bytes
  • data/admin1/NRU.topo.jsonasset4,138 bytes
  • data/admin1/NZL.topo.jsonasset40,107 bytes
  • data/admin1/OMN.topo.jsonasset12,796 bytes
  • data/admin1/PAK.topo.jsonasset33,321 bytes
  • data/admin1/PAN.topo.jsonasset28,036 bytes
  • data/admin1/PCN.topo.jsonasset831 bytes
  • data/admin1/PER.topo.jsonasset39,298 bytes
  • data/admin1/PGA.topo.jsonasset1,391 bytes
  • data/admin1/PHL.topo.jsonasset78,228 bytes
  • data/admin1/PLW.topo.jsonasset5,532 bytes
  • data/admin1/PNG.topo.jsonasset48,460 bytes
  • data/admin1/POL.topo.jsonasset25,514 bytes
  • data/admin1/PRI.topo.jsonasset3,415 bytes
  • data/admin1/PRK.topo.jsonasset29,038 bytes
  • data/admin1/PRT.topo.jsonasset26,380 bytes
  • data/admin1/PRY.topo.jsonasset27,693 bytes
  • data/admin1/PSX.topo.jsonasset2,862 bytes
  • data/admin1/PYF.topo.jsonasset10,290 bytes
  • data/admin1/QAT.topo.jsonasset5,133 bytes
  • data/admin1/ROU.topo.jsonasset42,059 bytes
  • data/admin1/RUS.topo.jsonasset66,773 bytes
  • data/admin1/RWA.topo.jsonasset7,089 bytes
  • data/admin1/SAH.topo.jsonasset2,999 bytes
  • data/admin1/SAU.topo.jsonasset32,947 bytes
  • data/admin1/SDN.topo.jsonasset21,256 bytes
  • data/admin1/SDS.topo.jsonasset17,228 bytes
  • data/admin1/SEN.topo.jsonasset23,619 bytes
  • data/admin1/SGP.topo.jsonasset2,739 bytes
  • data/admin1/SGS.topo.jsonasset5,692 bytes
  • data/admin1/SHN.topo.jsonasset1,531 bytes
  • data/admin1/SLB.topo.jsonasset20,652 bytes
  • data/admin1/SLE.topo.jsonasset10,797 bytes
  • data/admin1/SLV.topo.jsonasset15,946 bytes
  • data/admin1/SMR.topo.jsonasset3,365 bytes
  • data/admin1/SOL.topo.jsonasset3,297 bytes
  • data/admin1/SOM.topo.jsonasset10,560 bytes
  • data/admin1/SPM.topo.jsonasset1,624 bytes
  • data/admin1/SRB.topo.jsonasset35,508 bytes
  • data/admin1/STP.topo.jsonasset1,544 bytes
  • data/admin1/SUR.topo.jsonasset12,971 bytes
  • data/admin1/SVK.topo.jsonasset19,597 bytes
  • data/admin1/SVN.topo.jsonasset87,486 bytes
  • data/admin1/SWE.topo.jsonasset46,054 bytes
  • data/admin1/SWZ.topo.jsonasset4,491 bytes
  • data/admin1/SXM.topo.jsonasset554 bytes
  • data/admin1/SYC.topo.jsonasset10,025 bytes
  • data/admin1/SYR.topo.jsonasset20,702 bytes
  • data/admin1/TCA.topo.jsonasset3,640 bytes
  • data/admin1/TCD.topo.jsonasset30,418 bytes
  • data/admin1/TGO.topo.jsonasset8,530 bytes
  • data/admin1/THA.topo.jsonasset53,657 bytes
  • data/admin1/TJK.topo.jsonasset17,252 bytes
  • data/admin1/TKM.topo.jsonasset18,313 bytes
  • data/admin1/TLS.topo.jsonasset8,667 bytes
  • data/admin1/TON.topo.jsonasset3,302 bytes
  • data/admin1/TTO.topo.jsonasset8,406 bytes
  • data/admin1/TUN.topo.jsonasset24,600 bytes
  • data/admin1/TUR.topo.jsonasset60,296 bytes
  • data/admin1/TUV.topo.jsonasset1,116 bytes
  • data/admin1/TWN.topo.jsonasset16,616 bytes
  • data/admin1/TZA.topo.jsonasset46,514 bytes
  • data/admin1/UGA.topo.jsonasset63,686 bytes
  • data/admin1/UKR.topo.jsonasset37,274 bytes
  • data/admin1/UMI.topo.jsonasset2,539 bytes
  • data/admin1/URY.topo.jsonasset25,162 bytes
  • data/admin1/USA.topo.jsonasset65,455 bytes
  • data/admin1/USG.topo.jsonasset997 bytes
  • data/admin1/UZB.topo.jsonasset25,871 bytes
  • data/admin1/VAT.topo.jsonasset542 bytes
  • data/admin1/VCT.topo.jsonasset3,032 bytes
  • data/admin1/VEN.topo.jsonasset40,451 bytes
  • data/admin1/VGB.topo.jsonasset1,471 bytes
  • data/admin1/VIR.topo.jsonasset1,606 bytes
  • data/admin1/VNM.topo.jsonasset56,238 bytes
  • data/admin1/VUT.topo.jsonasset10,628 bytes
  • data/admin1/WLF.topo.jsonasset1,476 bytes
  • data/admin1/WSB.topo.jsonasset942 bytes
  • data/admin1/WSM.topo.jsonasset5,136 bytes
  • data/admin1/YEM.topo.jsonasset23,801 bytes
  • data/admin1/ZAF.topo.jsonasset33,183 bytes
  • data/admin1/ZMB.topo.jsonasset32,247 bytes
  • data/admin1/ZWE.topo.jsonasset28,393 bytes
  • data/airports.jsonasset267,871 bytes
  • data/countries.jsonasset79,688 bytes
  • data/physical-50m.topo.jsonasset310,035 bytes
  • data/places.jsonasset481,670 bytes
  • data/us-counties.topo.jsonasset842,143 bytes
  • data/us-states.topo.jsonasset114,554 bytes
  • data/world-110m.topo.jsonasset168,666 bytes
  • data/world-50m.topo.jsonasset432,565 bytes
  • fonts/eb-garamond-latin-400-italic.woff2asset22,172 bytes
  • fonts/eb-garamond-latin-400-normal.woff2asset21,704 bytes
  • fonts/eb-garamond-latin-600-normal.woff2asset23,112 bytes
  • fonts/eb-garamond-latin-ext-400-italic.woff2asset45,940 bytes
  • fonts/eb-garamond-latin-ext-400-normal.woff2asset57,272 bytes
  • fonts/eb-garamond-latin-ext-600-normal.woff2asset64,720 bytes
  • fonts/eb-garamond-vietnamese-400-italic.woff2asset6,564 bytes
  • fonts/eb-garamond-vietnamese-400-normal.woff2asset6,612 bytes
  • fonts/eb-garamond-vietnamese-600-normal.woff2asset7,392 bytes
  • fonts/fonts.jsonasset13,449 bytes
  • fonts/ibm-plex-mono-latin-400-normal.woff2asset14,708 bytes
  • fonts/ibm-plex-mono-latin-500-normal.woff2asset14,888 bytes
  • fonts/ibm-plex-mono-latin-ext-400-normal.woff2asset13,348 bytes
  • fonts/ibm-plex-mono-latin-ext-500-normal.woff2asset13,432 bytes
  • fonts/ibm-plex-mono-vietnamese-400-normal.woff2asset5,868 bytes
  • fonts/ibm-plex-mono-vietnamese-500-normal.woff2asset6,040 bytes
  • fonts/jost-latin-300-normal.woff2asset9,876 bytes
  • fonts/jost-latin-400-normal.woff2asset9,404 bytes
  • fonts/jost-latin-600-normal.woff2asset10,480 bytes
  • fonts/jost-latin-ext-300-normal.woff2asset6,516 bytes
  • fonts/jost-latin-ext-400-normal.woff2asset6,396 bytes
  • fonts/jost-latin-ext-600-normal.woff2asset6,832 bytes
  • fonts/libre-franklin-latin-400-italic.woff2asset17,304 bytes
  • fonts/libre-franklin-latin-400-normal.woff2asset15,900 bytes
  • fonts/libre-franklin-latin-600-normal.woff2asset15,980 bytes
  • fonts/libre-franklin-latin-800-normal.woff2asset16,008 bytes
  • fonts/libre-franklin-latin-ext-400-italic.woff2asset15,632 bytes
  • fonts/libre-franklin-latin-ext-400-normal.woff2asset14,580 bytes
  • fonts/libre-franklin-latin-ext-600-normal.woff2asset14,676 bytes
  • fonts/libre-franklin-latin-ext-800-normal.woff2asset14,848 bytes
  • fonts/libre-franklin-vietnamese-400-italic.woff2asset4,876 bytes
  • fonts/libre-franklin-vietnamese-400-normal.woff2asset4,580 bytes
  • fonts/libre-franklin-vietnamese-600-normal.woff2asset4,616 bytes
  • fonts/libre-franklin-vietnamese-800-normal.woff2asset4,552 bytes
  • fonts/licenses/eb-garamond-OFL.txtdoc4,519 bytes
  • fonts/licenses/ibm-plex-mono-OFL.txtdoc5,299 bytes
  • fonts/licenses/jost-OFL.txtdoc4,497 bytes
  • fonts/licenses/libre-franklin-OFL.txtdoc4,530 bytes
  • fonts/licenses/source-serif-4-OFL.txtdoc4,314 bytes
  • fonts/source-serif-4-latin-400-italic.woff2asset20,092 bytes
  • fonts/source-serif-4-latin-400-normal.woff2asset20,088 bytes
  • fonts/source-serif-4-latin-600-normal.woff2asset21,532 bytes
  • fonts/source-serif-4-latin-ext-400-italic.woff2asset18,480 bytes
  • fonts/source-serif-4-latin-ext-400-normal.woff2asset17,828 bytes
  • fonts/source-serif-4-latin-ext-600-normal.woff2asset18,376 bytes
  • fonts/source-serif-4-vietnamese-400-italic.woff2asset6,344 bytes
  • fonts/source-serif-4-vietnamese-400-normal.woff2asset6,236 bytes
  • fonts/source-serif-4-vietnamese-600-normal.woff2asset6,444 bytes
  • references/basemaps.mddoc7,881 bytes
  • references/cartography.mddoc3,293 bytes
  • references/data.mddoc4,333 bytes
  • references/posters.mddoc5,528 bytes
  • references/spec.mddoc15,949 bytes
  • scripts/lib/basemap.mjsruns6,203 bytes
  • scripts/lib/color.mjsruns4,958 bytes
  • scripts/lib/data.mjsruns14,316 bytes
  • scripts/lib/errors.mjsruns200 bytes
  • scripts/lib/export.mjsruns5,370 bytes
  • scripts/lib/fonts.mjsruns3,195 bytes
  • scripts/lib/geo.mjsruns12,349 bytes
  • scripts/lib/geofile.mjsruns24,113 bytes
  • scripts/lib/hover.mjsruns8,861 bytes
  • scripts/lib/html.mjsruns11,976 bytes
  • scripts/lib/kinds/bubbles.mjsruns5,662 bytes
  • scripts/lib/kinds/choropleth.mjsruns25,984 bytes
  • scripts/lib/kinds/common.mjsruns9,015 bytes
  • scripts/lib/kinds/flows.mjsruns8,511 bytes
  • scripts/lib/kinds/locator.mjsruns14,223 bytes
  • scripts/lib/kinds/points.mjsruns2,918 bytes
  • scripts/lib/kinds/poster.mjsruns20,458 bytes
  • scripts/lib/kinds/route.mjsruns10,204 bytes
  • scripts/lib/labels.mjsruns3,826 bytes
  • scripts/lib/layout.mjsruns12,693 bytes
  • scripts/lib/locate.mjsruns6,573 bytes
  • scripts/lib/osm.mjsruns14,771 bytes
  • scripts/lib/polylabel.mjsruns3,829 bytes
  • scripts/lib/render.mjsruns8,356 bytes
  • scripts/lib/scales.mjsruns6,791 bytes
  • scripts/lib/spec.mjsruns7,331 bytes
  • scripts/lib/streets.mjsruns7,198 bytes
  • scripts/lib/svg.mjsruns3,518 bytes
  • scripts/lib/themes.mjsruns9,539 bytes
  • scripts/lib/tiles.mjsruns23,517 bytes
  • scripts/lib/vtiles.mjsruns23,829 bytes
  • scripts/map.mjsruns10,040 bytes
  • scripts/vendor/geo.iife.jsruns41,603 bytes
  • scripts/vendor/geo.mjsruns43,961 bytes
  • scripts/vendor/licenses/d3-array-LICENSEruns731 bytes
  • scripts/vendor/licenses/d3-geo-LICENSEruns1,857 bytes
  • scripts/vendor/licenses/mapbox-point-geometry-LICENSEruns725 bytes
  • scripts/vendor/licenses/mapbox-vector-tile-LICENSEruns1,500 bytes
  • scripts/vendor/licenses/pbf-LICENSEruns1,467 bytes
  • scripts/vendor/licenses/polylabel-LICENSEruns722 bytes
  • scripts/vendor/licenses/topojson-client-LICENSEruns734 bytes
  • scripts/vendor/licenses/us-atlas-LICENSEruns734 bytes
  • scripts/vendor/vtile.mjsruns15,098 bytes
Read SKILL.md

# Map Design

You cannot draw a coastline from memory, and neither can any model. This skill
gives you real geography: bundled boundary data, an offline gazetteer, proper
projections, and a renderer with an editorial design system. You write a short
JSON spec; the CLI draws the map.

**Never hand-write map geometry, SVG paths or coordinates for countries,
coasts or borders.** Always go through `scripts/map.mjs`.

`<skill-dir>` below is this skill's base directory. The CLI needs Node.js 20+
and nothing else. PNG export uses a local Chrome, Edge, Brave or Chromium if
one exists; HTML and SVG always work.
View the complete source on GitHub

Skills included

  • map-design

Repository facts

License
MIT
Created
Oct 18, 2026
Last pushed
Oct 28, 2026
Forks
1
Open issues
0
Project activity
Active

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 6, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 205 notes
  • skills/map-design/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/map-design/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/map-design/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/map-design/data/admin1/AFG.topo.json:1 Analysis incomplete: physical or joined line exceeds character limit
  • skills/map-design/data/admin1/AGO.topo.json:1 Analysis incomplete: physical or joined line exceeds character limit
  • skills/map-design/data/admin1/AIA.topo.json:1 Analysis incomplete: physical or joined line exceeds character limit
  • skills/map-design/data/admin1/ALB.topo.json:1 Analysis incomplete: physical or joined line exceeds character limit
  • skills/map-design/data/admin1/ALD.topo.json:1 Analysis incomplete: physical or joined line exceeds character limit
  • skills/map-design/data/admin1/ARE.topo.json:1 Analysis incomplete: physical or joined line exceeds character limit
  • skills/map-design/data/admin1/ARG.topo.json:1 Analysis incomplete: physical or joined line exceeds character limit
  • skills/map-design/data/admin1/ARM.topo.json:1 Analysis incomplete: physical or joined line exceeds character limit
  • skills/map-design/data/admin1/ATA.topo.json:1 Analysis incomplete: physical or joined line exceeds character limit
  • skills/map-design/data/admin1/ATF.topo.json:1 Analysis incomplete: physical or joined line exceeds character limit
  • skills/map-design/data/admin1/AUS.topo.json:1 Analysis incomplete: physical or joined line exceeds character limit
  • skills/map-design/data/admin1/AUT.topo.json:1 Analysis incomplete: physical or joined line exceeds character limit
  • skills/map-design/data/admin1/AZE.topo.json:1 Analysis incomplete: physical or joined line exceeds character limit
  • skills/map-design/data/admin1/BDI.topo.json:1 Analysis incomplete: physical or joined line exceeds character limit
  • skills/map-design/data/admin1/BEL.topo.json:1 Analysis incomplete: physical or joined line exceeds character limit
  • skills/map-design/data/admin1/BEN.topo.json:1 Analysis incomplete: physical or joined line exceeds character limit
  • skills/map-design/data/admin1/BFA.topo.json:1 Analysis incomplete: physical or joined line exceeds character limit
Show all 208 signals by file

.claude-plugin/plugin.json

  • Network accessline 5
    "author": {     "name": "Ashish Kaloge",     "url": "https://github.com/ashishkaloge"
  • Network accessline 6
    "name": "Ashish Kaloge",     "url": "https://github.com/ashishkaloge"   },
  • Network accessline 7
    "url": "https://github.com/ashishkaloge"
  • Network accessline 8
    },   "repository": "https://github.com/ashishkaloge/map-design",   "license": "MIT",
  • Network accessline 9
    "repository": "https://github.com/ashishkaloge/map-design",

skills/map-design/SKILL.md

  • Network accessline 135
    No file? For districts and other second-level areas, look for the national statistics or mapping office's boundaries, or geoBoundaries (<https://www.geoboundaries.org>, open licenses per country). Download the
  • Network accessline 136
    statistics or mapping office's boundaries, or geoBoundaries (<https://www.geoboundaries.org>, open licenses per country). Download the GeoJSON next to the spec and credit it in `source`. Details:
  • Network accessline 137
    (<https://www.geoboundaries.org>, open licenses per country). Download the

skills/map-design/THIRD_PARTY_NOTICES.md

  • Network accessline 10
    - [d3-geo](https://github.com/d3/d3-geo) 3.1.1, Copyright 2010-2024 Mike
  • Network accessline 12
    notice, Copyright 2008-2012 Charles Karney (MIT). The complete upstream text   is in [d3-geo-LICENSE](scripts/vendor/licenses/d3-geo-LICENSE). - [d3-array](https://github.com/d3/d3-array) 3.2.4, Copyright 2010-2023 Mike
  • Network accessline 13
    is in [d3-geo-LICENSE](scripts/vendor/licenses/d3-geo-LICENSE). - [d3-array](https://github.com/d3/d3-array) 3.2.4, Copyright 2010-2023 Mike   Bostock, ISC License. Complete text:
  • Network accessline 14
    - [d3-array](https://github.com/d3/d3-array) 3.2.4, Copyright 2010-2023 Mike
  • Network accessline 15
    Bostock, ISC License. Complete text:   [d3-array-LICENSE](scripts/vendor/licenses/d3-array-LICENSE). - [topojson-client](https://github.com/topojson/topojson-client) 3.1.0,
  • Network accessline 16
    [d3-array-LICENSE](scripts/vendor/licenses/d3-array-LICENSE). - [topojson-client](https://github.com/topojson/topojson-client) 3.1.0,   Copyright 2012-2019 Michael Bostock, ISC License. Complete text:
  • Network accessline 17
    - [topojson-client](https://github.com/topojson/topojson-client) 3.1.0,
  • Network accessline 23
    - [pbf](https://github.com/mapbox/pbf) 4.0.2, Copyright (c) 2024 Mapbox,
  • Network accessline 24
    BSD 3-Clause License. Complete text: [pbf-LICENSE](scripts/vendor/licenses/pbf-LICENSE). - [@mapbox/vector-tile](https://github.com/mapbox/vector-tile-js) 2.0.5,   Copyright (c) 2024 Mapbox, BSD 3-Clause License. Complete text:
  • Network accessline 25
    - [@mapbox/vector-tile](https://github.com/mapbox/vector-tile-js) 2.0.5,
  • Network accessline 26
    Copyright (c) 2024 Mapbox, BSD 3-Clause License. Complete text:   [mapbox-vector-tile-LICENSE](scripts/vendor/licenses/mapbox-vector-tile-LICENSE). - [@mapbox/point-geometry](https://github.com/mapbox/point-geometry) 1.1.0,
  • Network accessline 27
    [mapbox-vector-tile-LICENSE](scripts/vendor/licenses/mapbox-vector-tile-LICENSE). - [@mapbox/point-geometry](https://github.com/mapbox/point-geometry) 1.1.0,   Copyright (c) 2024 Mapbox, ISC License. Complete text:
  • Network accessline 28
    - [@mapbox/point-geometry](https://github.com/mapbox/point-geometry) 1.1.0,
  • Network accessline 38
    - [Natural Earth](https://www.naturalearthdata.com/) vector data (countries,
  • Network accessline 39
    first-level subdivisions, populated places, lakes, rivers): public domain.   Simplified and converted to TopoJSON by the repository's `tools/build-data.mjs`. - [us-atlas](https://github.com/topojson/us-atlas) 3.0.1 (ISC), built from US
  • Network accessline 40
    Simplified and converted to TopoJSON by the repository's `tools/build-data.mjs`. - [us-atlas](https://github.com/topojson/us-atlas) 3.0.1 (ISC), built from US   Census Bureau cartographic boundary files: public domain. The upstream
  • Network accessline 41
    - [us-atlas](https://github.com/topojson/us-atlas) 3.0.1 (ISC), built from US
  • Network accessline 42
    Census Bureau cartographic boundary files: public domain. The upstream   license text is in [us-atlas-LICENSE](scripts/vendor/licenses/us-atlas-LICENSE). - [OurAirports](https://ourairports.com/data/) airport data: public domain.
  • Network accessline 43
    license text is in [us-atlas-LICENSE](scripts/vendor/licenses/us-atlas-LICENSE). - [OurAirports](https://ourairports.com/data/) airport data: public domain. - City posters and the `streets` basemap download data from
  • Network accessline 44
    - [OurAirports](https://ourairports.com/data/) airport data: public domain. - City posters and the `streets` basemap download data from   [OpenStreetMap](https://www.openstreetmap.org/copyright) at render time, as
  • Network accessline 45
    - City posters and the `streets` basemap download data from   [OpenStreetMap](https://www.openstreetmap.org/copyright) at render time, as   vector tiles in the [OpenMapTiles](https://openmaptiles.org/) schema served by
  • Network accessline 46
    [OpenStreetMap](https://www.openstreetmap.org/copyright) at render time, as
  • Network accessline 47
    vector tiles in the [OpenMapTiles](https://openmaptiles.org/) schema served by
  • Network accessline 48
    [OpenFreeMap](https://openfreemap.org/), or from the Overpass API as a fallback.
  • Network accessline 49
    OpenStreetMap data is © OpenStreetMap contributors and available under the Open   Database License 1.0. The OpenMapTiles schema's design is licensed under   [CC BY 4.0](https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md).
  • Network accessline 50
    Database License 1.0. The OpenMapTiles schema's design is licensed under   [CC BY 4.0](https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md).   Vector maps print © OpenMapTiles.org, © OpenStreetMap contributors and the
  • Network accessline 51
    [CC BY 4.0](https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md).
  • Network accessline 62
    All fonts are under the [SIL Open Font License 1.1](https://openfontlicense.org/),

skills/map-design/fonts/licenses/eb-garamond-OFL.txt

  • Network accessline 1
    Copyright 2017 The EB Garamond Project Authors (https://github.com/octaviopardo/EBGaramond12) EBGaramond-Italic[wght].ttf: Copyright 2017 The EB Garamond Project Authors (https://github.com/octaviopardo/EBGaramond12)
  • Network accessline 3
    This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
  • Network accessline 5
    http://scripts.sil.org/OFL

skills/map-design/fonts/licenses/ibm-plex-mono-OFL.txt

  • Network accessline 3
    This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
  • Network accessline 5
    http://scripts.sil.org/OFL

skills/map-design/fonts/licenses/jost-OFL.txt

  • Network accessline 1
    Copyright 2020 The Jost Project Authors (https://github.com/indestructible-type/Jost) Jost-Italic[wght].ttf: Copyright 2020 The Jost Project Authors (https://github.com/indestructible-type/Jost)
  • Network accessline 3
    This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
  • Network accessline 5
    http://scripts.sil.org/OFL

skills/map-design/fonts/licenses/libre-franklin-OFL.txt

  • Network accessline 1
    Copyright 2020 The Libre Franklin Project Authors (https://github.com/googlefonts/Libre-Franklin) LibreFranklin-Italic[wght].ttf: Copyright 2020 The Libre Franklin Project Authors (https://github.com/googlefonts/Libre-Franklin)
  • Network accessline 3
    This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
  • Network accessline 5
    http://scripts.sil.org/OFL

skills/map-design/fonts/licenses/source-serif-4-OFL.txt

  • Network accessline 3
    This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
  • Network accessline 5
    http://scripts.sil.org/OFL

skills/map-design/references/basemaps.md

  • Network accessline 13
    Draws roads (fading by class), water, parks, rail and, at the closest zoom, building footprints from OpenStreetMap vector tiles in the [OpenMapTiles](https://openmaptiles.org/) schema, served free by
  • Network accessline 14
    building footprints from OpenStreetMap vector tiles in the [OpenMapTiles](https://openmaptiles.org/) schema, served free by [OpenFreeMap](https://openfreemap.org/). Colours come from the map's theme, so the
  • Network accessline 15
    [OpenMapTiles](https://openmaptiles.org/) schema, served free by
  • Network accessline 16
    [OpenFreeMap](https://openfreemap.org/). Colours come from the map's theme, so the
  • Network accessline 31
    its required attribution is covered by the generated footer; extra attribution   in a custom TileJSON is not automatically included. - [OpenFreeMap's terms](https://openfreemap.org/tos/) allow downloads from apps
  • Network accessline 32
    in a custom TileJSON is not automatically included. - [OpenFreeMap's terms](https://openfreemap.org/tos/) allow downloads from apps   of at most 3,000 tiles or 50 MB, four requests at a time, with an identifying
  • Network accessline 33
    - [OpenFreeMap's terms](https://openfreemap.org/tos/) allow downloads from apps   of at most 3,000 tiles or 50 MB, four requests at a time, with an identifying   User-Agent; the renderer enforces all three. Commercial use is allowed. The
  • Network accessline 106
    `osm`, `light` and `dark` use `tile.openstreetmap.org`. Its [tile usage policy](https://operations.osmfoundation.org/policies/tiles/)
  • Network accessline 107
    [tile usage policy](https://operations.osmfoundation.org/policies/tiles/)
  • Network accessline 111
    workloads, use self-hosted tiles or a provider that explicitly permits them. Embedding a finished map does not establish permission for a bulk/offline workflow. See the [attribution guidelines](https://osmfoundation.org/wiki/Licence/Attribu
  • Network accessline 112
    Embedding a finished map does not establish permission for a bulk/offline workflow. See the [attribution guidelines](https://osmfoundation.org/wiki/Licence/Attribution_Guidelines) for the map's credits and licence notice.
  • Network accessline 113
    workflow. See the [attribution guidelines](https://osmfoundation.org/wiki/Licence/Attribution_Guidelines)
  • Network accessline 118
    `osm-hot` is hosted by OpenStreetMap France; it is not governed by the standard OSMF tile-service policy above. Its [map guidance](https://www.openstreetmap.fr/fonds-de-carte/)
  • Network accessline 119
    OSMF tile-service policy above. Its [map guidance](https://www.openstreetmap.fr/fonds-de-carte/)
  • Network accessline 120
    allows attributed paper prints and screenshots under the associated licence. Its [service policy](https://www.openstreetmap.fr/usage/) sets separate conditions for website/application use, including public access, nonprofit use and moderate
  • Network accessline 121
    Its [service policy](https://www.openstreetmap.fr/usage/) sets separate conditions
  • Network accessline 130
    requires a key for all requests; unauthenticated presets are rejected rather than downloading watermarked imagery. The [CARTO basemap terms](https://carto.com/legal/basemap-terms/), section 9,
  • Network accessline 131
    downloading watermarked imagery. The [CARTO basemap terms](https://carto.com/legal/basemap-terms/), section 9, prohibit server-side caching and cap end-user cache retention at 30 days.
  • Network accessline 132
    The [CARTO basemap terms](https://carto.com/legal/basemap-terms/), section 9,
  • Network accessline 135
    `basemaps.cartocdn.com` or its documented `a`/`b`/`c`/`d` tile subdomains, even when `cache: true` is requested. The same host checks enforce the key requirement for custom URLs. See the [official tile URL formats](https://github.com/CartoD
  • Network accessline 137
    for custom URLs. See the [official tile URL formats](https://github.com/CartoDB/basemap-styles).
  • Network accessline 140
    illustrative, editorial or documentary purposes. This is not blanket permission to redistribute raw tiles, build a tile archive or offer offline tile access. Check the terms and the [provider's current setup instructions](https://carto.com/
  • Network accessline 141
    to redistribute raw tiles, build a tile archive or offer offline tile access. Check the terms and the [provider's current setup instructions](https://carto.com/basemaps/) before using or sharing an export.
  • Network accessline 142
    Check the terms and the [provider's current setup instructions](https://carto.com/basemaps/)

skills/map-design/references/data.md

  • Network accessline 42
    - World Bank Indicators API, JSON or CSV, keyed by ISO alpha-3:   `https://api.worldbank.org/v2/country/all/indicator/SP.POP.TOTL?format=json&date=2023&per_page=400`
  • Network accessline 43
    `https://api.worldbank.org/v2/country/all/indicator/SP.POP.TOTL?format=json&date=2023&per_page=400`
  • Network accessline 44
    (World Bank rows include regional aggregates such as `WLD` or `EUU`; they will   show up as unmatched and can be ignored.) - Our World in Data grapher CSVs: `https://ourworldindata.org/grapher/<chart>.csv`,
  • Network accessline 45
    show up as unmatched and can be ignored.) - Our World in Data grapher CSVs: `https://ourworldindata.org/grapher/<chart>.csv`,   with an ISO `Code` column.
  • Network accessline 46
    - Our World in Data grapher CSVs: `https://ourworldindata.org/grapher/<chart>.csv`,
  • Network accessline 62
    the official boundaries that its statistics are keyed to. Prefer these: the   codes in the data will match. - geoBoundaries (<https://www.geoboundaries.org>) provides administrative
  • Network accessline 63
    codes in the data will match. - geoBoundaries (<https://www.geoboundaries.org>) provides administrative   boundaries with source and license metadata; available levels vary by
  • Network accessline 64
    - geoBoundaries (<https://www.geoboundaries.org>) provides administrative

skills/map-design/references/posters.md

  • Network accessline 115
    - OpenFreeMap is free and donation-funded. Its   [terms](https://openfreemap.org/tos/) allow at most 3,000 tiles or 50 MB per   download; tile counts and download sizes depend on latitude and local density.
  • Network accessline 116
    [terms](https://openfreemap.org/tos/) allow at most 3,000 tiles or 50 MB per   download; tile counts and download sizes depend on latitude and local density.   The renderer enforces the limits and asks for a smaller radius past them.

skills/map-design/scripts/lib/basemap.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/color.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/data.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/errors.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/export.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/fonts.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/geo.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/geofile.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/hover.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/html.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 59
    for (const el of svg.querySelectorAll("[data-name]")) el.querySelector(":scope > title")?.remove();   const NS = "http://www.w3.org/2000/svg";
  • Network accessline 60
    const NS = "http://www.w3.org/2000/svg";

skills/map-design/scripts/lib/kinds/bubbles.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/kinds/choropleth.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/kinds/common.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/kinds/flows.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/kinds/locator.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/kinds/points.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/kinds/poster.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 236
    furniture.push(`<text x="${W / 2}" y="${n(baseY + 112 * u)}" text-anchor="middle" font-family="${esc(theme.mono)}" font-size="${n(15 * u)}" font-weight="400" letter-spacing="${n(1.5 * u)}" fill="${theme.muted}">${esc(formatCoords(center[0],
  • Network accessline 238
    furniture.push(`<text x="${n(W - 24 * u)}" y="${n(H - 20 * u)}" text-anchor="end" font-family="${esc(theme.mono)}" font-size="${n(10 * u)}" fill="${theme.muted}" fill-opacity="0.8">${esc(credit)} · https://www.openstreetmap.org/copyright</t
  • Network accessline 240
    let svg = [     `<svg xmlns="http://www.w3.org/2000/svg" width="${W}" height="${H}" viewBox="0 0 ${W} ${H}" role="img" aria-label="${esc(`Street map of ${placeName}`)}">`,
  • Network accessline 241
    `<svg xmlns="http://www.w3.org/2000/svg" width="${W}" height="${H}" viewBox="0 0 ${W} ${H}" role="img" aria-label="${esc(`Street map of ${placeName}`)}">`,

skills/map-design/scripts/lib/kinds/route.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/labels.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/layout.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/locate.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/osm.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 9
    const ENDPOINTS = ["https://overpass-api.de/api/interpreter", "https://overpass.private.coffee/api/interpreter"];
  • Network accessline 10
    const USER_AGENT = "map-design/0.1 (+https://github.com/ashishkaloge/map-design)";
  • Network accessline 46
    /** Fetch (or reuse cached) Overpass JSON for a bbox. */
  • Network accessline 60
    try {         log(`Downloading OpenStreetMap data from ${new URL(url).host}…`);         const res = await fetch(url, {
  • Network accessline 61
    log(`Downloading OpenStreetMap data from ${new URL(url).host}…`);         const res = await fetch(url, {           method: "POST",
  • Network accessline 62
    const res = await fetch(url, {

skills/map-design/scripts/lib/polylabel.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/render.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 58
    mapAttribution: rasterCfg       ? { text: rasterCfg.attribution, urls: rasterCfg.attributionUrls }       : streetCfg ? { text: streetCfg.attribution, urls: ["https://www.openstreetmap.org/copyright", "https://www.openmaptiles.org/"] } : nul
  • Network accessline 59
    ? { text: rasterCfg.attribution, urls: rasterCfg.attributionUrls }       : streetCfg ? { text: streetCfg.attribution, urls: ["https://www.openstreetmap.org/copyright", "https://www.openmaptiles.org/"] } : null,   });
  • Network accessline 60
    : streetCfg ? { text: streetCfg.attribution, urls: ["https://www.openstreetmap.org/copyright", "https://www.openmaptiles.org/"] } : null,
  • Network accessline 117
    const clipId = "map-clip";   const svg = [     `<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}" role="img" aria-label="${esc(spec.title ?? `${spec.kind} map`)}">`,
  • Network accessline 118
    const svg = [     `<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}" role="img" aria-label="${esc(spec.title ?? `${spec.kind} map`)}">`,     `<title>${esc(spec.title ?? `${spec.kind
  • Network accessline 119
    `<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}" role="img" aria-label="${esc(spec.title ?? `${spec.kind} map`)}">`,

skills/map-design/scripts/lib/scales.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/spec.mjs

  • Executable scriptline 1
    Executable file
  • Possible obfuscationline 80
    const keys = head.map((h) => h.trim().replace(/^<U+FEFF>/, ""));

skills/map-design/scripts/lib/streets.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/svg.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/themes.mjs

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/lib/tiles.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 30
    export const PRESETS = {   osm: {     url: "https://tile.openstreetmap.org/{z}/{x}/{y}.png",
  • Network accessline 31
    osm: {     url: "https://tile.openstreetmap.org/{z}/{x}/{y}.png",     attribution: "© OpenStreetMap contributors",
  • Network accessline 32
    url: "https://tile.openstreetmap.org/{z}/{x}/{y}.png",
  • Network accessline 33
    attribution: "© OpenStreetMap contributors",     attributionUrl: "https://www.openstreetmap.org/copyright",     maxZoom: 19,
  • Network accessline 34
    attributionUrl: "https://www.openstreetmap.org/copyright",
  • Network accessline 36
    },   "osm-hot": {     url: "https://a.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png",
  • Network accessline 37
    "osm-hot": {     url: "https://a.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png",     attribution: "© OpenStreetMap contributors, style by HOT, tiles by OpenStreetMap France",
  • Network accessline 38
    url: "https://a.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png",
  • Network accessline 39
    attribution: "© OpenStreetMap contributors, style by HOT, tiles by OpenStreetMap France",     attributionUrl: "https://www.openstreetmap.org/copyright",     maxZoom: 19,
  • Network accessline 40
    attributionUrl: "https://www.openstreetmap.org/copyright",
  • Network accessline 42
    },   "osm-dark": {     url: "https://tile.openstreetmap.org/{z}/{x}/{y}.png",
  • Network accessline 43
    "osm-dark": {     url: "https://tile.openstreetmap.org/{z}/{x}/{y}.png",     attribution: "© OpenStreetMap contributors",
  • Network accessline 44
    url: "https://tile.openstreetmap.org/{z}/{x}/{y}.png",
  • Network accessline 45
    attribution: "© OpenStreetMap contributors",     attributionUrl: "https://www.openstreetmap.org/copyright",     maxZoom: 19,
  • Network accessline 46
    attributionUrl: "https://www.openstreetmap.org/copyright",
  • Network accessline 49
    },   "carto-light": {     url: "https://basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png",
  • Network accessline 50
    "carto-light": {     url: "https://basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png",     attribution: "© OpenStreetMap contributors © CARTO",
  • Network accessline 51
    url: "https://basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png",
  • Network accessline 52
    attribution: "© OpenStreetMap contributors © CARTO",     attributionUrl: "https://carto.com/attribution/",     maxZoom: 20,
  • Network accessline 53
    attributionUrl: "https://carto.com/attribution/",
  • Network accessline 56
    },   "carto-dark": {     url: "https://basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png",
  • Network accessline 57
    "carto-dark": {     url: "https://basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png",     attribution: "© OpenStreetMap contributors © CARTO",
  • Network accessline 58
    url: "https://basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png",
  • Network accessline 59
    attribution: "© OpenStreetMap contributors © CARTO",     attributionUrl: "https://carto.com/attribution/",     maxZoom: 20,
  • Network accessline 60
    attributionUrl: "https://carto.com/attribution/",
  • Network accessline 63
    },   "carto-voyager": {     url: "https://basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}.png",
  • Network accessline 64
    "carto-voyager": {     url: "https://basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}.png",     attribution: "© OpenStreetMap contributors © CARTO",
  • Network accessline 65
    url: "https://basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}.png",
  • Network accessline 66
    attribution: "© OpenStreetMap contributors © CARTO",     attributionUrl: "https://carto.com/attribution/",     maxZoom: 20,
  • Network accessline 67
    attributionUrl: "https://carto.com/attribution/",
  • Network accessline 81
    const UA = "map-design/0.1 (+https://github.com/ashishkaloge/map-design)";
  • Network accessline 236
    attribution: cfg.attribution ?? (knownPreset ? preset.attribution : ""),     attributionUrls: knownPreset       ? [...new Set(["https://www.openstreetmap.org/copyright", preset.attributionUrl])]
  • Network accessline 237
    attributionUrls: knownPreset       ? [...new Set(["https://www.openstreetmap.org/copyright", preset.attributionUrl])]       : [],
  • Network accessline 238
    ? [...new Set(["https://www.openstreetmap.org/copyright", preset.attributionUrl])]
  • Network accessline 360
    if (wait) await new Promise((r) => setTimeout(r, wait));     try {       const res = await fetch(url, {
  • Network accessline 361
    try {       const res = await fetch(url, {         headers: { "user-agent": UA, accept: "image/png" },
  • Network accessline 362
    const res = await fetch(url, {

skills/map-design/scripts/lib/vtiles.mjs

  • Network accessline 1
    // OpenStreetMap features from vector tiles in the OpenMapTiles schema, by default // the public OpenFreeMap instance (https://openfreemap.org). Posters and street
  • Executable scriptline 1
    Executable file
  • Network accessline 2
    // the public OpenFreeMap instance (https://openfreemap.org). Posters and street
  • Network accessline 5
    // OpenFreeMap's terms allow downloads from apps of at most 3,000 tiles or 50 MB, // with at most 4 parallel requests and a User-Agent that identifies the app // (https://openfreemap.org/tos/). Every limit below is enforced before or while
  • Network accessline 6
    // with at most 4 parallel requests and a User-Agent that identifies the app // (https://openfreemap.org/tos/). Every limit below is enforced before or while // downloading, and tiles are cached on disk so re-renders stay offline.
  • Network accessline 7
    // (https://openfreemap.org/tos/). Every limit below is enforced before or while
  • Network accessline 23
    export const OPENFREEMAP = "https://tiles.openfreemap.org/planet";
  • Network accessline 24
    export const VECTOR_ATTRIBUTION = "© OpenMapTiles.org © OpenStreetMap contributors"; export const LIMITS = { tiles: 3000, bytes: 50_000_000, parallel: 4 }; const UA = "map-design/0.1 (+https://github.com/ashishkaloge/map-design)";
  • Network accessline 25
    export const LIMITS = { tiles: 3000, bytes: 50_000_000, parallel: 4 }; const UA = "map-design/0.1 (+https://github.com/ashishkaloge/map-design)"; const TIMEOUT_MS = 30_000;
  • Network accessline 26
    const UA = "map-design/0.1 (+https://github.com/ashishkaloge/map-design)";
  • Network accessline 51
    try {     signal?.throwIfAborted();     const res = await fetch(url, { headers: { "user-agent": UA, accept }, signal: controller.signal, redirect: "error" });
  • Network accessline 52
    signal?.throwIfAborted();     const res = await fetch(url, { headers: { "user-agent": UA, accept }, signal: controller.signal, redirect: "error" });     if (res.status === 204 || res.status === 404) {
  • Network accessline 53
    const res = await fetch(url, { headers: { "user-agent": UA, accept }, signal: controller.signal, redirect: "error" });

skills/map-design/scripts/map.mjs

  • Executable scriptline 1
    #!/usr/bin/env node

skills/map-design/scripts/vendor/geo.iife.js

  • Network accessline 1
    // Vendored for map-design. Do not edit; rebuild with `npm run build:vendor`. // d3-geo 3.1.1 (ISC) https://github.com/d3/d3-geo.git
  • Executable scriptline 1
    Executable file
  • Network accessline 2
    // d3-geo 3.1.1 (ISC) https://github.com/d3/d3-geo.git
  • Network accessline 3
    // d3-array 3.2.4 (ISC) https://github.com/d3/d3-array.git
  • Network accessline 4
    // topojson-client 3.1.0 (ISC) https://github.com/topojson/topojson-client.git
  • Possible obfuscationline 6
    var MapGeo=(()=>{var ar=Object.defineProperty;var Mo=Object.getOwnPropertyDescriptor;var Ao=Object.getOwnPropertyNames;var qo=Object.prototype.hasOwnProperty;var Co=(t,n)=>{for(var e in n)ar(t,e,{get:n[e],enumerable:!0})},zo=(t,n,e,r)=>{if(

skills/map-design/scripts/vendor/geo.mjs

  • Network accessline 1
    // Vendored for map-design. Do not edit; rebuild with `npm run build:vendor`. // d3-geo 3.1.1 (ISC) https://github.com/d3/d3-geo.git
  • Executable scriptline 1
    Executable file
  • Network accessline 2
    // d3-geo 3.1.1 (ISC) https://github.com/d3/d3-geo.git
  • Network accessline 3
    // d3-array 3.2.4 (ISC) https://github.com/d3/d3-array.git
  • Network accessline 4
    // topojson-client 3.1.0 (ISC) https://github.com/topojson/topojson-client.git
  • Possible obfuscationline 6
    var go=Object.create;var Zr=Object.defineProperty;var vo=Object.getOwnPropertyDescriptor;var xo=Object.getOwnPropertyNames;var Eo=Object.getPrototypeOf,yo=Object.prototype.hasOwnProperty;var So=(t,n)=>()=>(n||t((n={exports:{}}).exports,n),n

skills/map-design/scripts/vendor/licenses/d3-array-LICENSE

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/vendor/licenses/d3-geo-LICENSE

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/vendor/licenses/mapbox-point-geometry-LICENSE

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/vendor/licenses/mapbox-vector-tile-LICENSE

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/vendor/licenses/pbf-LICENSE

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/vendor/licenses/polylabel-LICENSE

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/vendor/licenses/topojson-client-LICENSE

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/vendor/licenses/us-atlas-LICENSE

  • Executable scriptline 1
    Executable file

skills/map-design/scripts/vendor/vtile.mjs

  • Network accessline 1
    // Vendored for map-design. Do not edit; rebuild with `npm run build:vendor`. // pbf 4.0.2 (BSD-3-Clause) git+ssh://git@github.com/mapbox/pbf.git // @mapbox/vector-tile 2.0.5 (BSD-3-Clause) git+https://github.com/mapbox/vector-tile-js.git
  • Executable scriptline 1
    Executable file
  • Network accessline 2
    // pbf 4.0.2 (BSD-3-Clause) git+ssh://git@github.com/mapbox/pbf.git // @mapbox/vector-tile 2.0.5 (BSD-3-Clause) git+https://github.com/mapbox/vector-tile-js.git // @mapbox/point-geometry 1.1.0 (ISC) git@github.com:mapbox/point-geometry.git
  • Network accessline 3
    // @mapbox/vector-tile 2.0.5 (BSD-3-Clause) git+https://github.com/mapbox/vector-tile-js.git
  • Possible obfuscationline 6
    var m=23283064365386963e-26,D=12,E=typeof TextDecoder>"u"?null:new TextDecoder("utf-8"),P=0,F=1,y=2,p=5,g=class{constructor(t=new Uint8Array(16)){this.buf=ArrayBuffer.isView(t)?t:new Uint8Array(t),this.dataView=new DataView(this.buf.buffer)

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Declared and executed: 8 facts
Signal confidence: 203 facts

and 153 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeNativeManifest .claude-plugin/marketplace.json.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md skills/map-design/SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md skills/map-design/SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md skills/map-design/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md skills/map-design/SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md skills/map-design/SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.