Set in the 1880s, eleven-year-old Félicie (Elle Fanning), a poor orphan girl who dreams of becoming a ballerina, but lacks formal training, runs away from her orphanage in rural Brittany with her best friend, Victor (Dane DeHaan), a young inventor.
Together they go to beautiful Paris, but they soon become separated, and Victor becomes an office boy in Gustave Eiffel's workshop. Félicie finds her way to the Paris Opera, where the guard catches her trespassing. She is rescued by a mysterious cleaner with a limp, Odette (Carly Rae Jepsen), who agrees to let Félicie stay with her until she gets on her feet. Odette works for both the Opera and for the cruel and imperious Régine Le Haut (Julie Khaner), a wealthy restaurant owner.
While helping Odette clean, Félicie spies Regine's daughter, Camille (Maddie Ziegler), practicing ballet. Camille sees Félicie, insults her, and throws Félicie's treasured music box out of the window, breaking it. As Félicie takes it to Victor for repair, she intercepts the postman who brings a letter from the Opera admitting Camille to the celebrated school of the Paris Opera Ballet; in her anger, she hides the letter and decides to assume Camille's identity to get into the school and pursue her dream, while also getting back at Camille.
Odette agrees to mentor Félicie, who later learns that Odette was a former prima ballerina. Félicie finds her training very difficult, but with Camille's letter of acceptance, she manages to take her place at the ballet school. Mérante (Terrence Scammell), the school's exacting choreographer, announces that one of the girls from the class will be chosen to dance the role of Clara in The Nutcracker.
He dismisses the worst dancer in class each day. Félicie improves each day and narrowly avoids elimination, but a couple of days before the final elimination, her lie is discovered. Mérante decides to admit Camille into the class, while also letting Félicie stay; although Félicie's infraction was serious, Mérante knows that she is Odette's protege, and he has a soft spot for Odette.
The night before the final elimination, Félicie neglects training to go out on a date with Rudi, a handsome boy from the school, which disappoints Odette. Victor, who has a crush on Félicie, sees Félicie with Rudi. Victor is jealous, and he and Félicie argue. The next day, Félicie is late to the audition and unable to perform well, and so the part of Clara goes to Camille.
Félicie returns to her orphanage, having lost her spirit. She has a dream about being an infant in the arms of her late mother, a ballerina, who gave her the music box. She decides to return to Paris to help Odette and apologize to Victor. While cleaning the stage, Félicie encounters Camille, and they engage in a dance battle that is witnessed by all the students, Odette and Mérante. Félicie does a grand jeté over a flight of stairs, while Camille cannot.
Mérante approaches the two girls and asks them why they dance, to which Camille admits that she dances only because her mother tells her to, while Félicie speaks stirringly of dance as her inheritance and passion. Camille admits that Félicie should dance Clara. Near Eiffel's workshop, where the Statue of Liberty is being constructed, Félicie invites Victor to the performance.
A furiously deranged Régine arrives, chases Félicie up to the crown of the statue and pushes her off, but Victor saves her with aid from Camille. They arrive at the Opera just in time for Félicie to don Odette's special pointe shoes; Félicie kisses Victor on the cheek, and she performs in The Nutcracker.