Bavuma went a fighting, and at times hard-hitting, 171 uneliminated in a South African total of 287 in the second set for seven, an overall lead of 356.
It was an emotional moment for Bavuma when he struck Joseph Alzarri more coverage for his 14th limit to reach his hundred, more than seven years after making his first test century.
He took off his helmet, jumped into the air and waved his bat in salute as a small crowd rose to give him a standing ovation.
The South African captain continued to play with freedom. After hitting triple figures on 192 balls, he rose to 171 on 275 deliveries. He hit 20 fours.
Bavuma, 32, scored his first cent in his seventh Test and eighth Test innings in a draw against England at Newlands in Cape Town in January 2016.
Since then he had played in another 48 Tests and batted in another 88 innings without repeating the feat despite 19 half-centuries.
South Africa’s most reliable batsman for the past two years, Bavuma was named captain ahead of the first Test against West Indies – and was out for a ‘pair’.
He arrived Friday with his team struggling at eight for two.
It was a long struggle as he racked up a half-century of 107 balls as his partners struggled and succumbed to good quality West Indian bowling.
They were 103 in five, a precarious 172 points clear, when Bavuma was joined by Wiaan Mulder, one of several unproven South African batsmen at the top level.
At tea, South Africa had scored just 145 for five from 59 overs, but the tempo changed when Mulder struck three fours from Kemar Roach in the second after the interval.
Mulder made 42 in a 103-run partnership that accelerated further after Bavuma reached his century.
Mulder drilled to the deep square leg, but by then South Africa was in a position of relative safety. Twenty-one overs between tea and taking the second reball gave 98 runs for Mulder’s wicket loss.
Simon Harmer joined Bavuma in another productive partnership, netting 19 while Bavuma scored freely as the pair added 71 for the seventh wicket.
Harmer went down late in the day, leg leading off a Jason Holder delivery that went through the bottom and hit him below the knee.
It was the first idea that the field, which didn’t pose a big problem, could be a different beast in the fourth inning.
South Africa, however, is looking to get as far ahead as possible amid concerns about the ability of Kagiso Rabadaone of only two fast bowlers chosen by the hosts.
Rabada played superbly in the opening innings, taking two for 19 in 12 overs, but did not play after tea on the second afternoon and reportedly suffered from back pain.
There has been no official confirmation of an injury but Bavuma will be happy to have the extra points to play as he tries to lead South Africa to a 2-0 series win.