Ani, the crown princess of Kildenree, spends most of her childhood with her aunt because her parents are busy with their royal duties. Ani’s aunt has the magical ability of animal-speaking, and she teaches Ani how to understand the speech of animals. When Ani is 7 years old, her aunt leaves the court of Kildenree and warns Ani not to inform the queen that she can talk to animals. Ani is saddened when her mother forbids her from trying to speak with any animals, and soon Ani hears that her aunt has died.
When Ani is 16, her beloved father, the king, dies in a horseback riding accident. At the king’s funeral, Ani is surprised to hear her mother announce that Ani will not be the next monarch of Kildenree — Ani’s younger brother will take the throne. Instead of ruling Kildenree, Ani will be sent to the neighboring country of Bayern to marry its crown prince.
On the long journey to Bayern, Ani is betrayed by Selia, her best friend and lady-in-waiting. Selia uses her persuasive gift of people-speaking to convince Ani’s guardsmen to regard Selia, not Ani, as the rightful princess. Ani is outside of the camp when the mutiny occurs, but she overhears the guardsmen planning to hunt her down and replace her with Selia before they arrive in Bayern. Ani runs away from her guards and wanders through the woods for several days.
Ani eventually finds a forest cottage where a woman named Gilsa lives. Gilsa is kind to Ani, but Ani decides not to reveal that she is the fugitive princess of Kildenree. Disguised as a beggar, Ani travels to the busy marketplace of Bayern with Gilsa’s son, where she sees Selia impersonating her. Ani tries to meet with the king to expose Selia’s lies, but since the king of Bayern has never previously met Ani in person, he does not recognize that she is the true princess. Instead, he sees that Ani is in need of an occupation, so he makes her the royal goose girl in charge of caring for the king’s geese. Meanwhile, Selia lives in Bayern’s palace, waiting for her springtime wedding to the crown prince.
Ani’s life as a goose girl is difficult, but she has food and shelter and makes new friends. She is particularly fond of a young royal guard named Geric, who lets her ride his horse. Ani is worried that her former guards will find and kill her, but she escapes detection during the autumn season. While attending a winter festival with other laborers, Ani is discovered by one of her former guards, but before the guard can kill her, she is rescued by Bayern peacekeepers. As the winter passes, Ani begins to understand the language of the wind as well as the language of animals. She even commands the wind to defend her when thieves who are trying to steal her geese attack.
When winter ends, Ani hears that Bayern is preparing to attack Kildenree. Selia has incited this war by lying that Kildenree is preparing to attack Bayern. The night after she learns of the impending war, Ani is discovered by another of her former guards, Ungolad. Ungolad stabs Ani in the back, but Ani runs into the forest and is again helped by Gilsa. At Gilsa’s house, Ani learns that Talone, one of her only loyal guards, is still alive and hiding in Bayern. Ani and Talone are reunited, and together they return to the city of Bayern.
Ani learns that the army of Bayern has already marched to attack Kildenree. All of Ani’s servant friends are now aware of her true identity, and they march with her to the palace to tell the king the truth. The king, Selia and the rest of the nobles are not at the castle because they have traveled to a remote location to oversee the prince’s wedding to Selia. Ani and her friends journey to the remote castle, and Selia and her traitorous guards capture Ani.
Selia threatens Ani, but the king and the crown prince of Bayern overhear Selia’s speech and discover that she is an imposter. Ani is surprised to discover that the crown prince is actually her friend Geric, who had disguised himself as a royal guard when they first met. A fight breaks out between Selia’s guards and the guards of Bayern. Ungolad holds a knife to Ani’s throat, but she frees herself by summoning the wind and using it to push his arm away. Geric fights with Ungolad and kills him. Selia is captured, and Ani is recognized as the true princess of Kildenree. The attack on Kildenree is called off.
Geric admits that he has always loved Ani, even when he thought she was a goose girl. Geric and Ani decide to continue with their planned marriage, and Ani prepares to have a happy, fulfilled life in Bayern.