Vianne Rocher (Juliette Binoche), an expert chocolatier, drifts across Europe with her daughter Anouk (Victoire Thivisol). In the winter of 1959, they travel to a tranquil French village that closely adheres to tradition, as led by the village mayor, Comte Paul de Reynaud (Alfred Molina). Vianne opens a Chocolaterie just as the villagers begin observing the forty days of Lent, much to the chagrin of Reynaud. Vianne, who wears more provocative clothing, does not go to church, and has an illegitimate child, does not fit in well with the town's people, but is nevertheless optimistic about her business. Her friendly and alluring nature begins to win the villagers over one by one, causing Reynaud to openly speak against her for tempting the people during a time of abstinence and self-denial.
One of the first to fall under the spell of Vianne and her confections is Armande (Judi Dench), her elderly, eccentric landlady. Armande laments that her cold, devoutly pious daughter Caroline (Carrie-Anne Moss) will not let Armande see her grandson Luc because Caroline thinks Armande is a "bad influence". 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 indulge in 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 alcoholic husband Serge (Peter Stormare). After a particularly brutal blow to the head, Josephine leaves her husband and moves in with Vianne and Anouk. As she begins to work at the chocolaterie and Vianne teaches her craft, Josephine becomes a self-confident, changed woman. Under the instruction of Reynaud, Serge seemingly changes into a better man and he asks Josephine to come back to him. Finally happy and fulfilled, Josephine declines. 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 worsens, a band of river gypsies 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 the gypsy Roux (Johnny Depp). Together they hold a birthday party for Armande with other village members and gypsies on Roux's boat. When Caroline sees Luc, who snuck out to go to the party, dancing with her mother, she begins to see how rigid she is with her son and that his grandmother's influence in his life may not be a bad thing.
After the party, Vianne, Josephine, and Anouk all sleep on the boats, where Roux and Vianne make love. Late that night, Serge sets the boat on fire where Josephine and Anouk are sleeping. Both escape unharmed, but Vianne's faith in the village is shaken. Also that night, Luc returns to his grandmother's living room to see that she has succumbed to the complications of her diabetes, devastating both him and his mother. After the fire, Roux packs up and leaves with his group, much to Vianne's sadness.
Deciding she cannot win against Reynaud or the strict traditions of the town, Vianne resolves to move to another place. Just before she does so, she 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 a festival Vianne had planned on Easter Sunday. Realizing 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 decides that chocolate is something that will make people stray from their faith in god, so he sneakes into Vianne's house with the idea that he will ruin all of Vianne's preparations for the Easter festival, unfortunately he gives in to the temptation to eat the chocolate and devours the chocolate before collapsing into tears and eventually falling asleep. The next day, Vianne promises not to reveal what happened, and a mutual respect between them is established. Roux returns in the summer to be with her, and despite her constant need for change, Vianne resolves to stay, having found a home for herself and her daughter in the village.