Clubs
| Club | Seasons | Apps | Goals | Assists |
|---|---|---|---|---|
| Gillingham | 2023/24 – 2025/26 | 112 | 3 | 2 |
| Wales | 2013 – 2023 | 30 | 2 | 1 |
| Swindon | 2021/22 – 2022/23 | 84 | 15 | 9 |
| Charlton | 2018/19 – 2020/21 | 66 | 2 | 5 |
| Cardiff | 2020/21 | 9 | 0 | — |
| Crystal Palace | 2011/12 – 2018/19 | 71 | 1 | — |
| Sunderland | 2017/18 | 13 | 1 | — |
| Sunderland U23 | 2017 | 2 | 0 | — |
| Ipswich | 2013/14 – 2016/17 | 26 | 2 | — |
| MK Dons | 2015/16 | 14 | 0 | — |
| Nottingham | 2015/16 | 10 | 0 | — |
| Wales U21 | 2013 | 3 | 0 | — |
| Wales U19 | 2011 | 5 | 0 | — |
Transfers
| Date | From | To | Type |
|---|---|---|---|
| 1 Jul 2023 | Swindon Town | Gillingham | Free |
| 13 Aug 2021 | Cardiff | Swindon Town | Free |
| 1 Feb 2021 | Charlton | Cardiff | — |
| 4 Jan 2019 | Crystal Palace | Charlton | Free |
| 1 Jul 2018 | Sunderland | Crystal Palace | — |
| 31 Aug 2017 | Crystal Palace | Sunderland | Loan |
| 1 Jul 2017 | Ipswich | Crystal Palace | — |
| 22 Jan 2016 | Crystal Palace | Milton Keynes Dons | Loan |
| 1 Jan 2016 | Nottingham Forest | Crystal Palace | — |
| 26 Mar 2015 | Crystal Palace | Ipswich | Loan |
| 24 Nov 2014 | Ipswich | Crystal Palace | — |
| 29 Sept 2014 | Crystal Palace | Ipswich | Loan |
| 1 Jul 2014 | Ipswich | Crystal Palace | — |
| 27 Feb 2014 | Crystal Palace | Ipswich | Loan |
| 23 Sept 2026 | Gillingham | Eastleigh | Free agent |
Season by season
| Season | Competition | Club | Apps | Starts | Min | Goals | Assists | Yellow | Red | Rating |
|---|---|---|---|---|---|---|---|---|---|---|
| 2025/26 | League Cup | Gillingham | 1 | 1 | 90 | 0 | 0 | 0 | 0 | 6.00 |
| 2025/26 | League Two | Gillingham | 26 | 14 | 1418 | 1 | 0 | 2 | 0 | 6.57 |
| 2024/25 | League Two | Gillingham | 26 | 8 | 970 | 1 | 1 | 2 | 0 | 6.72 |
| 2024/25 | FA Cup | Gillingham | 6 | 4 | 334 | — | 0 | 0 | 0 | 6.64 |
| 2024/25 | EFL Trophy | Gillingham | 3 | 3 | 251 | 0 | 0 | 0 | 0 | 7.07 |
| 2024/25 | League Cup | Gillingham | 1 | 1 | 60 | 0 | 0 | 0 | 0 | 6.20 |
| 2023/24 | League Two | Gillingham | 42 | 31 | 2448 | 0 | 1 | 5 | 0 | 6.81 |
| 2023/24 | League Cup | Gillingham | 2 | 0 | 36 | 0 | — | 0 | 0 | 6.45 |
| 2023/24 | EFL Trophy | Gillingham | 3 | 2 | 200 | 1 | — | 0 | 0 | 7.43 |
| 2023/24 | FA Cup | Gillingham | 2 | 2 | 110 | 0 | — | 0 | 0 | — |
| 2022/23 | League Two | Swindon | 37 | 35 | 2789 | 10 | 2 | 4 | 0 | 7.00 |
| 2022/23 | League Cup | Swindon | 1 | 1 | 62 | 0 | — | 0 | 0 | 7.00 |
| 2022/23 | FA Cup | Swindon | 1 | 1 | 60 | 0 | — | 0 | 0 | — |
| 2022 | UEFA Nations League | Wales | 1 | 1 | 77 | 1 | — | 0 | 0 | 7.30 |
| 2022 | Friendlies | Wales | 1 | 0 | 19 | 0 | — | 0 | 0 | — |
| 2021/22 | League Two | Swindon | 42 | 26 | 2398 | 5 | 6 | 4 | 0 | 6.77 |
| 2021/22 | FA Cup | Swindon | 3 | 2 | 156 | 0 | 1 | 1 | 0 | 6.30 |
| 2021 | Friendlies | Wales | 3 | 2 | 163 | 0 | — | 0 | 0 | — |
| 2020/21 | Championship | Cardiff | 9 | 1 | 174 | 0 | — | 1 | 0 | 6.38 |
| 2020/21 | League One | Charlton | 18 | 7 | 752 | 2 | — | 0 | 0 | 6.54 |
| 2020/21 | League Cup | Charlton | 1 | 1 | 77 | 0 | — | 0 | 0 | 7.20 |
| 2020/21 | FA Cup | Charlton | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2020/21 | EFL Trophy | Charlton | 1 | 1 | 46 | 0 | — | 0 | 0 | — |
| 2020 | World Cup - Qualification Europe | Wales | 3 | 0 | 95 | 0 | — | 0 | 0 | 6.40 |
| 2020 | UEFA Nations League | Wales | 3 | 1 | 92 | 1 | 1 | 1 | 0 | 7.17 |
| 2020 | Friendlies | Wales | 1 | 1 | 73 | 0 | — | 0 | 0 | — |
| 2019/20 | Championship | Charlton | 26 | 15 | 1369 | 0 | 5 | 1 | 0 | 6.66 |
| 2019/20 | FA Cup | Charlton | 1 | 0 | 20 | 0 | — | 0 | 0 | 6.50 |
| 2019 | Friendlies | Wales | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2018/19 | League One | Charlton | 18 | 14 | 1188 | 0 | — | 2 | 0 | 6.80 |
| 2018/19 | League Cup | Crystal Palace | 1 | 1 | 76 | 0 | — | 0 | 0 | — |
| 2018 | World Cup - Qualification Europe | Wales | 1 | 0 | 53 | 0 | — | 0 | 0 | 6.30 |
| 2017/18 | Championship | Sunderland | 12 | 7 | 558 | 1 | — | 1 | 0 | — |
| 2017 | Premier League 2 | Sunderland U23 | 2 | 2 | 170 | 0 | — | 0 | 0 | — |
| 2017/18 | League Cup | Sunderland | 1 | 0 | 27 | 0 | — | 0 | 0 | — |
| 2017/18 | Premier League Asia Trophy | Crystal Palace | 1 | 0 | 15 | 0 | — | 0 | 0 | — |
| 2016/17 | Championship | Ipswich | 8 | 1 | 195 | 0 | — | 0 | 0 | — |
| 2016 | Euro Championship | Wales | 4 | 1 | 140 | 0 | — | 0 | 0 | — |
| 2016 | UEFA European Championship Qualifiers | Wales | 2 | 2 | 168 | 0 | — | 0 | 0 | 6.53 |
| 2016 | Friendlies | Wales | 3 | 2 | 163 | 0 | — | 0 | 0 | — |
| 2015/16 | Championship | MK Dons | 13 | 11 | 784 | 0 | — | 0 | 0 | 6.50 |
| 2015/16 | Premier League | Crystal Palace | 1 | 0 | 10 | 0 | — | 0 | 0 | 6.20 |
| 2015/16 | Championship | Nottingham | 10 | 4 | 384 | 0 | — | 1 | 0 | 6.50 |
| 2015/16 | FA Cup | MK Dons | 1 | 0 | 23 | 0 | — | 0 | 0 | — |
| 2015 | Friendlies | Wales | 1 | 1 | 59 | 0 | — | 0 | 0 | — |
| 2014/15 | Premier League | Crystal Palace | 2 | 0 | 34 | 0 | — | 0 | 0 | — |
| 2014/15 | League Cup | Crystal Palace | 2 | 2 | 155 | 0 | — | 0 | 0 | — |
| 2014 | UEFA World Cup Qualifiers | Wales | 3 | 2 | 189 | 0 | — | 0 | 0 | — |
| 2014 | Friendlies | Wales | 2 | 1 | 88 | 0 | — | 0 | 0 | — |
| 2014/15 | Championship | Ipswich | 5 | 4 | 308 | 1 | — | 0 | 0 | — |
| 2013/14 | Championship | Ipswich | 13 | 11 | 959 | 1 | — | 3 | 0 | — |
| 2013/14 | Premier League | Crystal Palace | 9 | 0 | 179 | 0 | — | 0 | 0 | — |
| 2013/14 | League Cup | Crystal Palace | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2013/14 | FA Cup | Crystal Palace | 1 | 1 | 78 | 0 | — | 0 | 0 | — |
| 2013 | UEFA U21 Championship | Wales U21 | 3 | 3 | 217 | 0 | — | 0 | 0 | — |
| 2013 | Friendlies | Wales | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2012/13 | Championship | Crystal Palace | 32 | 14 | 1324 | 0 | — | 1 | 0 | — |
| 2012/13 | FA Cup | Crystal Palace | 2 | 1 | 156 | 0 | — | 0 | 0 | — |
| 2012/13 | League Cup | Crystal Palace | 1 | 1 | 64 | 0 | — | 0 | 0 | — |
| 2011/12 | Championship | Crystal Palace | 14 | 5 | 601 | 0 | — | 0 | 0 | — |
| 2011/12 | League Cup | Crystal Palace | 4 | 4 | 309 | 1 | — | 0 | 0 | — |
| 2011 | UEFA U19 Championship | Wales U19 | 5 | 3 | 240 | 0 | — | 1 | 0 | — |
Availability history
No injuries or suspensions recorded.
Trophies
No trophies recorded.
