The deal includes a void year that will help the Packers' salary-cap situation, sources said.
After a breakout in 2020 for the Packers with career highs in catches (52), receiving yards (586) and touchdowns (11), Tonyan played in only eight games last season before he tore the ACL in his left knee Oct. 28 against the Arizona Cardinals.
Tonyan, who turns 28 in April, played last season on a restricted free-agent contract worth $3.384 million and likely would have been in line for a much more lucrative deal had he stayed healthy. His 11 touchdown catches in 2020 tied for the NFL lead among tight ends with Kansas City's Travis Kelce.
The injury occurred at the end of a 33-yard reception late in the third quarter against the Cardinals, a game in which he had three catches for 49 yards. He finished the season with 18 catches for 204 yards and two touchdowns.
Given the date of his injury, it's not certain that he would be ready for the start of training camp this year.
The Milwaukee Journal Sentinel was first to report Tonyan's deal.
ESPN's Rob Demovsky contributed to this report.