Washington
CNN
—
Speaker Mike Johnson delivered a major win for President Donald Trump early on Thursday morning, uniting a deeply divided House GOP to pass a bill that many of them were still pushing fiercely to change.
House Republicans passed President Donald Trump’s sweeping tax and spending cuts package, marking a stunning victory for both Johnson and Trump after the bill appeared doomed just days earlier.
“Sometimes it’s good to be underestimated, isn’t it?” a sleep-deprived Johnson said on the House floor early Thursday, after multiple all-night negotiating sessions with all corners of his conference.
Trump himself played a major role in passing the bill, which contains many of his own campaign trail promises, such as extending his 2017 tax breaks and eliminating taxes on tips and overtime pay. It also devotes billions to border security, allowing for a major crackdown on immigration. In multiple sit-downs with GOP lawmakers this week, Trump made impassioned appeals to members to back his agenda.
How much of the House’s version will survive the Senate GOP is unclear. Republicans in that chamber have signaled they plan to make changes of their own. But they are still under intense pressure to move quickly: Trump and Johnson have told members they want to sign the bill into law by July 4.
And any changes there could upset the careful balance struck by House GOP leaders to pass the bill through its narrow majority. In the end, Johnson only failed to win over three GOP votes.
The vote was 215 to 214. Republican Reps. Thomas Massie of Kentucky and Warren Davidson of Ohio voted against the bill, with House Freedom Caucus Chairman Andy Harris of Maryland voting present.
One of the bill’s biggest critics, Rep. Chip Roy of Texas, voted yes.
GOP leaders have had to carefully thread the needle between competing demands from conservative hardliners and centrist members of their conference – a delicate balancing act as Speaker Johnson can only afford a handful of defections with his razor-thin majority.
The legislative package includes measures that would deeply cut into two of the nation’s key safety net programs – Medicaid and food stamps – while making permanent essentially all of the trillions of dollars of individual income tax breaks contained in the GOP’s 2017 Tax Cuts and Jobs Act.
House Republicans unveiled a slate of changes to the bill on Wednesday evening in an effort to win over GOP holdouts. Those changes included speeding up work requirements for Medicaid to the end of 2026, from the start of 2029. Republicans also decided to phase out Biden-era energy tax credits sooner than planned, among other provisions.

House GOP leaders barreled ahead with a vote on Trump’s agenda after the president privately implored key holdouts not to derail the tax and spending cuts package.
The president had summoned members of a key wing of the Republican Party to the White House at a moment of crisis for Speaker Johnson: A half-dozen conservatives were vowing to defy their own party leadership because of spending cuts they still wanted to see in the bill.
But as of Wednesday evening, Johnson and his leadership team appeared confident that Trump had helped get the bill back on track. One day earlier, Trump made an impassioned appeal to the full House GOP conference.
Trump on Tuesday delivered a forceful message to House Republicans to line up behind his massive domestic policy bill. The president’s emphatic, 90-minute address to House Republicans — in which he alternated between strong-arming his fellow Republicans and cheering them on — brought Johnson and his leadership team a big step closer to delivering that bill, according to half a dozen GOP lawmakers and senior aides.
The legislation, which Republicans have named the “One Big Beautiful Bill Act,” aims to fulfill many of Trump’s campaign trail promises and touches on a wide range of policy issues.
Ahead of a final floor vote, House Republicans released a package of changes to the bill that reflected days of negotiations from GOP leaders in an effort to win over holdouts.
In addition to provisions impacting Medicaid work requirements and Biden-era energy tax credits, the package of changes formalizes one of Johnson’s biggest deals this week: The so-called SALT cap. It would allow people to deduct state and local income taxes up to $40,000 for certain income groups.
GOP leaders had initially proposed a cap of $30,000 but key New York, New Jersey and California Republicans had refused to support it.
Prior to the release of the changes, Johnson had been engaged in meetings with various factions to finalize a deal that would win over both GOP hardliners, who had been threatening to block the tax and spending cuts bill, as well as centrist members who had been wary of some of the right-wing’s proposed changes to it.
Not long after midnight on Thursday, Speaker Johnson projected confidence that the bill would successfully pass in the House, despite the challenges.
“You never know ‘til the final vote tally, but I’m convinced we’re going to pass this bill tonight,” he said. “This is a massive piece of legislation with lots of moving parts. So we’ll see what happens. But I think we’re going to get this job done and we’re going to do it by Memorial Day which is what we predicted from the beginning.”
This story and headline have been updated with additional developments.
CNN’s Manu Raju, Lauren Fox and Tami Luhby contributed to this report.