South Africa 30 for 1 (Petersen 19*, Markram 10*, Roach 1-13) trail West Indies 97 (Holder 20, Ngidi 5-19, Nortje 4-35) by 67 runs
Dean Elgar recorded a duck in his first innings as permanent Test captain but South Africa were steady going into the tea break. Aiden Markram and debutant Keegan Petersen have already posted the highest partnership of the match so far.
Elgar left the first four deliveries of South Africa's reply alone but was drawn into playing at the fifth which Kemar Roach pitched fuller than the rest and closer to the off stump. The ball took the outside edge and Jermaine Blackwood took a good catch at third slip, diving to his left.
Roach had hopes of another in his next over when Markram withdrew from his stroke and edged between the wicketkeeper and Rahkeem Cornwall at first slip. Markram also had an appeal for lbw against him, off Roach, turned down; Replays showed an inside edge.
At the other end, Petersen impressed with his tight technique and confident defence. He played the shot of the innings with a wristy flick off the pads off Jason Holder to take South Africa to tea.
Earlier, Lungi Ngidi's second Test five-for and a four-wicket haul from Anrich Nortje saw West Indies dismissed for their lowest total against South Africa.
West Indies have been bowled out for under 100 in Tests just once since 2004 but, in conditions with movement on offer and on a pitch with true bounce, South Africa's attack condemned them to another sub-triple-figure score, to make them question the wisdom of choosing to bat first.
Between them, Nortje, Ngidi and Kagiso Rabada impressed with accuracy and aggression, leaving allrounder Wiaan Mulder and left-arm spinner Keshav Maharaj with a light workload on the opening day. Nortje made the early breakthroughs with three wickets in the morning session while Ngidi led the post-lunch surge, in which South Africa took six wickets in 13.5 overs.
No West Indies batsman scored more than 20 and no partnership was worth more than 24. That is more a reflection on South Africa's incisiveness than the hosts' shot selection, and in most cases, there was little the batters could do against excellent bowling and solid slip catching.
Rabada set the tone and looked back to his menacing best when he beat Kraigg Brathwaite with the new ball on several occasions but did not find the edge. Instead, it was Nortje who struck at the other end. He bowled Shai Hope in the perfect fast bowler's fashion as the ball angled away and hit the top of off stump to break a 24-run opening stand.
Nortje could have had a second wicket off the next ball when he greeted Nkrumah Bonner with a menacing short ball that Bonner appeared to top-edge onto his badge. South Africa reviewed while Bonner had a concussion test. The former was unsuccessful and showed no bat involved and though he was deemed fit to continue, he was reassessed at the end of the innings, and duly replaced by Kieran Powell for the remainder of the contest.
Three balls after Bonner's helmet blow, Nortje bowled Brathwaite with a delivery that jagged back into the West Indian captain and onto the outside of the off stump. While Bonner and Roston Chase spent 65 balls together trying to rebuild, but accumulated just 14 runs. Chase took 25 deliveries to get off the mark, and the pressure told. Bonner was squared up by Rabada and edged to Quinton de Kock before new batter Kyle Mayers tried to pull a Nortje length ball but gifted Rassie van der Dussen a catch at extra cover in the next over on the stroke of lunch.
At that stage, Ngidi had bowled seven overs for 10 runs and had not taken a wicket, but he made up for it after the break. After Jermaine Blackwood played the poorest stroke of the line-up when he hung his bat out to a back-of-a-length Nortje delivery and was caught at gully, Ngidi had success with his first ball of the second chase.
He generated extra bounce to have Roston Chase caught at second slip and four balls later had Joshua da Silva caught low at third slip, after edging a ball that moved away. Four overs later, Rakheem Cornwall tried to smash Ngidi over the slip cordon but miscued and Aiden Markram took the catch running from first slip towards third man. In his next over, Ngidi had \Roach caught behind and four overs after that, finished the innings off when Holder pushed at a ball outside off and was caught at second slip.
Play began with West Indies, as they have done for the last 11 months, taking a knee in support of anti-racism. For the first time since the athlete activist movement began, South Africa opted to give their players individual choice over their gesture after their collective decision last year not to take a knee but to wear armband and raise a fist instead.
Rabada, Ngidi, Keshav Maharaj, Keegan Petersen, Rassie van der Dussen and Kyle Verreynne took a knee. Elgar, Markram, Mulder and Nortje raised a fist while de Kock stood. On the sidelines, South Africa's entire support staff took a knee while one reserve player raised a fist and another stood.