Ryan Allsop 7
Hit an errant pass to Callum O'Dowda early on which almost resulted in him getting lobbed. But made an outstanding save to deny Kasey Palmer after the break and a couple more late on.
Mahlon Romeo 6
Started really brightly and looked to be Cardiff's main attacking outlet on the right. Was forced off in the second half through injury.
Read more: Bluebirds rack up fourth successive draw in Sky Blues stalemate
Perry Ng 7 (star man)
Generally very composed and made a couple of crucial interventions early on. Made one poor pass which put Gustavo Hamer through but apart from that was solid.
Cedric Kipre 7
Had a right old ding-dong with Viktor Gyokeres - with varied success. Booked for a heavy challenge on the striker just before half-time. A bit rash on occasion but City needed his height and strength.
Callum O'Dowda 7
Dovetailed nicely with Colwill on the left and is always careful with the ball in possession. Cut a frustrated figure at those around him at times.
Rubin Colwill 6
Had an early header saved and then bent a free-kick just past the post before the break. Produced a couple of eye-catching moments down the left.
Ryan Wintle 6
Another who ticked things along well but was pickpocketed by Hamer once which led to a dangerous Sky Blues counter.
Joe Ralls 6
Didn't see a great deal of him with the ball at his feet early on but then grew into it. Cardiff will want more productivity going forward from him though.
Andy Rinomhota 6
Made one telling intervention early on when Gyokeres was threatening to break. Broke things up well without being spectacular on the ball. Kind of his game, really.
Jaden Philogene 6
Had to do quite a bit of defensive work, which isn't his game. Showed some fleetness of foot but not as incisive as we have seen him previously. Skied a very good chance to put City ahead in the first half.
Mark Harris 6
A difficult task for him up there on his own and had to feed off scraps. Hit two tame efforts in the first half before teeing up Philogene for a chance he should have done better with. Worked very hard.
Subs
Sheyi Ojo (Colwill 67) 6 - Had to put in a more defensive display and did well enough.
Gavin Whyte (Philogene 67) 5 - Misplaced a couple of paces and lost possession once or twice.
Tom Sang (Romeo 70) 6 - Shored up the defence to ensure Romeo's departure wasn't felt too badly. Another tidy cameo.
Isaak Davies (Harris 84) NA
Jack Simpson (O'Dowda) NA
READ NEXT:
Rubin Colwill gives Mark Hudson a huge nudge with wonder goal against Sunderland
Eight Cardiff City players' contracts are up this season but transfer embargo could have big impact