gerak↗
DATA TRANSPARENCY · KETELUSAN DATA

Know what moves your map.

Choose a BAS.MY city, KTMB or Prasarana service for official data. Rapid KL rail provides schedules only. A live feed failure never substitutes simulated vehicles. UTHM and the optional Johor demo are explicitly labelled simulations.

Initial successful integration on 30 September 2026 retrieved 75 vehicles and imported 21 routes with 988 stops. These are verification observations, not promised current fleet counts.

Connected data & services

LTA / data.gov.sg traffic snapshots ↗

Timestamped Singapore-side border camera snapshots, coordinates and camera IDs.

api.data.gov.sg/v1/transport/traffic-images; 60-second metadata cache, selected image only. Images are not live video. Open Data Licence. Unknown camera names retain provider IDs; do not infer queue times.
OpenStreetMap signal junctions / Overpass ↗

Community-mapped static signal junction inventory for the Johor Bahru pilot.

Queries overpass-api.de/api/interpreter within a fixed Johor-area box. ODbL attribution to OpenStreetMap contributors. Provider returned HTTP 406 during verification; UI reports unavailable. No live phase, countdown or surveyed pole geometry is supplied.
Open-Meteo current weather ↗

Current modelled conditions at the selected service-area centre.

Server requests api.open-meteo.com/v1/forecast with current temperature, apparent temperature, humidity, precipitation, wind, weather code and is_day. 15-minute cache; timestamps and stale status shown. Data attribution CC BY 4.0; free API is for non-commercial use, review commercial terms before production.
BAS.MY Kangar · kangar GTFS Schedule ↗

Official routes, stops and representative trip topology for the selected service.

Separate persisted cache per endpoint. Empty or unusable datasets are reported without synthetic replacement. Seremban combines both operator feeds with namespaced IDs.
BAS.MY Kangar · kangar vehicle positions ↗

Official vehicle-position protobuf feed; original GPS timestamps preserved.

Publisher documents 30-second updates; application coalesces requests for 35 seconds. Empty, stale or unavailable feeds are labelled. No trip updates or service-alert integration is claimed.
BAS.MY Alor Setar · alor-setar GTFS Schedule ↗

Official routes, stops and representative trip topology for the selected service.

Separate persisted cache per endpoint. Empty or unusable datasets are reported without synthetic replacement. Seremban combines both operator feeds with namespaced IDs.
BAS.MY Alor Setar · alor-setar vehicle positions ↗

Official vehicle-position protobuf feed; original GPS timestamps preserved.

Publisher documents 30-second updates; application coalesces requests for 35 seconds. Empty, stale or unavailable feeds are labelled. No trip updates or service-alert integration is claimed.
BAS.MY Kota Bharu · kota-bharu GTFS Schedule ↗

Official routes, stops and representative trip topology for the selected service.

Separate persisted cache per endpoint. Empty or unusable datasets are reported without synthetic replacement. Seremban combines both operator feeds with namespaced IDs.
BAS.MY Kota Bharu · kota-bharu vehicle positions ↗

Official vehicle-position protobuf feed; original GPS timestamps preserved.

Publisher documents 30-second updates; application coalesces requests for 35 seconds. Empty, stale or unavailable feeds are labelled. No trip updates or service-alert integration is claimed.
BAS.MY Kuala Terengganu · kuala-terengganu GTFS Schedule ↗

Official routes, stops and representative trip topology for the selected service.

Separate persisted cache per endpoint. Empty or unusable datasets are reported without synthetic replacement. Seremban combines both operator feeds with namespaced IDs.
BAS.MY Kuala Terengganu · kuala-terengganu vehicle positions ↗

Official vehicle-position protobuf feed; original GPS timestamps preserved.

Publisher documents 30-second updates; application coalesces requests for 35 seconds. Empty, stale or unavailable feeds are labelled. No trip updates or service-alert integration is claimed.
BAS.MY Ipoh · ipoh GTFS Schedule ↗

Official routes, stops and representative trip topology for the selected service.

Separate persisted cache per endpoint. Empty or unusable datasets are reported without synthetic replacement. Seremban combines both operator feeds with namespaced IDs.
BAS.MY Ipoh · ipoh vehicle positions ↗

Official vehicle-position protobuf feed; original GPS timestamps preserved.

Publisher documents 30-second updates; application coalesces requests for 35 seconds. Empty, stale or unavailable feeds are labelled. No trip updates or service-alert integration is claimed.
BAS.MY Seremban · seremban-a GTFS Schedule ↗

Official routes, stops and representative trip topology for the selected service.

