Thomas Tuchel's two-time winners of the competition continued their indifferent start to the season with another lacklustre display in Croatia, Mislav Orsic racing clear to score the only goal of the game after only 13 minutes.
The Blues did lay siege to the Zagreb goal at times in the second half, being thwarted by Dominik Livakovic in the opposition goal, as well as by the woodwork.
Zagreb also rattled the frame of the goal, though, and the hosts showed impressive resilience to hold out for a famous victory - just their third in their last 34 Champions League outings.
Indeed, the Croatian outfit possessed one of the worst win rates in the competition's history prior to tonight, but they claimed a major scalp to take an unexpected early lead in Group E, which also includes AC Milan and Red Bull Salzburg.
Chelsea had been expected to top that group, but they now face an uphill battle to recover following defeat in the first ever meeting between the two sides.
Tuchel notably handed a debut to a masked Pierre-Emerick Aubameyang while also recalling Kepa Arrizabalaga in goal amid growing criticism of Edouard Mendy, who was named on the bench despite Tuchel attributing his omission to an injury.
Kepa made one brilliant save to tip Stefan Ristovski's long-range effort onto the crossbar in the second half, but he could nothing about the goal just 13 minutes in.
Zagreb's all-time leading European scorer Orsic all-too-easily streaked clear of the Chelsea defence, including big-money summer signing Wesley Fofana, to find himself with only the keeper to beat before confidently steering his finish into the bottom corner.
Aubameyang was correctly denied a debut goal by the offside flag in the second half, but it was not until later in the second half that Chelsea created chances clear enough for them to claim that they should not have lost the game.
When those chances did arrive, they arrived quickly; Reece James almost celebrated his new contract with an equalising goal only to see his low strike turned against the foot of the post by Livakovic, who moments later made a miraculous double-save to keep the Blues at bay.
Even eight minutes of added time was not enough for Chelsea to find a breakthrough and avoid the ignominy of defeat to the Croatian champions, leaving them having now lost three of their last five games in all competitions.
Chelsea return to action in the West London derby against Fulham at Craven Cottage this weekend, before renewing their search for their first Champions League points of the season at home to Red Bull Salzburg next week.
Zagreb, meanwhile, make the trip to San Siro to face AC Milan in their second group game next week.