It’s Christmas time, there’s no need to be afraid… unless you go to school in Stockhom with Oskar, a meek 12-year-old boy, who resides with his mother Yvonne in the western Stockholm suburb of Blackeberg in 1981 and occasionally visits his father Erik in the countryside.
It is not clear why Erik is living apart from Yvonne, but on one such visit, when Oskar and Erik are enjoying a cosy night playing games, a drunken neighbour arrives and Erik starts to drink heavily with him, breaking up the cosy father/son evening. Oskar collects clippings from newspapers and magazines about grisly murders and pictures of hunting knives. He keeps a large hunting knife under his mattress.
Oskar’s classmates regularly bully him, and he spends his evenings imagining revenge. One night he meets Eli, who appears to be a pale girl of his age. Eli has recently moved into the next-door apartment with an older man, Håkan. Eli initially informs Oskar that they cannot be friends. Over time, however, they begin to form a close relationship, with Oskar lending his Rubik’s Cube to Eli, and the two exchanging Morse code messages through their adjoining wall. Håkan requests that Eli stop seeing Oskar. After questioning Oskar about a cut on his cheek, Eli learns from him about his being bullied by schoolmates and encourages him to stand up for himself. This inspires Oskar to enroll for weight-training classes after school.
Meanwhile the otherwise well-prepared Håkan stops and kills a passerby on a busy footpath near a main road to harvest fresh blood for Eli. But he fails to return with any when he is interrupted by an oncoming dog walker. Eli subsequently waylays and kills a local man, Jocke, making his drunken way home from a bar after having said goodnight to his best friend, Lacke. A local cat-loving recluse, Gösta, witnesses the attack from his flat, but hardly believes what he has seen. Håkan hides Jocke’s body in an ice-hole in the local lake. Håkan later makes another well-prepared but incompetently executed effort to obtain blood for Eli by trapping a teenage boy in a changing room after school. The boy’s friends are waiting for him to emerge, and go to see what is holding him up. Before he is discovered, Håkan pours concentrated hydrochloric acid onto his own face, disfiguring it to prevent the authorities from identifying him and tracing Eli. Eli learns that Håkan has been taken to the hospital and scales the building to access his restricted room. Håkan opens the window for Eli and offers his neck to her for feeding. After she has fed, Håkan falls out of the window. He lies on the snow supposedly breathing his last breaths. Now alone, Eli goes to Oskar’s apartment and spends the night with him, during which time they agree to “go steady”. While Eli states, “I’m not a girl”, Oskar (ambiguously) either ignores this or accepts the homoerotic status of the relationship.
During an ice skating field trip at the lake, some of Oskar’s fellow students discover Jocke’s body, hidden by Håkan. At the same time, Oskar finally stands up to his tormentors. He strikes the leader of the bullies, Conny, on the side of the head with a pole, splitting his ear. Some time later, Oskar shows Eli a private place he knows. Unaware that Eli is a vampire, Oskar suggests that they form a blood bond, and cuts his hand, asking Eli to do the same. Eli, thirsting for blood but not wanting to harm Oskar, laps up his spilt blood before running away.
Gösta tells his neighbours that he saw a kid attack Jocke. They urge him to tell the police, but he does not. In a drunken state, Lacke tells his friends that Jocke was his only friend. His girlfriend, Virginia (Ika Nord) leaves but is attacked by Eli. Lacke turns up in time to interrupt the attack. Virginia survives, but she soon discovers that she has become painfully sensitive to sunlight. Thirsting for blood, she pays a visit to Gösta, only to be fiercely attacked by his many cats. In the hospital, Virginia, who has realized what she has become, asks an orderly to open the blinds in her room. When the sunlight streams in, she bursts into flames.
On realizing her true nature, Oskar confronts Eli, who admits to being a vampire. Their trust for each other grows and Eli appears in front of his apartment. When Oskar questions the consequences of Eli entering without his expressed verbal invitation, Eli passes the threshold to his apartment and begins to profusely bleed until Oskar panics and cries out a verbal invitation. After their embrace, Oskar is initially upset by Eli’s need to kill people for survival. However, Eli insists that their bloodthirsty natures are alike, in that Oskar wants to kill and Eli needs to kill, and she encourages Oskar to “be me, for a little while.” Afterwards, Eli changes out of bloody clothes and Oskar, deciding to sneak a peek, revealing a scar where Eli’s genitalia should be (here at last Oskar runs ahead of the audience, he already knows because of the “be me, for a little while”). Eli quickly leaves his apartment through his window when his mother returns home.
Lacke, who has lost everything because of Eli, seeks out Håkan and Eli’s apartment. He is suspicious of the apartment with the makeshift covered-up windows. Breaking in, he discovers Eli asleep in the bathtub. Lacke holds a knife to Eli’s neck while she is still sleeping. Oskar, who was hiding inside the apartment, sees what Lacke is doing and takes out his own knife. When Lacke finds it hard to see and lets sunlight into the room, Oskar shouts and Eli wakes up. A startled Lacke turns and throws his knife away when he sees Oskar. Eli immediately jumps on Lacke and kills him, feeding on his blood. Eli thanks Oskar and kisses him in gratitude. However, an upstairs neighbour is angrily knocking on the ceiling due to the disturbance the fight has caused. Eli realises that it is no longer safe to stay and leaves the same night.
The next morning, Oskar receives a phone call from Conny’s friend, Martin, who lures Oskar out to resume the after-school fitness program at the local swimming pool. The bullies, led by Conny and his sadistic older brother Jimmy, start a fire to draw Mr Ávila, the teacher in charge, outside. While Ávila is distracted, they storm the pool-area and order the other children to clear out, which leaves Oskar trapped alone in the pool. Jimmy forces Oskar under the water, threatening to stab his eye out if he does not hold his breath for three minutes. While Oskar is underwater, however, a crash is heard from above the surface, followed by screaming. Martin’s feet are seen dangling just under the surface of the water as he is dragged over the pool, and then his severed head falls into the pool. Next, Jimmy’s torn-off right arm, which had held Oskar underwater, falls into the pool. Eli then immediately pulls Oskar out of the water, and they both smile as they look into each other’s eyes. The decapitated bodies of Martin, Jimmy, and Conny lie around the pool, while Andreas, the reluctant fourth bully, sobs on a bench.
Later, Oskar is traveling on a train with Eli in a box beside him, safe from sunlight. From inside, Eli taps the word “kiss” to Oskar in Morse code, to which he taps back “puss” (small kiss in Swedish).