June Broaden is a thirty-year-old bakery co-owner in Charleston, South Carolina, who has spent twelve years nursing a grudge against Ryan Henderson. At their high school graduation, Ryan leaned in as if to kiss her, and June closed her eyes and tipped her chin up, only for him to smirk and walk away. The humiliation cemented her hatred. Now, June must see Ryan again at a joint bachelor-bachelorette bar crawl for their best friends, Stacy Williams and Logan, whose wedding is at the end of the week. June has prepared a speech about her success as majority owner of Darlin' Donuts, but her confidence crumbles when she discovers Ryan is not the ugly, greasy man she had imagined. He is strikingly handsome in a navy suit, and a groomsman named Alex reveals that Ryan is a Michelin-starred chef, the youngest ever to earn three stars.
Ryan's perspective reveals a different history. He harbored a crush on June throughout high school and nearly kissed her at graduation but pulled away because he was leaving that night for culinary school at Le Cordon Bleu in France. He thought kissing her and then disappearing would be cruel. As the night progresses, June drinks heavily out of nervousness while Ryan stays sober, eventually carrying her out of the bar and driving her home. Before he leaves, a half-conscious June mumbles that she wished he had kissed her on graduation day, a confession that stuns Ryan and makes him wonder whether she ever truly hated him.
The next morning, June wakes hungover to traces of Ryan's care: aspirin, water, a pot of coffee set to auto-brew. She interprets these as power moves. Meanwhile, she receives a package from her mother, Bonnie, the latest in a five-year tradition of care packages that began when June called off her wedding to her ex-fiancé, Ben. June reveals in narration that Ben cheated on her, but she has never told anyone the real reason for the breakup. Since then, she has adopted a strict "one-date rule," never going out with the same man more than once, to protect herself from getting hurt again.
That same week, Stacy delivers unsettling news: Logan has accepted a dream surgical position in California, and after the wedding, they are moving. Stacy plans to sell her half of Darlin' Donuts and suggests June buy her out. June panics, remembering the flower truck business she ran with Ben that collapsed after his betrayal. She fears she cannot succeed alone, recalling a pattern of giving up: She dropped out of college three credits shy of graduating, quit cosmetology school, and abandoned a summer abroad. June agrees instead to interview potential buyers.
Ryan inserts himself further into June's life. At a dress fitting, he discovers her trapped in a changing stall without her clothes and holds them hostage, demanding she answer personal questions. When he asks why she is still single, June breaks down crying, revealing a wound deeper than their rivalry. Ryan immediately apologizes. When the caterer for the rehearsal dinner falls ill, Ryan agrees to cook on the condition that June assists him in her kitchen. One morning at her house, he confesses that he picked on her in high school because he was into her and that messing with her was the only way to get her attention. June is shaken but insists the revelation changes nothing.
Their dynamic shifts through escalating encounters. June retaliates by bringing a date named Carter to a group dinner, mimicking Ryan's old tactic. Ryan remains unruffled. After Carter leaves, Ryan admits that every date he brought in high school was meant to make June jealous, and it never worked. That night, June texts him a vulnerable admission: She was always jealous.
A breakthrough comes when Ryan finds June upset after seeing Ben's engagement announcement on social media. He carries her into the shower and threatens to blast them both with cold water unless she tells him the truth. Under the spray, June finally confesses that Ben cheated on her and, when confronted, told her he was no longer attracted to her. Ryan holds her and tells her Ben's cruelty had nothing to do with her. June says she is not ready for a relationship, and Ryan accepts. After she leaves the bathroom, Ryan discovers a small yellow note tucked into her vanity mirror, one he wrote in tenth grade that said "You look cute covered in soda." The kept note is evidence that his one compliment meant far more to her than she ever let on.
During preparations for the rehearsal dinner, Ryan reveals he once protected June on her sixteenth birthday. He overheard her boyfriend Isaac's friends betting on whether Isaac could sleep with her that night, told June's brother, Jake, and together they slashed Isaac's tires so Ryan could drive June home safely. June begins to see that Ryan was never truly her enemy. On the wedding day, bridesmaids steal June's clothes, leaving her in her underwear in a church hallway. Ryan finds her, drapes his jacket over her shoulders, and tells her she is beautiful. At the reception, he crosses the dance floor and kisses her in front of everyone. June agrees to a date, abandoning her one-date rule.
In the days after the wedding, they fall into a comfortable intimacy Ryan insists is not yet their official date. He has been fielding calls from Noah Prescott, a restaurateur pressuring him to become executive chef at a glamorous new restaurant called Bask in Chicago. June cancels a date with another man and admits to Ryan that she did not go because the man "wasn't you."
Ryan flies June to Chicago for their first date. At his apartment, she finds a sterile, impersonal space that contrasts sharply with her warm Charleston bungalow. She also discovers that Ryan has slipped the bakery buyer applications into her luggage with a note: "You don't need these." Overwhelmed, June hides in Ryan's closet, calls Stacy, and blurts out that she loves Ryan and wants to buy the bakery. For their date, Ryan re-creates a fantasy June described on a tenth-grade class trip: Chinese takeout, wine, a suit, and her favorite movie,
My Best Friend's Wedding, in a fancy apartment. June is deeply moved that he remembered her throwaway words from years ago. Ryan reveals he has turned down the Bask position, bought the vacant space across the street from Darlin' Donuts, and plans to open a small café inspired by a French bistro he loved during culinary school. He is moving to Charleston.
Meanwhile, June calls her mother and finally confesses the truth about Ben. Bonnie reveals the family has known since the day June called off the wedding; Jake and their father confronted Ben, and Jake punched him. They waited for June to tell them in her own time.
Their happiness is tested at a restaurant opening that evening, where Noah corners June while Ryan is away. Noah tells her Ryan is giving up his dreams for her and implies the sparks between them will fade. Shaken, June leaves a note and heads for the airport, but she never buys a ticket. Recognizing that she is self-sabotaging, she turns back and is walking out of the airport just as Ryan pulls up, having raced there after confronting Noah. They argue on the sidewalk, both furious but honest. Ryan demands she stop running from him, and June fires back that she was already coming back. They reconcile with a kiss against his truck, and June whispers against his lips that she wins.
An epilogue set one year later shows June and Ryan married, with Ryan running Le Café across the street from Darlin' Donuts. Their prank war continues: June tricks Ryan into eating a donut glazed with numbing gel, then inadvertently reveals her pregnancy when she gets sick after biting into her own donut. A bonus epilogue four years later finds June appearing on a national morning show to promote Darlin' Donuts, now a nationwide franchise. Ryan stays home with their three-year-old daughter, Zoe, who has a stomach bug. When June returns, she finds Ryan asleep on Zoe's bedroom floor holding their daughter's hand. June reflects that the most meaningful moments of her life are not the grand milestones but the quiet ones she shares with Ryan.