Solar surpasses nuclear power globally for first time
April 2025 was the month the math finally flipped. For the first time, solar panels worldwide generated more electricity in a single month than every nuclear reactor on Earth combined. Not annually. Not over a quarter. In one month.
I've been covering energy tech long enough to know that milestones like this usually come with a press release and a victory lap. But this one slipped through mostly unnoticed, buried in the World Nuclear Industry Status Report overseen by French nuclear consultant Mycle Schneider. And that's the weird part. We're not talking about a blip. From March 2025 through June 2026, either wind or solar individually out-generated nuclear every single month. In the spring of 2026, both did it at the same time.
The numbers are almost boring in their scale. Solar added 510 gigawatts last year alone,
Technical Overview
Most Postgres deployments hit a wall around the same place: the default max_connections setting of 100. Each PostgreSQL backend process grabs roughly 5-10MB of memory just for its stack and working memory, so by the time you're running 80 concurrent connections you're burning 400-800MB of RAM on process overhead alone. This is the process-per-connection model, and it's been the architecture since the 1990s. It works fine until your microservices architecture spawns fifty connection pools that each think they own the database.
pgBouncer fixes this by sitting between your app and Postgres as a lightweight proxy. In transaction pooling mode, it accepts thousands of client connections but only opens a handful of actual PostgreSQL backends (typically 10-50). Your app talks to pgBouncer on port 6432; pgBouncer multiplexes those requests onto the real database connections as transactions complete. A single pgBouncer instance running on a 1GB VPS can handle 10,000 client connections while keeping your Postgres memory footprint flat at whatever you've configured for max_connections.
Here's the genuinely confusing part: transaction pooling breaks session state. If you run SET search_path = 'myschema' or create a temporary table, that state lives on the specific backend connection pgBouncer assigned you. The next query might land on a different backend with a different session. Prepared statements also behave differently depending on your pgBouncer version and protocol level. You have to test your ORM's connection handling carefully, because some drivers cache session state in ways that assume a persistent connection.
version: '3.8'
services:
postgres:
image: postgres:15
environment:
POSTGRES_PASSWORD: secret
# Postgres only accepts 20 connections; pgBouncer handles the rest
command: postgres -c max_connections=20
pgbouncer:
image: edoburu/pgbouncer:latest
environment:
DB_HOST: postgres
DB_USER: postgres
DB_PASSWORD: secret
POOL_MODE: transaction
MAX_CLIENT_CONN: 1000
DEFAULT_POOL_SIZE: 20
ports:
- "6432:5432"
depends_on:
- postgres
Connect your application to port 6432 instead of 5432. The POOLMODE: transaction setting is what gives you the multiplexing, but remember that any SET commands or temp tables will vanish when the transaction ends. If you need session-level features, switch to POOLMODE: session, but then you lose the memory savings that make pgBouncer worth running in the first place.
Industry Impact
The monthly crossover matters because it shifts the argument from theoretical to operational. For years, nuclear proponents could point to annual generation totals where nuclear still holds ground, or argue that renewables only work when weather cooperates. March and April 2025 broke that at the utility scale—not in projections, but in actual electrons delivered to grids. I think this undercuts the "renewables can't scale" position fundamentally. When wind alone can out-generate nuclear globally in a specific month, the debate moves from whether clean energy can compete to how to manage grids increasingly dominated by variable sources.
But monthly generation is not the same as reliable capacity, and I don't want to overstate what this solves. Nuclear plants run at high capacity factors regardless of season; wind and solar do not. A month where solar beats nuclear says nothing about a cloudy December week when demand peaks. The infrastructure implication is not that existing nuclear plants become obsolete, but that new-build economics have shifted. Utilities are now pricing in a reality where the marginal cost of additional solar or wind approaches zero, while nuclear still requires decade-long commitments and massive capital outlays.
What I'm watching is whether this changes procurement for energy-intensive tech infrastructure—data centers, semiconductor fabs, green hydrogen. Those need 24/7 power, not monthly averages. I suspect we'll see a bifurcation: regions with cheap renewables plus storage will attract new industrial load, while nuclear retains a role where geography or politics constrains renewables. The real question isn't whether solar beat nuclear in April 2025; it's whether grid operators can maintain reliability as those monthly gaps widen into annual dominance.
Conclusion
For sixteen consecutive months, either solar or wind,on its own,has generated more electricity than nuclear worldwide. Not a seasonal anomaly or a data glitch, but a sustained reversal that widened throughout 2025 as solar capacity jumped 27% to 2,383 GW while nuclear firms struggled to show investors anything concrete beyond slide decks. Schneider's "sobering" assessment actually undersells the brutality of the math: when one technology adds 510 GW annually (or 690, depending on whose spreadsheet you trust) and the other can't secure cash for new builds, the crossover wasn't a milestone,it was a lagging indicator. I'm still not sure what the nuclear industry's pitch is to investors at this point, other than nostalgia.