route-gpxBack to map

Help

Create a route

Enter an address or latitude, longitude directly in Start and Destination. Coordinates are applied automatically; for addresses, choose a suggestion while typing, or press Enter for an explicit search. You can also set both points by clicking the map on desktop or holding a point on touch screens. Drag markers to adjust. Calculate route retries the calculation. Use Undo to restore a change, the arrows to reorder, or × to remove a stop.

On small screens, the right column contains location, layers, full screen, fit route, undo and zoom icons. Each has a tooltip and accessible name. The header Help icon opens these instructions; address fields suggest places as you type; the pin icon selects the point on the map.

Map layers

Tap the circular i button at the bottom right to open the active layer's full map credits and licenses. Links open in a new tab. Close, Escape or a tap outside the card closes the modal and returns focus to i. Changing layers closes it and updates its contents. On small screens, close the route panel to access the control.

Open Map layers to choose Standard (OpenStreetMap), Topographic (OpenTopoMap, CC BY-SA 3.0) or Satellite (EOX Sentinel-2 cloudless 2025, CC BY-NC-SA 4.0, non-commercial only). Satellite Labels are on by default and can be switched off. For commercial use, choose the EOX 2016 edition (CC BY 4.0) in Settings. Satellite imagery is a regional mosaic, not live or street-level imagery; zooming beyond its native level enlarges pixels.

Only the active layer and enabled labels request tiles. Their providers receive your IP and visible map area. Keep the credits visible and follow fair-use limits; no availability is guaranteed. The device remembers your choice outside shared routes; changing layers leaves the complete GPX untouched. Use arrows and Enter in the layer menu, or Escape to close it. Sources and license links are listed in the READMEs.

Touch, suggestions and GPX sharing

On touch screens, a tap closes the point menu. Hold a map point for about half a second, without dragging, then choose Set as start, Add as stop or Set as destination. Desktop clicks still place the selected point; right-click or Shift+F10 opens the same menu. Arrow keys navigate the menu; Escape closes it.

After 3 address characters, Photon offers up to five suggestions. Numeric coordinates, including incomplete input, stay local. Use arrows and Enter or touch a suggestion; Escape closes the list. Typed text and an approximate map-center bias go to the configured Photon service. If it fails, press Enter for an explicit Nominatim search. Public services have limited capacity; configure another instance before scaling.

Share GPX appears when the browser supports sharing files. It uses the same full track and filename as Download GPX. Cancelling is silent; on failure, download normally. Only the map drawing is simplified at each zoom; exports and saved geometry retain every point.

Map and location

Use Route panel to open or close the side panel or mobile bottom sheet. Its state is remembered in this tab session. Full screen expands the map; press it again or Escape to leave.

Use my location requests your position directly. The browser asks for permission when needed, without a preliminary confirmation screen. Exact location only centers the map and displays an accuracy circle. Set as start and Add as stop use a rounded coordinate (about 100 m); review it before routing. If permission is denied, open this site's permissions in your browser settings and allow Location, then try again. You can keep using the map without GPS.

The initial view prefers the URL route, then already authorized GPS, approximate IP region, and browser timezone/language. To stop IP requests, open Settings and disable Detect region by IP. The selected provider receives your IP address. Exact GPS is never stored or sent to routing services; tile requests reveal the visible area.

Choose main roads

Add stops directly on the roads you want. The road list shows the router’s names and references. “Prefer main roads” flags possible local sections of 500 m or more; it does not exclude all local roads. Major avenues without a reference may also be flagged. Access roads can be necessary.

Recent router results stay in page memory for 15 minutes, up to 20 routes. Returning to the same points and routing settings reuses them; Calculate route requests a fresh result. Reloading clears this cache.

Saved routes

Enter a GPX name and press Save route. Routes are never saved automatically. The same name updates an existing route. Saved routes, above Average speed, lets you open the original geometry, download GPX, delete entries, or export and restore a backup. These files stay in this browser profile, without cloud sync. Clearing browser data can remove them; keep a backup. Matching names in a backup keep your existing saved route.

GPX, import and sharing

Set GPX name above the download button to name the file and track. Leave it empty to use the start and destination. Download GPX exports the complete road geometry and your stops. Import preserves the original geometry until you edit a point. Shared links store points and settings, then recalculate against current road data; they do not embed an imported track.

Round trip adds the return itinerary. On divided roads, check that stops fall on the intended carriageway. Estimated times exclude stops and live traffic.

