Set in the summer of 2006, the story follows Coley, a biracial girl from San Diego who moves to a small town in rural Oregon after her mother dies by suicide. Coley carries crushing guilt: She missed her usual bus that day and has wondered ever since whether arriving home earlier might have changed the outcome. With no other family, she is sent to live with Curtis, her estranged father, a jewelry maker who left when she was three and has been virtually absent from her life.
Curtis leaves a note telling Coley to go make friends. She bikes to a strip mall, where a minivan driven by Trenton, a reckless local teenager, nearly runs her over. Sonya, one of the passengers, jumps out to check on her, and Coley is immediately captivated. She meets the rest of Sonya's friend group: Trenton, Alex, SJ, and Brooke, who is close with Trenton. At a lake outing, Trenton throws Coley into the water against her will. Coley storms off, and Sonya chases her. Their argument ends with Coley in tears and Sonya embracing her, asking to start over. Sonya writes her phone number and screen name for AOL Instant Messenger (AIM), a messaging platform, on Coley's arm in Sharpie, but by the time Coley gets home, the ink has smeared beyond recognition.
Sonya tracks Coley down two days later, and they begin spending every day together: shoplifting champagne, walking railroad tracks, playing Truth or Dare. At Sonya's home, Coley meets Sonya's critical mother, Tracy, and babysits Sonya's eight-year-old half-sister, Emma. Every interaction between Coley and Sonya crackles with tension: pinkies hooking on the couch, Sonya applying Coley's makeup before a party, Coley pressing her lips against Sonya's mirror and leaving a kiss mark. Their nightly AIM conversations grow increasingly flirtatious.
At a barn party, Coley meets Faith, Sonya's former dance rival, who is older and openly queer. Faith warns Coley that Trenton is a bully. When police arrive, Coley leads the group to safety through a gully full of poison oak. Back at Sonya's house, they apply medicinal lotion to each other's skin, both flushed and breathless. Sonya insists Coley stay the night. In bed, Sonya rolls over in her sleep and wraps her arm around Coley, who lies awake for hours memorizing the feeling.
Days later on the railroad tracks, Sonya runs ahead while tipsy and does not hear an approaching train. Coley tackles her to safety. Lying in the tall grass, Coley tells Sonya the truth about her mother: the cycles of depression, the missed bus, the guilt she carries. Sonya cups Coley's face and tells her she is incredible. Sonya mouths "olive juice," a phrase that looks like "I love you," and Coley says it back. They share their first kiss, which Coley describes as finally understanding what love songs mean.
Sonya immediately retreats. She runs off when her phone buzzes and dismisses the kiss the next morning as drunken weirdness. Coley plays along but feels erased. Then Sonya reveals she is leaving for dance camp in less than a week, something she never mentioned. At a gathering at Sonya's house, Coley confronts her. Sonya, very drunk, says she cannot handle whatever is between them. After a tearful apology, they end up slow-dancing in Sonya's darkened bedroom. Sonya confesses that thinking about Coley drives her crazy, then insists through tears, "I'm not like this," before tearing herself away. Coley goes looking for her and finds Sonya making out with Trenton. Devastated, Coley flees.
Outside, Alex comforts her. Coley impulsively kisses him, testing whether she can feel for a boy what she feels for Sonya. She feels nothing, and the moment crystallizes her self-knowledge. As Alex drives her home, he accidentally reveals that Sonya told friends about Coley's mother's suicide. Before camp, Coley goes to Sonya's house to retrieve her mother's jean jacket and discovers a goodbye party she was not invited to. Alone in Sonya's room, she demands an apology. Sonya is stone-faced, insisting she is "like this with all my friends" and that their closeness meant nothing. Coley calls the betrayal "unforgivable" and leaves.
While Sonya is at camp, Curtis shows Coley old Polaroids of her mother wearing a tiger's-eye pendant he made. Coley erupts, accusing him of never fighting for her. Curtis reveals that Coley's mother left him, not the other way around, and admits he was a coward. He tells Coley he will always love both her and her mother. Coley also befriends Blake, the cashier from the 7-Eleven, who casually accepts Coley's admission that her heartbreak is over a girl. Coley cuts her hair to her jaw at Blake's house, feeling power with each snip. When Blake takes Coley on a reckless outing and abandons her on the roadside, Coley calls Curtis "Dad" for the first time. In the car, she breaks down, asking why she was never enough for anyone. Curtis tells her that her mother's pain was not about Coley and that they can start over by being honest.
Sonya's private journal entries from camp reveal she is equally tormented. She writes unsent emails confessing her love. Faith, now a counselor at the camp, discovers Sonya's writings and offers support, but Sonya insists she is nothing like Faith. Yet when Sonya sees Faith kissing another girl, she wonders whether she and Coley looked like that by the railroad tracks.
Over the remaining weeks, Coley and Curtis build a genuine relationship. Coley gets a job at Makoto's, a local hibachi restaurant, and bonds with her coworker Kendrick. Watching Kendrick and his boyfriend Tye hold hands at a staff meal provides Coley a model of what is possible. She tells Kendrick she fell for a girl, and he accepts it with gentle curiosity, the first time she has spoken this truth to someone who simply receives it.
Sonya returns and appears at Makoto's for Emma's birthday. In the parking lot after Coley's shift, Sonya admits her feelings but calls Coley "wrong," meaning being with a girl is wrong. Coley stops her: "There's nothing about me that's wrong." Sonya begs Coley not to give up on her, but Coley refuses to chase someone too scared to love her back. Sonya confesses it is not that she is scared to love Coley but that she already does. Coley kisses her forehead and walks away.
SJ explains that Sonya told her about Coley's mother not as gossip but to seek advice: SJ's own sister attempted suicide, and Sonya came to her for guidance. Brooke overheard, and that is how the information spread. SJ invites Coley to a party.
At the party, Sonya tells Coley she is tired of running. As they lean toward each other by the pool, Trenton grabs Coley by the hair and slams her head into the concrete. He turns on Sonya, grabbing her jaw. Coley, bleeding, launches herself at Trenton and beats him to the ground until Alex pulls her off. Coley slips away, washing blood from her hands in a neighbor's sprinkler.
Sonya sprints barefoot down the street, terrified Coley will run. Coley runs toward her instead. They collide and kiss. Sonya says the words plainly: "I love you, Coley." Coley answers, "I love you, too. So much." As Coley bikes home, Sonya's laughter follows her through the dark.