В том же году Мамай отправил в Нижний Новгород тысячный отряд во главе с Сары-акой (Сарайкой). Очевидно, правитель рассчитывал, что нижегородский князь будет более сговорчив в отношении уплаты денег в Орду. Но Дмитрий Константинович проявил солидарность со своим зятем: татарский отряд был перебит, а Сарайка и его окружение взяты в плен.
В ноябре 1374 г. в Переяславле состоялся княжеский съезд, на котором оформился военный союз князей Северо-Восточной Руси во главе с Дмитрием; в числе прочего князья договорились о совместном противостоянии Мамаю. Отношения с Ордой при этом, скорее всего, строились так, как это зафиксировано в следующем году в договоре Дмитрия с Михаилом Тверским: «А с татары оже будет нам миръ, по думѣ. А будет нам дати выход, по думе же, а будет не дати, по думѣ же. А пойдут на нас татарове или на тебе, битася нам и тобѣ с единого всѣмъ противу их. Или мы пойдем на них, и тобѣ с нами с одиного поити на них». С одной стороны, здесь допускается возможность мирных отношений с Ордой и уплаты выхода. С другойэто первый дошедший до нас факт договорного закрепления обязательств о совместных военных действиях против Орды, причем как оборонительных, так и наступательных.
В марте 1375 г. состоялся еще один княжеский съезд, место проведения которого неизвестно. Во время него Василий, сын Дмитрия Нижегородского, решил ужесточить содержание Сарайки и его людей; татары попытались сопротивляться (у них не было отнято оружие) и были перебиты.
В ответ на избиение посольства отряды Мамая повоевали нижегородские волостиКиш и Запьянье.
Тем временем к Михаилу Тверскому перебежали Иван Васильевич, сын последнего московского тысяцкого Василия Вельяминова (Василий умер в 1374 г., и Дмитрий упразднил после этого должность тысяцкоговторого после князя лица в стольном городе) и Некомат Сурожанин. Михаил отправил их в Орду, и вскоре оттуда пришел посол Ачихожа с ярлыком тверскому князю на великое княжение владимирское. В ответ на Тверь, двинулось невиданное по масштабам войско. Перечень участвовавших в походе князей дает возможность определить круг участников Переяславского съезда, т. е. князей, признававших верховенство Москвы. Это (помимо самого Дмитрия Ивановича и его двоюродного брата Владимира Андреевича Серпуховского) суздальско-нижегородский князь Дмитрий Константинович, его сын Семен и братьяБорис и Дмитрий Ноготь, ростовские князья Андрей Федорович и Василий и Александр Константиновичи, князь Иван Васильевич из смоленской ветви (правивший в Вязьме), ярославские князья Василий и Роман Васильевичи, белозерский князь Федор Романович, кашинский князь Василий Михайлович (перешедший на сторону Москвы), моложский князь Федор Михайлович, стародубский князь Андрей Федорович, князь Роман Михайлович Брянский (Брянском он тогда уже не владел, тот был в руках Ольгерда), новосильский князь Роман Семенович, оболенский князь Семен Константинович и его брат тарусский князь Иван. Таким образом, сюзеренитет Дмитрия Ивановича признавали не только все княжества Северо-Восточной Руси (кроме Тверского за исключением его кашинского удела), но также князья трех верхнеокских княжеств Черниговской земли (Новосильского, Оболенского и Тарусскаго), Роман Михайлович, считавшийся великим князем черниговским, и вяземский князь.
В результате похода Михаил Тверской признал себя «молодшим братом» Дмитрия Ивановича, а великое княжениеего «отчиной»: «А вотчины ти нашие Москвы, и всего великого княженья, и Новагорода Великого, блюсти, а не обидѣти. А вотчины ти нашие Москвы, и всего великого княженья, и Новагорода Великого, под нами не искати, и до живота, и твоим дѣтем, и твоим братаничем». Он также отказался от сюзеренитета над Кашинским княжеством, взял на себя обязательство по совместным с Москвой действиям в отношении Орды (см. выше) и отказался впредь принимать ярлыки от татар на великое княжение (в обмен на обязательство Дмитрия не делать того же в отношении Твери).
Ответом Мамая был удар по союзникам Москвы: в конце 1375 г. его отряды вновь повоевали Запьянье и разорили Новосильстолицу князя Романа Семеновича. В 1376 г. великий князь «ходилъ за Оку ратию, стерегася рати тотарьское».
В начале 1377 г. соединенные силы Московского и Нижегородского княжеств (московскую рать возглавлял Дмитрий Волынский, нижегородскуюсыновья Дмитрия Константиновича Василий и Иван) отправились в поход на Волжскую Болгарию (один из улусов Орды). Здесь правителями были Асан и Махмат-Салтан (остается неясным, были ли они в 1377 г. зависимы от Мамая или самостоятельны). Татарские князья вынуждены были капитулировать, выплатить контрибуцию (2000 рублей двум великим князьям и 3000«воеводам и ратемъ») и принять «даругу» (сборщика дани) и таможенника. Волжская Болгария, таким образом, оказывалась в зависимости от Нижнего Новгорода и Москвы.
Очевидно, что в отношении ордынских «князей» великий князь московский действовал так же, как в отношении русских князей. Фактически он попытался как бы занять в отношении первых место, какое занимал правитель Орды. Тем самым великий князь ставил себя на один уровень с Мамаем, семью годами ранее приводившим Волжскую Болгарию (с помощью нижегородских войск) к покорности.
Летом того же года московско-нижегородское войско (московскую часть возглавляли воеводы, нижегородскуюИван Дмитриевич), ожидая нападения пришедшего из Заволжья независимого от Мамая «царевича» Арабшаха (Арапши), пропустило удар татар из Мамаевой Орды и потерпело тяжелое поражение на реке Пьяне, вслед за чем ордынцы разорили Нижний Новгород. В том же году Арабшах повоевал Засурье.
Воодушевленный успехом, Мамай летом 1378 г. решил нанести удар непосредственно по Московскому княжеству, направив на Дмитрия Ивановича сильное войско под командованием Бегича. 11 августа на реке Воже, в пределах Рязанской земли, московско-рязанское войско нанесло Мамаевым татарам сокрушительное поражение. По-видимому, русские войска состояли только из великокняжеских и рязанских полков: в бою центром командовал сам великий князь, флангамиего окольничий Тимофей и князь Даниил Пронский. Несколько ранее, в конце июля, ордынцам вновь удалось разорить Нижний Новгород.
В отместку за поражение на Воже Мамай напал в том же году на Рязанскую землю. Ее столица Переяславль-Рязанский была сожжена, а князь Олег Иванович спасся, бежав за Оку.
12 февраля 1378 г. умер митрополит Алексей, выходец из московских бояр, поддерживавший все начинания Дмитрия. Преемником его должен был стать болгарин Киприан, еще в 1375 г. поставленный в Константинополе в митрополиты русских земель, входивших в состав Великого княжества Литовского, с тем чтобы после смерти престарелого Алексея объединить под своей юрисдикцией всю Русь. Однако Дмитрий не принял Киприана: по прибытии в Москву митрополит был арестован и выслан. Великий князь захотел поставить митрополитом своего духовника Митяя (Михаила), лишь недавно, в 1376 г., по воле Дмитрия поставленного в архимандриты кремлевского Спасского монастырядо этого Митяй был священником. Желание Дмитрия иметь своего человека на митрополичьем престоле, грозившее разделением митрополии (епархии, находившиеся на территории Великого княжества Литовского, могли остаться под юрисдикцией Киприана), встретило оппозицию со стороны видных представителей духовенстваепископа Дионисия Суздальского, игуменов Сергия Радонежского и Феодора Симоновского. Тем не менее, летом 1379 г. Дмитрий отправил Митяя в Константинополь на поставление. Однако в пути претендент умер, и члены посольства по своей воле добились у патриарха и Священного собора поставления в митрополиты одного из сопровождавших Митяя иерарховпереяславского архимандрита Пимена. Это было уже в июне 1380 г., когда близилась развязка конфликта с Мамаем.
К лету 1380 г. Мамай основательно подготовился к решающей схватке с Москвой. Не надеясь после Вожи только на собственные силы, он заключил союз с новым великим князем литовским Ягайло Ольгердовичем. Власть Мамая признал Олег Иванович Рязанский, видимо, желая избежать нового разгрома своего княжества. В то же время он предупредил Дмитрия Ивановича о выступлении Мамая. Дмитрий также готовился к схватке. Зимой 13791380 гг., когда уже было известно о союзе Мамая с Ягайло, он направил войска на Северскую землю, входившую в состав Великого княжества Литовского. Местный князь Дмитрий Ольгердович, старший брат Ягайло, со своими боярами перешел на сторону Москвы и получил в держание Переяславль-Залесский. Еще ранее, в 1378 г., на службу к Дмитрию Ивановичу перешел самый старший из ОльгердовичейАндрей (старшие сыновья умершего в 1377 г. грозного литовского правителя были недовольны передачей престола Ягайлосыну Ольгерда от второго брака, с Ульяной Тверской).
В начале кампании, когда Мамай с войском кочевал за Доном, а Дмитрий находился в Коломне, Мамаевы послы привезли требование платить выход, как при хане Джанибеке (сыне Узбека), «а не по своему докончанию. Христолюбивый же князь, не хотя кровопролитья, и хотѣ ему выход дата по крестьяньскои силѣ и по своему докончанию, како с ним докончалъ. Он же не въсхотѣ». Под «своим докончаньем» имелось в виду соглашение, заключенное Дмитрием с Мамаем во время личного визита в Орду в 1371 г. Но Мамай, рассчитывая на перевес в силах, не уполномочил своих послов идти на уступки.
В походе против Мамая приняли участие, по-видимому, большинство князей, ходивших в 1375 г. на Тверь. Исключение составили суздальско-нижегородские князья, чьи владения дважды подверглись разорению в предшествующие годы, князья устюжские (очевидно, не успевшие прийти из-за отдаленности своих владений), и вместо новосильского князя, озабоченного обороной своих владений от двигавшихся через них на соединение с Мамаем войск Ягайло, к Дмитрию присоединился отряд во главе с его сыном.
Русское войско, стремясь не допустить соединения Мамая с Ягайло, выдвинулось в верховья Дона. Впервые за время ордынской власти была взята на вооружение наступательная стратегия. Более того, 7 сентября Дмитрий принял решение перейти на правый берег Дона близ устья Непрядвы, т. е. отказаться от удобной позиции, прикрытой от противника Доном. Тем самым он вынудил Мамая вступить в бой до подхода Ягайло (который бы резко изменил соотношение сил).
8 сентября ордынские войска атаковали русские порядки. Дмитрий принял участие в первой же схватке в составе сторожевого полка. Согласно летописной повести, составленной в 10-е или 20-е гг. XV в., приближенные великого князя советовали ему не участвовать непосредственно в бою, на что Дмитрий ответил: «Да како азъ възглаголю: братьа моа, да потягнемъ вси съ единого, а самъ лице свое почну крыти и хоронитиоя назад? Не могу в томъ быти, но хощу яко же словомъ, такожде и дѣломъ напреди всѣхъ и предъ всими главу свою положити за свою братью и за вся крестьяны, да и прочыи, то видѣвше, приимоуть съ усердиемъ дръзновение».
Сторожевой полк вынужден был отступить, и Дмитрий продолжал сражаться в составе «великого» полка. Великому князю досталось множество ударов по голове и туловищу, но доспехи защитили его от ран. Ордынская конница постепенно стала теснить русское войско, однако удар засадного полка во главе с Владимиром Андреевичем Серпуховским и Дмитрием Михайловичем Боброком-Волынским решил исход сраженияпосле его вступления в бой главные московские силы перешли в контрнаступление, и татары обратились в бегство. Поражение Мамаевой Орды было полным, но потери с русской стороны оказались огромны. Погибли, в частности, пять князей и множество воевод.
Бежав с поля битвы, Мамай собрал «останочную свою силу, еще въсхотѣ ити изгономъ пакы на великаго князя Дмитрея Ивановича и на всю Русскую землю», но вынужден был выступить против воцарившегося (с помощью Тимура) в заволжской части Орды Тохтамыша. Эмиры Мамая перешли на сторону нового хана, временщик бежал и был вскоре убит.
Противостояние Московского великого княжества и Мамаевой Орды завершилось крахом последней. Дмитрий Донской не позволил Мамаю восстановить власть над русскими землями. Но другим, невольным результатом Куликовской победы стало нарушение существовавшего почти 20 лет неустойчивого равновесия между двумя частями Ордызападной (Мамаевой) и восточной (Заволжской): разгром Мамая способствовал объединению их под властью законного хана. Объективно более всего конкретной политической выгоды от поражения Мамая на Куликовом поле получил Тохтамыш.
В самом конце 1380 г. Тохтамыш прислал послов к Дмитрию и другим русским князьям, «повѣдая имъ свои приходъ и како въцарися, и како супротивника своего и ихъ врага Мамая победи». Зимой и весной 1381 г. русские князья, отпустив послов «съ честию и съ дары», «отъпустиша коиждо своих киличеевъ со многими дары ко царю Токтамышю»; в том числе Дмитрий Иванович «отъпустилъ въ Орду своихъ киличеевъ Толбугу да Мохшѣя къ новому царю съ дары и съ поминкы». Посылка новому, легитимному правителю («царю») «даров и поминков» означала констатацию факта восстановления в Орде «нормальной» ситуации и формальное признание Тохтамыша сюзереном. Но вопрос о выплате задолженности по дани«выходу», накопившейся за шесть лет противостояния с Мамаем, московская сторона не собиралась поднимать («дары и поминки»не «выход»), Дмитрий не спешил восстанавливать даннические отношения с Ордой, но в то же время не имел оснований не признать царское достоинство (и, следовательно, формальное верховенство) нового правителя Орды, к тому же только что добившего его врага. Великий князь занял выжидательную позицию.
Узнав о поставлении в митрополиты Пимена вместо умершего Митяя, Дмитрий решил примириться с Киприаном, желая сохранить влияние на западнорусские епархии (по патриаршему решению они оставались за Киприаном, и принятие Пимена означало раскол митрополии). В мае 1381 г. Киприан въехал в Москву, в то время как Пимен по возвращении на Русь был отправлен в ссылку в Чухлому.
Летом 1381 г. Дмитрий восстановил союзнические отношения с Олегом Рязанским: тот, подобно Михаилу Тверскому в 1373 г., признал себя «молодшим братом» Дмитрия и равным«братом»Владимиру Андреевичу Серпуховскому.
Тем же летом на Русь отправился посол Тохтамыша Акхожа с отрядом в 700 человек. Он дошел до Нижнего Новгорода «и возвратися воспять, а на Москву не дръзнулъ ити». Причиной появления посольства было, скорее всего, то, что приспело время получить «выход» за 1380 г. (в котором Тохтамыш, владея заволжской частью Орды, уже был вправе считать себя ханом). Однако в Нижнем к Акхоже поступила, по-видимому, информация, что Дмитрий Иванович не настроен выплачивать дань; посол вернулся и доложил Тохтамышу о сложившейся ситуации, после чего хан и стал готовиться к военным действиям. Его поход не был местью за поражение Мамая на Куликовом поле (хотя среди бывших Мамаевых татар, вошедших в войска Тохтамыша, такой мотив наверняка имел место), поскольку, разгромив узурпатора, Дмитрий фактически оказал (не желая того, разумеется) Тохтамышу услугу, облегчив ему приход к власти, и гневаться хану было не на что; только когда Тохтамыш понял, что воодушевленные Куликовской победой москвичи не собираются выполнять вассальные обязательства (при том, что формально великий князь признал хана сюзереном), он решил прибегнуть к военной силе, чтобы заставить Дмитрия соблюдать их.
Тохтамышу удалось обеспечить внезапность нападения. Князь Дмитрий Константинович Нижегородский, узнав о приближении хана, отправил к нему своих сыновей Василия и Семена. Олег Рязанский указал Тохтамышу броды на Оке. Дмитрий Иванович покинул Москву и отправился в Кострому. Тохтамыш взял и сжег Серпухов и подошел 23 августа 1382 г. к столице. Оборону возглавлял литовский князь Остей, внук Ольгерда (он сумел прекратить беспорядки, возникшие в Москве после отъезда великого князя). После трехдневной безуспешной осады Тохтамышу удалось обманом выманить Остея из города (ханские послы поклялись, что Тохтамыш не собирается разорять Москву, что его цельнайти Дмитрия; справедливость этих слов подтвердили находившиеся в войске хана суздальско-нижегородские князья), после чего он был убит, а татары ворвались в Москву и подвергли ее разгрому. После этого Тохтамыш распустил свои отряды по московским владениям: к Звенигороду, Волоку, Можайску, Юрьеву, Дмитрову и Переяславлю. Но взять удалось только последний. Отряд, подошедший к Волоку, был разбит находившимся там Владимиром Андреевичем Серпуховским. После этого Тохтамыш покинул Москву и двинулся восвояси, по дороге взяв Коломну. Переправившись через Оку, он разорил Рязанскую землю; Олег Рязанский бежал.
Мотивы поведения Дмитрия Донского, а именно оставления им столицы, вызвали противоречивые оценки в историографии: мнения колеблются от признания отъезда необходимым тактическим маневром, имеющим целью сбор войск, до объявления его позорным бегством.