This morning, when I woke up, I felt that something was different. The sky looked darker, the temperature felt colder, and the faint sound of drizzling rain outside carried a gloomy tone.
I immediately rushed to check the forum chat that morning, trying to scrape together information. What was going on out there?
07:17:55: “Heavy rain”
07:18:44: “Same here in Bogor”
07:19:39: “With a storm like this, how am I supposed to get to the office?”
07:39:11: “Anyone in North Jakarta who lives toward the east / near Bekasi. Is it storming there?”
07:40:20: “Yep. Storming. Starting to ease up a bit though.”
07:48:25: “Seems pretty widespread. Cikarang’s getting wind and rain too.”
07:50:04: “Still early morning but the rain is insanely heavy. What a Monday.”
07:55:41: “With rain this heavy, it’s best to just go back to sleep~”
08:00:26: “Heavy rainnn”
08:10:46: “The rain is so damn heavy.”
08:14:28: “Waiting for it to stop, but it’s just getting heavier.”
08:16:52: “This storm. No way I’m working. Just want to WFH.”
Heavy rain? A storm? How bad could it be? Here, the rain was only a light drizzle, but the darkness of the sky and the chill in the air felt very different. This wasn’t ordinary rain.
I kept reading the forum.
08:15:11: “Same in Central Jakarta, storm-level rain. Can’t work at all.”
08:29:58: “Force majeure, man. I ain’t leaving for work like this.”
08:37:55: “With rain this bad, offices should really normalize letting employees WFH, at least for sectors that don’t need physical presence."
08:40:00: “Stuck getting out of Tanah Abang. The rain’s way too heavy.”
08:45:47: “Early morning chaos in the airspace above CGK. Looks like no planes can land. Four domestic flights diverted to Lampung. Flight SQ950 had to do three go-arounds. This morning’s rain is insane.”
Huh?
So many planes couldn’t land at Soekarno-Hatta? How bad was the rain last night?
I switched apps and opened Instagram, checking gadinglyfe’s story. I found out that there were several flooded spots in the Gading area.

Photo posted on Gadinglyfe’s Instagram story
07:25: “Storm.”
07:45: “Flooding in front of Greenhill Apartment, Jalan Pegangsaan Dua. The intersection is flooded too.”
08:00: “A tree fell in front of Total Buah Kelapa Nias (Jalan Raya Kelapa Hybrida, Pegangsaan Dua).”
08:44: “Lots of motorcycles stalled in front of Astra. The water’s getting higher, guys. Stay safe if you’re heading in or out of Gading.”
09:12: “RW 12 post in Cengkir collapsed.”
I kept trying to scrape together information from other sources, turning to weather radar. Unfortunately, for the past four days, the weather radars around Jakarta at Radcumar Stamet Serang, Rainviewer, and Windy have all been inaccessible. At the very least, however, SYNOP reports from the Soekarno-Hatta weather station were still available. I shared this information with friends on the forum.

From the SYNOP report, it was recorded that on January 12, 2026, rainfall in Jakarta had reached 52 mm. Hmm? That seemed fairly normal. The data also showed that a few days earlier, daily rainfall had even reached 61 mm. And back then, there was no “major news” as dramatic as today. It hadn’t gone so far as to prevent planes from landing.
Hmm… Maybe the SYNOP data hasn’t been fully released yet?
It was time to switch to yet another source: TransJakarta’s live tweets.
It could be said that Jakarta’s public transportation network already reaches even the city’s most outlying corners. So whenever there is any kind of “incident” that disrupts the operation of this public transport system—whatever the cause may be, from flooding, riots, fires, street fights, and so on—it is usually reported immediately in the form of live tweets on TransJakarta’s Twitter account.

Jakarta’s public transportation network
I opened TransJakarta’s Twitter account and checked all of the latest tweets, especially announcements about routes that had been suspended due to flooding or diverted because of waterlogged roads. I took notes on everything: which routes were affected and which flood points were being reported. Then I reorganized all of that information into a web-based dashboard.

