// Adds dimensions UUID, Author and Topic into GA4
Monday, July 27, 2026
27.7 C
Singapore

Johor tops Malaysia’s state economies with 8% growth, powered by data centres and digital infrastructure

MALAYSIA: Johor has emerged as Malaysia’s fastest-growing state economy in 2025, recording 8% GDP growth. This is the highest among all Malaysian states, as the country’s overall economy expanded by 5.2% to RM1.74 trillion (S$553 billion), according to the Department of Statistics Malaysia (DOSM).

Johor’s economy was valued at RM171 billion for the year, accounting for nearly 10% of the national economy. The standout growth was driven largely by the rapid expansion of its data centre industry and broader digital economy infrastructure, which reflects the wave of tech-related investments that have poured into the state in recent years.

Strong performers across the board

According to Invest Johor, three other states also outperformed the national growth rate of 5.2%. Penang recorded 7.3% growth, Selangor came in at 6.3%, and Perak at 5.7%, according to Chief Statistician Datuk Seri Dr Mohd Uzir Mahidin.

Together, Selangor, Kuala Lumpur, Johor, Sarawak, and Penang remained the country’s main economic engines, contributing a combined 67.9% of Malaysia’s GDP.

Selangor retained its position as the largest single contributor to the national economy, accounting for 26.5% of GDP with an output of RM460.1 billion. This is nearly three times Johor’s output, though growing at a slower pace.

GDP per capita: Where Johoreans stand

Six states and federal territories recorded GDP per capita above the national average of RM59,167. Kuala Lumpur led by a wide margin at RM144,898, followed by Putrajaya (RM126,359), Labuan (RM88,764), Penang (RM80,584), Sarawak (RM73,757), and Selangor (RM70,362).

Johor’s GDP per capita, while not listed among the top six, sits against the backdrop of a state economy that is growing faster than any other, suggesting that if the current trajectory holds, per capita figures may follow suit in the coming years as high-value jobs in the digital and technology sectors become more established.

Why this matters for Singapore

Johor’s 8% growth figure is not just a Malaysian economic statistic but is also a direct effect of some decisions made in Singapore boardrooms, by global technology companies, and by the people in charge of the JS-SEZ framework.

The data centre boom driving Johor’s growth is intimately connected to Singapore’s position as a regional technology and financial hub. As Singapore’s own land constraints limit large-scale data centre development domestically, Johor has absorbed much of that overflow investment, creating a cross-border digital infrastructure corridor that benefits both economies.

For Singaporean businesses and investors with exposure to the Johor market, the 8% growth figure validates the investment thesis that has brought significant capital across the Causeway in recent years. And for Singaporeans watching the JS-SEZ take shape, Johor’s emergence as Malaysia’s fastest-growing state economy is perhaps the clearest signal yet that the broader cross-border integration story is not just policy rhetoric, but is instead already showing up in the numbers.


Read also: Housing, jobs and business support: Johor BN unveils 63-point manifesto ahead of state elections

- Advertisement -

Hot this week

‘I’ll have far less time with them’: Teen shares the painful reality of being born to older parents

"I'm jealous of my older siblings." A Singaporean teen says they got to experience a younger, more energetic version of their parents, while she's left worrying she'll have far less time with them.

Six-figure earner says he paid for every date, wonders if that’s just how dating works in Singapore

He earns up to S$160,000 a year and enjoyed treating his date—but says she never once offered to pay, even for the little things.

Popular Categories

document.addEventListener("DOMContentLoaded", () => { const trigger = document.getElementById("ads-trigger"); if ('IntersectionObserver' in window && trigger) { const observer = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { lazyLoader(); // You should define lazyLoader() elsewhere or inline here observer.unobserve(entry.target); // Run once } }); }, { rootMargin: '800px', threshold: 0.1 }); observer.observe(trigger); } else { // Fallback setTimeout(lazyLoader, 3000); } });
// //
Enable Notifications OK No thanks