Garoppolo had been widely expected to be released by San Francisco before Tuesday's deadline for teams to trim their rosters to 53 players ahead of the regular season.
San Francisco had attempted to trade Garoppolo this offseason as part of the transition to Trey Lance as their starting quarterback. The 49ers traded three first-round picks to select Lance with the third overall pick in the 2021 NFL Draft.
However, a shoulder surgery for Garoppolo complicated the Niners' plans to trade him, with San Francisco unable to find a partner with which to do a deal.
He has worked out away from the team during training camp and preseason but will now serve as the backup to Lance after coming to an agreement on amended terms with the 49ers.
According to ESPN's Adam Schefter, Garoppolo has agreed to a one-year deal worth $6.5million in base salary and $500,000 in roster bonuses. He has bonuses for playing time that could be worth up to $9m.
It is a move that lowers Garoppolo's salary cap number from nearly $27m to just over $8m, giving the 49ers financial flexibility for potential in-season moves and still giving the former New England Patriot the chance to hit the open market in 2023.
Garoppolo arrived in 2017 in a trade with the Patriots. He has a record of 31-14 as a starter for San Francisco and helped the Niners reach Super Bowl LIV in the 2019 season. He and the 49ers were minutes away from another Super Bowl appearance last season, but lost the NFC Championship Game 20-17 to the Los Angeles Rams.
The 30-year-old completed 68.3 per cent of his passes for 3,810 yards, 20 touchdowns and 12 interceptions last season.
Garoppolo led the league in yards per completion (12.7) and net yards per attempt (7.68) but was heavily reliant on his receivers creating yards after the catch. Lance, who made two starts while Garoppolo was injured last year, is expected to offer greater upside to the 49er offense with his dual-threat skill set that allows him to make downfield throws that are beyond Garoppolo and excel on the ground as a runner.
The 49ers open the season with a road game against the Chicago Bears on September 11.