Vianne Rocher (Juliette Binoche), an expert chocolatier and her six-year-old daughter Anouk (Victoire Thivisol), drift across Europe following the north wind. In 1959, they travel to a quiet French village that closely adheres to tradition, as dominated by the village mayor, the Comte de Reynaud (Alfred Molina). Just as the villagers begin observing the 40 days of Lent, Vianne opens a chocolate shop, much to Reynaud’s displeasure.
Vianne wears more colourful clothing than the village women, does not ascribe to religious convention, and has an illegitimate child. She does not fit in well with the townspeople but is nevertheless optimistic about her business. With her friendly and alluring nature, she begins to make headway with some of the villagers. Reynaud speaks out against her for tempting the people during a time of abstinence and self-denial. The Comte will not admit that his wife has left him.
One of the first to fall under the spell of Vianne and her confections is Armande (Judi Dench), her elderly, eccentric landlady. Armande is unhappy that her cold, devoutly pious daughter Caroline (Carrie-Anne Moss) will not let her see her grandson Luc because Caroline thinks Armande is a “bad influence”. Having lost her husband, Caroline is overly protective of Luc and does not even want her son to play. Vianne arranges for Luc and his grandmother to see each other in the chocolaterie, where they develop a close bond. Caroline later reveals to Vianne that her mother is a diabetic, though Armande continues to eat the chocolate despite her condition.
Vianne also develops a friendship with a troubled woman, Josephine (Lena Olin), who is a victim of brutal beatings by her abusive husband Serge (Peter Stormare). After her husband violently hits her and injures her head, Josephine leaves him and moves in with Vianne and Anouk. As she begins to work at the chocolate shop and Vianne teaches her the craft, Josephine becomes a self-confident, changed woman. At the same time, under the instruction of Reynaud, Serge, having seemingly changed into a better man, asks Josephine to come back to him. Finally happy and fulfilled on her own, Josephine declines his request. A drunken Serge breaks into the chocolaterie later that night and attempts to attack both women, before Josephine, in a moment of empowerment, knocks him out with a skillet.
As the rivalry between Vianne and Reynaud intensifies, a band of river Roma camp out on the outskirts of the village. While most of the town objects to their presence, Vianne embraces them, developing a mutual attraction to Roux (Johnny Depp). Together they hold a birthday party for Armande with other villagers and Romani on Roux’s boat. When Caroline sees Luc, who sneaked out to the party, dancing with his grandmother, she begins to see how strict she has been with her son and that his grandmother’s influence in his life may, after all, be beneficial. After the party, Josephine and Anouk fall asleep on a boat, while Roux and Vianne make love. Later that night, Serge sets fire to the boat where Josephine and Anouk are sleeping. Both escape unharmed, but Vianne’s faith in the village is shaken. Luc helps Armande home from the party; her death soon after devastates both him and his mother. After the fire, Roux packs up and leaves with his group, much to Vianne’s sadness.
Serge later visits Reynaud at his home to confess to starting the fire, which Reynaud initially thought was divine intervention–he is horrified at the thought of people almost being killed as a result. Realizing that Serge is beyond help, and fearing that people would also blame him for the arson, Reynaud demands that Serge leave the village and never come back.
With the return of the north wind, Vianne decides that she cannot win against Reynaud or the strict traditions of the town. She decides to move elsewhere. Anouk refuses to go, and during a scuffle, an urn containing the ashes of Vianne’s mother falls and shatters. After a moment, Vianne goes into her kitchen to see a group of townspeople, who have come to love her and the way she has changed their lives, making chocolate for the festival Vianne had planned for Easter Sunday. Realising that she has brought change to the town, she decides to stay.
Despite the shifting sentiment in the town, Reynaud remains staunch in his abstinence from pleasures such as chocolate. On the Saturday evening before Easter, he sees Caroline leave the chocolaterie, which devastates him. Convinced now that chocolate will make people stray from their faith, he sneaks into Vianne’s house in order to ruin her preparations for the Easter festival. After accidentally tasting a morsel of chocolate that fell on his lips, he finally yields to temptation and devours much of the chocolate in the window display before collapsing into tears and eventually falling asleep. The next day, Vianne awakens the chastened mayor, mutual respect between them is established, and Pere Henri improvises an inspiring sermon. Both the Easter Sunday sermon and the festival are a success, and the storyteller reveals that Reynaud and Caroline start a relationship half a year later. Josephine takes over running Serge’s café, which she renames Café Armande. Vianne throws her mother’s ashes out the window, which are carried away by the departing north wind.
The unseen narrator concludes the story: Roux returns in the summer to be with Vianne who, despite her constant need for change, resolves to stay, having found a home for herself and her daughter in the village. At the very end, it is revealed that her grown-up daughter Anouk herself is the storyteller.