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
01Typical application
The Saint Louis Art Museum to Soulard, by bike, asked for twice.
Direct9.9 km34 min65% busy
Calm10.2 km36 min0.5% busy
- Quiet
- Moderate
- Busy
- Busy crossing at a light
- Without one
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.
| Style | API | What it prices |
|---|---|---|
| By bike | ||
| Calm default | calm | Quiet streets and bike paths. Busy streets avoided, busy crossings priced, lights preferred. |
| Direct | direct | Close to the shortest line, with 5 s on each turn. |
| Explore | wander | Parks, lively blocks and places worth seeing. Busy crossings at about half Calm's price. |
| Alleycat | alleycat | A 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 | ||
| Calm | calm | Off busy streets, and on one side of them. Crossing one without a light costs most. |
| Direct | direct | The direct walk, still paying to cross busy streets without a light. |
| Explore | wander | Parks 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.
| Event | Seconds |
|---|---|
| Crossing a busy street | 80 or 12 at a light |
| Riding through a busy junction | 80 or 12 at a light |
| Turning across busy traffic | 45 or 15 at a light |
| Joining a busy street | 45 |
| Crossing a moderate street without a light | 8 |
| Any turn | 16 |
| A U-turn | 120 |
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):
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.
10Revision history
| Version | Date | Change |
|---|---|---|
| 0.26.2 | 2026-11-02 | Transit trips, from 50 feeds in North America and Europe. |
| 0.26.1 | 2026-11-01 | Each busy crossing says the crossed street's class, lanes and speed limit. |
| 0.25.0 | 2026-10-24 | No distance cap between waypoints. |
| 0.22.1 | 2026-10-18 | No Calm leg runs more than 25 km past Direct's. |
| 0.22.0 | 2026-10-18 | Walks keep to one side of busy streets, and pay to cross them. |
| 0.1.0 | 2026-10-13 | First routes: Streeter's Calm, reproduced in Rust, on St. Louis. |