John Shaft (SAMUEL L. JACKSON) is a slick, no-nonsense detective for the NYPD who's arrived at a crime scene where Trey Howard (MEKHI PHIFER) is lying on the street, severely injured. Canvassing the area for witnesses, Shaft enters a bar where the frightened looking bartender, Diane Palmieri (TONI COLLETTE), indicates to Shaft that Walter Wade Jr. (CHRISTIAN BALE) is the perpetrator.
Wade, the cocky adult son of a wealthy real estate tycoon, doesn't deny the act and being a racist, seems to enjoy seeing Trey die on the spot. Enraged at this attitude, Shaft punches the suspect several times and is immediately removed from the force. Things get worse when Wade jumps bail and then taunts Shaft from his European hideaway.
Two years later, Shaft is working narcotics with fellow cops Carmen Vasquez (VANESSA WILLIAMS),
Jack Roselli (DAN HEDAYA) and Jimmy Groves (RUBEN SANTIAGO-HUDSON), when they come across a local drug lord, Peoples Hernandez (JEFFREY WRIGHT). When the thug touches Shaft, the cop arrests him, just as he does with Wade whom he recaptures on a tip that the suspect was arriving back in the city.
When Wade is allowed to post bail once more, Shaft abruptly quits the force and joins his uncle, John Shaft (RICHARD ROUNDTREE), as a private detective. First, however, he needs to bust Wade and thus must find Diane, since she's the key witness. She's also extremely reluctant and repeatedly tries to elude Shaft.
As the former cop tries to resolve the issue with the occasional aid of Rasaan (BUSTA RHYMES), a streetwise informant who owes him some favors, Shaft must content with Diane's reluctance, some corrupt cops, and Wade's hiring of Peoples and his gang to find and kill her before she can testify.