XAML (קיצור של Extensible Application Markup Language; מבוטאת "זאמל") היא שפת תגיות דקלרטיבית מבוססת XML שפותחה ב-2006 על ידי מיקרוסופט לייצוג והגדרה של ערכים ועצמים היררכיים.[1] השפה זמינה תחת OSP (נוסח רישוי חדש שעוטף מספר טכנולוגיות מבית החברה). ראשי התיבות המקוריים היו Extensible Avalon Markup Language כאשר Avalon מתייחס לשם הקוד המקורי של WPF, בו נעשה שימוש מורחב בשפת התגיות כחלק מתשתית דוט נט החל מגרסה 3.[2] כמו כן השפה היא חלק אינטגרלי מטכנולוגיות אחרות מבית מיקרוסופט כמו סילברלייט, Windows Workflow וכן Windows Runtime XAML Framework. בסביבת הפיתוח WPF השפה משמשת לייצוג אלמנטים ויזואליים של ממשק המשתמש, ביניהם הרחבה של תגיות לתמיכה בקישור לנתונים, אירועים והנפשה. באופן דומה משמשת שפה זו בסילברלייט ובכך ניתן לשלבה ביישומי מובייל ו-Windows Phone.
האלמנטים בשפת XAML ממופים ישירות לאובייקטים המתאימים בדוט נט, ואילו התכונות (Attributes) ממופים למאפייניהם. הרחבות השפה (Extensions) כוללות סגנונות, "התנהגויות", משאבים, תבניות, קישור לנתונים, אירועים מנותבים, אנימציה וכדומה. כמו כן מאפשרת השפה קישור לקוד התוכנה הפועל מאחורי הקלעים (מה שמכונה "Code behind"). מיזוג מאוחר של שפת התגיות עם קוד התוכנה מאפשר שינויים בממשק מבלי לגרום לשינוי בקוד. ניתן לכתוב בשפה זו באמצעות ויז'ואל סטודיו ו-Expresion Blend או בתוכנת Vector Architect. אפשר לכתוב תגיות XAML גם באמצעות כתבן או פנקס רשימות. עורך ויזואלי התומך בגרירה פוטר מהצורך לכתוב תגיות באופן ידני, במקום זאת כאשר גוררים אלמנט לתוך החלון, העורך מעדכן את קובץ ה-XAML אוטומטית.
כל מה שנכתב ומיוצג באמצעות XAML ניתן לכתיבה בדרך המסורתית באמצעות C# או VB. אולם המטרה העיקרית ב-XAML היא צמצום משמעותי של הקוד הדרוש לייצוג הממשק על מנת לשחרר את המתכנת מהמטלות הסיזיפיות של "חיווט" כל חלקי הממשק וכן לאפשר שליטה טובה יותר בתחזוקת הממשק. יכולת הקישור לנתונים (ראה בהמשך) מאפשרת לבצע עדכון אוטומטי של מצב הכפתורים והתפריטים בהתאם למצב התוכנית. הסתמכות על XML מקטינה את הסיכון של אי תאימות בין מפתחים. התקן מאפשר שיתוף והעברה בטוחים של קטעי קוד ושילובם בתוכניות אחרות.
קיימות כמה תתי מחלקות של שפה זו:
ל-XAML כמה יתרונות בולטים:
השפה אינה תומכת בבקרת זרימה ואין אפשרות ליצור הסתעפות מותנית. מסיבה זו יש צורך בקוד הכתוב בשפת תכנות אימפרטיבית, שיחדיו יוצרים תוכנית שלמה.