Wainwright's deal is for $8 million, according to MLB Network.
Wainwright, 39, was mulling offers from several teams but ultimately chose to return to the only organization he has played for in the majors.
Though it came late in the offseason, Wainwright's return to St. Louis doesn't come as a big surprise, according to league sources. He and catcher Yadier Molina gave the Cardinals time to figure out their budget, and while Molina remains a free agent, his return is likely as well, sources said.
Wainwright began his big league career with St. Louis in 2005 after being drafted by the Atlanta Braves in the first round in 2000. He has a career 3.38 ERA in 15 seasons and a 2.89 career postseason ERA. He has finished in the top three in Cy Young Award voting four times and won the Roberto Clemente Award in 2020.
He's also one of the few pitchers who would prefer to keep the designated hitter out of the National League.
"I told Shildty [manager Mike Shildt] I'm hitting .199 in my career," Wainwright said earlier this offseason. "I need one hit to get over .200. I said, 'Don't let me retire with a .199 average.' So in any blowout game just know that I'm already stretched out and I've probably already hit in the cage."