Johnny Utah (Keanu Reeves), is a rookie FBI Agent and former Ohio State quarterback. He and his veteran partner, Angelo Pappas (Gary Busey), are investigating a string of bank robberies by a gang known as the "Ex-Presidents" (during their robberies they use masks of former Presidents Ronald Reagan, Richard Nixon, Lyndon Johnson, and Jimmy Carter to disguise their true identities).
Pursuing Angelo's theory that the criminals are surfers, Johnny goes undercover to infiltrate the surfing community. Knowing nothing of the sport/lifestyle, he persuades orphan surfer girl Tyler Endicott (Lori Petty) to teach him to surf. In the process, Johnny develops a complex friendship with Bodhi (Patrick Swayze), the charismatic leader of a gang of surfers, Roach (James LeGros), Grommet (Bojesse Christopher) and Nathaniel (John Philbin), who accept Johnny when they realize he is a former college football star. As he masters the art of surfing, Johnny finds himself increasingly drawn to the surfers' adrenaline-charged lifestyle, Bodhi's philosophies and Tyler.
Following a clue retrieved by analyzing toxins found in the hair of one of the bank robbers, Johnny and Angelo lead an FBI raid on another gang of surfers. While criminals, this group are not the "Ex-Presidents" and the raid inadvertently ruins a DEA undercover operation.
Watching Bodhi's group surfing, Johnny suspects they are the "Ex-Presidents" because of how close a group they are and because one of them moons everyone in the same way one of the robbers does when leaving the bank. He tails Bodhi and his suspicions are confirmed when he sees Bodhi and Roach casing a bank. Johnny and Angelo stake out the bank and the "Ex-Presidents" appear. A furious chase of Bodhi (masked the entire time) by Johnny ensues through the neighborhood, culminating in Johnny jumping over a fence and injuring his knee, an old football injury flaring up again. Despite having a clear shot at Bodhi (locking eyes with him), Johnny does not shoot and Bodhi escapes.
Bodhi aggressively recruits Johnny into going skydiving with him and his friends. Johnny, still without proof of Bodhi's bank robbing, goes along. Because of his knee, they land in water. After the jump, Bodhi reveals that he knows Johnny is an FBI agent and has arranged for his friend, Rosie (Lee Tergesen), a non-surfing thug, to hold Tyler hostage. Johnny is forced to go with the "Ex-Presidents" in their last bank robbery of the summer. The robbery goes wrong as Grommet, along with an off-duty police officer and a security guard, who had tried to stop the robbery, are killed. Angered by Grommet's death, Bodhi knocks Johnny out and leaves him at the scene. Defying their boss, who arrested the agent for armed robbery, Angelo and Johnny go to the airport where Bodhi, Roach, and Nathaniel are about to leave for Mexico (where Rosie awaits them with Tyler). In a shootout, Angelo and Nathaniel are killed, while Roach is seriously wounded. With Roach aboard, Bodhi forces Johnny onto the plane, at gunpoint. Once airborne and over their intended jump point, Bodhi and Roach put on parachutes, and jump from the plane with Bodhi saying to Johnny "adiós amigo", leaving Johnny to take the blame again. Despite no other parachutes being available, Johnny jumps from the plane with Bodhi's gun, managing to intercept him before he lands, using his parachute so they can both land alive. Upon impact, Johnny's knee is injured once again, allowing Bodhi to escape Johnny's grasp. Bodhi meets with Rosie and releases Tyler. Roach dies of his wounds and Bodhi and Rosie leave with the money.
With his hair longer and still surfing, Johnny eventually meets Bodhi again nine months later at Bells Beach in Victoria, Australia where a record storm is producing lethal waves. This is an event Bodhi had talked about experiencing, calling it the "50 Year Storm". After a brutal fight in the surf, Johnny manages to handcuff Bodhi to his own wrist. Bodhi begs Johnny to release him so he can ride the once-in-a-lifetime wave. Knowing he will not come back alive, Johnny releases him and says to Bodhi "vaya con Dios" and watches, with the authorities, as Bodhi apparently meets his end. Johnny then walks away, throwing his FBI badge into the ocean.