Adapted from Maxwell Anderson's play, gangsters hold hostages in a nearly empty hotel during a hurricane, wait to make a deal, and try to escape.
Frank McCloud (Humphrey Bogart) arrives at a hotel on Key Largo in the off-season, and drunk Gaye Dawn (Claire Trevor) buys him a beer. Frank meets Nora Temple (Lauren Bacall) and James Temple (Lionel Barrymore). Nora asks Frank how her husband died in the war, and he tells them. Curly Hoff (Thomas Gomez) throws Gaye out. Frank helps Nora secure her boat before the storm. The Seminole Osceola brothers have escaped from prison and are giving up because of James Temple's advice.
Curly pulls a gun and won't let Nora use the phone. Johnny Rocco (Edward G. Robinson) gives orders and says they will leave soon. Deputy Clyde Sawyer (John Rodney) has been beat up and identifies the gangster Rocco. James and Nora try to hit Rocco but fail. Rocco kisses Nora, and later she spits on him. Frank says Rocco would have to kill them all but won't because he needs help.
Gaye is let in and wants a drink. Frank wants a world without gangsters, and Rocco gives him a gun while holding one. Frank chooses to live. Sawyer gets the gun and tries to leave, but Rocco kills him. The gun was not loaded. Nora calls Frank a coward.
On the phone Rocco says the deal will be off in two hours. Gaye pours a drink. Rocco asks her to sing for a drink. She sings, but Rocco refuses her the drink. Frank gives her a drink, and Rocco slaps him. Rocco worries about the storm, and Nora apologizes to Frank. Curly talks about Prohibition coming back. The hurricane smashes a window.
The storm is passing, and James invites Frank to stay. Rocco learns the boat he hired is gone. The Osceola brothers blame James for leaving them outside. Rocco orders Frank to take them to Cuba. Sheriff Ben Wade (Monte Blue) comes in looking for Sawyer and leaves, but outside he finds Sawyer's body. Rocco tells him the Indians were there. Wade kills the Osceola brothers and blames James for lying. Sheriff Wade takes names and leaves.
Rocco's friends arrive, and Rocco shows them the money, which they examine. Ziggy (Marc Lawrence) thanks Rocco and leaves. Threatened with torture, Frank agrees to take Rocco, who pays off James and Gaye. She pleads to go with him, and secretly gets his gun and gives it to Frank.
Frank gets in the boat with the gangsters and pilots it. Radio reports the stolen boat. Frank causes a man to fall overboard and shoots Toots (Harry Lewis) dead, but he is wounded. Frank shoots Curly, who goes to Rocco and dies. Rocco takes his gun and orders Garcia (Dan Seymour) to go after Frank. When Garcia refuses, Rocco kills him. Rocco asks Frank to be his partner. Frank shoots Rocco three times and turns the boat around. He calls in his position and asks for medical care.
Sheriff Wade thanks James for saving his life and feels bad about the Osceola brothers. Nora gets a call from Frank and is glad he is all right.
This gangster drama reflects the fascist tendencies
in the world whereby people try to use violence to get their way
while others like Frank try to preserve themselves and fight back.