Separate persisted cache per endpoint. Empty or unusable datasets are reported without synthetic replacement. Seremban combines both operator feeds with namespaced IDs.
BAS.MY Seremban · seremban-a vehicle positions ↗

Official vehicle-position protobuf feed; original GPS timestamps preserved.

Publisher documents 30-second updates; application coalesces requests for 35 seconds. Empty, stale or unavailable feeds are labelled. No trip updates or service-alert integration is claimed.
BAS.MY Seremban · seremban-b GTFS Schedule ↗

Official routes, stops and representative trip topology for the selected service.

Separate persisted cache per endpoint. Empty or unusable datasets are reported without synthetic replacement. Seremban combines both operator feeds with namespaced IDs.
BAS.MY Seremban · seremban-b vehicle positions ↗

Official vehicle-position protobuf feed; original GPS timestamps preserved.

Publisher documents 30-second updates; application coalesces requests for 35 seconds. Empty, stale or unavailable feeds are labelled. No trip updates or service-alert integration is claimed.
BAS.MY Melaka · melaka GTFS Schedule ↗

Official routes, stops and representative trip topology for the selected service.

Separate persisted cache per endpoint. Empty or unusable datasets are reported without synthetic replacement. Seremban combines both operator feeds with namespaced IDs.
BAS.MY Melaka · melaka vehicle positions ↗

Official vehicle-position protobuf feed; original GPS timestamps preserved.

Publisher documents 30-second updates; application coalesces requests for 35 seconds. Empty, stale or unavailable feeds are labelled. No trip updates or service-alert integration is claimed.
BAS.MY Kuching · kuching GTFS Schedule ↗

Official routes, stops and representative trip topology for the selected service.

Separate persisted cache per endpoint. Empty or unusable datasets are reported without synthetic replacement. Seremban combines both operator feeds with namespaced IDs.
BAS.MY Kuching · kuching vehicle positions ↗

Official vehicle-position protobuf feed; original GPS timestamps preserved.

Publisher documents 30-second updates; application coalesces requests for 35 seconds. Empty, stale or unavailable feeds are labelled. No trip updates or service-alert integration is claimed.
KTMB KTMB · Peninsular rail · ktmb GTFS Schedule ↗

Official routes, stops and representative trip topology for the selected service.

Separate persisted cache per endpoint. Empty or unusable datasets are reported without synthetic replacement. Seremban combines both operator feeds with namespaced IDs.
KTMB KTMB · Peninsular rail · ktmb vehicle positions ↗

Official vehicle-position protobuf feed; original GPS timestamps preserved.

Publisher documents 30-second updates; application coalesces requests for 35 seconds. Empty, stale or unavailable feeds are labelled. No trip updates or service-alert integration is claimed.
Prasarana Rapid KL · rapid-kl GTFS Schedule ↗

Official routes, stops and representative trip topology for the selected service.

Separate persisted cache per endpoint. Empty or unusable datasets are reported without synthetic replacement. Seremban combines both operator feeds with namespaced IDs.
Prasarana Rapid KL · rapid-kl vehicle positions ↗

Official vehicle-position protobuf feed; original GPS timestamps preserved.

Publisher documents 30-second updates; application coalesces requests for 35 seconds. Empty, stale or unavailable feeds are labelled. No trip updates or service-alert integration is claimed.
Prasarana MRT feeder buses · mrt-feeder GTFS Schedule ↗

Official routes, stops and representative trip topology for the selected service.

Separate persisted cache per endpoint. Empty or unusable datasets are reported without synthetic replacement. Seremban combines both operator feeds with namespaced IDs.
Prasarana MRT feeder buses · mrt-feeder vehicle positions ↗

Official vehicle-position protobuf feed; original GPS timestamps preserved.

Publisher documents 30-second updates; application coalesces requests for 35 seconds. Empty, stale or unavailable feeds are labelled. No trip updates or service-alert integration is claimed.
Prasarana Rapid Penang · rapid-penang GTFS Schedule ↗

Official routes, stops and representative trip topology for the selected service.

Separate persisted cache per endpoint. Empty or unusable datasets are reported without synthetic replacement. Seremban combines both operator feeds with namespaced IDs.
Prasarana Rapid Penang · rapid-penang vehicle positions ↗

Official vehicle-position protobuf feed; original GPS timestamps preserved.

Publisher documents 30-second updates; application coalesces requests for 35 seconds. Empty, stale or unavailable feeds are labelled. No trip updates or service-alert integration is claimed.
Prasarana Rapid Kuantan · rapid-kuantan GTFS Schedule ↗

Official routes, stops and representative trip topology for the selected service.

