[{"data":1,"prerenderedAt":571},["ShallowReactive",2],{"doc-\u002Fdocs\u002Foverview":3,"docs-nav":567},{"id":4,"title":5,"body":6,"description":560,"extension":561,"meta":562,"navigation":102,"order":81,"path":563,"seo":564,"stem":565,"__hash__":566},"docs\u002Fdocs\u002Foverview.md","Overview",{"type":7,"value":8,"toc":554},"minimark",[9,13,17,40,47,52,68,200,207,301,305,311,443,446,489,493,496,513,517,543,551],[10,11,5],"h1",{"id":12},"overview",[14,15,16],"p",{},"unmap is a Canadian-first, privacy-first maps API. One key covers three services:",[18,19,20,28,34],"ul",{},[21,22,23,27],"li",{},[24,25,26],"strong",{},"Tiles"," — vector basemap tiles and ready-made styles, served from R2 at the edge.",[21,29,30,33],{},[24,31,32],{},"Geocoding"," — full-text search, type-ahead autocomplete, and reverse lookup, with first-class French labels.",[21,35,36,39],{},[24,37,38],{},"Routing"," — turn-by-turn routes and isochrones over the Canadian road graph.",[14,41,42,43,46],{},"The design goal is a ",[24,44,45],{},"time to first Hello World under 60 seconds",", and two to three lines of code where the incumbents want twenty.",[48,49,51],"h2",{"id":50},"one-key-the-whole-platform","One key, the whole platform",[14,53,54,55,59,60,63,64,67],{},"The ",[56,57,58],"code",{},"@unmap\u002Fsdk"," package unifies everything behind a single Stripe-style key (",[56,61,62],{},"um_live_..."," in production, ",[56,65,66],{},"um_test_..."," for demos). Construct it once:",[69,70,75],"pre",{"className":71,"code":72,"language":73,"meta":74,"style":74},"language-ts shiki shiki-themes github-light github-dark","import { Unmap } from '@unmap\u002Fsdk'\n\nconst unmap = new Unmap({ key: 'um_live_...' })\n\nawait unmap.geocoder.search('Calgary Tower')\nawait unmap.router.route([-114.07, 51.05], [-113.99, 51.05])\n","ts","",[56,76,77,97,104,133,138,159],{"__ignoreMap":74},[78,79,82,86,90,93],"span",{"class":80,"line":81},"line",1,[78,83,85],{"class":84},"szBVR","import",[78,87,89],{"class":88},"sVt8B"," { Unmap } ",[78,91,92],{"class":84},"from",[78,94,96],{"class":95},"sZZnC"," '@unmap\u002Fsdk'\n",[78,98,100],{"class":80,"line":99},2,[78,101,103],{"emptyLinePlaceholder":102},true,"\n",[78,105,107,110,114,117,120,124,127,130],{"class":80,"line":106},3,[78,108,109],{"class":84},"const",[78,111,113],{"class":112},"sj4cs"," unmap",[78,115,116],{"class":84}," =",[78,118,119],{"class":84}," new",[78,121,123],{"class":122},"sScJk"," Unmap",[78,125,126],{"class":88},"({ key: ",[78,128,129],{"class":95},"'um_live_...'",[78,131,132],{"class":88}," })\n",[78,134,136],{"class":80,"line":135},4,[78,137,103],{"emptyLinePlaceholder":102},[78,139,141,144,147,150,153,156],{"class":80,"line":140},5,[78,142,143],{"class":84},"await",[78,145,146],{"class":88}," unmap.geocoder.",[78,148,149],{"class":122},"search",[78,151,152],{"class":88},"(",[78,154,155],{"class":95},"'Calgary Tower'",[78,157,158],{"class":88},")\n",[78,160,162,164,167,170,173,176,179,182,185,188,190,193,195,197],{"class":80,"line":161},6,[78,163,143],{"class":84},[78,165,166],{"class":88}," unmap.router.",[78,168,169],{"class":122},"route",[78,171,172],{"class":88},"([",[78,174,175],{"class":84},"-",[78,177,178],{"class":112},"114.07",[78,180,181],{"class":88},", ",[78,183,184],{"class":112},"51.05",[78,186,187],{"class":88},"], [",[78,189,175],{"class":84},[78,191,192],{"class":112},"113.99",[78,194,181],{"class":88},[78,196,184],{"class":112},[78,198,199],{"class":88},"])\n",[14,201,202,203,206],{},"Pass a ",[56,204,205],{},"container"," and you also get a rendered map:",[69,208,210],{"className":71,"code":209,"language":73,"meta":74,"style":74},"const map = new Unmap({\n  key: 'um_live_...',\n  container: '#map',\n  center: [-114.07, 51.05],\n})\n\nmap.map      \u002F\u002F the underlying MapLibre GL map\nmap.geocoder \u002F\u002F search \u002F autocomplete \u002F reverse\nmap.router   \u002F\u002F route \u002F isochrone\n",[56,211,212,228,238,248,264,269,273,283,292],{"__ignoreMap":74},[78,213,214,216,219,221,223,225],{"class":80,"line":81},[78,215,109],{"class":84},[78,217,218],{"class":112}," map",[78,220,116],{"class":84},[78,222,119],{"class":84},[78,224,123],{"class":122},[78,226,227],{"class":88},"({\n",[78,229,230,233,235],{"class":80,"line":99},[78,231,232],{"class":88},"  key: ",[78,234,129],{"class":95},[78,236,237],{"class":88},",\n",[78,239,240,243,246],{"class":80,"line":106},[78,241,242],{"class":88},"  container: ",[78,244,245],{"class":95},"'#map'",[78,247,237],{"class":88},[78,249,250,253,255,257,259,261],{"class":80,"line":135},[78,251,252],{"class":88},"  center: [",[78,254,175],{"class":84},[78,256,178],{"class":112},[78,258,181],{"class":88},[78,260,184],{"class":112},[78,262,263],{"class":88},"],\n",[78,265,266],{"class":80,"line":140},[78,267,268],{"class":88},"})\n",[78,270,271],{"class":80,"line":161},[78,272,103],{"emptyLinePlaceholder":102},[78,274,276,279],{"class":80,"line":275},7,[78,277,278],{"class":88},"map.map      ",[78,280,282],{"class":281},"sJ8bj","\u002F\u002F the underlying MapLibre GL map\n",[78,284,286,289],{"class":80,"line":285},8,[78,287,288],{"class":88},"map.geocoder ",[78,290,291],{"class":281},"\u002F\u002F search \u002F autocomplete \u002F reverse\n",[78,293,295,298],{"class":80,"line":294},9,[78,296,297],{"class":88},"map.router   ",[78,299,300],{"class":281},"\u002F\u002F route \u002F isochrone\n",[48,302,304],{"id":303},"the-api-surface","The API surface",[14,306,307,310],{},[56,308,309],{},"new Unmap(options)"," accepts:",[312,313,314,330],"table",{},[315,316,317],"thead",{},[318,319,320,324,327],"tr",{},[321,322,323],"th",{},"Option",[321,325,326],{},"Type",[321,328,329],{},"Notes",[331,332,333,357,371,385,409,428],"tbody",{},[318,334,335,341,346],{},[336,337,338],"td",{},[56,339,340],{},"key",[336,342,343],{},[56,344,345],{},"string",[336,347,348,349,352,353,356],{},"Required. Your ",[56,350,351],{},"um_live_"," or ",[56,354,355],{},"um_test_"," key.",[318,358,359,364,368],{},[336,360,361],{},[56,362,363],{},"gateway",[336,365,366],{},[56,367,345],{},[336,369,370],{},"Optional. Override the API base URL.",[318,372,373,377,382],{},[336,374,375],{},[56,376,205],{},[336,378,379],{},[56,380,381],{},"string | HTMLElement",[336,383,384],{},"Optional. If set, a map is mounted here.",[318,386,387,392,396],{},[336,388,389],{},[56,390,391],{},"style",[336,393,394],{},[56,395,345],{},[336,397,398,399,181,402,181,405,408],{},"A demo city (",[56,400,401],{},"calgary",[56,403,404],{},"montreal",[56,406,407],{},"iqaluit",") or a style URL.",[318,410,411,416,421],{},[336,412,413],{},[56,414,415],{},"center",[336,417,418],{},[56,419,420],{},"[number, number]",[336,422,423,424,427],{},"Optional. ",[56,425,426],{},"[lng, lat]",".",[318,429,430,435,440],{},[336,431,432],{},[56,433,434],{},"zoom",[336,436,437],{},[56,438,439],{},"number",[336,441,442],{},"Optional initial zoom.",[14,444,445],{},"The instance exposes:",[18,447,448,459,476],{},[21,449,450,455,456,458],{},[24,451,452],{},[56,453,454],{},".map"," — the MapLibre GL map (only when a ",[56,457,205],{}," was given). Mapbox-GL-JS-compatible surface.",[21,460,461,466,467,181,470,181,473,427],{},[24,462,463],{},[56,464,465],{},".geocoder"," — ",[56,468,469],{},"search(q)",[56,471,472],{},"autocomplete(q)",[56,474,475],{},"reverse(lng, lat)",[21,477,478,466,483,181,486,427],{},[24,479,480],{},[56,481,482],{},".router",[56,484,485],{},"route(from, to)",[56,487,488],{},"isochrone(center, { minutes })",[48,490,492],{"id":491},"demo-cities","Demo cities",[14,494,495],{},"The three launch styles cover the country from prairie to Arctic:",[18,497,498,503,508],{},[21,499,500,502],{},[56,501,401],{}," — Calgary, Alberta",[21,504,505,507],{},[56,506,404],{}," — Montréal, Québec (French-first labels)",[21,509,510,512],{},[56,511,407],{}," — Iqaluit, Nunavut",[48,514,516],{"id":515},"why-unmap","Why unmap",[18,518,519,525,531,537],{},[21,520,521,524],{},[24,522,523],{},"Untracked."," Keys are metered, people are not.",[21,526,527,530],{},[24,528,529],{},"Unlocked."," Permissive caching, no expiry clock on stored tiles.",[21,532,533,536],{},[24,534,535],{},"Unbundled."," One key across tiles, geocoding, and routing.",[21,538,539,542],{},[24,540,541],{},"Canadian residency."," Requests stay on North American infrastructure.",[14,544,545,546,427],{},"Ready to render something? Head to the ",[547,548,550],"a",{"href":549},"\u002Fdocs\u002Fquickstart","Quickstart",[391,552,553],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":74,"searchDepth":99,"depth":99,"links":555},[556,557,558,559],{"id":50,"depth":99,"text":51},{"id":303,"depth":99,"text":304},{"id":491,"depth":99,"text":492},{"id":515,"depth":99,"text":516},"What unmap is, and the shape of the one-key SDK.","md",{},"\u002Fdocs\u002Foverview",{"title":5,"description":560},"docs\u002Foverview","7Y-hjl75-NNHMnB2e9I5v1464Fo3RYnr0RumDxZeptg",[568,570],{"path":549,"title":550,"order":569},0,{"path":563,"title":5,"order":81},1783031325722]