Ryan Allsop 7
Takes years off your life sometimes with some of his antics with the ball at his feet, but we'll all have to get used to that! Made one nice low save to keep out Elijah Adebayo's header. Couldn't stop either goal.
Mahlon Romeo 7
One or two defensive wobbles but we saw a number of his marauding runs upfield to start attacks. End product needs work but really exciting up until then.
Perry Ng 6
Another relatively solid evening's work for the centre-back, who was unfazed by Luton's giant forward line.
Cedric Kipre 6
Strong in the air and diffused a number of tricky situations with smart work with the ball at his feet. Another good performance from the defender.
Niels Nkounkou 6
Cut and paste what was said for Romeo, really, however his end product does look more threatening. Found Watters with a lovely pass early on to set up a good chance. Let Fred Onyedinma past him for the first goal.
Ryan Wintle 6
Does the things you won't see, but ticked play along very well and stuck a foot in just when Luton looked to break.
Joe Ralls 6
Assured performance from the skipper, who now looks to be hitting his straps this season. Sent in a couple of vicious crosses and hit a stinging shot which narrowly flew over the bar.
Andy Rinomhota 7 (star man)
Was everywhere. Broke up everything in midfield, ran through his opposite number time and time again and was far better in his distribution of the ball than he has been. Best outing in a City shirt.
Sheyi Ojo 6
Can run down blind alleys at times, but always gets you on the edge of your seat when he has the ball at his feet and Cardiff need that to add a bit of spark in the final third. Took too long on the ball late on.
Max Watters 6
An OK display. Hit a rasping low effort early on, which was saved well, and really looked up for the scrap. That goal still eludes him.
Mark Harris 6
Had a chance to stake his claim. Kept the ball really well under copious amounts of pressure. Always offered himself in the area but was often crowded out. Faded after the break though.
Subs:
Rubin Colwill (Ralls 59) 4 - Tried his best, but every pass he made was misplaced and every shot he hit was miles wide. Just a victim of trying too hard.
Jaden Philogene (Watters 59) 5 - Got bullied off the ball once or twice by physical Luton defenders. Had a good chance or two to score but missed them.
Romaine Sawyers (Rinomhota 70) 7 - A fantastic goal once again. Crisp strike from 25 yards.