Xul (XML-based User interface Language) est un langage de description d'interfaces graphiques fondé sur le XML et créé dans le cadre du projet Mozilla. XUL comprend un ensemble de balises permettant de définir tous les éléments d'une véritable interface utilisateur riche : des boutons, des listes, des menus, des zones d'édition, etc. De plus, il est possible de définir ses propres balises pour mettre en place des composants complexes et réutilisables en écrivant un fichier XBL (eXtensible Binding Language). Celui-ci comporte, pour chaque nouveau composant qu'il décrit, plusieurs parties :
Les bindings ainsi définis peuvent hériter les uns des autres, et surcharger leurs contenus ou comportements.
Initialement, XUL a été développé afin de faciliter la création de l'interface graphique du navigateur web Mozilla. Un moteur XUL est intégré au moteur Gecko de Mozilla, ce qui permet l'exécution de code XUL directement dans le navigateur, mais cela nécessite de posséder un navigateur utilisant le moteur Gecko dont les plus populaires sont Firefox, SeaMonkey, Netscape.
Actuellement, Mozilla développe XULRunner, qui permet d'exécuter des applications XUL sans Mozilla ou Firefox, directement sur le bureau (compatible Windows, Linux, MacOS X). Par cet intermédiaire, il est possible (avec le téléchargement d'un patch en plus) d'utiliser le moteur Gecko en tant que composant ActiveX dans Internet Explorer.
Un simple éditeur de texte est suffisant pour écrire du code XUL et Javascript, mais il existe quelques outils qui permettent d'améliorer le développement :
Le développement d'une application XUL se rapproche du développement d'une application cliente ou client/serveur traditionnelle. À chaque objet graphique sont associés des événements (clic de souris, double-clic, etc) pour lesquels le développeur doit écrire du code (typiquement en Javascript) à exécuter par la machine cliente. L'application peut récupérer des données d'un serveur, par exemple via des requêtes HTTP. Côté serveur, de nombreux langages peuvent être utilisés pour « motoriser » une application Xul : Java, ASP, C#, Perl, Python, Php, etc.
XUL facilite la mise au point d'une interface plus évoluée que HTML sur le plan technique, car les objets XUL peuvent se manipuler via une interface DOM, comme en DHTML, ou encore être associés à des feuilles de styles CSS. De plus une interface XUL peut récupérer d'un serveur les seules données nécessaires à la mise à jour d'un élément de la page et non l'ensemble de la page elle-même; ces données peuvent être récupérées en XML et de manière asynchrone, ce qui permet d'utiliser la méthode AJAX. Ces techniques permettent d'améliorer considérablement les temps de réponse et le confort de l'utilisateur. L'environnement XUL les utilise de manière transparente pour l'utilisateur dans le système de templates (modèles de page) qui permet de générer une partie de l'interface utilisateur à partir de données externes en RDF1, sans avoir à écrire une ligne de code Javascript. XUL peut également exploiter et interagir avec les diverses ressources de Mozilla comme le SVG2.
RDF1 : (Ressource Description Framework) est un modèle destiné à décrire de façon formelle des ressources web de façon à permettre le traitement automatique de ces descriptions.
SVG2 : (Scalable Vector Graphics) est un format de données basé sur le XML conçu pour décrire des ensembles de graphiques vectoriels.