UzMap docs

UzMap

Maps, geocoding and routing for Uzbekistan. Vector tiles, place search, addresses, turn-by-turn directions, distance matrices and isochrones — served from one API, on one origin.

The data comes from OpenStreetMap and other openly licensed sources, processed into vector tiles and a search index. There is no proprietary data layer and no per-view licence: what you build with it is yours.

Two ways in#

A script tag, if you want a map on a page and have no build step:

html
<div id="map" style="width:100%;height:400px"></div>
<script src="https://uzmaps.ndc.uz/v1/uzmaps.js?apikey=YOUR_KEY"></script>
<script>
  uzmaps.ready(function () {
    new uzmaps.Map({ container: 'map', center: [69.2401, 41.2995], zoom: 12 });
  });
</script>

npm, if you have a bundler:

bash
npm install @uzmaps/engine maplibre-gl
js
import { UzMap } from '@uzmaps/engine';

const map = new UzMap({
  container: 'map',
  serverUrl: 'https://uzmaps.ndc.uz',
  apiKey: 'YOUR_KEY',
  center: [69.2401, 41.2995],
  zoom: 12,
});

Everything the map does over HTTP, you can call directly. The map is a client of the same API you are.

What is here#

QuickstartA working map, a search box and a route, in about ten minutes.
API keys and quotasHow keys work, why the origin allowlist matters more than secrecy, and what counts against a quota.
Script tagThe single-file browser build, for pages without a build step.
@uzmaps/engineThe map: options, methods, events, overlays.
HTTP APISearch, places, routing, tiles — the reference.
Developer consoleProjects, keys and usage at console.uzmaps.ndc.uz.
Self-hostingRunning the whole stack yourself.

Conventions#

These hold everywhere in the API and the client libraries. They are worth reading once, because getting one wrong produces results that look almost right.

Coordinates are [longitude, latitude]. GeoJSON order, not the lat, lon you would say out loud. Tashkent is [69.2401, 41.2995].

Distances are metres and durations are seconds. Always, including inside a distance matrix, and regardless of what the underlying engine reports internally.

Money, where it appears, is in tiyin — the minor unit of the som — and is an integer. Never a float.

A null distance or duration is an answer, not an error. In a matrix it means no route exists between that pair. The rest of the matrix is still valid.

Getting a key#

Create one in the console. Sign up, and you get an organisation, a project and a free-tier key immediately.

A browser key is public — it ships inside your page, and anyone can read it out of the network tab. That is true of every web mapping API and is not a flaw to engineer around. What protects it is the origin allowlist: a key restricted to https://yourdomain.uz is useless to someone who copies it, because their site sends a different Origin and the request is refused.

Attribution#

Map data © OpenStreetMap contributors, licensed under the ODbL. Attribution is required and is shown by the map's own control; if you build your own UI, you must display it yourself. See Map data and licensing for the full list of sources and their terms.

Map data © OpenStreetMap contributors, licensed under the ODbL. © 2026 National Development Community.