Separate persisted cache per endpoint. Empty or unusable datasets are reported without synthetic replacement. Seremban combines both operator feeds with namespaced IDs.
Prasarana Rapid Kuantan · rapid-kuantan vehicle positions ↗

Official vehicle-position protobuf feed; original GPS timestamps preserved.

Publisher documents 30-second updates; application coalesces requests for 35 seconds. Empty, stale or unavailable feeds are labelled. No trip updates or service-alert integration is claimed.
DOSM Malaysia, state and district boundary polygons ↗

Country outline, 16 states/federal territories and 160 districts for geographic selection and shape-following highlights.

Bundled published snapshot, not a claim of current legal boundary adjudication. Original URLs, SHA-256 hashes and retrieval time: /data/boundaries/provenance.json. DOSM Open Data License retained at /data/boundaries/LICENSE.md. No rectangular substitute polygons.
data.gov.my · BAS.MY Johor GTFS-Realtime ↗

Real vehicle IDs, coordinates, route IDs and observation timestamps; speed, heading and occupancy only when supplied.

Protobuf. One shared refresh per 35 seconds in this single-process application. No API key required in the verified request. CC BY 4.0; credit data.gov.my and the respective transport operators.
data.gov.my · BAS.MY Johor GTFS Schedule ↗

Official agencies, routes, stops, trips, ordered stop times and route shapes.

ZIP/CSV. Imported automatically when missing or older than 24 hours, or with npm run ingest. The app uses a representative trip per route; it does not yet evaluate calendars or offer departure-time routing.
OpenFreeMap · Dark map style ↗

MapLibre vector basemap style, linked tiles, glyphs and sprites.

Public instance, no configured API key. Availability has no application-controlled SLA. Style-linked resource URLs are resolved by MapLibre, not hard-coded API assumptions.
OpenStreetMap ↗

Roads, place labels and geographical basemap information through OpenFreeMap.

© OpenStreetMap contributors, ODbL. The application preserves on-map attribution and does not bulk-cache third-party tiles.
OpenMapTiles / OpenFreeMap attribution ↗

Vector tile schema and basemap attribution.

MapLibre displays the attribution supplied by the provider. The active 3D map uses OpenStreetMap building footprints and provider render heights (which may be estimated). No surveyed terrain is claimed.
GERAK community reports ↗

User-submitted geotags, descriptions, optional images and operator status changes.

Application-owned data in local JSON or PostgreSQL/PostGIS. Not a Malaysian municipal API. No synthetic reports are seeded. Reports are public; images are re-encoded client-side.
UTHM KATSANA tracker ↗

Published Batu Pahat and Pagoh route paths and checkpoint coordinates.

Public page inspected 1 October 2026; three routes saved in /data/uthm-katsana.json. Public WebSocket responds, but no live adapter is connected. Vehicles and durations remain simulated; no redistribution licence identified.

Standards & official documentation

MBJB i-Trafik ↗

Official Johor CCTV directory linked from the Layers panel.

External viewer only. No embedded playback, scraping contract or reuse permission claimed.
DBKL KLCCC ↗

Official Kuala Lumpur traffic viewer link.

External viewer only; no public signal phase integration verified.
BAS.MY fare and pass rules ↗

Estimated BAS.MY fares and pass eligibility.

Checked 2026-10-08. RM0.94 first 2 km, RM0.094 per additional km or part; RM30 / 30 days Malaysian-citizen pass. Route tables take priority. City pass coverage remains unconfirmed; nearest-sen half-up rounding is GERAK estimate policy, not a verified official rounding rule.
LPKP Sarawak BAS.MY Kuching Q05 fare table ↗

Published between-stop fare table for Kuching route Q05.

Transcribed 2026-10-18 from the official poster (pages 4-5) into data/fare-tables/kuching-q05.json; matrices validated against the GTFS stop order and the poster's own summary tables. The national formula and RM30 pass are not verified for Sarawak, so Kuching is priceable only through imported route tables.
LPKP Sarawak BAS.MY Kuching Q01-Q10 fare tables ↗

Published fare tables for the remaining GTFS-backed Kuching corridors (Q01, Q06, Q07, Q08, Q09, Q10) and the press statement behind the 11 March 2025 fare reduction.

Discovered via the LPKP Sarawak WordPress media library 2026-10-18 and transcribed into data/fare-tables/kuching-q0{1,6,7,9}.json (Sept 2025 linear terminal tables) and kuching-q08/q10.json (14 May 2025 between-stop matrices plus the Sept 2025 terminal rows). Both generations already carry the reduced fares announced on 10 March 2025, and the matrices agree with the Sept 2025 posters on every comparable pair except Q08 inbound, whose May matrix is excluded as stale. Ambiguous or unmatched poster stops are excluded fail-closed. Q02-Q04 have posters but no GTFS routes; Q11-Q16 publish route maps but no fare table, so those corridors stay unverified_city.
DOSM boundary data provenance and licence ↗

