Hofmann began his club career in 1998 playing at FC Rot in the municipality of St. Leon-Rot and remained there until the end of the 2003–2004 season, before he moved to 1899 Hoffenheim in the 2004–2005 season. Hofmann debuted for TSG 1899 Hoffenheim second team in a 1–0 victory in April 2011 during the 2010–2011 season. At the end of the 2010–2011 season playing for TSG 1899 Hoffenheim II, Hofmann made five league appearances, in which he scored two goals.
In the 2011–2012 season, Hofmann signed a contract for Borussia Dortmund until 30 June 2015; and inducted into Borussia Dortmund II for 2011–2012 season. Hofmann debuted for Borussia Dortmund II and in the black-and-yellow kit of BVB on 6 August 2011 in a 2–0 away victory over 1. FC Kaiserslautern II and immediately scored his first goal of the 2011–2012 season. On 10 September 2011, Hofmann succeeded in scoring two goals in a 4–0 away victory over the second team of Schalke 04. In the 2012–2013 Bundesliga season, Hofmann was inducted into the Borussia Dortmund first team. Hofmann debuted for Borussia Dortmund first team in the 2012–2013 Bundesliga season on 16 December 2012, in BVB's 3–1 away victory over TSG 1899 Hoffenheim, where he came on as substitute in the 89th minute. On 16 April 2012, Hofmann started his first match in the Bundesliga in the 2012–2013 Bundesliga season, where he was credited with an assist to Julian Schieber to score an equalizing goal tap-in finish for a 2–2 scoreline in BVB's 4–2 home victory over FC Augsburg. On 27 July 2013, Hofmann won the 2013 DFL-Supercup with Dortmund 4–2 against rivals Bayern Munich. Hofmann's first goal for Borussia Dortmund came on 18 August 2013 in a BVB victory; the opening goal against Eintracht Braunschweig at BVB's Signal Iduna Park, after coming on as a substitute in the second half of the second round of 2013–2014 Bundesliga. On 12 April2014, Hofmann scored the third goal as Dortmund defeated Bayern Munich 3–0 at the Allianz Arena. On 13 August 2014, he played in the 2014 Super Cup. During the summer transfer window of 2014, Borussia Dortmund agreed to a year-long loan deal for Hofmann that would send him to 1. FSV Mainz 05 until 30 June 2015. He was injured for most of the 2014-15 season and scored 3 goals in 12 games for Mainz, before returning to Dortmund. On 30 July 2015, Hofmann scored his first European goal in a 1–0 win over Austrian side Wolfsberger AC in the first leg of the Europa League third qualifying round.
Borussia Mönchengladbach
It was announced on 29 December 2015 that Hofmann would join Borussia Mönchengladbach on 1 January 2016, signing a four-year deal until 2020. After only joining Gladbach during the winter break, he made his debut for the club on 23 January 2016 in a 1–3 loss to former club Dortmund. Hofmann scored his first goal for the club in a Round of 16 match in the UEFA Europa League against fellow German side Schalke on 9 March 2017. The game ended in a 1–1 draw with Gladbach eventually going out on away goals after the two-legged tie finished 3–3. On 18 October 2018, Hofmann scored his first ever professional hat-trick in a 4–0 league win over former club Mainz. Hofmann signed a new deal with Gladbach on 16 April 2019,, extending his stay at the club until 2023.