In the 9th century, in northern Britain, a druid circle foresees a falling star from the constellation Draco. Brude, a powerful druid, summons a Pict clan known as the Painted tribe to slaughter the druids and drive the northern clans toward war with the southern kingdoms over Hadrian's Wall. A druid apprentice named Lorne escapes the massacre and becomes entwined in a larger struggle that spans loyalties and magic.
Gareth, a gifted fighter among a group of squires, must pass his final tests on the wall’s southern side to earn knighthood. He shines in combat but fails to gather enough money from the peasants, and Sir Horsa refuses to knight him until he pays 100 crowns, leaving Gareth with nowhere to go. A peasant couple that cannot afford to keep him takes him in, and that very night a meteor crashes onto the north side. Gareth swipes a sword from a knight-squire and heads toward the meteor, believing riches await him.
The meteor reveals a dragon with nine eggs, and the dragon attacks the Painted tribe members who tracked it. Gareth saves one egg, though he is badly wounded in the process. The dragon, moved by Gareth’s mercy, shares its heart with him, saving his life. Brude curses the dragon and claims the eggs. Lorne rescues Gareth and explains the nature of dragons and the bond he now shares with Drago. Gareth then meets the rebel leader Rhonu, her uncle Traevor Traevor, and the northern clans who oppose Brude, hoping Gareth can persuade the dragon to fight for their side. The dragon returns, now able to talk, and Gareth names it Drago. Drago reveals that he needs help retrieving the eggs and that he wants to bring the dragons into humanity as friends, not enemies.
The group travels to Brude’s camp, but Drago’s attempt to rescue the eggs fails when the curse makes him powerless in daylight or in firelight, and Brude’s soldiers close in. Drago explains his mission, and Gareth and his companions escape with the eggs. Gareth convinces the group to head toward the wall, while Rhonu urges Traevor to rally the clans still loyal to their cause. The journey continues on foot after an egg is accidentally destroyed, and Drago tries teaching Gareth how to shadow-jump along the way. Lorne reveals that Brude placed a Sorcerer’s Curse on Drago, which will put Drago under Brude’s control by the full moon.
During a bid to rescue a group of Painted prisoners, Gareth shows true bravery, briefly freeing Drago from the curse before Brude recasts it. After Gareth sacrifices one dragon egg and uses shadow-jumping to reach safety, the trio escapes Brude and the clan. Before reaching the wall, Gareth confesses that he is not truly a knight and that the South does not honor King Arthur’s Old Code, but Drago remains his friend and believes in him, even as they press on.
At the gate, Gareth, Lorne, and Rhonu are arrested, and the dragon eggs are seized when news spreads that the Painted clan is moving toward the wall. Drago, now under Brude’s control again, and the Painted tribe attack at the full moon, but Lorne’s magic helps Gareth and Rhonu slip away. Gareth disrupts the sale of the dragon eggs and faces Sir Horsa to protect them; Drago is freed and lends aid to both the soldiers and the northern clans led by Traevor. Gareth kills Sir Horsa, while Rhonu battles and kills Brude, though she is fatally wounded herself. With Brude dead and Drago free, the Painted tribe retreats. Gareth tends to Rhonu, who is saved by an unhatched dragon that shares its heart with her. A peace settles over the land as Hadrian’s Wall is renamed the Dragon’s Gate, Gareth is proclaimed a knight and a leader of the settlement, and the couple’s love endures. The baby dragon that saved Rhonu begins to hatch, signaling a new era for the realm.