Skip to the content
The Indexsites.llc

Entry IX-03 · Earth shelf

Bikes

A live board of every dock in a bike-share system, read from the operator's own feed with its timestamps intact. We pulled Citi Bike's feeds and the CityBikes register at the same minute.

Tested 27 Sep 2026, 20:04–20:08 UTC · 3 comparators · labs.llc/bikes/

The Bikes dock board on labs.llc at desktop width: the headline “Every dock. Bikes and spaces, now.”, two paragraphs on GBFS feeds and the CityBikes register, and buttons to open the board or pick a system.
labs.llc/bikes/, captured from the local copy of build 537 on 27 September 2026.

01What it is

Bikes is a live dock board for any bike-share system that publishes GBFS, the open feed standard, with New York's Citi Bike loaded first. Every station shows its bikes, e-bikes and free docks right now. The board ranks the emptiest and fullest stations, maps the whole system with stations sized by capacity, and keeps the feed's own timestamp on every figure.

It is for riders hunting for a bike or a dock, and for anyone who wants to watch a city's system fill and empty.

02How it works

There is no server behind it (bikes/assets/js/app.js, 517 lines). For Citi Bike the browser reads gbfs.lyft.com/gbfs/2.3/bkn/gbfs.json and follows it to station information and status. For other cities it looks the system up in the CityBikes register and follows the operator's own feed where one is listed. The aggregator's copy is used only when the operator's host will not answer a browser, and the line under the system name says which host drew the board (app.js:1-6, 145-150).

It is careful with the operator's server. Status is re-read every 150 seconds, only in a visible tab, with cache: no-cache so an unchanged file costs a 304. It deliberately does not set If-Modified-Since by hand, because that would trigger a CORS preflight the feed does not answer (app.js:12-16, 512-514). Stations not installed or not renting count as out of service rather than empty, e-bikes are counted apart, and each station's own last-reported time is printed (app.js:8-10, 130-134).

03The test

Test log, 27 September 2026 (times UTC)
UTCWhat we didWhat came back
20:04:11Page, local 537 copyHTTP 200, 57,541 bytes.
20:04:11Citi Bike gbfs.json, with an Origin headerHTTP 200, 3,589 bytes in 0.15 s; 12 feeds listed; access-control-allow-origin: *.
20:04:11Citi Bike station_status, summarised by the page's rulesHTTP 200, 1,080,157 bytes in 0.06 s, 25 s old, ttl 60. 2,520 stations, 2,421 renting; 38,988 bikes, 19,321 of them e-bikes; 47 renting stations empty, 199 full.
20:04:11CityBikes registerHTTP 200, 229,600 bytes in 0.65 s: 815 networks, 274 with an operator feed the board can follow.

04Against the field

Each comparator was read on its own site on the date shown. We credit what each does better before saying where Bikes goes further.

Citi Bike app and station map

27 Sep 2026, 20:08 UTC: the page timed out (HTTP 504), so we relied on a search of citibikenyc.com and its help centre.

The operator's own app: tap a station for its exact bikes and docks, scan a QR code to unlock a classic bike or e-bike, and find an open dock at the end of a ride.

Where it does better

  • It rents you the bike; the board only reports.
  • It marks stations holding a charged e-bike.
  • It is the operator's own view of its system.

Where Bikes goes further

  • Ranks the whole system at once, emptiest and fullest, with system totals (app.js:27, 235-252).
  • Prints each station's last report, so a stale station looks stale.
  • Nothing to install and no account.

Transit

Fetched 27 Sep 2026, 20:08 UTC.

A transit app with real-time data and trip planning across buses, subways and bikeshare in more than 1,000 cities.

Where it does better

  • Plans trips that combine bikeshare with buses and trains.
  • One app across more than a thousand cities.

Where Bikes goes further

  • Reads the operator's feed directly and names the host it came from.
  • A whole-system view rather than the stations near one trip.

CityBikes

Fetched 27 Sep 2026, 20:08 UTC; its API measured at 20:04 UTC.

An open register and API of bike-share networks with a map app, built on the open-source pybikes library.

Where it does better

  • It is the register the board relies on for every city beyond Citi Bike.
  • Open source, with an API others build on.

Where Bikes goes further

  • Where CityBikes lists the operator's own feed (274 of 815 networks), the board reads that feed instead of the aggregator's copy.

05Where it falls short

  1. A board, not an app: no trip planning, no unlocking, no prices and no account.
  2. The map is drawn from station coordinates alone, with no streets underneath (app.js:352-357).
  3. It reads neither system_alerts nor free_bike_status, though Citi Bike's discovery file lists both, so announced closures and dockless bikes are missing.
  4. It re-reads every 150 s against a declared 60 s lifetime, so it can trail the feed by about two and a half minutes, and it keeps no history.

06Filing note

File underThe state of a whole bike-share system, straight from the operator.

Bikes does a small job with discipline. It goes to the source, prints the source's clock, separates broken stations from empty ones and polls gently. For a ride, use the operator's app or Transit. For the question “where in this city are the bikes right now, and how fresh is that?” the board answers for every station at once, with the feed's own timestamps.

Open Bikes on labs.llc

07Spec sheet

IX-03 · Bikes · as tested
Addresslabs.llc/bikes/
Where it runsIn your browser; no server component
SourcesOperator GBFS (Citi Bike via gbfs.lyft.com); CityBikes register
RefreshEvery 150 s, visible tab only, conditional
RemembersChosen system, in localStorage and the URL
AccountNone
Measured27 Sep 2026, 20:04 UTC
Set againstCiti Bike app; Transit; CityBikes
Main limitReports only; no alerts, dockless bikes or streets