The 29-year-old from Argentina handed Federer his first defeat in 2018 and extended his own win streak to 11 matches ncluding a title run earlier this month at Acapulco.
“I’m still shaking,” Del Potro said. “It’s difficult to describe with words. It’s like a dream.”
Del Potro, affected by his wrist injuries throughout his career, survived three match points before claiming the championship in a third-set tie-breaker, ending a two hour, 42 minute marathon contest.
“I cannot believe I won this tournament, beating Roger in a great final and this level of tennis. We played great tennis today,” Del Potro said.
“I just want to keep winning titles like this if I can.”
Del Potro won the first five points of the deciding tie-breaker then closed it out when Swiss superstar Federer, who had won a career-best 17 straight matches to start the year, smacked a forehand long.
It was an emotional match for both players as each took turns questioning the chair umpire. Del Potro urged him to stop the pro-Federer crowd from making noise on his serve and an irritated Federer also had a couple of lively conversations with the umpire.
“I don’t remember half of it,” said Federer. “I was trying to pump myself up more, get energy for me. It had no effect on the outcome.”
Del Potro was competing in his first Indian Wells final since 2013, when he lost to Spaniard Rafael Nadal.
It was Del Potro’s seventh victory over Federer in 25 career meetings, one of those wins coming in the 2009 US Open final.
“I always play good against him. I won a couple of finals and lost a couple of finals. In the end I was lucky to win.”