Project
A live dashboard of Jakarta's public traffic cameras
I wired up every public Jakarta traffic CCTV I could find — Dishub ATCS, Balitower, WebcamTaxi — into one filterable, click-to-play dashboard.
Jakarta's traffic is famously brutal, and the city quietly publishes hundreds of live CCTV feeds you can watch right now. They're scattered across Dishub DKI Jakarta's ATCS, Balitower, and a handful of aggregator sites — and finding the one camera you actually want is its own commute.
So I built a dashboard.
What's in it
- ~50 public traffic cameras across all five Jakarta districts.
- Filter by Central, South, East, West, North Jakarta in one tap.
- Search by street name, neighborhood, or landmark.
- Click-to-play embeds — nothing streams until you ask for it, so the page loads fast and doesn't melt your bandwidth.
- A direct Open in new tab link on every card for streams that refuse to embed.
Where the feeds come from
| Source | What it is |
|---|---|
| LewatMana | Aggregator that re-embeds Dishub DKI ATCS feeds with friendly URLs. |
| Balitower CCTV | Bali Towerindo Sentra's public infrastructure cameras — multiple angles per location. |
| ATCS Jakarta | Dishub's own official map (intermittent uptime). |
| Jakarta Smart City | Official city dashboard with a CCTV layer. |
| BPTJ Streaming | Greater Jakarta (Jabodetabek) toll/arterial cameras. |
| WebcamTaxi — Cawang HD | Single HD camera on Jl. DI Panjaitan. |
Notable spots covered
- Bundaran HI and Jl. MH Thamrin — the postcard view of downtown.
- Gelora Bung Karno / Senayan — nine separate Balitower angles around the stadium complex.
- Cawang flyover and Jl. DI Panjaitan in HD — East Jakarta's most painful chokepoints.
- Tomang flyover, Mangga Besar, Tanjung Duren — West side.
- Ancol, Tanjung Priok, Sunter, Bandengan — the entire North coast.
Caveats
Some embeds will refuse to load inside an iframe (X-Frame-Options). Every camera card has an Open in new tab link as a fallback. If a particular camera looks dead in the embed, that's almost always why.
This is self-hosted on the same Raspberry Pi that runs this blog — running over a Cloudflare Tunnel, no open ports. The whole page is a single Next.js route with static data; the cameras are not proxied, just linked.
Filed under