車到未 — one Hong Kong bus app for all five operators
Five operators, one search box. The route database ships inside the app, so the first stop card is on screen before a network request has finished.
Hong Kong's bus network is one system with five APIs
From a passenger's point of view there is one bus network. From an app's point of view there are five separate open data feeds, each with its own field names, its own quirks, and its own idea of how to express a timetable. Most apps handle one or two operators well and treat the others as second class, which means that at a stop served by a Citybus route and a green minibus, half the information is missing.
車到未 treats all five as first class: KMB, Citybus, New Lantao Bus, MTR Bus and green minibus, in one search and one arrival list.
What a Hong Kong bus app covering all operators has to get right
The engineering is mostly invisible, which is the point — it shows up as speed and completeness.
- Five operators, one list. The operator set is closed and explicit. Long Win routes are deliberately not a separate operator, because the KMB feed carries Long Win routes and never labels them as such — a fact verified against the live endpoint rather than assumed. An unknown operator parses to nothing rather than silently defaulting to KMB, which is the class of bug that quietly corrupts every saved favourite.
- A route database that ships with the app. Route geometry from all five providers is fetched and normalised at build time into a single SQLite file bundled in the app. The alternative — downloading several megabytes on first launch — puts a multi-second wait in front of the first screen, and no amount of loading animation hides that.
- Nearby stops, immediately. The app opens on the stops around you, working from the bundled database rather than waiting for a network round trip to know where the stops are.
- Next three departures. Per route and direction, because the second and third times are what tell you whether to run for the first one.
- A stop alarm that works with the screen off. Tell it where you are getting off and it wakes you before the stop — with the phone in a pocket and the screen dark, which is the only situation in which such a feature is worth having. An earlier foreground-only version was removed precisely because the limitation made it useless.
- A keypad for route numbers. Hong Kong bus routes are short alphanumeric codes, and a numeric keypad beats a full keyboard for typing 968 or 43X.
- Favourites and route progress. Regular routes pinned, and a view of where a bus is along its route.
- Clock skew handling. Arrival times are computed against the feed's own clock rather than the phone's, so a device with a drifting clock does not produce wrong countdowns.
Correctness worked out rather than assumed
The parts of this app that took the most effort are the ones you never see: which operator a route really belongs to, how five providers each express a timetable, how to avoid a stale clock producing a confident wrong answer. Those decisions are documented in the source with the date they were verified against the live feed, which means they can be rechecked when an upstream feed changes rather than rotting silently.
Stops within thirty metres are treated as the same physical stop, so a single kerbside position does not appear as three separate entries because three operators named it differently.
Who it is for
Anyone whose regular stop is served by more than one operator — which, outside the densest urban routes, is most stops. The single-operator apps simply do not answer the question at that kerb.
People travelling to Lantau, where New Lantao Bus is the operator and coverage in other apps is thin. Anyone who relies on green minibuses, which are frequently an afterthought elsewhere. And anyone who falls asleep on a long bus ride and would like to be woken up at the right place.
Data sources
Arrival estimates come from the public open data endpoints of each operator, published via data.gov.hk and the operators' own endpoints. The static route and stop dataset is built from those same sources and bundled with the app. It is unofficial and not affiliated with any bus operator.
Estimates are the operators' predictions and can be wrong; traffic and cancellations move them. Location is used to find stops near you. Nothing is uploaded.
Frequently asked questions
Which operators does it cover? Five: KMB, Citybus, New Lantao Bus, MTR Bus and green minibus. Long Win routes appear under KMB, because the KMB feed carries them and never labels them separately — verified against the live endpoint.
Why is the app fast to open? Because the route and stop database is built at compile time and shipped inside the app rather than downloaded on first launch. The first stop card does not wait for a network round trip.
Does the stop alarm work with the screen off? Yes — that is the entire point. An earlier foreground-only version was removed because the limitation made the feature useless.
Why do I not see duplicate stops for different operators? Because stops within about thirty metres are treated as the same physical location, so one kerbside position does not appear three times under three operator names.
Is it official? No. It is unofficial and built on public open data.