In 1995, a terminally ill older woman living in Oregon reflects upon her past and the secrets that she has kept from her family. In an old trunk in her attic, she looks upon a French identity card bearing the name “Juliette Gervaise.”
Decades earlier in France, two sisters, Vianne and Isabelle, are abandoned by their father after the death of their mother. The older sister, Vianne, marries her childhood sweetheart, Antoine, and after several miscarriages, they have a daughter named Sophie. The three live together in peace in their home, named Le Jardin, in the rural town of Carriveau. Their peace, however, is shattered when Antoine is drafted into the French army in preparation for war with Germany. Isabelle, the younger sister, is fiery and headstrong. After being expelled from several boarding schools, she returns to her father in Paris, who sends her back to Carriveau after the capital city falls to the Germans. On her way back home, Isabelle joins a group of exhausted refugees on an arduous trek, meeting the handsome former prisoner Gaëtan and narrowly surviving bombing by the Germans. After making it back to Carriveau, Gaëtan abandons Isabelle despite their plans to join the French Resistance together, leaving a note that says she is not yet ready for war.
The occupation quickly transforms Carriveau, which now hosts many German troops who work on the airfield. Vianne is forced to house a polite German soldier named Beck, who treats her courteously and even helps Vianne send a letter to her husband, who is being held as a prisoner of war in Germany. Beck is helpful around the house, but he also requests that Vianne produce a list of Jews who work for the school where Vianne is a teacher. Later, those teachers are dismissed from the schools by the Nazis and Isabelle sorrowfully confesses to her best friend, Rachel, that she included Rachel’s name in the list.
While Vianne struggles to maintain normalcy under the occupation, Isabelle rebels, agreeing to distribute newsletters for a small group of members of the French Resistance despite grave risks. As conditions worsen in Carriveau, she agrees to serve as a point of contact to Resistance members in Paris, tricking Beck into obtaining a travel pass for her so that she can visit her “sick father.” In Paris, she serves as a courier for the Resistance and develops a plan to smuggle stranded allied airmen across the border into Spain so that they can resume the fight against Germany. She is briefly reunited with Gaëtan, and she also learns that her father has been secretly working with the Resistance, printing fliers and forging fake IDs. As she prepares to make her clandestine journey to Spain, she adopts the name Juliette Gervaise and the codename “Nightingale,” based on her family name, Rossignol. Alongside four airmen, they make their way to the Spanish border, where Micheline Babineau, a family friend, introduces her to Eduardo, who leads them on a difficult and long trek across the mountains. After establishing a connection with the British government through a consulate in Spain, which offers logistical support to her mission, Isabelle makes the trip several more times, safely escorting over a hundred allied airmen across the border.
As food becomes increasingly scarce in Carriveau, Isabelle is fired from her teaching post by the Gestapo after she questions the arrest of a fellow teacher. Discrimination against Jewish families in the village increases, culminating in the roundup and deportation of all Jewish individuals to labor camps in Germany, starting with those who, like Rachel, were born outside of France. After being tipped off by Beck, Vianne attempts to help Rachel cross the border into the Free Zone of Vichy France with her children. However, the guards there begin to shoot wildly at the crowd, killing Rachel’s daughter, Sarah, and forcing them to return to Carriveau. The following day, Rachel is detained by the police when she attempts to return home. Before she is sent to a camp, she asks Vianne to take her young son, Ari. Vianne forges false papers for Ari and renames him Daniel for his own safety, pretending that he is the son of a deceased relative.
When Isabelle is called back to Carriveau for a meeting with the Resistance group, she sees an American aircraft go down after bombing the German airfield. She runs to where the parachute lands and, with help from other Resistance members, carries the injured American pilot to Le Jardin, where she hides with him in the barn. When Vianne sees that the door to the barn is open, she finds Isabelle and the airman, who has died of his injuries, and harshly condemns her younger sister for putting their lives in danger. Later, Beck returns home in a frustrated state after failing to find the “missing” airman. When he investigates the barn, Vianne hits him on the head with a shovel as two gunshots ring out. Beck, who has been shot by Isabelle, dies, but Isabelle has also been shot. The Resistance members hide Beck’s body and plan to transport Isabelle to a safe house in the Free Zone to recover. After a few days, Isabelle regains consciousness and forces Gaëtan to acknowledge that he shares her feelings before finally embracing him. After a few happy days in the safe house, they leave to resume their Resistance efforts.
When the Germans note Beck’s disappearance, they call Vianne in for questioning. Though they clear her of suspicion, she catches the attention of the cruel SS commander Von Richter. Attracted to Vianne, he takes Beck’s place at Le Jardin, moving into the largest bedroom and treating Vianne like a maid in her own home. When the Nazis begin to round up Jews born in France for deportation, Vianne takes in Jean Georges, the young son of a Jewish woman, despite the possibility of severe punishment for harboring a Jew. She turns to the Mother Superior of a local convent, and the two devise a plan to save Jewish children by hiding them in the orphanage under assumed names. They are able to save 19 children, but Von Richter, realizing that Vianne will do anything to protect them, exploits his power over Vianne to rape and assault her. She endures this to protect the children and ultimately discovers that she is pregnant.
While Gaëtan joins a group of Partisan fighters, Isabelle returns to her work even though the Nazis are actively searching for “The Nightingale.” As she prepares to set off for another trip across the Pyrenees, SS agents swarm Madame Babineau’s home, knocking Isabelle unconscious with a rifle butt. When she wakes up, she is in an interrogation room, where her Nazi interrogator savagely beats her between rounds of questioning. They believe that she knows the identity of The Nightingale and torture her for several days before Julien, who previously traveled to Carriveau to let Vianne know of his plan, falsely confesses to being the Nightingale in an attempt to save his daughter. The Nazis swiftly execute him and transport Isabelle to a concentration camp, where she struggles to survive amidst horrific conditions.
As the Germans begin to lose ground to the Allied forces in the war, Von Richter becomes increasingly violent. However, the Germans retreat from Carriveau, and the villagers slowly begin to rebuild their lives. Antoine escapes from prison in Germany and returns to Vianne, but she notes that they are now almost strangers to one another after the long separation. She decides not to tell Antoine that she is pregnant with Von Richter’s child. They go to Paris to find Isabelle, but she is not listed among those who have either died or been liberated from the camps. Additionally, they learn that Rachel and her husband Marc have not survived, leaving Ari an orphan. Vianne presents a list of the Jewish children whom she has hidden to the Red Cross, hoping to reunite them with surviving family members before returning to Carriveau. There, representatives of a humanitarian organization arrive at Le Jardin and tell Vianne that Ari has been claimed by members of Rachel’s family in America. Reluctantly, Vianne sends Ari away to begin his new life with family members whom he has never met.
Meanwhile, Isabelle contracts pneumonia and typhus as she is moved from one concentration camp to another. When the camps are liberated by American troops, she is transported to a hospital and later to Carriveau, where Vianne takes care of her at Le Jardin. Though her symptoms do not subside, Isabelle is overjoyed by a visit from Gaëtan and feels that she is at peace with the choices she has made throughout the war, despite all that she has suffered.
In 1995, the older woman living in Oregon receives a letter inviting her to a reunion in Paris for passeurs, people who helped others during the war. After first rejecting the invitation, she suddenly decides to attend, booking a flight to Paris that same day. Alarmed by her spontaneous decision, her son, Julien, follows her to the airport. They fly to Paris and amble about the city before attending the reunion, where the older woman is invited to speak. Finally, the novel reveals that the older woman is Vianne, who moved to the United States with her family after the war to start a new life. Vianne praises Isabelle, who died shortly after her return from the camps. Her speech is met with applause from the attendees, many of whom are family members of the men whom Isabelle saved during the war. At the event, Vianne speaks with Gaëtan, who named his daughter after Isabelle. She also meets Ari, now an adult, who never forgot Vianne or Sophie, who died of cancer years earlier. Julien realizes how little he knows his mother when Ari informs him that Vianne saved nineteen Jewish children despite the grave risks. No longer hiding from the past, Vianne agrees to tell her son the true story of her life.