Весной 1399 года армия Витовта начала собираться в Киеве, откуда только в августе выступила в Степь. Князь не торопился. Ему нужно было одно решающее сражение, чтобы за один раз перемолоть все силы противника. Он был уверен в победе и поэтому не спешил. Гигантской бронированной змеей ползла армия по степи. Гарцевали благородные всадники, со скрипом тащился обоз, в котором были, помимо прочих припасов, еще и пушки. Тут были и прошедшие огонь и воду, ничего не боящиеся ветераны, начавшие служить еще Кейстуту, была и зеленая молодежь, привлеченная славой князя и желанием добычи. Сколько было этих воинов, двинувшихся за победой? Как почти всегда, никто точно не знает. Разные историки называют разные цифры — от тридцати восьми и до ста тысяч человек. Сколько кочевников им противостояло, также никому не ведомо. Говорят о двухстах тысячах всадников, но кто их точно считал? Скорее всего, кочевников было действительно больше, чем европейцев, но зато воины Великого княжества Литовского были лучше вооружены и защищены. Основу армии Витовта составляли тяжеловооруженные воины в прочных европейских доспехах на рослых конях, которые должны были обеспечить перевес в ближнем бою. А арбалетчики и артиллеристы должны были свести на нет преимущества Тимур-Кутлуга в лучниках.
Две армии встретились у реки Ворсклы, и Темир-Кутлуг послал к Витовту гонца с вопросом: «Зачем ты на меня пришел? Я твоей земли не брал, ни городов, ни сел твоих».
Начались переговоры, в которых хан тянул время, ведь к нему должны были подойти еще войска, которые вел эмир Едигей. Витовт же принял поведение татар за слабость и принялся диктовать свои условия. «Бог покорил мне все земли, покорись и ты мне, будь мне сыном, а я тебе буду отцом, и давай мне всякий год дани и оброк, если же не хочешь быть сыном, так будешь рабом, и вся орда твоя будет предана мечу!» — требовал князь. И хан притворно соглашался стать вассалом Литвы, торговался из-за условий, а литовец требовал все больше и больше. И так длилось до тех пор, пока 12 августа к Ворскле не прискакал Едигей. Ситуация разом поменялась. Состоялась встреча князя и эмира, и теперь уже степной полководец потребовал от Литвы покорности и дани. «Ты правильно назвал нашего хана сыном, потому что ты старше его. Но я старшее тебя и поэтому ты должен быть моим сыном!» — заявил он. Витовт понял, что его водили за нос и в бешенстве отдал приказ начать сражение.
Под прикрытием артиллерии и стрелков литовцы начали атаку. Первоначально им сопутствовал успех, хотя, по сведениям летописцев, огнестрельное оружие особо и не помогло в бою. Все же первым ударом воины Витовта заставили врага дрогнуть и начать отступать, но Едигей бросил в бой свой резерв и переломил ход сражения. Один из ордынских отрядов обошел литовскую армию и ударил ей в тыл, из-за чего воины Витовта смешались, а их наступательный порыв выдохся. Началась паника и Великий князь Литовский утратил возможность управления своими отрядами. Его союзник Тохтамыш первым не выдержал и бросился бежать со своими сторонниками. Окруженные русско-литовские войны яростно отбивались, но изменить ситуацию не могли.
Поняв, что сражение проиграно, Витовт с телохранителями прорубился сквозь ряды врага и бежал. К вечеру армия Витовта была почти полностью уничтожена. Лучшие воины были убиты или попали в плен, а весь княжеский лагерь достался татарам как трофей. Среди убитых были оба брата Ольгердо-вича, смоленский князь Глеб Святославич и киевский князь Иван Борисович, а также воевода Дмитрий Боброк-Волынский. Всего же погибло семьдесят четыре русских, литовских и польских князя.
Никоновская летопись сообщает, что Едигей преследовал беглецов еще 500 вёрст, разоряя все на своем пути. Уцелел лишь Киев, которому удалось откупиться, дав татарам три тысячи рублей. Еще тридцать рублей татары взяли с Печерского монастыря.
Разгром на Ворскле полностью изменил расстановку сил в регионе и остановил стремительное усиление Литовского княжества. Оставшийся без армии Витовт попал в зависимость от Польши, с которой в 1401 году был вынужден заключить Виленско-Радомские договоры, которыми был закреплён вассалитет Великого княжества Литовского. Кроме того, после такого поражения литовский князь уже не мог претендовать на роль объединителя всей Руси и проводить прежнюю активную политику. Ему пришлось забыть свои амбициозные планы, и из почти русского государства Великое княжество Литовское стало превращаться в придаток Польши.