Sophie, a young milliner, encounters a wizard named Howl on her way to visit her sister Lettie. Upon returning home, she meets the Witch of the Waste, who transforms her into a ninety-year-old woman. Seeking to break the curse, Sophie leaves home and sets off through the countryside. She meets a living scarecrow, whom she calls “Turnip Head”. He leads her to Howl’s moving castle, where she enters without invitation. She subsequently meets Howl’s young apprentice Markl and a fire demon named Calcifer, who is the source of the castle’s magic and movement. When Howl appears, Sophie announces that she has “hired herself” as a cleaning lady.
Meanwhile, Sophie’s nation is caught up in a war with a neighboring kingdom, who is searching for their missing prince. The King summons Howl to fight in the war. However, Howl decides to send Sophie to the King (under the pretense of being his mother) to tell him that Howl is too much of a coward to fight. Before leaving, he gives Sophie a charmed ring that leads her to Calcifer and guarantees her safety. Sophie meets Suliman, the king’s advisor, and also the Witch of the Waste, whom Suliman punishes by draining all of her power, turning her into a harmless old woman. Suliman warns Sophie that Howl will meet the same fate if he does not fight and so Howl arrives to rescue Sophie. Suliman tries to trap him, but with Sophie’s help they escape along with the former Witch of The Waste and Suliman’s dog Heen.
Sophie learns that Howl’s life is somehow bound to Calcifer’s and that Howl has been transforming into a bird-like creature to interfere with both sides in the war, but each transformation makes it more difficult for him to return to human form. Howl then has the castle magically-linked to Sophie’s home, parking the castle itself on the town’s outskirts. A few days later, the town is bombed by enemy aircraft and Suliman’s henchmen attack the house and Sophie’s hat shop. Howl heads out to protect the group. Sophie then moves everyone out of the house and removes Calcifer from the fireplace, which collapses the castle. The Witch of The Waste realizes that Calcifer has Howl’s heart and grabs the fire demon, setting herself on fire. Sophie panics and pours water onto the Witch, which douses Calcifer. The castle then splits in two; Sophie falls down a chasm and is separated from the group.
Following the charmed ring, Sophie wanders into a scene from the past, where she sees a young Howl catch a falling star – Calcifer – and give him his heart. Sophie calls for them to find her in the future as she is teleported away. She returns to the present, finds Howl, and they reunite with the others. The Witch returns Howl’s heart, and Sophie places it back inside Howl, reviving him and freeing Calcifer, though he decides to stay. Sophie’s curse is broken, though her hair remains white. After she kisses Turnip Head on the cheek, he returns to human form, revealing himself to be Justin, the missing prince from the enemy kingdom, who promptly heads for home. Suliman, watching through a crystal globe, decides to end the war. As the bombers fly away, Sophie, Howl and the others travel high in the air in a new flying castle.