Exact source URLs and hashes for the bundled country, state and district files.

Publisher: Department of Statistics Malaysia. Geometry is preserved; files are only JSON-minified. Permission and disclaimers follow the publisher's Open Data License.
Next.js PWA guide ↗

App Router manifest and service-worker integration.

The matching installed Next.js documentation was also read locally under node_modules/next/dist/docs/.
GTFS Schedule specification ↗

CSV field and coordinate interpretation.

Includes service-day time semantics. Calendar-aware routing and all-trip shape matching remain future work.
GTFS Realtime specification ↗

VehiclePosition protobuf semantics and optional fields.

Omitted occupancy and speed are unknown, not invented observations. The national integration uses VehiclePosition only.
data.gov.my realtime documentation ↗

Supported agencies, update frequency and feed limitations.

Documents approximately 30-second updates. No connected national TripUpdates or ServiceAlerts endpoint is claimed.
data.gov.my static documentation ↗

Official static endpoints and refresh guidance.

Used for all registered BAS.MY cities, KTMB and Prasarana categories. Rapid KL rail has static schedules only; no stable realtime endpoint is claimed.
data.gov.my rate limits ↗

Upstream request budgeting.

Published limit: 4 requests per minute. In-process coalescing is implemented; multiple production replicas require a shared ingestion owner/cache.
Open311 GeoReport v2 ↗

Civic service-request interoperability reference.

No municipal Open311 gateway is connected. GERAK does not claim Open311 conformance.

Design & architecture inspiration

OneBusAway Wayfinder ↗

Modern rider UI, localisation and transit-region configuration research.

Not installed or copied.
MapLibre Three.js custom-layer example ↗

Geographic transforms and map/3D integration research.

GERAK ultimately uses independent MapLibre and R3F renderers with a shared geographic projection contract, not this custom-layer implementation.
node-gtfs ↗

Static GTFS import/query architecture reference.

Not installed. GERAK uses fflate and csv-parse for a bounded importer.
GTFS-to-GeoJSON ↗

Geographic route preparation reference.

Not installed; GERAK builds its own GeoJSON route layers.
Jalan KL ↗

User-requested inspiration for a playful Malaysian miniature city and camera exploration.

No code, images or models copied; not a transport data provider.
Abeto Messenger ↗

User-requested inspiration for teal scenery, miniature urban forms and approachable 3D presentation.

Visually inspected. No code, images or models copied; not an API.
Mini Tokyo 3D ↗

Moving transit visualization, tracking and performance design research.

MIT project. Architecture inspiration only; not installed or called.
OneBusAway ↗

Transit entities, freshness and rider-facing information architecture.

Not a GERAK backend dependency; no OneBusAway API is connected.
OpenTripPlanner ↗

Production multimodal routing architecture research.

Not deployed. GERAK’s present planner discovers direct/one-transfer connections from a representative official stop sequence.
FixMyStreet ↗

Public issue-report lifecycle and location-based reporting research.

No AGPL application code copied or deployed. GERAK implements its own reporting UI and API.
deck.gl ↗

Large-fleet and geospatial visualization research.

Not installed. Current rendering uses MapLibre and React Three Fiber.
Serwist ↗

PWA caching architecture research.

Not installed. GERAK uses a custom service worker and the Next.js manifest API.

Researched, not connected

data.gov.my weather API ↗

Potential future weather/flood context.

Not connected. Community flood reports are not official weather alerts.
UTHM transportation ↗

Official confirmation of campus transport and the existing tracking service.

Institutional source, not a telemetry endpoint. Campus route geometry is sourced separately from the public KATSANA tracker.
MobilityData GTFS validator ↗

Recommended production import validation.

Not run or installed in this MVP. The importer currently enforces archive bounds and essential coordinate/CSV checks.

What is not claimed

No official ETA, fare, delay, accessibility audit, current crowd level or service-alert data is invented. 3D building footprints come from OpenStreetMap; heights may be estimated, and no surveyed terrain is claimed. Civic reports remain within GERAK unless a future authority integration is agreed. Route connections are not an operational timetable.

Code dependencies and complete licence references are recorded in package-lock.json and docs/SOURCES.md. No paid Mapbox API, Google Maps API, Mapbox terrain service, external AI API or analytics tracker is used.

Return to the map