Klaus Ernst of the left party reacts during the debate on the delivery of heavy weapons to Ukraine at the parliament in Berlin, Germany, Thursday, April 28, 2022. AP
The Bundestag voted with a large majority for a motion put forward jointly by the three ruling coalition parties, the Social Democrats (SPD), Greens and liberal FDP and the opposition conservatives.
The document calls for the "acceleration of the delivery of effective, including heavy, weapons and complex systems by Germany".
Defence Minister Christine Lambrecht had said on Tuesday that Germany would send Gepard anti-aircraft tanks to Ukraine, in a clear switch in Berlin's cautious policy on military backing for Kyiv.
Germany had previously sent only defensive weapons, leaving Chancellor Olaf Scholz facing criticism that he was not doing enough to support Ukraine.
The motion approved on Thursday calls on the government to supply heavy weapons directly, as well as indirectly by replacing stocks sent to Ukraine from eastern European countries.
In a debate before the vote, Britta Hasselmann, co-chair of the Green party's parliamentary group, said Russia's invasion of Ukraine was a "blatant" breach of international law and Ukraine had an "unrestricted right to self-defence".
FDP parliamentary group leader Christian Duerr also said it was "right" to approve both direct and indirect heavy arms deliveries.
Scholz had previously justified his reluctance to send heavy weapons to Ukraine by saying he wished to avoid a direct confrontation between NATO and Russia, a nuclear power.
But leader of the opposition CDU party, Friedrich Merz, on Thursday said it was not caution that was driving the chancellor. "It is hesitation, it is dithering, it is timidity," he said.
SPD co-leader Lars Klingbeil accused Merz of trying to use the conflict to boost his political standing. "There is no room for party-political posturing here," he said.