Летом 1373 года темник Мамай – фактический правитель половины Золотой Орды при марионеточном хане Бедирбеке, зятем которого он был, – совершил опустошительный набег на Рязанское княжество. Дмитрий не стал помогать рязанцам, не собиравшимся подчиняться Москве, остановив свои войска на московской границе.
В 1375 году в Орде побывал соратник Ивана Вельяминова богатый московский купец Некомат, который получил в Орде ярлык на великое княжение для Михаила Тверского, купив его за большие деньги. В ответ Дмитрий созвал съезд князей в Переяславле. Там было решено собрать общерусское войско, которое двинулось против Твери. Осада города началась 5 августа 1375 года. В походе на Тверь участвовало 20 князей. После трехнедельной осады Тверь капитулировала. Дмитрий, однако, счел преждевременным присоединение Тверского княжества к московским владениям. Согласно заключенному мирному договору Михаил обязался признать старшинство московского князя, вместе с ним участвовать в военных походах, не добиваться более великого княжения и отказаться от союза с Литвой. Тверь также вынуждена была заключить с Москвой вечный союз против Орды.
Иван Вельяминов и Некомат были позднее схвачены московскими властями, а их имущество конфисковано. 30 августа 1379 года их казнили в Москве на Кучковом поле. Эта была первая публичная казнь в Московском княжестве. Она символизировала право князя расправляться с любым подданным, независимо от его знатности.
В том же 1375 году произошел фактический разрыв отношений Москвы с Ордой. Князь Дмитрий отказался платить Мамаю дань в требуемом размере, как платили при ханах Узбеке и Джанибеке. Мамаевы татары пограбили Нижегородское княжество. Московские и нижегородские полки в ответ захватили татарский город Булгар, вернувшись оттуда с богатой добычей.
В 1377 году татары во главе с Араб-шахом, из заволжской половины Золотой Орды, что не подчинялась Мамаю (ее называли также Синей Ордой), разбили русские войска на реке Пьяне и захватили и сожгли Нижний Новгород.
В феврале 1378 года скончался верный сторонник и главный политический советник Дмитрия митрополит Алексий. В августе 1378 года московское и рязанское войска разгромили на реке Вожже карательную экспедицию мурзы Бегича, посланную на Русь Мамаем. В ответ на поражение Бегича Мамай с большим войском обрушился на Рязанское княжество, откуда уже ушла московская рать. Столица Рязанского княжества Переяславль-Рязанский была взята татарами, рязанский князь Олег вынужден был бежать.
В августе 1380 года Дмитрий во главе объединенного русского войска (правда, на этот раз отсутствовали войска Рязанского и Тверского княжеств) выступил в поход против Мамая. Поход благословил Сергий Радонежский, предрекший победу русскому войску. Перед боем Дмитрий призвал воинов постоять за землю русскую. Он передал руководство сражением воеводе литовцу Дмитрию Боброку-Волынскому и своему двоюродному брату серпуховскому князю Владимиру Андреевичу, а сам переоделся в одежду простого воина. Это было сделано для того, чтобы в случае гибели великого князя о ней не узнали бы ни русские воины, ни татары и это событие, таким образом, не деморализовало бы первых и не воодушевило вторых. Мамай был разбит 8 сентября 1380 года в Куликовской битве, за победу в которой князь Дмитрий был назван Донским. Вскоре после этого Мамай был свергнут претендентом на золотоордынский престол ханом Тохтамышем, впервые за полтора десятилетия объединившим под своей властью всю Золотую Орду. Мамай узнал о нападении Тохтамыша в разгар Куликовской битвы и вынужден был поспешно прекратить ее, что немало способствовало победе московского войска. После Куликовской битвы Олег Рязанский, опасаясь похода войска Дмитрия, бежал из своего княжества, а рязанцы заявили о своей покорности Москве.
Когда Дмитрий отказался платить дань Тохтамышу, тот совершил в 1382 году большой поход на Русь, захватил и сжег Москву и ряд других городов, в том числе Серпухов и Переяславль, а на обратном пути в очередной раз разграбил Рязанское княжество. Дмитрий не имел времени собрать войско с других русских земель. Он понимал безнадежность сражения с Тохтамышем в открытом поле и предпочел покинуть Москву вместе с основной частью своей дружины. Погибло до 24 тысяч москвичей, тысячи были уведены в плен. Бежавший из Москвы в Кострому Дмитрий вынужден был возобновить выплату дани, сохранив благодаря этому великокняжеский престол, и отправить в ханскую столицу Сарай заложником своего старшего сына Василия, который удерживался до взимания с Москвы долга в 8 тысяч рублей. Дань стала более тяжелой, чем прежде, поскольку включала также все недоимки прошлых лет и теперь выплачивалась не только серебром, но и золотом. Дмитрий теперь безоговорочно исполнял любые требования Тохтамыша, и тот в 1383 году отдал ему ярлык на великое княжение, предпочтя его суздальским и тверским князьям, также добивавшимся великого княжения. Михаилу Тверскому помешала достичь успеха, в частности, его тесная связь с Литвой, ставшей одним из главных врагов Тохтамыша.