Sidewinder

Routes for getting around a city without a car.

Sidewinder plans bike rides and walks anywhere in the world, and transit trips in dozens of cities in North America and Europe, from OpenStreetMap, on one server. It finds the quiet streets when you ask for them, knows which crossings have a light, and puts all of it in the answer. Streeter, a cycling and walking app, plans every bike ride and walk with it.

Part
Sidewinder
Kind
Routing engine
Modes
Bike, foot, transit
Map data
OpenStreetMap
Rev
0.26.2
Date
2026-11-02
Interface
HTTPS, JSON
Sheet
1 of 1
  • 6regions: the whole planet
  • 0.17 smedian city route, end to end
  • 50transit feeds, North America and Europe
  • 7route styles: four by bike, three on foot

Request access Read the API

01Typical application

The Saint Louis Art Museum to Soulard, by bike, asked for twice.

Direct9.9 km34 min65% busy

Direct: 9.9 km, 34 minutes, 65% of the way on busy streets and 21% on quiet ones; 10 busy crossings at a light, 0 without.Forest ParkChouteau AvePark AveHampton Avenue: at a lightMacklind Avenue: at a lightSouth Kingshighway Boulevard: at a lightManchester Avenue: at a lightSouth Vandeventer Avenue: at a lightSouth Vandeventer Avenue: at a lightSouth Grand Boulevard: at a lightSouth Compton Avenue: at a lightSouth Jefferson Avenue: at a lightTruman Parkway: at a lightArt MuseumSoulard

Calm10.2 km36 min0.5% busy

Calm: 10.2 km, 36 minutes, 0.5% of the way on busy streets and 86% on quiet ones; 3 busy crossings at a light, 1 without.Forest ParkChouteau AvePark AveManchester Avenue: at a lightSouth Vandeventer Avenue: at a lightSouth Compton Avenue: no lightSouth Jefferson Avenue: at a lightArt MuseumSoulard
  • Quiet
  • Moderate
  • Busy
  • Busy crossing at a light
  • Without one
Saint Louis Art Museum to Soulard by bike: two answers from the live API (engine 0.26.2, map data of 2026-10-31), each line coloured by the traffic Sidewinder gives its streets. Streets and routes © OpenStreetMap contributors.

Direct does what it says: Hampton, Manchester and three and a half kilometres of Chouteau Avenue. Calm stays on Forest Park's drives, then takes Clayton, Tower Grove and Park Avenue, for 292 metres more and about two minutes. It crosses four busy streets, three of them at a light. The fourth, Compton Avenue, has none, and the answer says so.

02What comes back

A route is more than a line. Each answer carries:

  • the line, with a height at every point;
  • turn-by-turn steps with street names, including for unnamed sidewalks and crosswalks, which take the name of the street beside them or the one they cross;
  • the road class and traffic of every stretch: quiet, moderate or busy;
  • bike facilities along the way: path, protected lane, painted lane or sharrow;
  • each busy street crossed: where, whether there's a light, and the crossed street's class, lanes and speed limit;
  • the engine version and the map build that made it.

Streeter used to work most of this out itself, from map tiles, after its router had answered. Now it comes with the route.

Missing tags count as unknown, not as a fast road or a one-lane one. A path with no width is neither narrow nor wide to a cargo bike: it just isn't known.

03Specifications

Measured on the live server unless a line says otherwise.

Coverage

Regions
6, the whole planet
North and Central America, South America, Europe with Russia, Asia, Africa, Australia and Oceania.
Borders
No seams inside a region
Each region's map reaches 150 km past its edge, and a leg goes on whichever map holds all of it. San Diego to Tijuana is just more map.
Map data
OpenStreetMap, from Geofabrik
Rebuilt as regions come due on a daily timer: North America every 7 days, the others every 14.
Streets read
Every highway way
268.4 million worldwide (taginfo, 13 Oct 2026); 91 to 99% of them end up in a map.
Elevation
Copernicus GLO-30 in towns and cities, GLO-90 elsewhere
30 m and 90 m surface models, lowered toward the ground before use, since they include roofs and trees.
Traffic side
76 countries and territories drive on the left
A turn across traffic is a right turn there, and is priced as one.

Speed

