Bruno Fernandes and Luke Shaw were on target in a 2-0 win.
Bruno Fernandes and Luke Shaw struck early in each half as Manchester United ended Manchester City’s 21-match winning run with a stunning 2-0 derby victory.
Fernandes scored a penalty after just two minutes at the Etihad Stadium and Shaw added the second on 50 minutes as United inflicted a first defeat on their rivals since November.
The result cut City’s lead over United at the top of the Premier League to 11 points and, while it may be a stretch to suggest the title race has been reignited, it has slowed what was looking like a procession.
It may certainly rejuvenate United, who might have feared being dragged into a battle for a top-four place after an indifferent series of performances.
The only downside for the visitors was the loss of the inspirational Marcus Rashford through injury in the second half.
City had gone into the game undefeated in their previous 28 in all competitions and with their previous 21 opponents all beaten.
That had raised the prospect of reaching the world record for a top-flight side of 27 successive wins but that was under threat within moments of kick-off.
United raced out of the blocks and Anthony Martial was clumsily clipped by Gabriel Jesus with just 34 seconds gone.
Referee Anthony Taylor pointed straight to the spot for what was the 92nd penalty of this Premier League season, equalling the number awarded in the entirety of the 2019-20 campaign.
Fernandes, no stranger to penalties himself, thumped home his 10th spot-kick of the season despite Ederson getting a hand to his shot.
City were unusually rocky in the opening minutes and they were almost punished again moments later when Joao Cancelo failed to dribble out of his own area. Shaw seized possession but shot straight at Ederson.
Rashford tried his luck from long range but Ederson grabbed his effort at the second attempt.
With Kevin De Bruyne uncharacteristically sluggish, City took time to settle but they felt they should have had a penalty themselves after Raheem Sterling was challenged late by Fred in the area.
Nothing was given but Oleksandr Zinchenko drew a good save from Dean Henderson, who was continuing in place of the absent David De Gea, from distance.
Riyad Mahrez went close with a shot across the face of goal in the final moments of the first half and Rodri hit the woodwork from a Jesus lay-off after the restart.
Those near-misses were to prove costly for City as Shaw doubled United’s lead on 50 minutes.
Henderson launched a United attack with a quick throw and Rashford burst into the area to find Shaw in support. The left-back had three defenders in front of him but he caught them and the unsighted Ederson by surprise with an angled low shot which crept inside the far post.
City tried to respond but Jesus found nobody with a ball across the box when well placed, and they were fortunate not to go 3-0 down after a ricochet saw the ball break to Martial in their area. The Frenchman looked certain to score when presented with the one-on-one opportunity but Ederson saved low to his left.
Pep Guardiola sent on Phil Foden with 20 minutes remaining and the youngster went close with a shot on the turn that flew wide.
Rashford limped off but United had already done the damage.
City were unable to force their way back into the game allowing United, for now at least, the local bragging rights.