The village of Wall borders on the magical kingdom of Stormhold. There is a guard (David Kelly) to prevent people from crossing from this reality into the other. Young Dunstan Thorne (Ben Barnes) tricks the guard and crosses to a marketplace, where he meets the enslaved Princess Una (Kate McGowan), who offers him a glass snowdrop for a kiss and they spend the night together. Nine months later, the guard presents Dunstan with a baby named Tristan.
Eighteen years later, the dying King of Stormhold (Peter O’Toole) throws a ruby into the sky and decrees that the first of his sons to recover it will be his successor. The ruby hits a star and it and the star fall out of the sky, landing in Stormhold. Prince Primus (Jason Flemyng) and Prince Septimus (Mark Strong) search for it. In Wall, Tristan (Charlie Cox) and his girlfriend Victoria Forester (Sienna Miller) see the falling star and Tristan vows to bring it to her. He learns that his mother lives beyond the wall but cannot get past the guard, but he has a Babylon Candle from his mother and he lights it. He is transported to the fallen star which appears as a beautiful woman named Yvaine (Claire Danes). He claims her with a magic chain and takes her to Victoria.
Three ancient witches are resolved to eat the fallen star’s heart, which will return their youth and their power. Their leader, Lamia (Michelle Pfeiffer), eats the remains of a previous star’s heart and heads off to find Yvaine, creating a wayside inn to trap her. When Yvaine becomes tired, Tristan chains her to a tree and starts off to find food. A unicorn releases her and takes her to Lamia’s Inn. Tristan finds her gone and the stars whisper that she is in danger.
Tristan boards a coach which belongs to Prince Primus. They stop at the inn and foil Lamia’s attempt to kill Yvaine. Lamia kills Primus but Tristan and Yvaine escape into the clouds, where they are captured by sky-pirates aboard the ship Caspartine. The leader, Captain Shakespeare (Robert De Niro) tells the crew that Tristan is his nephew and Yvaine his friend. He teaches Tristan to fence and Yvaine to dance.
Septimus learns that he is the last surviving son and need only find the ruby to be King. He discovers that it is in the possession of a fallen star and her heart grants immortality. Tristan and Yvaine have left Captain Shakespeare and spend the night together at an inn. In the morning, Tristan takes a lock of her hair as she sleeps and heads off to tell Victoria that he is in love with Yvaine. But the lock turns to stardust and he realizes that Yvaine will die if she crosses the wall. He heads back to save her.
Waking, Yvaine finds Tristan gone and thinks he has abandoned her. She walks toward the wall. Princess Una sees and stops Ditchwater Sal’s (Melanie Hill) caravan to stop her. Lamia kills Sal and drags Una and Yvaine off to the witches’ manor. Septimus and Tristan both chase after her, combining forces for a while. In the castle, Septimus recognizes Una as his long-lost sister and Una tells Tristan that she is his mother.
Septimus and Tristan kill two of the witches, but Lamia uses a voodoo doll to kill Septimus. Lamia is just about to kill Tristan as well but she feigns a breakdown and tries to kill both Tristan and Yvaine. When the two embrace, their love allows the star to shine, which kills Lamia. Tristan retrieves the gem and as it turns red, Una realizes that Tristan is her son and the last male heir to Stormhold. He becomes King, she his Queen, and Dunstan is united with Una. After reigning eighty years, they ascend to the sky and live as stars.
The film was directed by Matthew Vaughan, co-written by him and Jane Goldman based on Neil Gaiman’s 1999 graphic novel with art by Charles Vess, published by DC Comics in 1997. Gaiman rewrote it as a conventional novel. He would not allow Bob Weinstein at Miramax to film the book, or anyone else, to retain control of the story. Finally, Paramount Pictures agreed. Gaiman agreed to shorten the story for the film. Six companies did the special effects. It received positive reviews, was a box-office success, and won the Hugo Award for Best Film. The International Film Music Critics Association gave Ilan Eshkeri the award for Best New Composer. Generally, critics admired the adult humor, praised Michelle Pfeiffer and panned De Niro. His gay pirate was probably the dumbest thing in the movie, but he was obviously having a great time.
Robert De Niro took the role of Captain Shakespeare because he had not accepted that of Captain Barbossa in the Pirates of the Caribbean movies and regretted it. He probably regretted this too. Some actors can play in any historical period, but Robert De Niro is not one of them. Ricky Gervais as Ferdy was mostly ad-lib. The glass knife that Lamia uses was built for X-Men: The Last Stand, but never used. The Caspartine ship was named after Matthew Vaughan’s children Caspar and Clementine. The role of Lamia was a minor one until Michelle Pfeiffer got it. Two minor roles were played by Sting’s daughters Fuschia and Summer. The narrator was Ian McKellan. Director Vaughan was critical of the picture’s marketing. It was promoted like Lord of the Rings when it was really more like Princess Bride. It’s not Princess Bride, but it’s charming and funny and full of surprises.