Союзникам удалось с ходу захватить крепость Лаутенбург, а 10 июля, выйдя к реке Древеница, они увидели на противоположном берегу главные силы Ордена во главе с магистром Ульрихом фон Юнгингеном. Польско-литовское войско не стало форсировать реку на виду у неприятеля, а двинулось к истокам Древеницы — к городу Сольдау. Крестоносцы, в свою очередь, двинулись к Танненбергу, чтобы преградить противнику путь к своей столице. 13 июля поляки и литовцы взяли замок Гильбенбург. В ночь на 15 июля они расположились лагерем в лесу недалеко от озера Любень и выслали разъезды к Танненбергу. Те вернулись с сообщением о подходе войска Юнгингена.
Крестоносцы тоже заметили неприятеля. Магистр собрал военный совет. Решено было послать польскому королю в качестве вызова на бой два меча.
В орденском войске было 51 знамя (хоругвь[3]), а в польско-литовском — 91. Кроме того, под началом короля Владислава были отдельные отряды татар, жмудинов, армян и венгров. Численное превосходство в два с лишним раза было на стороне армии короля Владислава. Оно лишь частично компенсировалось лучшей боевой подготовкой орденских рыцарей. В армии Владислава было 15 600 польских всадников, 8 тысяч литовских, 3 тысячи татарских, а также несколько тысяч пехотинцеи. Из 91 хоругви союзных войск 51 была польская (две из них состояли из чехов), а 40 — литовских. В литовских хоругвях значительную часть воинов составляло восточнославянское население Великого Литовского княжества.
Тевтонское войско насчитывало около 11 тысяч человек: 4 тысячи рыцарей, 3 тысячи оруженосцев и 4 тысячи арбашетчиков. Оно располагало также огнестрельным оружием — бомбардами, которые, однако, отличались низкой точностью стрельбы и пока еще не могли соперничать с луками, арбалетами и метательными машинами.
Поле боя представляло собой равнину к югу от Танненберга. В Германии эту битву называют битвой при Танненбер ге, а в Польше — битвой при Грюнвальде, по названию леса, где остановилось перед боем польско-литовское войско. Между противоборствующими армиями лежала небольшая лощина. Правый фланг союзного войска составляши литовцы, левый — поляки. Формально главнокомандующим считался король Владислав, но он не считал себя специалистом в военном деле и фактически передал командование Витовту. Его фронт составлял около 2 км, а в глубину боевой порядок был эшелонирован в три линии. Глубина орденского войска из-за его малочисленности была меньше — только в две линии. Правым флангом командовал граф Лихтенштейн, а левым — рыцарь Валленрод. Второй линией, составлявшей резерв, командовал магистр Ульрих фон Юнгинген, осуществлявший также общее руководство тевтонским войском.
Перед началом сражения прошел сильный дождь, но в полдень выглянуло солнце и войска начали сходиться друг с другом. Крестоносцы дали залп из бомбард, расположенных впереди их боевого порядка вместе с арбалетчиками. Однако ядра легли с перелетом, не причинив неприятелю никакого вреда. Татарская конница атаковала правый фланг крестоносцев. Стрелы татар отскакивали от рыцарских доспехов. Крестоносцы легко отбили этот натиск и перешли в контратаку. Татары обратились в бегство.
Пришедшие на помощь татарам литовцы тоже были опрокинуты девятью знаменами Валленрода. Однако в это время 17 польских хоругвей Зындрама прорвали фронт Лихтенштейна. Тевтонские хоругви, преследовавшие литовцев, вынуждены были вернуться, чтобы помочь своему правому крылу. Они ударили во фланг и тыл Зындраму. Польские хоругви заколебались. Был убит знаменосец, державший Большое королевское знамя. Но в этот момент Владислав послал в бой вторую линию польского войска. Свежие хоругви отбили знамя и вместе с литовцами окружили воинов Лихтенштейна. Чтобы освободить их, Юнгинген ввел в дело последние 16 хоругвей. Однако наперерез им устремилась третья линия поляков Витовту удалось остановить бежавшие литовские хоругви левого крыла и двинуть их в наступление.
Крестоносцы не выдержали натиска превосходящих сил противника. Беспорядок усугубился после того, как магистр Юнгинген был убит литовским воином. Шесть тевтонских хоругвей смогли вырваться и уйти с поля битвы. Вагенбург, в котором укрылись крестоносцы, союзники взяли штурмом. Многие воины Ордена попали в плен. Польско-литовское войско тоже понесло тяжелые потери и не смогло организовать преследование. К Мариенбургу оно подошло только 25 июля, когда уцелевшие крестоносцы уже собрались в крепости и организовали оборону.