Out of the frying pan and into the final.
In front of 60,738 at headquarters, Tipperary came from behind with 14 men to edge an intense battle with Kilkenny and set up a first All-Ireland meeting with Munster rivals Cork.
Substitute Oisín O'Donoghue scored a stunning winning goal in the 69th minute after Darragh McCarthy had been sent off for the second time this summer.
John Donnelly almost grabbed what later emerged would have been a late winner but Robert Doyle made a crucial goal-line save to deny him and confirm Tipp's first final since beating the Cats in 2019, their most recent appearance at Croke Park before today.
Kilkenny had looked to be running away with it early on, adapting better to the slippy conditions to score the first eight points of the game.
But Tipp scored the first goal through veteran John McGrath and his full-forward colleagues McCarthy and Jason Forde also found the net in the first half for a 3-11 to 0-16 interval lead.
Tipperary missed a series of frees upon the resumption while TJ Reid remained deadly accurate and, helped by the scoring of Martin Keoghan (0-06 from play), Kilkenny had tied it up by the 48th minute.
McCarthy was shown a second yellow with 12 minutes remaining while Paddy Deegan avoided one but Tipp stayed fighting and, despite Kilkenny hitting the front, Forde nailed four big frees to ensure the teams were level again when O’Donoghue rattled the net brilliantly.
In two weeks' time, Tipp will face a Rebel outfit in the final who hit seven goals past Dublin in the semis, were ten points better in the league final meeting and inflicted a 15-point beating on them in Munster, albeit with an extra man for the entire game. But on today's evidence they can hope to offer more of a challenge.
Full-time: Kilkenny 0-30 Tipperary 4-20 - It's Tipperary who will take on Cork in the All-Ireland Senior Hurling Championship final after late drama where Robert Doyle makes a last-ditch save on the line to deny John Donnelly. pic.twitter.com/ygeYvkm4Fd
— The Sunday Game (@TheSundayGame) July 6, 2025
TJ Reid had been late to join the pre-match parade, only joining up with his team-mates by the time they were passing the Cusack Stand. But the 37-year-old made a fast start, getting out in front of his marker Ronan Maher to open the scoring the second minute.
A pre-match rain shower contributed to a scrappy start, but Kilkenny were winning everything in the air and were three points to the good before John McGrath pounced to pick out the top corner after Jake Morris' effort was blocked.
The six-in-a-row Leinster champions responded with five points in a row; two from TJ (one free) and Jordan Molloy (0-04 on the day), while Billy Ryan also split the posts as they built an ominous lead.
Conor Stakelum, a late replacement for Peter McGarry, got Tipp’s first two points from midfield, either side of playmaker John Donnelly’s only score of the day, but Reid made it double scores, 0-10 to 1-02 after 17 minutes as the rain started to fall again.
The decision to put Maher on TJ had freed Eoghan Connolly from full-back duties and the big man thrived in a roaming half-back role, hitting three points in the first half. As did Stakelum, Morris and Keoghan, and the gap was four when Tipp struck for their second goal, McCarthy doing brilliantly to hold off Huw Lawlor and get the shot away after a high ball in from Bryan O'Mara broke in behind. Eoin Murphy got a decent hurl behind it but could only deflect the sliotar into the side of the net.
The keeper redeemed himself to turn a Morris effort over the bar and McGrath added another as Tipp eased into the lead before Forde became their third goalscorer. McCarthy took advantage of a Butler slip to handpass into the stride of the Silvermines man. With one Murphy brother (Shane) at his back and another rushing out, Forde brilliantly flicked the ball one-handed over the keeper and into the net.
Another defensive howler from Kilkenny's back line and Jason Forde scores Tipp's third goal of the game.
— The Sunday Game (@TheSundayGame) July 6, 2025
📺Watch https://t.co/5y76j90rz3
📻Listen https://t.co/6cgNc6x1xs
📱 Follow https://t.co/jkr3uuTOqT pic.twitter.com/GaRV0eARpJ
Eoin Cody was kept relatively quiet by Doyle on his first game back from injury but set up one Keoghan score before getting on the scoresheet on the half-hour and TJ added three frees before the half-time whistle.
Tipp didn’t have a single scoreable free in the opening period but Morris, Stakelum, McGrath and Connolly, his third a brilliant effort from the sideline after interplay with Bryan O’Meara and Doyle, helped to ensure a four-point interval lead – 3-11 to 0-16 – that did not fully reflect the balance of play.
Cody and Molly cut the gap after the restart but Tipperary started to win more of the puckouts, Craig Morgan at centre-back and O’Mara outstanding, and converted their first free through McCarthy in the 42nd minute. But TJ continued to land everything as Tipp missed three of their next four frees, including one from Connolly.
After two points in quick succession from Adrian Mullen and a monster Cian Kenny effort from his own 65, TJ drew the sides level in the 49th minute. Twice, he inched Kilkenny ahead from frees but McCarthy and Forde (now on the frees) hit back. So did Keoghan before referee James Owens flashed McCarthy a second yellow for a needless slap on keeper Murphy’s hand.
Tipperary are down to 14 men after Darragh McCarthy is shown a second yellow card. That seemed harsh.
— The Sunday Game (@TheSundayGame) July 6, 2025
📺Watch https://t.co/5y76j90rz3
📻Listen https://t.co/6cgNc6x1xs
📱 Follow https://t.co/jkr3uuTOqT pic.twitter.com/4wMWBUGNqw
Andrew Ormond, held scoreless but on a lot of ball all day, set up Morris for the equaliser but Tipperary were still trying a lot of risky passes for a team down a man as Keoghan and then Kenny capitalised on turnovers for a two-point lead by the 63rd minute, when O'Donoghue replaced Conor Stakelum.
The outcome looked inevitable at this stage but Tipp came again. Deegan avoided a second yellow as well for a slap on the back of Ormonde’s helmet as Mikey Carey was booked for a chop at the same time instead. Forde nailed the free for that from the sideline, followed by another from 65 metres.
O'Donoghue then won the ball for Ormonde to set up Forde for a stunner from the sideline as the 14 men retook the lead but Keoghan quickly levelled matters with his sixth of the day.
O’Donoghue then made his decisive impact as the clock ticked into the 69th minute. Deegan and then Carey were both dispossessed in a helter-skelter passage of play and though the Cashel man had an advantage, he shrugged off the attentions of three defenders to arrow a shot into the top-left corner from 15 metres out.
Is that the goal that decides it? More sloppiness from the Kilkenny defence and Oisín O'Donoghue scores.
— The Sunday Game (@TheSundayGame) July 6, 2025
📺Watch https://t.co/5y76j90rz3
📻Listen https://t.co/6cgNc6x1xs
📱 Follow https://t.co/jkr3uuTOqT pic.twitter.com/R4xSG9L25t
Noel McGrath came off the bench and the scoreboards suggested he had hit the insurance point but the GAA confirmed after the game that it had not been awarded.
That meant Kilkenny were chasing a goal when two more unanswered points would have been enough for extra-time after Molloy's fourth effort in the 72nd minute. Though they should probably also have been down to 14 at that stage themselves.
In the end, Doyle’s superb goal-line stop after Donnelly’s drive from 20 metres had beaten Shelley, proved the difference.
Back-to-back semi-final exits for Kilkenny and a place in the big show again for Tipp. Bring on the noisy neighbours.
Kilkenny: Eoin Murphy; Mikey Butler, Huw Lawlor, Shane Murphy; Michael Carey, Richie Reid, Paddy Deegan; Cian Kenny (0-02), Jordan Molloy (0-04); Adrian Mullen (0-02), John Donnelly (0-01), Billy Ryan (0-02); Mossy Keoghan (0-06), TJ Reid (0-11, 8fs, 65), Eoin Cody (0-02).
Subs: David Blanchfield for S Murphy (half-time), Killian Doyle for Kenny (70), Stephen Donnelly for Mullen (65).
Tipperary: Rhys Shelly; Robert Doyle, Eoghan Connolly (0-03), Michael Breen; Craig Morgan, Ronan Maher, Bryan O'Mara; Willie Connors, Conor Stakelum (0-03); Jake Morris (0-04), Andrew Ormond, Sam O'Farrell (0-01); Darragh McCarthy (1-02, 2fs), John McGrath (1-02), Jason Forde (1-05, 4fs).
Subs: Noel McGrath for J McGrath (50), Alan Tynan for O'Farrell (53), Darragh Stakelum for Connors (57), Oisín O'Donoghue for C Stakelum (63), Sean Kenneally for Ormond (70).
Referee: James Owens (Wexford).
Watch highlights on The Sunday Game at 10.15pm on RTÉ2 and RTÉ Player