He was born in Middlesbrough, England. He made his league debut on 28 December 2009, coming on as a substitute. In doing so, Williams became the youngest Middlesbrough player in over a century, aged just 16 years and 200 days. Williams made his first Middlesbrough start against Coventry City. On 13 May 2010, it was announced that Williams had secured a professional four year contract with Middlesbrough. He scored his first goal for Middlesbrough on 21 August 2012, a long range goal in the 88th minute in a 3–2 win against Burnley. He scored his second goal for Middlesbrough on 15 September, in a 2–0 win against Ipswich Town.
On 23 January 2014, Williams joined Hartlepool United on a one-month loan deal, playing a central-attacking midfield role.