The 22-year-old Team Ineos rider will become the first Colombian to win the title and the youngest since Francois Faber in 1909.
Bernal finished Saturday’s stage in fourth place, which was won by 2014 champion Vincenzo Nibali of Italy. The overall winner, however, is chosen based on calculations of the amount of time taken to complete each stage.
Although he still has to finish Sunday’s final stage, the route around Paris is traditionally a procession with only the final sprint being contested.
Bernal crossed the finish line while holding hands with teammate and defending champion Geraint Thomas.
“We still have to make it to Paris,” Bernal told reporters covering the Tour. “I can’t understand what’s happening. I will need a few days — it’s incredible.
“It’ll take a few days to realize what I have achieved,” he continued. “To be honest, I was feeling good today. I kept thinking 5km, 4km, 3km. One less, one less to go, each time.
“When we got to the finish and Geraint held out his hand, I realized it was over and I was going to win the Tour de France,” Bernal said.
Bernal moved into the lead on Friday after a hail storm brought a premature end to stage 19 in the Alps.
Roads were left impassable by stormy weather in Val d’Isere, forcing organizers to abandon the stage with 20 kilometers remaining.
With times taken from the top of Col d’Iseran, Bernal, who had started the day 90 seconds behind overnight leader Julian Alaphilippe, emerged with a two-minute lead over the home favorite.
Bernal became the third Colombian to wear the yellow jersey, which is given to the rider who leads the race’s overall standings after each segment or stage. Victor Hugo Peña wore it in 2003, followed by Fernando Gaviria in 2018.
Bernal will be joined in the top 10 by fellow Colombians Rigoberto Uran and Nairo Quintana, who sit seventh and eighth overall, respectively.
He will take a 1 minute 11 second lead over teammate Thomas into Sunday’s procession, with Dutch rider Steven Kruijswijk in third, a further 20 seconds adrift.
Home favorite Julian Alaphilippe, who had led the race for 14 days before weather affected Friday’s stage, dropped to fifth place overall.