Cresciuto nel Rimini come centrocampista e poi trasformato in difensore centrale, entra a far parte del settore giovanile della Juventus nel 2011.
Nel 2013 viene promosso alla squadra Primavera, della quale arriverà ad indossare la fascia di capitano. Nel 2016, sotto la guida di Fabio Grosso, trionfa al Torneo di Viareggio, grazie alla vittoria per 3-2 contro il Palermo e raggiunge le finali di Coppa Italia e campionato. Il 29 agosto 2016 passa, in prestito con diritto di opzione, al Novara, in Serie B.
Il 31 gennaio 2017, dopo mezza stagione, passa nuovamente in prestito al Brescia, dove ottiene 14 presenze in campionato.
Nel 2016 con l’Under-19 partecipa, da capitano, all’Europeo Under-19, terminato col secondo posto. Il 28 luglio 2017 viene acquistato a titolo definitivo dal Cagliari, con cui firma un contratto quinquennale. Con l’Under-20 partecipa al Mondiale Under-20 2017 in Corea del Sud, dove l’Italia ottiene il terzo posto.
Esordisce in Serie A il 17 settembre 2017, a 20 anni, entrando al 90º della partita SPAL-Cagliari (0-2) disputata allo stadio Mazza di Ferrara. Conclude la sua prima stagione in Serie A con 23 presenze in campionato. Il 2 settembre 2019 viene ingaggiato dal Sassuolo a titolo temporaneo. Con l’allenatore Roberto De Zerbi ottiene 18 presenze in campionato fino alla gara del 9 marzo 2020 contro il Brescia, alla 26ª giornata, nella quale si procura la rottura del tendine rotuleo sinistro