Departure and weather

Choose Departure date and time in Weather. Once the route is ready, weather loads automatically after a short pause. There is no request without a date. Choosing a date sends sampled points and expected dates/times to Open-Meteo. The interface shows the speed actually used: 60 km/h by default, or the value enabled in Average speed, displayed in km/h or mph. Adjust it for your journey. Stops and traffic are excluded. All displayed times use the device timezone. Departures in the last 90 UTC calendar days are accepted. Older departures and arrival windows beyond 16 UTC calendar days including today are rejected. Past dates show Past estimates, or Past estimates and forecast if the journey crosses the current time. Past values are archived model estimates, not exact observations at each route point. Imported GPX works too. Samples include endpoints and waypoints, approximately every 20 km. Below 20 km/h, spacing is reduced to about one hour of travel (5 km at 5 km/h, for example). The maximum of 20 points takes priority and may require larger gaps. Select a weather icon on the map to open its weather card in the panel. Selecting a card centers the map on its point and collapses the mobile panel; Enter and Space work too.

Speed changes recalculate locally if coverage permits; use Try again if the interval is exceeded. Slower travel automatically requests additional points if needed for the shorter spacing; faster travel reuses the existing points without another request. Track, date or server changes automatically update the weather. Errors allow a manual retry, never automatic retry loops. Weather data and sample coordinates stay only in page memory, never in storage, application logs or links. Only departure is new persisted trip data, in normal links and explicitly saved routes. Reopening requests weather again. GPX point timestamps are not added.

Hourly temperature, precipitation probability/volume, weather code, wind speed/direction, gusts and visibility come from Open-Meteo, under CC BY 4.0. Weather data by Open-Meteo; passage times and risk summaries calculated by route-gpx. The free API is non-commercial only, no key, HTTPS/CORS; its base URL is configurable in Settings. Limits: 600 calls/minute, 5,000/hour, 10,000/day and 300,000/month. Every location counts even in one grouped request; over 10 variables or two weeks increases call accounting. Requests are at least six seconds apart with conservative memory budgets, a ten-minute memory cache and a 20-second timeout. The cache holds up to 200 locations and 100,000 hourly entries, reusing covered locations and grouping only missing ones. Hits do not extend freshness. Page limits cannot enforce aggregate usage. Terms · Call accounting · Documentation.

Forecasts are approximate, on a grid of several kilometres, and may miss local showers; passage times depend on stops and traffic. Risk alerts are review aids, not official warnings: worst case within ±1 hour, rounded outward. Rain: ≥60% probability or ≥1 mm/h; heavy rain ≥10 mm/h; thunderstorm codes 95/96/99; fog codes 45/48 or visibility ≤1,000 m; gusts ≥60 km/h; cold/possible ice ≤2 °C or freezing codes; extreme heat ≥40 °C. Alerts are ordered by severity; missing data is flagged. Real forecast accuracy has not been evaluated.

Each sampled point has one card combining weather and risk, without a separate alert list. Alert 1, 2 and 3 use yellow, orange and red plus text labels; no-alert cards are neutral. All cards use the main panel scroll.

Cards use matching outline SVG icons; map markers use colored, centered weather icons. The wind icon accompanies the relative direction and speed. Wind compares the direction it comes from with the local track direction: headwind within 45° ahead, tailwind within 45° behind, otherwise crosswind. Below 1 km/h is calm. The nearest weather hour is used, with speed in km/h or mph. Bends use the outgoing edge; the destination uses the incoming edge. This is model wind at 10 m, not apparent wind or resistance experienced by a vehicle. Terrain and shelter can change local wind. Missing direction or speed is reported explicitly. Map arrows point toward where wind blows and show speed. Colors indicate headwind (red), tailwind (green), crosswind (amber), or calm/unavailable (gray), also identified by text. Accessible labels classify mean wind as calm <1 km/h, light 1–<20, moderate 20–<39, strong 39–<62 and very strong ≥62: simplified Beaufort bands, separate from gust alerts. Direction follows the meteorological convention.

Rain radar

Enable Rain radar in Map layers. It is off by default, independent of departure date. Play/pause or choose the time using the slider; expand Legend and opacity for the legend, transparency and approximate coverage mask. Disable in Map layers. Moving the map or hiding the tab pauses playback. Route geometry stays intact and above the radar.

