Alex Shaw is on a motorcycle chasing a vehicle with stolen goods. After he catches the driver of the vehicle, his girlfriend Annie Porter runs into him during her driving test. She finds out that Alex is on the SWAT team after he lied and told her he was a beach officer. As an apology, Alex surprises her with a Caribbean cruise on Seabourn Legend.
Aboard the ship, deranged passenger John Geiger, a former cyber employee of the cruise company, hacks into the ship's computer system, and the following evening, he destroys the ship's communication systems and kills Captain Pollard. After remotely shutting down the ship's engines, Geiger calls the bridge to tell the first officer, Juliano, that Pollard is dead and he is in charge. Juliano is ordered by Geiger to evacuate the ship. Geiger steals jewelry from the ship's vault. As passengers evacuate, Drew, a young deaf girl, becomes trapped in an elevator, and a group of people become trapped behind locked fire doors in a hallway filling with smoke. As Annie and Alex attempt to board the last lifeboat, Geiger programs the ship to continue sailing. When the winch lowering the lifeboat jams, Alex jumps into the boat to rescue the passengers, and Annie and Juliano use the ship's gangplank to get them back on deck.
Alex realizes Geiger is controlling the ship. Armed with skeet guns, he goes with Juliano to Geiger's cabin. Geiger remotely detonates explosives inside the room. Annie and Dante, the ship's photographer, notice the people trapped behind the fire doors, and Annie uses a chainsaw to cut the door open and let them out. Meanwhile, Alex orders the navigator, Merced, to flood the ship and slow it down by opening the ballast doors. As the ship floods, Alex sees Drew on a monitor after she climbs out of the elevator, and runs to save her. Alex notices Geiger leaving the vault and holds him at gunpoint, but he escapes by closing the fire door in front of him. Using the ship's intercom, Geiger explains that he designed the ship's autopilot system and is taking revenge against the cruise line after being fired when he contracted copper poisoning. Geiger again escapes from Alex by attaching a grenade to a door.
The crew notice that Geiger has set the ship to crash into an oil tanker off the coast of Saint Martin. Alex decides to stop the ship by diving underneath it and jamming the propeller with a steel cable. Geiger realizes Alex is trying to stop the ship, so he jams the cable winch while Alex is underwater, causing it to break off the ship and free the cable. Geiger takes Annie hostage and escapes with her on a boat from the ship's stern.
To avoid collision with the oil tanker, Alex and Dante go into the ship's bilge and use the bow thrusters to turn it. The ship screeches down the side of the tanker, but manages to withstand the damage, and heads straight into a marina. It then crashes into a Saint Martin town and eventually stops. Alex jumps off, hijacks a speed boat and pursues Geiger to a seaplane. Alex shoots at it from the boat with a speargun and reels himself in through the water. He climbs onto the plane and rescues Annie, and both escape from the plane on one of its floats, which falls onto the ocean. Geiger attempts to fly over the oil tanker, but the plane becomes impaled on the ship's foremast, causing both to explode. The tanker crew however are safe, having launched their lifeboat just in time, leaving Geiger to perish in the resulting fireball alone. Annie and Alex travel back to shore in the speed boat, and he gives her an engagement ring, asking her if she will "wear this for a while", and she accepts.
Sandra Bullock as Annie Porter
Jason Patric as Officer Alex Shaw
Willem Dafoe as John Geiger
Temuera Morrison as Juliano
Brian McCardie as Merced
Jeremy Hotz as Ashton
Bo Svenson as Captain Pollard
Royale Watkins as Dante
Tamia as Sheri Silver
Kimmy Robertson as Liza
Christine Firkins as Drew
Lois Chiles as Celeste
Francis Guinan as Rupert
Michael G. Hagerty as Harvey
Colleen Camp as Debbie
Joe Morton (uncredited cameo) as Lieutenant Herb 'Mac' McMahon
Tim Conway as Mr. Kenter
Glenn Plummer as Maurice
the sequel to Speed (1994)