The film begins with a pod of Orcas swimming near the coastline of the Pacific Northwest. Unfortunately, this family of Orca is tracked down by a large group of whalers, and a single orca (Keiko) gets caught in their net. Unable to save him, his family leaves him behind, and he is taken away to a local amusement park.
Sometime later, Jesse (Jason James Richter), a young boy who has been on the run since he was abandoned by his mother six years before, gets caught by the police for vandalizing a theme park along with a group member of three other abandoned kids (who are not caught). However, his social worker Dwight (Mykelti Williamson) helps him avoid legal consequences, provided he cleans up his mess at the park. While there, Jesse befriends Willy, the Orca that was caught earlier and has a collapsed dorsal fin. He teaches him behaviors, something the trainer, Rae Lindley (Lori Petty), had failed to do. Over time, Jesse and Willy become the best of friends, and Jesse earns a long-term job at the marina while learning to live with his new and supportive foster parents, Glen (Michael Madsen) and Annie Greenwood (Jayne Atkinson).
The owner of the amusement park, Dial (Michael Ironside) sees the talent Jesse and Willy have together, and makes large plans to host "The Willy Show" in hopes of boosting sales and making money for himself. On the day of the first performance, everyone is set to begin, but Willy comes down with stage fright due to the children banging constantly on his underwater observation area. Willy scares them off by smashing against the tank, unintentionally damaging it. Jesse is devastated, but later, while at the tank, Jesse notices Dial's assistant Wade (Richard Riehle) and other men sneaking into the underwater observation area and damage the tank enough that the water will gradually leak out in an effort to kill Willy. It is surmised that Dial is interested in collecting the insurance money, since he has a $1,000,000 life insurance plan on Willy.
Thus, Jesse, Native American shaman Randolph Johnson (August Schellenberg) and Rae begin plans to release the Orca. They use equipment at the park to load Willy onto a trailer, and Jesse and Randolph 'borrow' Glen's truck to tote Willy to the ocean. They try to stick to back roads to keep from being spotted with a gigantic Orca, and eventually get stuck on a back road. Wade meanwhile notifies Dial that the Orca is missing, and begin a search to find Willy.
Jesse must admit that he needs help, and calls his foster parents using a CB-Radio located in the truck they took. Annie and Glen show up and are able to help free the truck, and continue on to the marina they are headed to, in order to release Willy. Dial knows where they are likely headed, and when they show up, he, Wade and his henchmen are blocking the gate into the marina. Glen charges at them full speed in the truck, forcing the henchmen to move right before Willy's ride plows through the gate to the marina. Glen quickly turns the truck around and backs up Willy into the water, flooding his truck in the process.
Willy is finally released into the water, but Dial and his goons have a backup plan for the death of Willy. The whaling company shows up in the water, releasing nets into the water to trap Willy in the marina and succeed. Jesse has one last chance. He leads Willy to an area where if Willy would just jump, he would be free. Amidst everyone's prayers, Willy makes the jump (in an iconic scene as shown in the film's poster), to the amazement of all his friends, and is free to return to his family. The film ends with the happy trainers and newly formed family watching Willy swim away.