The France forward, whose current contract expires on June 30, had been widely tipped to join Real Madrid.
Club president Nasser Al-Khelaifi posed with the 23-year-old, holding a Mbappe 2025 PSG shirt, at the Parc des Princes before the last game of the Ligue 1 season against Metz on Saturday.
"I'm proud to give you a beautiful piece of news -- Kylian Mbappe has signed until June 2025 with Paris St Germain," he announced.
The news went down badly in Spain.
Spanish LaLiga chief Javier Tebas wrote on Twitter: "What PSG are going to do by renewing Mbappe with large amounts of money (namely where and how they pay him) after giving losses of €700m ($A1.15bn) in recent seasons and having more than €600m ($A900 m) of salary bill, is an INSULT to football. Al-Khelaifi is as dangerous as the Super League."
Mbappe, one of the game's finest talents who burst onto the scene as a teenager and helped France win the World Cup in 2018, was set to leave on a free transfer when his contract expired at the end of the season.
PSG signed Mbappe from AS Monaco in 2017 in a deal reported to be about €180 million ($A270 million), making him the world's second-most expensive signing after Neymar, who joined PSG from Barcelona for €222 million ($A333 million).
Real's bid to sign Mbappe last year was rejected by the Parisian club, who appeared prepared to lose him on a free transfer this year.
Reports last year claimed the Spanish champions had offered PSG as much as €200 million ($A300 million) for the Frenchman.
PSG had no intention of selling their young talisman in their quest for Champions League glory, but the French club fell well short this season when Real staged a dramatic second-leg comeback in the last-16 to knock them out of the competition.
PSG had been reinforced last year with the signing of Lionel Messi from Barcelona to add firepower to a star-studded squad. But apart from reclaiming the Ligue 1 title, the French club failed to win any other trophies.
Mbappe, however, excelled individually, scoring 36 goals and providing 26 assists for PSG in all competitions this season.