Seamer Lungi Ngidi showed all his guile to take 5-19 as South Africa skittled the West Indies for 97 and seized the initiative on the first day of the first Test in Saint Lucia.
The hosts posted their lowest Test total against South Africa, who reached 4-128 at the close on Thursday - a lead of 31 runs on a wicket that is proving difficult to score on.
Rassie van der Dussen (34 not out) and Quinton de Kock (four not out) will resume on the second day, seeking to steady what has been a brittle top six for the touring side in recent times, after losing the toss.
West Indies' firebrand teenage fast bowler Jayden Seales, who has played only one previous first-class match, accounted for fellow debutant Keegan Petersen (19) in South Africa's innings.
The impressive Seales (3-34) also removed opener Aiden Markram (60), and another debutant Kyle Verreynne (6), all caught behind the wicket, validating his selection in place of the injured Shannon Gabriel.
South Africa's tight lines and nagging length with the ball starved the West Indies of scoring shots as Ngidi and fellow seamer Anrich Nortje (4-35) claimed nine of the wickets to fall.
Nortje also cracked the helmet of batsman Nkrumah Bonner, who went on to make 10 from 32 balls but was later diagnosed with concussion.
He has been replaced in the game by Kieran Powell, who will bat in West Indies' second innings.
Australian Associated Press