Radar by RainViewer, personal and educational use only, without a key. The specific API documentation and 2026 transition provide past two-hour observations at ten-minute intervals, native zoom 7 and 100 requests/IP/minute. This is not a future forecast or cloud animation. Mosaic generation times use the device timezone; individual observations may be older. Images older than 30 minutes are flagged. Reflectivity in dBZ is not exact rainfall volume. Shaded areas show the provider's infrequently updated coverage mask; clear areas do not prove dry weather.

Activation sends RainViewer your IP and visible map area, not your route or departure date. Only the current visible frame is fetched. Requests are spaced at least 800 ms apart, with cancellation and no automatic retries. Already viewed images stay in bounded page memory (64 images or 16 MB); metadata is cached for two minutes and refreshed only on activation/retry. Nothing enters route links or storage. There is no prefetching or offline caching. Page limits cannot enforce shared-IP limits. Availability and coverage are not guaranteed.

Travel time

Open Average speed, enable it and drag the slider. Values are 1, 5, 10… up to 200 km/h or 130 mph. Switching units rounds to the nearest position. The estimate excludes stops and traffic. Turn it off or press × to use the router estimate.

Distance units and undo

Choose km or mi beside the road preference. Distances switch between kilometers and miles independently of language; GPX coordinates are unchanged. Undo restores up to 50 changes in this tab, including moved, removed or reordered points. Ctrl+Z or ⌘Z works outside text fields, which keep the normal text undo.

Settings and JSON

Change server base URLs in Settings. Use HTTPS and servers that allow browser requests (CORS). The advanced JSON editor gives you the same points and options used by route links. Provider behavior and usage limits are described in the READMEs.

Public services and privacy

The default servers are public and shared, with limited capacity. Photon suggests addresses while typing; Nominatim is only used by Enter without a selected suggestion, including if suggestions fail. Nominatim requests are spaced at least 1.1 seconds apart; its one-request-per-second limit applies across all users. Use your own service before scaling. Routing changes are debounced and serialized; OSRM falls back to Valhalla.

No cookies, accounts or analytics. Coordinates, searches and visible map tiles are sent to the selected services. Links include your locations. The browser stores a search timestamp to coordinate tabs, and the named routes you explicitly save in local IndexedDB. It also remembers region preferences and panel state without location data. Do not enter confidential addresses.

Nominatim policy · Tile policy

Routing sends control coordinates and options to https://router.project-osrm.org or, on fallback, https://valhalla1.openstreetmap.de. The route data uses OpenStreetMap/ODbL. The OSRM operator documents a one-request/second limit and server-side route logs; the page spaces routing starts by at least 1.5 seconds. A separate Valhalla numeric quota was not verified. Address text goes to https://photon.komoot.io while typing or https://nominatim.openstreetmap.org on Enter; both use OSM/ODbL data.

IP region requests use https://ipwho.is/. Its free-endpoint documentation permits keyless commercial use, but general terms also contain account and redistribution clauses whose applicability should be confirmed before scaling. Weather uses https://api.open-meteo.com; radar metadata uses https://api.rainviewer.com and visible-frame images use https://tilecache.rainviewer.com. Map images use https://tile.openstreetmap.org, https://a.tile.opentopomap.org or https://tiles.maps.eox.at, including the EOX label overlay. Only the active layer and selected radar frame request images. GitHub Pages receives requests for the site files. External providers receive the request IP and normal browser metadata and may keep their own logs. URL fragments are not sent in HTTP requests. Browser HTTP caching of ordinary map tiles follows provider headers; there is no added offline storage.

Local checks

Developers: use Node.js 22.23.4 (Node 24 or 26+ is also supported). Run these commands from the repository root. Playwright starts its own local server. Shards are available locally; current CI runs the complete suites without shards, using one Chromium worker and a Vite development server. TypeScript is checked by the build. The optional live OSRM test is intentionally skipped in regular runs.

npm ci
npx playwright install chromium
npm run lint
npm run format:check
npm test
npm run build
npm run test:browser
npm run test:browser -- --shard=1/2
npm run test:browser -- --shard=2/2

Open source

Code, full documentation and issues. MIT license. Leaflet uses BSD 2-Clause; see the complete third-party notice. Map data © OpenStreetMap contributors. Built with Leaflet, OSRM, Valhalla, Nominatim, Photon, Vite and Vitest. IP region by ipwho.is; maps by OpenTopoMap and EOX. Weather data by Open-Meteo (CC BY 4.0); radar by RainViewer (personal and educational use). Source and license links appear in the respective sections above and in the READMEs.