הצבא החתי, בדומה לצבאות אחרים במזרח התיכון העתיק, היה מורכב מחיל רגלים וחיל מרכבות. בניגוד למצרים, הזרוע ההתקפית העיקרית של צבאם הייתה המרכבות. המרכבות החתיות היו כבדות יחסית ומאוישות על ידי צוות של שלושה אנשים: לוחם מוגן בשריון קשקשים, נהג שלא היה מוגן בשריון, ונושא מגן שאחז במגן עץ גדול, ותפקידו היה להגן על שני אנשי הצוות האחרים מחצים וכלי ירי אחרים. הסוסים היו מוגנים לרוב בשריון עור עבה, ולעיתים אפילו בשריון קשקשים. הנשק העיקרי של המרכבה היה רומח ארוך, והטקטיקה העיקרית הייתה הסתערות לעבר מערך האויב במטרה לשבור את שורותיו ולפנות את הדרך לחיל הרגלים החתי. חיל הרגלים היה אמור לסיים את המלאכה ולחסל את האויב לאחר שנשברו שורותיו בהסתערות המרכבות.
החי"ר החתי היה מורכב בעיקר מחיל רגלים קל ובינוני. חימושם היה דומה לחימוש שאר הצבאות של התקופה – חניתות, חרבות, קשתות וכיוצא באלה. בניגוד למרכבות, השירות בחיל רגלים לא נחשב יוקרתי ורוב חיילי החי"ר לא היו חיילים מקצועיים, אלא איכרים שגויסו למערכה מוגבלת. כתוצאה מכך איכותו של חיל הרגלים החתי הייתה דלה לעומת חיל הרגלים המצרי. אמנם, רגלים רבים גויסו גם מקרב שכירי חרב מקצועיים, אך עדיין נפל החי"ר החתי באיכותו מחיל הרגלים המצרי.
ההכנות החתיות לקרב היו נרחבות ביותר. מלבד צבא הממלכה שגויס בהיקף גדול, נשלחו למסע המלחמה גם צבאותיהם של בעלות ברית ושליטים וסאלים, הכפופים לשלטון החתי כמו מיתני, אוגרית ואחרים.
המצרים.
הצבא המצרי היה מורכב מארבעה גייסות, כל אחד בן 5,000 לוחמים. מתוכם 4,000 היו לוחמי חי"ר, ו-1,000 היו חיילים שאיישו 500 מרכבות שסופקו לכל גיס. שמות הגייסות היו קבועים והתבססו על האלים המצריים. הגייסות שלקחו חלק במערכה בקדש הם: אמון, רע, סת ופתח'.
בניגוד לחתים, הזרוע העיקרית של הצבא המצרי הייתה החי"ר. חיילי החי"ר המצרי היו מקצועיים ולרוב באו ממשפחות חיילים משוחררים ("וטרנים"), כי נהוג היה לחלק קרקע חקלאית לחיילים שסיימו את שירותם, בתנאי שצאצאיהם ישרתו בצבא. כתוצאה מכך היה החי"ר המצרי מיומן ואיכותי עד מאוד. הוא התחלק לחי"ר קל וחי"ר כבד, כאשר הכבד היה חמוש בדרך כלל בחנית ארוכה ובגרזן קרב או חרב מעוקלת, וסודר במבנה צפוף שהזכיר את הפלנקס היווני. הקל היה חמוש בקשת מורכבת ובכלי הטלה שונים. לצד החי"ר שגויס מבני מצרים, שירתו בצבא המצרי גם שכירי חרב רבים, וכן גייסות מעמים כבושים.
המרכבות המצריות היו קלות תנועה ואוישו על ידי שני אנשי צוות בלבד – נהג וקשת. המצרים לא השתמשו ברומחים ולא הסתערו על האויב במטרה לשבור את שורותיו, אלא העדיפו לחוג סביבו ולפגוע באנשיו באמצעות מטחי חצים מטווח קצר. בדומה למרכבות החתיות, רק הקשת היה מוגן בשריון קשקשים ואילו הנהג נאלץ להסתפק במיגון עשוי מבד עבה או שלא היה מצויד כלל במיגון. על מנת לספק לו הגנה כלשהי, הוא צויד במגן עץ גדול. מלבד נהיגה במרכבה, הוא אמור היה להגן במגינו גם על הקשת שלצידו.
בנוסף לגייסות הרגילים, הצבא המצרי שנטל חלק בקרב קדש כלל כוח נוסף שנקרא בפיהם "נערין" או "נערן". מקורו, הרכבו וגודלו של כוח זה אינם ידועים, אך בגלל אופיו השמי של השם, סוברים חלק ניכר מהחוקרים שמדובר ביחידה של שכירי חרב מכנען או יחידה של אחת מהממלכות הואסליות של מצרים בכנען, שסופחה לצבא המצרי. פירוש המילה "נערין" הוא "בחורים צעירים". שם זה לא היה מקובל בצבא מצרים והגייסות העיקריים נקראו על שם האלים השונים. עקב שתיקת המקורות המצריים הוצעו שלל תאוריות למקורו של הכוח הזה. אחדים טוענים שהוא היווה חלק מגיס סת, אחרים טוענים שמדובר בבעלי ברית כנענים. סברות אחרות הן שמדובר ביחידה עילית מצרית, או חלק מגיס אמון. כל אלה הן השערות בלבד, ניתן לומר בוודאות רק שהייתה זו יחידה שלחמה היטב בקרב קדש, וקבעה במידה רבה את גורל הקרב.
המצרים גייסו את כל צבא השדה למערכה: כל ארבעת הגייסות המצריים לקחו חלק במסע המלחמה של רעמסס שיצא מעיר הבירה פר-רעמסס. עליהם הוסיפו שכירי חרב רבים (השרדנה מוזכרים במפורש באסטלה מטאניס) וחייבו את השליטים הווסאלים של כנען לשלוח להם כוחות צבא.
הקרב.
המארב החתי.
הצבא המצרי יצא ממצרים בסוף אפריל או בסוף מאי, הוא צעד ב"דרך הים", שעברה דרך מדבר סיני ועזה והגיע אחרי מסע של 30 יום לאזור קדש.
מן התיעוד המצרי עולה שכוח החלוץ של הצבא המצרי, שכלל את משמר הראש של פרעה ואת גיס אמון תחת פיקודו האישי של רעמסס, חנה ביום התשיעי לחודש השלישי של הקיץ (סוף מאי) במקום שזוהה בשנת 1925 על ידי האגיפטולוג האמריקאי ג'יימס הנרי ברסטד כ"קמואט אל-הרמל", בגדה המערבית של נהר האורונטס (נהר עאסי, נהר היוצא מבקעת הלבנון, חוצה את סוריה מדרום לצפון ונשפך לים התיכון בטורקיה). שלושת הגייסות האחרים של הצבא המצרי היו במרחק של חצי יום עד יום צעידה ממקום החניה של רעמסס. המקורות המצריים פחות ברורים ביחס לאירועים שהתרחשו לאחר מכן. חלק מן החוקרים טוענים שהקרב התחולל בתשעה בחודש, אך סביר יותר להניח שהוא התרחש למחרת, בעשרה בחודש, כי יש לקחת בחשבון את הקשיים הלוגיסטיים הכרוכים בחציית נהרות שעמדו בפני הצבאות באותה התקופה.
בשעות הבוקר החל כוח החלוץ המצרי לחצות את האורונטס בקרבת מקום שהמצרים קראו לו שבטונה. חפירות ארכאולוגיות מזהות את המקום עם תל מעיין. כוח החלוץ המצרי המשיך להתקדם צפונה ממערב לעיר קדש. לאחר החצייה תפסו המצרים שני רועי צאן מבני שאסו ותשאלו אותם לגבי מיקומו של הצבא החתי. הרועים מסרו להם שהחתים, שנבהלו מהתקדמות הצבא המצרי, נסוגו לאזור חלב, כ-200 ק"מ צפונית לקדש. רעמסס שהיה בטוח עתה ביכולתו לכבוש את קדש, ולא חשש מהצבא החתי בעקבות המידע שנמסר לו, החליט לעצור את התקדמותו, להקים מחנה במרחק קצר מצפון-מערב לקדש, ולהמתין שם להצטרפות הגייסות האחרים של צבאו לכוח החלוץ.
לפי המקורות המצריים, שני רועי הצאן נשלחו בכוונה על ידי המלך החיתי כדי להטעות את המצרים. למעשה הצבא החתי נמצא במרחק קצר מכוח החלוץ המצרי וחנה בגדה המזרחית של האורונטס ממזרח לתל קדש. למחרת בבוקר תפסו המצרים שני סיירים חתים, ולאחר שעינו אותם, הם סיפקו להם מידע מדויק בדבר המיקום והכוונות של האויב. בדרך זו גילו המצרים כי הצבא החתי חונה במלוא עוצמתו קילומטרים אחדים מזרחית אליהם. בכל אותה העת, החתים היו מודעים לנוכחות הצבא המצרי בקרבתם ועקבו אחרי תנועותיו. משנודע הדבר לרעמסס, הוא כינס התייעצות בה נזף קשות במפקדיו הבכירים על המחדל המודיעיני, והחליט לשגר מיד שליחים לגייסות העורפיים שלו, כדי להורות להם לנוע במהירות צפונה ולחבור לכוח החלוץ. למרות הסכנה, נשאר רעמסס במחנהו ולא ניסה לסגת דרומה אל מעבר לאורונטס.
הגיס של רע היה הקרוב ביותר לכוח החלוץ של רעמסס. עם שחר הוא החל בתנועה לכיוון מחנהו של פרעה, שנמצא כ-10 קילומטרים צפונית לו. הגיס חצה את האורונטס והתנהל בשדרת מסע שאורכה כארבעה ק"מ. נהר האורנטס רחב מכדי לאפשר לכוח גדול לחצות אותו במהירות. לכן החתים העבירו מבעוד מועד כוח, שכלל אלפי מרכבות, לגדה המערבית של הנהר, והציבו מארב לכוח המצרי בחורשה ליד אחד מהיובלים של האורונטס, הידוע בשם "אל מוקדיה". נראה כי המארב הוצב כקילומטר מזרחית לנתיב ההתקדמות של גייס רע וכלל את מרבית המרכבות החתיות (2,500 מרכבות מתוך 3,500) (חלק מהמקורות חולקים על מספר זה, ששאוב מתוך תעודות מצריות, ומעריכים שהכוח החתי היה קטן יותר). שדרת המסע המצרית הופתעה לחלוטין מהמתקפה החתית, והמרכבות המצריות לא הספיקו לצבור תאוצה לפני שנשטפו על ידי הכוח התוקף. המרכבות החתיות התנגשו במלוא המהירות במרכז השדרה המצרית, רמסו את הרגלים המצריים המופתעים, וערכו בהם טבח. החיילים שלא נהרגו בהתקפה הראשונה נתקפו בהלה והתחילו לנוס על נפשם.
הקרב בתוך המחנה המצרי.
חלק משרידי גיס רע נמלטו צפונה לכיוון המחנה של גיס אמון, כשהחתים דולקים בעקבותיהם. המרכבות החתיות ניצלו את האנדרלמוסיה שיצרו המוני הנמלטים ופרצו לתוך המחנה דרך חומת המגינים שהקיפה אותו. הם תקפו את המחנה מכיוון מערב, וכיתרו אותו. סביר להניח, שענן האבק שהעלו המרכבות החתיות הקרבות, סיפק למצרים במחנה התראה קצרה, אך לפי תחריטי הקיר המצריים המתארים את הקרב, הם לא הספיקו אפילו לרתום את הסוסים למרכבות לפני שהחתים פרצו לתוך המחנה. רוב החיילים המצריים שנמצאו במחנה נתפסו לפאניקה ונמלטו ממנו, ואילו רעמסס ומשמר הראש שלו מצאו עצמם מוקפים בהמוני מרכבות חתיות בתוך המחנה. אולם עצם הפריצה אל תוך התחום המוגבל של המחנה המצרי, והמכשולים שהערימו האוהלים והכבודה המצרית בפני המרכבות החתיות, אילצו אותן להצטופף והאטו או עצרו את תנופת ההסתערות שלהן. בנוסף לכך, חלק מצוותי המרכבות החתיות, שחשבו שניצחונם בקרב מובטח, לא עמדו בפיתוי, ירדו ממרכבותיהם והחלו לבזוז את המחנה המצרי ואת שיירת המטען העשירה של פרעה שנמצאה בתוכו, במקום להמשיך בהתקפה.