City route, end to end
0.17 s median
From a Mac to the server over the internet, 2 Nov 2026. The engine's own share on 16 bench trips: 11 to 104 ms.
First trip in a cold city
184 ms median
A city nobody has asked about since the last restart, read from NVMe (16 Oct 2026).
Long trip, cold
At most 2.1 s
Trips of 15 to 104 km, in the same run.
Long trip, searched
49 thousand states, not 4.5 million
Los Angeles to Oceanside in Calm, with regional landmarks. Every bench route stays within 0.002% of the exact cheapest.
Transit trip, one call
0.5 s median on foot
From a Mac, 2 Nov 2026, including the street searches to and from the stops. Slowest by bike in dense cities: 2.4 s in Paris.

Server

Hardware
One server
6 cores, 64 GB of memory and two mirrored NVMe disks, in Virginia. About $44 a month.
Maps
About 160 GB for the planet
Flat arrays, memory-mapped: loading is instant, and the page cache keeps the cities people ride.
Searches at once
12
One per hardware thread. A request that waits more than 5 s for one answers 503 busy.

04Route styles

Each style is a model: prices on time, distance, turns, crossings and traffic. They began as GraphHopper 11.1's bike and foot profiles, ported to Rust, with the custom models Streeter had tuned for GraphHopper on top. Sidewinder has added its own prices since: turns, crossings, traffic, and which side of the street a walk is on.

Route styles by bike and on foot
StyleAPIWhat it prices
By bike
Calm defaultcalmQuiet streets and bike paths. Busy streets avoided, busy crossings priced, lights preferred.
DirectdirectClose to the shortest line, with 5 s on each turn.
ExplorewanderParks, lively blocks and places worth seeing. Busy crossings at about half Calm's price.
AlleycatalleycatA courier's liberties: the wrong way up a quiet one-way, footways, alleys, private service roads, pedestrian streets, short stairs. Each one is priced per metre, so it's taken only when it saves real distance, and listed in the answer.
On foot
CalmcalmOff busy streets, and on one side of them. Crossing one without a light costs most.
DirectdirectThe direct walk, still paying to cross busy streets without a light.
ExplorewanderParks and lively streets.

On top of any style: a new rider, a cargo bike (steps, width, rough ground), hills avoided or sought, step-free walking, alleys preferred, and up to 64 places to steer clear of.

Calm's prices

In seconds on an ideal street, the unit the model counts in. A stretch costs seconds ÷ priority + distance, as in GraphHopper.

EventSeconds
Crossing a busy street80 or 12 at a light
Riding through a busy junction80 or 12 at a light
Turning across busy traffic45 or 15 at a light
Joining a busy street45
Crossing a moderate street without a light8
Any turn16
A U-turn120

Riding along a busy street counts its time 2.5 times over, and more the busier it is; a moderate one, 1.33 times. No Calm leg runs more than twice Direct's distance, or more than 25 km past it.

Checked against a ruler it didn't write

Level of Traffic Stress, from Furth's published tables, rates every street a route rides. LTS 3 and up is past what most adults will ride on. On 250 trips in 42 cities (20 Oct 2026; Calm's prices haven't changed since):

Sidewinder, Calm
33.5% of riding at LTS 3+
GraphHopper, with Streeter's Calm model
37.7%

Calm is ahead in 28 of the 42 cities and behind in 14, Lisbon, London and Amsterdam among them. The ruler reads OpenStreetMap's tags; it approximates traffic, it doesn't measure it.

05Interface

HTTPS and JSON. Points are [lng, lat], distances metres, times seconds. A key goes in the Authorization header. An error is a code for your program and a message worded for a rider.

POST /v1/route
A route through 2 to 30 points, with everything listed above.
POST /v1/snap
Where a dropped pin lands on streets the traveller can use.
POST /v1/loop
A round trip of a given distance or time; a new seed gives another.
POST /v1/sketch
A line drawn with a finger, fitted to streets and paths.
POST /v1/annotate
Bike facilities and busy crossings along a line you already have: a GPX file, a saved route.
POST /v1/detours
What each of up to 200 stops would add to a trip, from two searches.
POST /v1/reach
Times and distances from one point to up to 200 others.
POST /v1/isochrone
Where a traveller gets to in up to three times, as GeoJSON.
POST /v1/transit
A transit trip, with the ways to and from the stops routed like any other.
GET /v1/transit/board
The next departures from stations and stops within 150 m of a point, line by line.
GET /v1/transit/sources
The feeds in use, with their credits and licences.
GET /v1/health
The version, each region's map build, and where it has streets and transit. No key needed.

Ask

curl https://api.sidewinder.city/v1/route \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"waypoints": [[-90.2944, 38.6393],
                     [-90.2097, 38.6112]],
       "profile": "bike", "vibe": "calm"}'