07:49: JAK58 Cilincing–Rorotan diverted due to flooding on Jalan Raya Gereja Tugu.

07:59: JAK71 Kampung Rambutan–Pinang Ranti diverted due to flooding in Penggilingan Baru.

08:05: 3E Sentraland Cengkareng–Puri Kembangan diverted due to flooding in Royal Palem.

08:08: Flooding reported on Jalan Tongkol. There is a bit of a future spoiler in this screenshot, because I built the web dashboard in reverse chronological order, while here I’m telling the story in forward chronological order. So yes, those 10:10 and 08:37 flood points are future spoilers.

08:17: JAK79 Cengkareng–Tubagus Angke diverted due to flooding on Jalan Peternakan Raya.

08:37: Flooding reported in Pademangan.

08:40: JAK37 Cililitan–Condet diverted due to flooding on Jalan H. Ali.

09:14: JAK07 Tanah Abang–Grogol diverted due to flooding on Jalan Muardi.

09:27: Route 9 Pinang Ranti–Pluit could not continue to Pluit because of flooding in Grogol. It only stopped at Grogol and did not proceed further north to Pluit.

09:42: JAK40 Pulo Gebang–Rawa Kuning–Harapan Baru diverted due to several flood points in Harapan Baru.

09:49: 5N Ragunan–Kampung Melayu diverted due to flooding in Pasar Kambing.

10:01: JAK27 Pulo Gebang–Rorotan diverted due to flooding in Rorotan IX.

10:03: 12B Senen–Pluit fully suspended. The exact location of the flooding was not specified. I suspect it was in Pluit.

10:09: 10H Tanjung Priok–Bundaran Senayan fully suspended. Again, the exact flood location was not specified. I suspect it was in Tanjung Priok.

10:10: 1W Blok M–Ancol fully suspended.

10:24: From PGC it was not possible to reach Tanjung Priok. Services could only go as far as Cempaka Putih.

10:38: All Jaklingko routes affected by flooding were posted in a single tweet.

10:55: All TransJakarta routes affected by flooding were posted in a single tweet.

10:59: Additional TransJakarta routes were cut off. Balai Kota to Pantai Maju. The flood location was not explained, but I suspect it was in Pantai Maju.

11:04: Cililitan–Kayu Manis–Condet diverted due to flooding on As Salam, Al Hawi, and Dewi Sartika.

11:29: SH1 Kalideres–Soekarno-Hatta Office Complex diverted due to flooding at Soewarna and Cargo Terminal 2.

11:36: 2A Rawa Buaya–Pulogadung fully suspended. The flood point was not specified, but I suspect it was somewhere north of Monas.

12:16: T31 Blok M–PIK 2 diverted due to flooding on MH Thamrin, PIK 2.

12:56: 2B Pulo Gadung–Harapan Indah experienced a route shortening due to flooding at the Harapan Indah gas station.
In the end, this was the result:

https://altilunium.github.io/LocationPad/sample/BanjirJKT120126/
After I was done, I sent the web dashboard to the forum.
Then, unexpectedly, someone replied to my earlier post.
They said they had Jakarta weather radar data.
Wow. I contacted them immediately and asked for the data.
I got it. I “cooked” the data. Yes, unlike Radcumar Stamet Serang, Rainviewer, or Windy, which present weather radar data in an already “fully processed” form, they gave me semi-raw data. So it still needed further processing.
The processing method was too technical here, so I posted it instead on my Substack blog over there.
After processing the weather radar data, I arrived at a conclusion.
First, the spatial distribution of heavy rainfall points on the radar closely matched the distribution of TransJakarta service disruptions. The worst-affected areas were in northern Jakarta, starting near Soekarno-Hatta Airport in the west, then Muara Angke, Pluit, Ancol, Tanjung Priok, all the way to Kelapa Gading and Rorotan in the east. From the north–central area, it spread slightly southward, reaching Monas, City Hall, and Senen. The heaviest rainfall was estimated to have occurred around two in the morning.

