Every still and every live video on Streetside originates from the DKI Jakarta provincial government. The cameras are installed, owned, powered, and pointed by the city itself, primarily for traffic management and public safety. Their footage was already public before Streetside existed; we simply re-present it.
The chain of custody
In order, your browser sees data that has travelled this path:
- The camera — a fixed unit installed by DKI Jakarta, pointed at a public street.
- The government's CCTV portal — aggregates feeds and makes them available at a public endpoint.
- The Molecool API — a third-party indexing service that polls the government feeds and exposes a clean JSON catalogue.
- The Streetside Cloudflare Worker — fetches the Molecool catalogue, sanitises it (drops cameras without coordinates, drops disabled cameras), and writes it to Cloudflare KV with a sixty-second TTL.
- The Streetside SSR layer — reads from KV, server-renders the page, ships HTML to your browser.
- For live video — your browser receives an HLS playlist URL pointing at
/stream/[...path], which proxies the upstream HLS segments so the upstream server never sees your IP. - For stills — same pattern via
/img/[...path].
Refresh cadence
The camera index is refreshed every sixty seconds at the edge. New cameras, removed cameras, and changes to addresses or names propagate within that window. The HLS video itself is genuinely live — there is no Streetside-side caching of the video segments, only proxying.
Still snapshots (image1, image2) come from the upstream with short-lived signed URLs (typically valid for about an hour). If you bookmark a snapshot URL directly, expect it to 403 after the token expires — visit the camera's page again to pull a fresh one.
Attribution & licence
The aggregated directory — the catalogue itself, with our normalisation, filtering, and editorial framing — is published under the Creative Commons Attribution 4.0 International licence. If you republish the data, credit reading roughly:
"Camera directory by Streetside Jakarta (https://streetside.mugnimaestra.dev), CC-BY 4.0. Underlying CCTV feeds: DKI Jakarta provincial government, via Molecool API."
The underlying video and image feeds remain the property of their respective owners. Streetside makes no claim to them.
API access
You can hit the catalogue directly:
GET /api/cameras— full active catalogue, JSON, edge-cached.GET /api/cameras/{id}— detail for one camera, including HLS stream URL.
There's no rate limit at present; please be reasonable, and prefer the catalogue endpoint over hammering individual cameras.
The technical pipeline
Streetside is built with SvelteKit 2 (Svelte 5), Tailwind CSS 4, the Cloudflare Pages adapter, MapLibre GL for the Atlas, and hls.js for the live-video player. The KV namespace caches the camera catalogue. There is no database, no queue, no cron — just the Worker, KV, and a sixty-second TTL.
Corrections & data quality
If you spot a wrong address, a misspelled neighborhood, a camera in the wrong place on the map, or a camera that should be removed from our index, write to hello@streetside.mugnimaestra.dev. Most metadata corrections need to go to the upstream (DKI Jakarta or Molecool); we'll forward as appropriate.