This project is read-only.


The Nuclex.UserInterface library provides everything you need to add interactive graphical user interfaces to your game. It features a flexible scaling and positioning system, easy management of multiple states (so you could use a GUI for your game's menus and another GUI for an in-game computer display) and a decoupled rendering system. The latter allows you to write your own renderers, but the built-in default renderer already has support for skins defined by an easy-to-understand XML format.



  • Intuitive API and clean design - no hacks or quirks in the entire library. All features have been properly integrated into the design from the ground up.
  • Doesn't try to be the next mainstream GUI - only does what's required for a game, but does it well. That means your game will have to live without the Office 2007 Ribbon GUI, however ;-)
  • Works on Windows and on the XBox 360 - the GUI is designed to be usable on consoles and responds to game pad input in addition to mouse and keyboard.
  • Provides special console UI controls - these controls are designed to work well with game pads in addition to the usual mouse & keyboard input.
  • Supports the Windows keyboard layout - on Windows, the GUI captures WM_CHAR, so the user's keyboard layout is respected (French users can type accents, East-Asian users can use their IME, etc.)
  • Unified scaling system - you can automatically make controls move or resize together with a window. This is very similar to the one used in CEGUI.
  • General-purpose input response system - input is routed only to the controls it belongs to. This guarantees highly efficient processing and lets controls handle input on a high level.
  • Renderer-agnostic design - controls do not mix logic with display code. You could create a completely new renderer from scratch without having to modify a single line in the controls.
  • Dynamic skinning in default renderer - the included default renderer lets you describe the look of any skin element using an XML file
  • Efficient rendering - the default renderer does not require render targets or texture switches (the latter depends on whether your skin stores all its images on a single texture, of course.)
  • 100% test coverage - every single line of code is exercised by unit tests. There will be no nasty surprises waiting to happen.


The GuiManager manages your game's GUI and HUD for you. While you can take control of GUI management and rendering yourself, if you don't want to do something unusal, the GuiManager greatly simplifies things and lets you set up a neat-looking GUI in just a few lines of code.


Visualizers are what brings your tree of GUI objects to the screen for the user to interact with. You can write visualizers yourself and do all kinds of crazy things, such as rendering a GUI using 3D objects or draw it into a text-mode console screen like in the old days. There's no need to implement a 2D GUI visualizer however, because the Nuclex.!UserInterface library brings with it a visualizer that very efficiently renders 2D GUIs with full skinning support through an easy-to-understand XML file.


Controls are the building blocks of a GUI. The Nuclex.UserInterface library categorizes controls into three namespaces: "Arcade" controls which are suitable for GUIs that should be usable with a game pad, "Desktop" controls which are suitable for applications running exclusively on PCs with mouse and keyboard and "Common" controls that work equally well on both (all controls can be used by keyboard & mouse, however, so an XBox 360 GUI will work fine for PC players).

Last edited Dec 8, 2009 at 6:53 PM by Cygon, version 11


Wiffledude Nov 5, 2012 at 2:46 AM 
Hm.. was thinking about getting into XNA development for a possible XBLIG title since Unity doesn't really do XBox for a reasonable price.... my primary engine choice was Ox but I've heard the GUI system isn't very good. This, however, looks quite nice. I'll probably be picking this up. Thank you for making this free :)

Boinst Oct 27, 2010 at 11:39 AM 
screenshot looks enticing :)