Every answer names the engine version and the map build. The version goes up whenever a change would alter answers on the same map, so a cache keyed on both never serves a route Sidewinder wouldn't give now.

Answer trimmed

{
  "distance": 10223, "time": 2171,
  "ascent": 94, "descent": 108,
  "coords": [[-90.29437, 38.63953, 163], ...],
  "steps": [...,
    {"street": "Clayton Avenue", "distance": 1139.6,
     "time": 226, "roadClass": "unclassified",
     "traffic": "quiet", "sign": -2,
     "text": "Turn left onto Clayton Avenue"}, ...],
  "infra": [..., [119, 121, "paint", "Park Avenue"]],
  "crossings": [...,
    {"street": "South Compton Avenue", "light": false,
     "kind": "cross", "class": "secondary",
     "lanes": 2, "maxspeed": null}, ...],
  "engine": {"name": "sidewinder", "version": "0.26.2",
             "region": "north-america", "ms": 104.0,
             "osmAsOf": "2026-10-31T21:23:06Z"}
}

06Absolute maximum ratings

Past these, a request gets an error with a code and a reason. No permanent damage to the device.

Waypoints
2 to 30 a route
No distance cap between them; a leg too long to search answers too_far.
Request body
1 MB
JSON only.
Snapping
Within 500 m
Never onto a motorway, a trunk road or a tunnel, or an island of under 200 usable stretches.
Search work
8 million states a search
64 million shared by a leg's searches and retries.
Reach
200 points, an hour
Detours
200 stops, 90 miles
Isochrones
3 bands, an hour each
At most a third of the server's searches at once.
Places to avoid
64 a request
Each with a radius of 1 to 50 m and up to 3,600 s of extra cost.
Waiting
5 s
For a free search, after upload. Then 503 busy.

07Transit

Live for Streeter since 2 November 2026, from 50 feeds: 37 in North America and 13 in Europe.

One call plans the whole trip. A street search out from the start and one into the finish, in the rider's own style and settings, time every stop in reach. RAPTOR then finds the rides between, one more ride per round. The walk to the station is as good a walk as any other route.

A bike goes only on trips that take bikes. Where an agency's rules and its own feed disagree, the rules win: the Dutch railways' feed says yes to bikes on peak trains that the railways keep them off.

A feed goes live only with a licence that allows commercial use, and every answer credits the feeds it used.

In Streeter, a transit trip used to take calls to HERE plus a separate route for each way to or from a station: 1.0 s on the same trips, against 0.5 s now.

North America

New York, Toronto, Montréal, Boston, Philadelphia, Chicago, St. Louis, the Bay Area, Los Angeles, San Diego, Seattle, Portland, Denver, the Twin Cities, Atlanta, Baltimore and Washington's commuter rail, Dallas, Salt Lake City and Vancouver; VIA Rail and Amtrak across the continent.

Europe

All of Germany, Switzerland, the Netherlands and Norway; Paris and its region, and SNCF's trains; Spain's commuter rail in 12 cities; Helsinki, Prague, Vienna and Dublin.

08Built for Streeter

Sidewinder started on 13 October 2026 with a question from Streeter, a cycling and walking app: could it run its own router on one modest server, with routes at least as good as the hosted ones it was paying for? The study said yes the same day. By 16 October Sidewinder was planning every bike trip and walk in Streeter, worldwide, with no fallback. Streeter's iOS app went out on 23 October on top of it, and transit followed on 2 November.

Most of what's in an answer is there because Streeter needed it: crossings with and without lights, bike lanes by Streeter's own rules, names for unnamed sidewalks, walks that keep to one side of a busy street. Then it grew: loops, sketches, isochrones, a courier mode, transit.

Streeter is still the first client, and the referee. Every change runs Streeter's benchmark trips, and one that makes Calm's routes worse needs a written reason to ship.

09Ordering information

There's no public sign-up and no price list yet. If you're building something that moves people without a car and want a key, write to hello@sidewinder.city. Say what it is, where it runs, and roughly how many requests a day.

Request access

10Revision history

Recent versions
VersionDateChange
0.26.22026-11-02Transit trips, from 50 feeds in North America and Europe.
0.26.12026-11-01Each busy crossing says the crossed street's class, lanes and speed limit.
0.25.02026-10-24No distance cap between waypoints.
0.22.12026-10-18No Calm leg runs more than 25 km past Direct's.
0.22.02026-10-18Walks keep to one side of busy streets, and pay to cross them.
0.1.02026-10-13First routes: Streeter's Calm, reproduced in Rust, on St. Louis.