The rookie allowed three baserunners — all on hit batters. He also had a two-run single for his first big league RBIs and finished with two more hits than the Mets.
"Lot of emotions going through my mind right now," Heston said moments after the final out. "Hasn't sunk in yet. Looking forward to catching my breath and celebrating a little bit."
The pitching-rich Giants have thrown a no-hitter in four straight seasons, with Heston following Matt Cain's perfect game against Houston in 2012 and hitless gems by Tim Lincecum in 2013 and '14.
The only other team to accomplish that feat was the Los Angeles Dodgers from 1962-65, according to STATS. Hall of Famer Sandy Koufax pitched all four of those.
Heston (6-4) struck out 11 — six looking — for the defending World Series champions and allowed just two balls into the outfield.
After plunking Anthony Recker with a pitch to start the ninth, the right-hander threw called third strikes past pinch-hitter Danny Muno, Curtis Granderson and Ruben Tejada. Heston walked calmly off the mound toward home plate and was hugged by catcher Buster Posey.
"It's fun to see good things happen to good people," Posey said.
The last pitch was a 91 mph sinker that froze Tejada. As the Citi Field crowd of 23,155 gave Heston a standing ovation, Giants teammates came out of the dugout and bullpen to mob him. He received another ovation as he walked off the field.
Heston said he was a little extra nervous going into the ninth, but he didn't want to change his approach at all.
"Attack the zone. Don't let the nerves get to me. Just throw quality strikes, and that didn't change in the ninth," he said. "Some extra nerves going on. Taking a little more deep breaths out there. I realized it and it was awesome to be part of it."
Brandon Crawford made a strong throw from deep at shortstop to get Eric Campbell for the final out of the eighth.
"If it's hit over there, he's going to make the play," Heston said.
Other than that, the Mets didn't hit many balls hard.
The 27-year-old Heston hit Tejada and Lucas Duda with pitches in the fourth inning during a span of three pitches. The only flyouts for New York were by Wilmer Flores in the second inning and Michael Cuddyer in the seventh.
Heston threw 72 of 110 pitches for strikes in the 35th complete-game no-hitter by a rookie in major league history, according to STATS. The previous was one by Boston's Clay Buchholz in 2007.
Heston hit a two-run single in the fourth off Noah Syndergaard (2-4) and added another single in the eighth. Heston had three RBIs in 75 at-bats over three minor league seasons.
Angel Pagan put the Giants ahead with an RBI groundout in the first, and Matt Duffy homered in the sixth.
San Francisco extended its lead to 5-0 when Joe Panik hit a leadoff homer in the seventh off Dillon Gee.
Heston had a long and slow path to the majors. A graduate of Bayside High School in Palm Bay, Florida, he went to Seminole Community College and was taken by Minnesota on the 47th round of 2007 draft but didn't sign. Washington selected him on the 29th round the following year but he enrolled at East Carolina University and signed only after the Giants took him on the 12th round in 2009.
He was 1-5 that year for the Arizona Rookie League Giants and didn't advance past Class A until 2012. He made his big league debut last Sept. 13 against the Los Angeles Dodgers and earned a spot in the rotation this year when Matt Cain started the season on the disabled list. Before Tuesday, his only complete game was a two-hitter against Houston on May 12.
Heston was knocked out in fourth inning against Pittsburgh in previous start.
The Giants have pitched 17 no-hitters, including nine since the team moved from New York to San Francisco.
It was the seventh no-hitter against the Mets, but the first since Houston's Darryl Kile in 1993.
Bruce Bochy won his 700th game as Giants manager.
Syndergaard, also a rookie, allowed 10 hits for the second straight start, giving up four runs in six innings. Gee, dropped from the rotation last weekend, followed in his first relief outing since May 4, 2011, and allowed a home run to his first batter, Panik.
Giants: Cain, sidelined since last July 9 by right elbow surgery and then a strained flexor tendon, began a minor league rehab assignment with Double-A Richmond against Portland. The right-hander allowed two runs and three hits in 3 2-3 innings. He struck out two, walked one and threw 48 pitches. ... RF Hunter Pence (sore left wrist) hasn't played since June 2, and the Giants might soon decide whether to put him on the DL. His replacement, Gregor Blanco, was scratched before game time with no explanation.
Mets: Rookie catcher Kevin Plawecki was scratched because of dizziness, missing a start for the third time in four games. The Mets plan to activate catcher Travis d'Arnaud on Wednesday. He has been sidelined since breaking his right pinkie on April 19.
Giants: Tim Hudson (4-4) starts Wednesday night. He is 17-10 in 32 starts against New York.
Mets: Matt Harvey (6-3) is 0-1 in two starts against the Giants, both in San Francisco.