Решено было атаковать Мамая до соединения его с Ягайлом[27]. Тотчас же приступили к постройке мостов для пехоты, конница же пошла вброд, и к утру армия переправилась через Дон и расположилась при впадении Непрядвы в Дон, на Куликовом поле. Татары тоже торопились к переправам, но к ночи с 7 на 8 сентября стали на отдых у р. Смолки, в 7–8 верстах от армии Дмитрия. Силы армии Мамая были не слабее русской рати.
Утром 8 сентября русская рать, скрытая туманом, несколько продвинулась вперед и начала строиться правым флангом к оврагу р. Нижнего Дубика, а левым – к верховьям р. Смолки. Поле, слегка всхолмленное, было удобно для действия конницы, а фланги обеспечены; единственное неудобство представляли в тылу реки и переправа через Дон за левым флангом. В девятом часу утра туман начал рассеиваться, а между тем армия Дмитрия построилась в следующем порядке: полк правой руки Андрея Ольгердовича примкнул к оврагу Нижнего Дубика; полк левой руки князей Белозерских примкнул левым флангом к реке Смолке; в центре стал большой полк, в состав которого вошли и войска Глеба Брянского; передовой полк из большей части пехоты, дружины Вельяминова 2-го и сторожевого отряда Мелика, стал впереди; Дмитрий Ольгердович стал в частном резерве за левым флангом большого полка; наконец, засадный полк (общий резерв) из отборной конницы князя Владимира Андреевича и боярина Дмитрия Михайловича Волынского-Боброка расположился за левым флангом всего боевого порядка, укрывшись за густою «зеленою дубравою».
Татары выстроились параллельно русской армии, но без резервов. В 11 часов утра обе армии двинулись навстречу друг другу и, сойдясь на близкое расстояние, остановились. Тут произошло единоборство татарского богатыря Темир-мурзы с иноком Пересветом, причем оба они пали, что и послужило сигналом к общему бою. Татары направили главный удар на центр русской рати, смяли передовой полк, в рядах которого сражался князь Дмитрий, а затем атаковали большой полк, опрокинули московскую дружину и подрубили великокняжеский стяг (знамя), но начальствовавшие в центре Глеб Брянский и Вельяминов 2-й привели большой полк в порядок и удержались на месте. Полк правой руки в это время отбил татар, но не преследовал, чтобы не оторваться от большого полка.
Сильную атаку повели татары на полк левой руки, который держался до тех пор, пока не были убиты князья Белозерские, а затем начал отступать. Это отступление грозило опасностью большому полку, который мог быть охвачен с левого фланга и тыла, но частный резерв Дмитрия Ольгердовича, переменив фронт налево, прикрыл фланг большого полка. Впрочем, опасность еще вполне не миновала: прорвавшись на левом крыле в тыл, татары отрезывали русскую армию от мостов через Дон и угрожали опрокинуть их в Непрядву. В свою очередь они подставляли свой фланг и тыл под удары засадного полка. Князь Владимир Андреевич уже раньше порывался броситься с засадным полком на выручку большого полка, а потом полка левой руки, но опытный и хладнокровный Боброк удерживал его до более удобной для атаки минуты, когда татары, опьяненные преследованием левого крыла, поравнялись с зеленою дубравою. Тогда засадный полк стремительно и неожиданно атаковал во фланг и в тыл ошеломленных татар, опрокинул и рассеял их. Теперь и большой полк перешел в наступление; татары были охвачены и опрокинуты. Мамай, следивший с высоты за ходом боя, одним из первых бежал с поля сражения, а к 3 часам дня и вся его армия обратилась в полное бегство. Русские преследовали татар до р. Красной Мечи, на протяжении 40 верст. Потери обеих сторон были огромные: в армии Дмитрия осталось налицо до 40 000 чел., армия же Мамая была уничтожена. Ягайло, узнав об одержании русскими победы, ушел в Литву без боя.