When her prom date dies in a fire, 17-year-old Lucinda (Luce) Price is found culpable and committed to Sword & Cross reform school in Georgia. The dark, run-down campus includes a gothic church-turned-swimming pool and a bowl-shaped cemetery dating back to the Civil War. A student named Arriane gives Luce the initial tour, informing her about the security cameras, secret parties, miserable classes and staff members whose gender students question. Everyone wears black, as per the dress code, and the more dangerous kids sport tracking devices. Across the field, Luce notices the handsome Daniel Grigori. She has the strangest feeling she's seen him before, even known him from somewhere. When their eyes meet, he flips her off.
Despite his unexplained rudeness, Luce can't stop thinking about Daniel. She's also somewhat intrigued by Cam, who is gorgeous and flirts with her mercilessly. Luce accidentally crashes into a girl named Molly in the cafeteria, and Molly responds by covering her in meatloaf. As Luce cleans up in the bathroom, she meets the kind and helpful Pennyweather Van Syckle-Lockwood, better known as Penn. Penn is the only student voluntarily studying at Sword & Cross. When her father, the groundskeeper, died, she remained and lives under the care of the headmaster.
Penn knows how to get her hands on classified information, so she and Luce begin to hunt for all they can find on Daniel Grigori. His personal file is surprisingly thin. It makes no mention of criminal history and only indicates he came from a Los Angeles County orphanage. With the help of religion teacher and librarian Miss Sophia, they learn about an old book on angels written by someone named Grigori. They believe the author may be one of Daniel's ancestors. They can confirm nothing, though, since the book has gone missing from the library.
Daniel remains standoffish, but Luce can't stop thinking about him. She sees him in her dreams, and sometimes, he has wings. In their waking hours, he comes to her rescue several times — when a large tombstone starts to fall on her or when Cam gets too friendly. The few times they are alone, Daniel acts more responsive and playful. He slips and says things about how Luce has "always” done this or that. Still, he refuses to admit they've known each other before. Luce sees Daniel talking to a girl named Gabbe a few times and wonders if they are a couple.
Most of her life, Luce has occasionally seen dark, ominous shadows swirling around her. They appear more frequently since she has arrived at Sword & Cross. She sees one such shadow while she's in the library. Shortly thereafter, the fire alarm goes off, and she escapes from the building with a classmate named Todd. An unseen force carries them out of the library, but Todd still ends up dying of smoke inhalation. Luce wakes up in the hospital, where Arriane has smuggled in alcohol and Daniel has brought her white peonies, her favorite flower. The school's suspicious attorney also visits, since this incident mirrors the fire that killed her prom date. Several days later, after Luce has been released from the hospital, she enjoys time with her mom, dad and Penn on parents' day. She spots Daniel standing alone and wonders, again, about his history.
Cam flirts with Luce in the library, and Daniel attacks him. Cam sends Luce a note asking her to meet him the next night, and she decides it's time to tell him she's only interested in Daniel. Cam covers the security cameras and sends a car to take Luce off campus. The car drops her off at a run-down bar where Cam has been drinking all day. When another patron flirts with Luce, Cam beats him up with seemingly super-human strength. Luce runs out of the bar, where Daniel stands waiting to rescue her. He brings her home in Miss Sophia's car, blaming himself for the fact that Luce is in this mess. When she asks what he means, he cryptically replies that she never gets it. Passion overtakes him, and he kisses her. Then he's shocked to see she is still there after the kiss. As Luce listens, thoroughly confused, Daniel says maybe they are just late. But they will drag her away, he says, and he doesn't know how to stop them.
The next day, Luce meets with Cam to tell him off. He says she owes him one final kiss so he can prove he's the one for her. As he's kissing her, Gabbe and Daniel appear. Gabbe pummels Cam while Daniel takes Luce to a special place in the cemetery and finally admits that they have known each other, over and over again. He tells her he is immortal and damned, and that she comes along every 17 years. They always meet somehow, no matter where he goes or how he distances himself. They always fall in love. But when he kisses her, she disappears. Except this time that didn't happen, and he doesn't understand why. Unsure what to believe of Daniel's crazy-sounding story, Luce flees to her room for time alone. Penn has finally located the ancient Grigori book and leaves it at Luce's door. There's an old photo of Daniel and Luce inside, clearly taken at another time in history.
Luce goes to the library to show the book to Miss Sophia. When Luce admits that Daniel kissed her, Miss Sophia seems shocked and says that's impossible. Miss Sophia confirms everything Daniel has told Luce about their past. She and Luce head to the cemetery to look for Daniel, and Penn joins them along the way. Luce sees the dark shadows and knows something bad is about to happen. From a distance, they can see something that looks like fireworks. Luce reaches Daniel in time to learn he is the book's author and a fallen angel. She tells him she loves him no matter what. Miss Sophia says it isn't as simple as that. But before Luce can get an explanation, Cam appears. He's a fallen angel, too, but one fighting against Daniel.
As a cosmic battle begins, Miss Sophia and Penn say they will get Luce to safety. Miss Sophia leads the girls into a hidden room. She finally shows her true colors by killing Penn, one of the story's few mortals, and tying Luce to an altar. Miss Sophia says she's discovered why Luce didn't vanish when Daniel kissed her this time. In each of Luce's past lives, her parents had given her a Christian education of some sort and had her baptized. This time, her parents had been agnostic. By failing to baptize her, they had left her soul up for grabs. Miss Sophia vows to end this battle once and for all. Just as she's stabbing Luce, Daniel flies in to immobilize the teacher and save his love.
Daniel spends a few final romantic moments with Luce before putting her on a plane that will carry her to safety. He promises to get back to her as soon as he can. Gabbe and Arriane, fallen angels on Daniel's side, also say goodbye and provide supplies for Luce's trip. Luce is riddled with unanswered questions, including why she is somehow important in this celestial battle. Still, she flies into the night vowing to risk everything for love. In the epilogue, a cryptic conversation between enemies Daniel and Cam suggests the two may need to work together soon.