South Africa 128 for 4 (van der Dussen 34*, de Kock 4*, Seales 3-34) lead West Indies 97 (Holder 20, Ngidi 5-19, Nortje 4-35) by 31 runs
Fourteen wickets fell on an eventful first day at St Lucia, where South Africa inched in front aftter dismissing West Indies for their lowest total against South Africa.
Aiden Markram and Rassie van der Dussen put their team in the lead after Anrich Nortje saw West Indies shot out for 97. The visitors, touring the Caribbean for the first time in 11 years, adjusted well to conditions that suited their pace pack.
West Indies were left to rue their decision to bat first, especially as their attack were unable to cause the same problems as South Africa's on a pitch that appeared to flatten as the day wore on. Although the bounce remained true and the carry good, West Indies' attack did not generate the same seam movement as South Africa's, neither did they bowl with the same militaristic discipline, but they took four of the top six with debutant seamer Jayden Seales responsible for three of those wickets.
Seales, playing in just his second first-class game, was the most impressive of the home pack on a day for the quicks that belonged to South Africa's fast men. They impressed with accuracy and aggression and condemned West Indies to only their second sub-100 total since 2004. No West Indies batsman scored more than 20 and no partnership was worth more than 24 in a reflection on South Africa's incisiveness and solid slip catching.
Kagiso 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, Rahkeem Cornwall tried to smash Ngidi over the slip cordon but miscued and 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.
South Africa's reply started inauspiciously when Dean Elgar recorded a duck in his first innings as permanent Test captain. 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 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 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, Keegan Petersen impressed with his tight technique and confident defence and the pair took South Africa to tea.
Petersen only lasted three balls after the break and fell to the first one he faced off fellow newcomer Seales. The teenager, playing in just his second first-class match, started off with good pace and plenty of energy and took the splice of Petersen's bat with the last ball of his first over. Jason Holder took the catch at second slip to give Seales his first Test wicket.
Seales could have had another two overs later when Rassie van der Dussen was given out lbw for 5 but reviewed. Replays showed the ball was missing leg stump by some distance and van der Dussen survived, only to slash Seales through the gully before a more confident pull off Holder.
Markram knuckled down and showed rare glimpses of positive stroke play, such as the backfoot drive off Mayers and the slap through the covers off Cornwall, but it was only when he pulled Seales in front of square to level the scores that he looked properly in control. He brought up his fifty off 99 balls and seemed set to take South Africa to the close but Seales had another burst to come. He forced Markram to play at a ball on fourth stump which took the edge on its way to Joshua da Silva. Markram departed for 60.
That brought another debutant, Kyle Verreynne, to the middle but he could not keep van der Dussen company to the close. Seales got his third when Verreynne flashed at a short ball and got a thick outside edge for da Silva to collect.
South Africa did not send in a nightwatchman but stuck to their usual batting line-up and Quinton de Kock accompanied van der Dussen to the close. With only allrounder Wiaan Mulder to come before the tail, West Indies will be hopeful of keeping South Africa's lead from ballooning beyond their reach and staying competitive in the Test.
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 armbands 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.
"We come from a diverse country. Everyone is entitled to their own choice," Ngidi said at the close. "I have been very clear on my stance. Everyone is happy for everyone. We play for South Africa and that's all we are trying to do as players."

Firdose Moonda is ESPNcricinfo's South Africa correspondent