The novel alternates between two timelines: the mid-1990s, when teenager Toni Murphy's younger sister Nicole is murdered in the small coastal town of Campbell River on Vancouver Island, and 2012–2013, when Toni, now 34, is released on parole after serving 16 years for a crime she insists she did not commit.
In March 2012, Toni walks out of Rockland Penitentiary in Vancouver carrying a box of belongings, including a necklace from Ryan Walker, her former boyfriend and co-defendant. A volunteer drives her to a halfway house in Victoria. During the ride, Toni reflects on her arrest at 18, the tattoo bands circling her biceps marking each year behind bars, and the anger that has never left her.
The narrative shifts to January 1996, when Toni is a senior at Woodbridge High. She and Ryan have been together since the previous summer. At home, Toni clashes with her overprotective mother, Pam, while her father, Chris, a kind but conflict-averse contractor, tries to mediate. Toni's younger sister, Nicole, satisfies their parents' expectations as a diligent student, though Toni notices her beginning to change: caring more about her appearance, whispering on the phone, and keeping secrets.
The central antagonist is Shauna McKinney, a popular and manipulative classmate whose father, Frank McKinney, is a local police officer. Toni and Shauna were once friends, but Shauna turned against Toni in ninth grade after Toni refused to participate in her cruel social games. The grudge deepened when Ryan chose Toni over Shauna. Throughout senior year, Shauna wages a relentless campaign: writing a degrading message on Ryan's truck, impersonating Toni's voice on the phone to destroy her friendship with her best friend Amy, and eventually recruiting Nicole into her circle. Toni warns Nicole that Shauna will turn on her, but Nicole dismisses the concern.
Meanwhile, Nicole is secretly seeing an older boyfriend and growing increasingly distressed. In the week before the murder, she comes to Toni's room in tears, apologizing for months of cruelty and begging forgiveness for something she cannot explain.
On a Friday evening in late August 1996, Nicole asks to join Toni and Ryan at the lake. They leave Nicole in the locked truck with the radio playing and walk into the woods, where they drink, smoke marijuana, and fall asleep. When they wake at one in the morning, the truck is empty. Ryan turns on the headlights, and they see Nicole's naked body floating at the shore, her skull smashed in. They race to the police station, a bloody handprint smeared on the side of the truck.
Frank McKinney and Constable Doug Hicks lead the investigation. Two weeks later, Toni and Ryan are arrested. At trial, Shauna testifies tearfully that Nicole confided Toni carried a knife and threatened her. Shauna's friends Rachel Banks, Cathy Schaeffer, and Kim Gunderson corroborate the story, claiming they saw Toni fighting with Nicole at the lake. The judge convicts both defendants, and Toni is sentenced to 15 years.
Toni arrives at Rockland consumed by rage, refusing programs and picking fights. Her appeal fails, and no lawyer will take the case without new evidence. She stops writing to Ryan and pushes her father away to spare him pain. After five years, a psychiatrist tells her she is sabotaging her own future. Toni begins attending programs, reading voraciously, and working toward reduced security. She befriends Margaret, a warm, maternal lifer who runs the kitchen and introduces her to meditation. Margaret becomes the mother figure Toni never had.
After earning day parole in 2012, Toni moves to the halfway house in Victoria, where she clashes with Helen Rosanboch, a violent former inmate who plants drugs in Toni's room. During unescorted absences, she volunteers at animal shelters and takes classes. She encounters Cathy Schaeffer on a street corner. Cathy, now gaunt and waiting for her dealer, nervously whispers "Sorry" before trailing off. In March 2013, Toni is granted full parole and returns to Campbell River.
Toni settles onto a rented sailboat with Captain, a pit bull she adopts from the local shelter, and works as a cook at Mike's restaurant. Ryan appears at the marina and tells her Cathy has been telling people the girls lied at the trial. He is convinced Shauna and her friends murdered Nicole and wants Toni's help proving it. Toni refuses, terrified of losing her parole.
Toni then discovers that the new teenage waitress, Ashley, is Shauna's daughter. Ashley, an aspiring filmmaker who has studied Toni's case, believes Toni is innocent and wants to make a documentary. Shauna arrives, furious, and orders Toni to stay away from her daughter. The situation escalates: Money goes missing from the restaurant safe on a night Ashley confirms Shauna was present, and Toni is fired. The marina owner evicts her over false complaints. She moves to a rundown campsite cabin.
Ryan brings worse news: Cathy's body has been found, killed with a tire iron in the same manner as Nicole. Both their paroles are suspended, and Toni is sent back to Rockland. There, Toni believes Margaret deliberately provoked a confrontation with Helen, knowing Helen would use a weapon and be sent to maximum security permanently. Margaret does not survive the fight but leaves Toni a handmade book of recipes, life advice, and encouragement.
After their alibis are confirmed, Toni and Ryan are released and resume investigating. Toni learns from Darlene Haynes, Nicole's former best friend, that Nicole had a secret older boyfriend and that Shauna's group had turned against Nicole before her death. Discovering that Shauna is having an affair, Toni calls her and bluffs that she possesses Nicole's diary, demanding $30,000 for silence and arranging a meeting at the lake.
Shauna arrives with her father, who draws a gun. Toni provokes Shauna about a missing diamond necklace that belonged to Nicole, and Shauna erupts, revealing that McKinney had been having a sexual relationship with Nicole. McKinney admits he knew Shauna killed Nicole and helped cover it up. Ashley arrives, announcing she has filmed everything and called 911. Toni dives into the lake; shots ring out, hitting Ashley in the shoulder. Toni pulls Ashley from the water, and she and McKinney perform CPR until Ashley revives. Ryan arrives, fights McKinney for the gun, and is shot before overpowering him.
Toni's parole officer, Suzanne, later shares the full truth. Kim confessed immediately when questioned. On the night of the murder, the girls followed the trio to the lake, and Cathy lured Nicole from the truck. Their plan was to strip and photograph her, but when Nicole resisted, Shauna grabbed a tire iron from Ryan's truck and beat her to death, forcing Rachel to strike as well. McKinney discovered the evidence the next morning and destroyed it. Years later, when Cathy began talking, McKinney murdered her. Shauna, Rachel, Kim, and McKinney are arrested and denied bail.
Three months later, both convictions are overturned and Toni's and Ryan's records are expunged. Stephanie, the shelter manager, returns Captain, having fostered him to ensure no one else adopted him. Toni begins rebuilding a relationship with her father, who weeps and apologizes. Her mother remains unable to forgive Toni for taking Nicole to the lake. Chris tells Toni that Pam's anger is a defense against confronting her own guilt for not seeing what was happening in Nicole's life. Toni agrees to let Ashley film a documentary, thinking of the inmates she left behind at Rockland. That night, Ryan knocks on her window and asks if she wants to go for a drive. When she asks where, he answers: "Wherever we want."