Nadine Franklin (Hailee Steinfeld) is an awkward 17-year-old high school student who quickly walks to the classroom of her teacher Mr. Bruner (Woody Harrelson). She is flustered and tells Bruner she's going to kill herself and that she needs someone to listen to her. He then quips that he was writing his own suicide note since all he wants is some peace and quiet during his lunch break.
Nadine takes us to the beginning of her story. At the age of 7 (played by Lina Renna), she noticed how much more popular and well-liked her older brother Darian (Christian Michael Cooper) was, to the point where it felt like their mother Mona (Kyra Sedgwick) favored him over Nadine. Her father Tom (Eric Keenleyside) was the only one who made Nadine feel secure. She gets picked on by some mean girls at school and feels alone until she meets Krista (Ava Grace Cooper). She is holding a pet caterpillar and gives it some water, and then she asks Nadine if she wants to be the caterpillar's other mother. Nadine agrees, but she later accidentally suffocates it in her pencil case. Still, Nadine and Krista quickly become best friends. While Krista's parents argue, Nadine always had her back.
At the age of 13 is when Nadine states some "really fucked up shit" happened. She becomes insecure about her looks, especially since Darian (now played by Blake Jenner) only got more attractive. Krista (now played by Haley Lu Richardson) tries to assure Nadine she looks fine.
While getting burgers with her dad, Tom suffers a fatal heart attack and crashes his car. His death devastated the family.
In the present at age 17, Nadine is at school with Krista when she spots Nick Mossman (Alexander Calvert), a bad boy fresh out of juvie (juvenile hall reform school). She becomes sexually attracted to him. In Mr. Bruner's class, Nadine meets Erwin Kim (Hayden Szeto), an equally awkward but friendly boy that has a crush on her.
When the girls go back to Nadine's house, they learn that Mona is leaving for the night to see a man she met online. Nadine and Krista get drunk and fool around while Darian has friends come over to swim. Nadine gets too drunk and she pukes in the toilet with Krista helping her. Nadine makes self-deprecating comments before passing out on the floor. Krista goes downstairs to find Darian cleaning up dog pee off the carpet, and they start to make small talk.
Nadine wakes up with a hangover. She crawls out of the bathroom and hears giggling coming from Darian's room. To her horror, he and Krista are in bed, and she's giving him a handjob. All three are mortified, but especially Nadine.
Nadine is still pissed at Krista later in the day, to the point where her frustration starts to bother Krista. She tells Nadine about a party she's going to with Darian, so Nadine opts to join them. At the party, Krista goes off with some other girls to play beer pong, leaving Nadine alone. She goes outside and meets a drunk girl that compares her and Darian to Arnold Schwarzenegger and Danny Devito's characters in "Twins." Nadine calls Mona to go pick her up. She tells her daughter that the man she met online is married, and she received an email from his wife.
Nadine calls Erwin to hang out. They go to a carnival and ride the Ferris wheel. Erwin tries to go for a kiss but he gets shot down since his timing was bad. Nadine later compares Erwin to a nice old man to make things even more embarrassing.
On Monday, Krista approaches Nadine, but she's still mad at Krista for going off with other girls at the party. When Krista mentions that Darian asked her to be his girlfriend and go to prom with him, Nadine delivers an ultimatum - Krista must choose her or Darian. Krista refuses, but Nadine pushes it by saying he'll dump her for someone hotter. Krista leaves her.
When Nadine gets home, she starts to argue with Darian over his new relationship. Mona tries to intervene but Nadine just leaves to take a walk. She gets a slushee and then goes to Petland where Nick works. She goes in and tries to talk to him, though she comes off as kind of weird.
Nadine tries to talk to Mr. Bruner, though he doesn't seem interested in her problems. When he makes a crack that nobody likes her, Nadine flips out and starts insulting him and his profession. He is unfazed and gives her half his cookie and says she's his favorite student to calm her down.
Nadine calls Erwin again and asks if she can go over and swim in his pool. He says yes and gets super excited. She goes over and is surprised to see that Erwin's family is wealthy. Nadine jokingly asks Erwin if he wants to have sex, which upsets him. Later, he shows her some drawings he made and talks about his project for an upcoming student film festival.
Mona takes Nadine to school now that she isn't talking to Krista. Nadine makes a big deal about being dropped off close to Krista, so Mona brings Nadine to work with her. While there, Nadine gets bored and starts acting out. Mona tells Nadine that her father would be very disappointed in her. Nadine swipes Mona's car keys and leaves.
Nadine goes to a playground and starts to write a long, impulsive message to Nick about how she wants to do sexual things with him. She then tries to delete the message, but accidentally sends it. Nadine freaks out and goes to show Mr. Bruner (which is where the movie began). Although she begs him to help her do something, he just gives her money for a frozen yogurt.
Nadine gets her yogurt and listens to multiple angry voicemails from her mom. Nick sends her a message since she put her number in the post, and he invites her to hang out. Excited, Nadine runs home to get dolled up before Mona gets home in a cab.
Nadine goes on her date with Nick, which just ends up being him taking her to an empty parking lot. They start making out and he starts groping her, but Nadine has second thoughts and tells him to get off. She wants to get to know Nick, but he is uninterested. When she's afraid he'll leave, she starts kissing him, but she pulls away again when he tries to make a move. Nadine leaves the car and starts crying.
Mona calls Darian while he's on a date with Krista. He rushes home to find Mona grabbing Nadine's clothes off the floor and saying she'll donate them. Darian tries to keep her calm.
Nadine gets picked up by Mr. Bruner and takes her to his house where she meets his wife and infant son. Darian and Krista show up at the house to pick up Nadine, but she refuses to go anywhere with them. Darian gets fed up and confronts her about her attitude. Nadine says that Darian only cares about himself and being seen as a hero to their mom by bringing her home safely. Darian hits back that it is stressful for him that Mona is always counting on him to be the man of the house, how he has to apply to schools nearby since he's worried about what will happen to the family if he's gone, and how he can't be with Krista without ruining his relationship with Nadine. Darian leaves, so Mr. Bruner brings Nadine home.
Nadine goes to Darian's room and apologizes for her behavior. She then tearfully expresses to him how she has always hated who she is and how she acts, and how she worries she can never change it. Darian gives her a hug.
Nadine wakes up early the next morning to go to Erwin's film festival. Darian and Krista are downstairs about to have breakfast. Darian wishes her a good day, and Nadine reciprocates. Krista asks Nadine if she can call her later, and she says yes.
At the film festival, Erwin presents his film, which is about an alien who tries to win over a girl he likes, but she doesn't return his feelings. A giant monster takes her, so the little alien goes to rescue her by causing a huge rock to crush the monster. When the girl tries to return her affections, the alien has moved on and is with other gorgeous alien women. After the show, Nadine gives Erwin flowers. She says she knows the movie was about her, but he denies it. She then feels embarrassed because she looks like someone who thinks everything is about them, but Erwin says he was just joking. He then brings Nadine over to introduce her to his friends.