After Erica Bain's (Jodie Foster) fiancee David Kirmani (Naveen Andrews) is beaten to death by three hoodlums, she becomes unable to leave her apartment for fear of the city she used to love. After illegally buying a gun for a thousand dollars, Erica feels confident to go outside. This weapon comes in handy when she is forced to use it in self defense against a robber in a convenience store.
Empowered, Erica goes further, putting herself in danger on purpose to punish the guilty. She kills two thugs on the subway, a pimp who was holding a drugged girl hostage, and a businessman who most likely murdered his wife.
Meanwhile, Detective Mercer (Terrence Howard) is investigated these killings with his partner Detective Vitale (Nicky Katt) and cannot understand the connection between him. In coming in contact with Erica, he befriends her only to start suspecting her of the vigilante killings.
Meanwhile, Mercer tells Erica they might have found one of David's killers since he tried to pawn her ring. Going to a line up she recognizes him but purposefully lets him go. Tracking down one of his ex-girlfriends for his location, the girl refuses. The girl then changes her mind, giving her the address, and the video of David's beating.
Erica sends the video to Mercer with the message "Goodbye". She tracks down two of the thugs, shooting them dead. In finding the third man, he gets the drop on Erica before Mercer intervenes. Erica wants to kill the man, but Mercer stops her, then gives her his gun.
The thug is screaming for Mercer's help, but Mercer doesn't listen as his moral code has been shaken to the core by what happened to Erica and David. Thus, Mercer will not intervene for scum like him. Erica, finally having enough shoots him and is ready to turn herself in. Mercer says no, as he would go down with her for not stopping her from killing the man.
Mercer tells Erica that they will blame the three men, as they got a taste for killing with David's attack, then progressed on to more dangerous people. Erica is forced to shoot Mercer in the shoulder and embraces him one last time, as they can never see each other again. Mercer calls for backup and leaves in an ambulance alive. Erica walks back to where the initial attack occurred, and takes her dog for a walk. Her final narration notes, that while she can no longer go back to who she was, she will continue to live the best she can.