In Denmark in the year 507 a.D., elderly King Hrothgar (Anthony Hopkins) dedicates his new mead hall in a drunken revelry. He and his people have conquered other lands and collected much booty. Although his queen, Wealthow (Robin Wright Penn) clearly disapproves, the assembled warriors and maidens clearly enjoy themselves. However, in a cavern not far from the mead hall, the singing and dancing is a painful nuisance to the misshapen half-human, half-demon Grendel (Crispin Glover). Enraged, Grendel attacks the mead hall and kills or maims many of the warriors. He spares Hrothgar's life, however. After he returns to the cavern, his mother, a water demon (Angelina Jolie) soothes him. The next day, Hrothgar orders the mead hall sealed and sends out a call for a hero to come and rid the kingdom of Grendel.
Several months later, Beowulf (Ray Winstone) answers the call. His troops are led by his second-in-command, Wiglaf (Brendan Gleeson). Beowulf and his band are not Danes but rather Geats, which rankles Hrothgar's proud battle commander, Unferth (John Malkovich). He mocks Beowulf's legendary feats. Beowulf orders the mead hall reopened; that is where he will fight Grendel. That night, another party (though more subdued) is held. Wealthow plays her lute and sings. She and Beowulf are clearly attracted to one another. Hrothgar promises to give Beowulf his Dragon Horn, a beautiful gold mead cup with a dragon carved into the side of it, should he kill Grendel. That night, after the Danes have gone to bed, Beowulf's men sing bawdy songs to lure Grendel. When Grendel arrives, he slays many of Beowulf's men. Beowulf strips nude to fight Grendel hand to hand. He bursts Grendel's ear drums then severs his arm. As Grendel slinks into the night, Beowulf taunts him with boasts about his own strength and power. Grendel returns to the cavern where, with his dying breath, he tells his mother the name of the man who killed him.
The kingdom rejoices at Grendel's death. After a day of celebration, Beowulf and his men are to leave the next morning. That night, however, Grendel's mother comes to Beowulf in a dream, disguised as Wealthow. She asks him to give her another son. When he awakes, he discovers all of his men slaughtered. Only Wiglaf survives because he was tending to their ship, miles from the mead hall. Hrothgar reveals to Beowulf who killed his men -- Grendel's mother. He also reveals that Grendel was his own son, which is why Grendel spared him in the initial attack, and why Wealthow refuses to give him a human heir. Beowulf announces his intent to kill Grendel's mother. To show his new faith in Beowulf and his strength, Unferth gives him his own familial sword. Beowulf goes to the cavern to kill Grendel's mother. He uses the Dragon Horn to light his way. But, taking the form of a naked, beautiful woman, she seduces him with promises of power. When he returns to the mead hall, Beowulf delights the assembled with tales of how he killed Grendel's mother. He apologizes for losing both Unferth's sword -- Grendel's mother melted it with her magic -- and the Dragon Horn -- she kept it as a symbol of their truce. Hrothgar, no stranger to her charms, recognizes that she has seduced Beowulf. He tells his subjects that, upon his death, Beowulf will be their new king. He then leaps from the castle tower to his death on the rocky shore below. The crown is immediately placed on Beowulf's head.
Years pass. Beowulf is a good leader to the Danes and his power and fame spread. He does not enjoy being king though, and guilt over his betrayal of Hrothgar nag him. He, too, is unable to sire an heir, either on Wealthow or his willing concubine, Ursula (Alison Lohman). One day, Unferth, who is now a Christian priest, brings to him the Dragon Horn, which had been found in a barren moor. Beowulf realizes that it means that the truce between Grendel's mother and Beowulf is now over, though he cannot reveal that to anyone else. That night, a giant fire-breathing dragon attacks the village. It briefly takes a human form and tells Unferth to deliver a message to Beowulf. It then resumes burning people to death. Badly burned himself, Unferth tells Beowulf the dragon's message: the sins of the father are visited upon the sons.
Beowulf knows he must fight and kill both the dragon and its mother. He and Wiglaf return to the cavern but as soon as Beowulf enters, Grendel's mother sends the dragon after him. He and Wiglaf barely escape its fiery breath then chase it as it flies towards Beowulf's castle. As Danish soldiers battle the dragon with arrows and spears, Beowulf climbs onto the dragon and searches for a way to kill it. The dragon makes his way to the castle and traps Wealthow and Ursula on a breezeway. Beowulf finally finds the dragon's weak point and, cutting it open, plunges his hand into the dragon's breast and rips its heart out. He and the dragon fall to the rocky shore. Mortally wounded, Beowulf watches as the dragon transforms into a human who looks like his father. Beowulf then dies.
Wiglaf is now king. He tearfully watches as Beowulf's burial ship is set ablaze then sinks into the sea. Just as the ship begins to slip beneath the waves, Grendel's mother appears and kisses Beowulf's body. The Dragon Horn washes ashore at Wiglaf's feet. He picks it up then sees Grendel's mother rise from the waves, tempting him anew.