The weather radar at 02:01, which was estimated to be the peak point of the heaviest rainfall that night. Blue indicates light rain. Green indicates rain. Yellow indicates heavy rain. Orange indicates very heavy rain. The system stretched from around Soekarno-Hatta Airport, across most of North Jakarta, widening slightly into Central Jakarta up to Monas, and then eastward to Kelapa Gading and Cakung.

The yellow–orange zones on the weather radar corresponded closely with the distribution of disrupted TransJakarta and Jaklingko routes reported on Twitter.

This was the weather radar at 02:01, zoomed out to the West Java level.
The second conclusion was that after reaching its “peak” at around two in the morning, the rain gradually eased and continued to subside until sunrise.

The weather radar at 06:49 in the morning showed that it was starting to weaken, although in several spots the rain was still falling.
I then checked the Soekarno-Hatta SYNOP data again. Maybe there was an update?
Wow. There was.
The total daily rainfall on January 12, 2026 turned out to be 151.6 mm.

At that level, the figure was no longer marked in “light blue” or even “dark blue,” but already in black.
I looked more closely at the detailed SYNOP data.

It turned out that rain had been recorded since 10 p.m. Then its status escalated to “storm” from 11 p.m. until 6 a.m. The worst phase of the storm occurred between 00:00 and 03:00 (oh, perfectly matching my processed weather radar conclusion that the peak rainfall happened around two in the morning), with a total rainfall of 123 mm. From 03:00 to 06:00, rain continued to fall but at a lighter intensity, adding only 12 mm more, from 123 mm to 135 mm.
Finally, I checked Kompas (a national newspaper) to confirm the reports about planes having trouble landing at Soekarno-Hatta that morning.
And it turned out to be true.
“It was recorded that 16 aircraft were instructed to divert to alternative airports, including Palembang (2 aircraft), Semarang (3), Halim Perdanakusuma (3), Tanjung Pandan (1), Pangkalpinang (1), Solo (2), Yogyakarta International Airport (4), and Jambi (1).”
“Changes in navigation services occurred particularly between 05:00 and 10:00 WIB, when heavy rain reduced visibility to below 1,000 meters across all runways at Soekarno-Hatta Airport.”
“ATC officers managed aircraft to perform holding in designated areas or patterns. Holding durations ranged from 40 minutes to one hour, with the number of aircraft reaching up to 15 units. Procedures such as go-arounds, holding, and diverting to alternative landing locations are part of standard aviation safety measures when weather conditions do not meet required standards.”
Update : On Wednesday, Jan. 14, 2026, I came across further details about the torrential rain that occurred on Monday, Jan. 12.
“Three people were killed in Cilincing after being electrocuted as floodwaters inundated the area. A married couple, identified as HW, 55, and NJ, 50, were found dead in Semper Barat, while another victim, MS, 43, was discovered in Kalibaru.”
“HW and NJ were first found by their son, MD, 17, who had just returned home from school at around 10:30 a.m. on Monday (Jan. 12). He was shocked to see the bodies of his parents floating in floodwater inside the house and screamed for help from neighbors, who later assisted with the evacuation. Preliminary findings indicate that a refrigerator cable with damaged insulation may have caused the electrocution.”
“MS was found dead at her home at around 9:00 a.m. Earlier, she had been seen cleaning her flood-hit house. She was electrocuted and lost consciousness. First aid was administered by her brother-in-law, who is also the head of the local neighborhood association, but her life could not be saved.”
“Extreme rainfall occurred from Monday morning to afternoon, with precipitation exceeding 100 millimeters per day in several areas. Recorded rainfall included 130 mm at Kali Duri, 124 mm in Sunter Jaya, 116 mm in Rorotan, 114 mm on Yos Sudarso Road, 106 mm in East Kelapa Gading, and 105 mm at Jembatan Merah. “This level of rainfall has exceeded the capacity of Jakarta’s infrastructure,” said the head of Jakarta’s Water Resources Agency Data and Information Center. Authorities have deployed 612 stationary pumps at 211 locations and 590 mobile pumps across the city’s five administrative regions to respond to the flooding.”