La programmation X est très ardue. C'est pourquoi, pour la plupart, les développeurs utilisent une bibliothèque de widgets de plus haut-niveau. [NdT: en anglais, le terme widget désigne un ``bidule'' (et ce, depuis le début du XXème siècle). En informatique, le terme est basé sur une contraction de Window gadget. Il s'agit donc d'un élément d'une interface graphique (bouton, menu, ascenseur, etc).]
Les utilisateurs sont bien habitués aux widgets: boutons, menus, boîte de saisie de texte, etc. Les programmeurs X doivent construire ces éléments manuellement. Si les widgets ne sont pas incorporés au protocole X, c'est pour que plusieurs interfaces utilisateur puissent être développées au-dessus d'X. Cette souplesse fait d'X une technologie solide.