Match ends, Bradford City 0, Bristol City 6.
League One leaders Bristol City thumped Bradford City to seal promotion to the Championship after a two-year absence.
The away side dominated from the start, with James Tavernier's toe-poke and Joe Bryan's far-post header putting them in command at the break.
Luke Ayling fired in from long range and Aden Flint nodded in as the Robins ran riot in the second half.
Tavernier's slotted finish and Aaron Wilbraham's strike completed a memorable evening.
Now 10 points clear of second-placed Preston North End, the Ashton Gate outfit need to win only one of their remaining three games to be certain of securing the League One title.
Under boss Steve Cotterill, the Robins have been in imperious form since the very start of the season, winning at fellow promotion contenders Sheffield United on the opening day and remaining unbeaten until mid-November.
Having lifted the Johnstone's Paint Trophy at Wembley last month, Bristol City's latest undefeated run in the league stretches 12 matches and leaves them strong favourites to complete a lower-league double.
This campaign also represents a remarkable turnaround for a club who, when Cotterill was appointed 16 months ago, were languishing in 23rd in the table and in danger of suffering successive relegations.
The former Cheltenham, Burnley and Portsmouth manager's summer recruitment has been key to their success, with the arrival of Luke Freeman from Stevenage as significant as any.
Already the division's leading assist maker, the 23-year-old was again the orchestrator as the visitors bossed the opening period, setting Tavernier clear for their first and crossing for Bryan to head in the second.
But, while Bristol City enjoyed the better of the first half, they produced an emphatic display of attacking football in the second to seal promotion in style.
Ayling's 25-yard strike sneaked in past goalkeeper Ben Williams for their third, before centre-half Flint headed his 11th of the campaign from Marlon Pack's free-kick.
Tavernier grabbed his second soon after, bundling in at the far post, and Wilbraham capitalised on a defensive mix-up to slot past Williams and send the Robins up with three games to spare.
- 20MoraisSubstituted forMcMahonat 76'minutes
- 11KnottSubstituted forRoutisat 75'minutes
- 14YeatesSubstituted forSteadat 45'minutes
- 15FreemanSubstituted forSavilleat 79'minutesBooked at 85mins
- 23BryanSubstituted forCunninghamat 76'minutes
- 18WilbrahamSubstituted forEmmanuel-Thomasat 88'minutes
- Stuart Attwell
- Shots on Target
Second Half ends, Bradford City 0, Bristol City 6.
Christopher Routis (Bradford City) hits the left post with a right footed shot from outside the box.
Substitution, Bristol City. Jay Emmanuel-Thomas replaces Aaron Wilbraham.
Foul by George Saville (Bristol City).
Jon Stead (Bradford City) wins a free kick in the attacking half.
George Saville (Bristol City) is shown the yellow card.
Foul by George Saville (Bristol City).
Gary Liddle (Bradford City) wins a free kick in the defensive half.
Attempt missed. George Saville (Bristol City) left footed shot from outside the box is too high.
Luke Ayling (Bristol City) wins a free kick in the defensive half.
Foul by James Hanson (Bradford City).
Substitution, Bristol City. George Saville replaces Luke Freeman.
Goal! Bradford City 0, Bristol City 6. Aaron Wilbraham (Bristol City) left footed shot from the centre of the box to the bottom right corner.
Substitution, Bristol City. Greg Cunningham replaces Joe Bryan.
Substitution, Bradford City. Tony McMahon replaces Filipe Morais.
Substitution, Bradford City. Christopher Routis replaces Billy Knott.
Goal! Bradford City 0, Bristol City 5. James Tavernier (Bristol City) left footed shot from the centre of the box to the bottom left corner.
Corner, Bristol City. Conceded by Gary Mackenzie.
Attempt saved. Kieran Agard (Bristol City) right footed shot from outside the box is saved in the top right corner.