Jest wychowankiem FC Zürich. W czasach juniorskich trenował także w BC Albisrieden. 1 lipca 2015 został piłkarzem Borussii Mönchengladbach, trafiając od razu do czwartoligowej drużyny rezerw. Przed rozpoczęciem sezonu 2016/2017 został włączony do pierwszego zespołu[1]. W Bundeslidze zadebiutował 29 kwietnia 2017 w wygranym 2:1 meczu z 1. FSV Mainz 05[2]. Do gry wszedł w 93. minucie, zastępując Larsa Stindla[3]. 1 lipca 2017 odszedł za 2 miliony euro do berneńskiego BSC Young Boys[1]. W rozgrywkach Swiss Super League zagrał po raz pierwszy 22 lipca 2017 w wygranym 2:0 spotkaniu z FC Basel[2]. Grał w nim od 59. minuty, gdy zmienił Michela Aebischera[4]. W sezonie 2017/2018 wraz z klubem zdobył mistrzostwo kraju[5]. 1 lipca 2019 odszedł za 9 milionów euro do Eintrachtu Frankfurt[1].