Clubs
| Club | Seasons | Apps | Goals | Assists |
|---|---|---|---|---|
| Northampton | 2025/26 – 2026/27 | 25 | 0 | 1 |
| Oxford | 2019/20 – 2025/26 | 242 | 12 | 11 |
| OH Leuven | 2017/18 – 2018/19 | 55 | 8 | — |
| Leicester | 2016/17 – 2017/18 | 1 | 0 | — |
| Leicester City U23 | 2016 – 2017 | 22 | 2 | — |
| England U18 | 2017 | 2 | 0 | — |
Transfers
| Date | From | To | Type |
|---|---|---|---|
| 1 Aug 2019 | Leicester | Oxford United | — |
| 18 Aug 2017 | Leicester | OH Leuven | Loan |
| 30 Aug 2025 | Oxford United | Moore Elliott | Free agent |
| 30 Aug 2025 | Oxford United | Northampton | Free agent |
| 9 Jan 2026 | Oxford United | Northampton | Free agent |
Season by season
| Season | Competition | Club | Apps | Starts | Min | Goals | Assists | Yellow | Red | Rating |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026/27 | League Cup | Northampton | 1 | 1 | 99 | 0 | 0 | 0 | 0 | 6.30 |
| 2026/27 | EFL Trophy | Northampton | 1 | 1 | 90 | 0 | 0 | 0 | 0 | 6.60 |
| 2026/27 | League Two | Northampton | 10 | 10 | 900 | 0 | 1 | 0 | 0 | 7.10 |
| 2025/26 | League Cup | Oxford | 2 | 1 | 101 | 0 | 0 | 0 | 0 | 5.90 |
| 2025/26 | Championship | Oxford | 2 | 2 | 156 | 0 | 0 | 0 | 0 | 6.60 |
| 2025/26 | League One | Northampton | 13 | 12 | 1097 | 0 | 0 | 3 | 0 | 6.53 |
| 2024/25 | Championship | Oxford | 26 | 25 | 2065 | 1 | 2 | 7 | 0 | 6.90 |
| 2024/25 | League Cup | Oxford | 1 | 0 | 29 | — | 0 | 0 | 0 | 6.20 |
| 2023/24 | League One | Oxford | 42 | 42 | 3780 | 2 | 3 | 5 | 0 | 7.13 |
| 2023/24 | League Cup | Oxford | 1 | 1 | 90 | 0 | — | 0 | 0 | 6.30 |
| 2023/24 | FA Cup | Oxford | 2 | 2 | 180 | 0 | — | 0 | 0 | — |
| 2023/24 | EFL Trophy | Oxford | 1 | 0 | 18 | 0 | — | 0 | 0 | 6.90 |
| 2022/23 | League One | Oxford | 36 | 36 | 3240 | 1 | 1 | 7 | 0 | 7.08 |
| 2022/23 | EFL Trophy | Oxford | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2022/23 | FA Cup | Oxford | 3 | 3 | 270 | 0 | — | 1 | 0 | 6.30 |
| 2022/23 | League Cup | Oxford | 1 | 1 | 90 | 0 | — | 0 | 0 | 6.70 |
| 2021/22 | League One | Oxford | 31 | 31 | 2710 | 1 | — | 6 | 0 | 6.92 |
| 2021/22 | EFL Trophy | Oxford | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2021/22 | League Cup | Oxford | 1 | 1 | 90 | 0 | — | 0 | 0 | 6.20 |
| 2021/22 | FA Cup | Oxford | 2 | 1 | 120 | 0 | — | 0 | 0 | — |
| 2020/21 | League One | Oxford | 48 | 48 | 4320 | 5 | 4 | 5 | 0 | 6.99 |
| 2020/21 | FA Cup | Oxford | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2020/21 | EFL Trophy | Oxford | 3 | 3 | 270 | 0 | — | 0 | 0 | 7.03 |
| 2020/21 | League Cup | Oxford | 2 | 2 | 180 | 0 | — | 0 | 0 | 7.25 |
| 2019/20 | League One | Oxford | 23 | 15 | 1534 | 1 | 1 | 1 | 0 | 6.75 |
| 2019/20 | League Cup | Oxford | 5 | 5 | 450 | 1 | — | 1 | 0 | 6.86 |
| 2019/20 | EFL Trophy | Oxford | 2 | 2 | 180 | 0 | — | 0 | 0 | — |
| 2019/20 | FA Cup | Oxford | 5 | 4 | 390 | 0 | — | 0 | 0 | 6.85 |
| 2018/19 | Challenger Pro League | OH Leuven | 28 | 28 | 2503 | 5 | — | 6 | 0 | — |
| 2018/19 | Cup | OH Leuven | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2017/18 | Challenger Pro League | OH Leuven | 24 | 24 | 2160 | 2 | — | 2 | 0 | — |
| 2017 | Premier League 2 | Leicester City U23 | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2017/18 | Cup | OH Leuven | 2 | 2 | 210 | 1 | — | 1 | 0 | — |
| 2017/18 | Premier League Asia Trophy | Leicester | 1 | 0 | 44 | 0 | — | 0 | 0 | — |
| 2017 | Tournoi Maurice Revello | England U18 | 2 | 1 | 112 | 0 | — | 0 | 0 | — |
| 2016 | Premier League 2 | Leicester City U23 | 19 | 19 | 1710 | 2 | — | 3 | 0 | — |
| 2016 | EFL Trophy | Leicester City U23 | 2 | 1 | 134 | 0 | — | 0 | 0 | — |
| 2016/17 | UEFA Youth League | 5 | 5 | 427 | 1 | — | 0 | 0 | — |
Availability history
| Reason | From | Until | Days |
|---|---|---|---|
| Unknown | 10 Aug 2025 | 12 Aug 2025 | 2 |
| Hamstring | 13 Mar 2025 | 17 Apr 2025 | 35 |
| Groin Injury | 5 Jan 2025 | 11 Feb 2025 | 37 |
Trophies
| Competition | Season | Place |
|---|---|---|
| Piala Presiden (Indonesia) | 2025 | 2nd Place |
| Tournoi Maurice Revello (World) | 2017 | Winner |
| Premier League Asia Trophy (World) | 2017 | 2nd Place |
