GNUstep Renaissance

Welcome to GNUstep Renaissance!

GNUstep Renaissance is free software (GNU LGPL), and part of the GNUstep project. It is a development framework which runs on top of the GNUstep libraries or on top of the Apple Mac OS X Cocoa frameworks, providing an opaque layer to write portable applications.

GNUstep Renaissance is mostly useful to:

  • write GUIs for GNUstep and Apple Cocoa in an open, portable format. The GUIs are described by an open, simple, human-editable XML file which works on GNUstep (GNU/Linux, *BSD), GNUstep (Windows) and Apple Cocoa.
  • generate GUIs for GNUstep and Apple Cocoa programmatically. Have your code or scripts generate simple XML data describing your windows and GUIs; Renaissance will magically create the GUIs from the XML.
  • write GUIs for GNUstep and Apple Cocoa without using Gorm or Interface Builder. You can create a new GUI by writing an XML description of your windows using a simple text editor (vi or emacs will do). The XML is extremely simple and is designed to be a pleasure to edit by hand.
  • write GUIs for GNUstep and Apple Cocoa that can be translated easily in a large number of languages. Renaissace decouples the GUI localization from the GUI design, allowing you to easily translate your software in a number of languages, and making easy the maintenance of translations. An end-to-end localization toolchain based on gettext is planned for Renaissance 1.0 - which will finally allow you to have GNUstep or Apple Cocoa applications that are as easy to translate as any other gettext-based system.

In short, GNUstep Renaissance allows you to describe your user interfaces (that is, the windows in your application, and the buttons, boxes, textfields, etc in the windows) in simple and intuitive XML files, using an open, standard format describing the logic of the interface. GNUstep Renaissance can then, at run time, generate the user interfaces (using the native host OpenStep-like libraries) by reading the XML files. The connections between the objects created from the XML files, and the other objects in the application are done via outlets (as traditionally in OpenStep); a new quick and intuitive syntax has been developed to make creating outlets as easy as possible.

GNUstep Renaissance contains quite a few new ideas over previous technologies. Some of the main end-user advantages of GNUstep Renaissance over previous OpenStep-inspired technologies for the same task are:

  • Portability. User interfaces built using GNUstep Renaissance are truly portable. They simply run without any change on any OpenStep-based platform on which Renaissance has been ported (currently, at least on both GNUstep and Apple OSX).
  • Open, simple and standard format. User interfaces built using GNUstep Renaissance are saved into open, simple files which can be edited and read on any platform using any text editor. The XML format has been designed to be as easy to edit as possible. We will have a specific graphical builder for GNUstep Renaissance, which will make editing directly the XML files a rare operation; still, it's a great advantage to be able to actually edit and inspect them directly whenever needed. Your user interfaces will no longer be locked in binary files which can only be edited using a platform-specific application; you will be able to compare different versions of the same user interface using diff and cvs diff (you can't get any meaningful comparison with binary formats); and your user interfaces will be finally stored in a readable format, which you can read even from a terminal, making your program easier to check. The format is so nice that I expect many hard hackers will keep creating user interfaces directly in XML even when a graphical editor is available!
  • Easy localization. User interfaces built using GNUstep Renaissance are much easier to translate than in all previous technologies. You no longer need to create a new separate interface for the new language: you can just provide the translation of the strings in a .strings file, and GNUstep Renaissance will automatically replace every string in the existing interface with the corresponding translation. Previous technologies can't do this because they don't support automatic sizing and layout of widgets.
  • Themeability. Themes are a problem for traditional OpenStep-like technologies, because a change in theme changes all the widgets appearances and sizes. User interfaces built using GNUstep Renaissance can survive easily a change in theme, since all sizing and layout of widgets is done dynamically at runtime. Previous technologies can't, and you would need to create a different user interface for each different theme.

GNUstep Renaissance compares favourably to other non-OpenStep technologies for similar tasks as well:

  • Easy, intuitive integration with the rest of the software. GNUstep Renaissance uses outlets and connections (which are made possible by Objective-C) to connect at run time user interface objects to other objects in the application. This is the traditional magic used by NIB files (of NeXTstep and OpenStep fame) to integrate user interfaces with the rest of the program. When a file is loaded, you can have arbitrary instance variables of objects in your application automatically set to point to newly created buttons or other widgets; and vice versa, you can have instance variables and properties of user interface objects set to point to objects in your application. You can control very easily these connections from the file itself.
  • More intelligent autolayout mechanism. GNUstep Renaissance implements new autolayout ideas whereby each object in the interface contains enough intelligence to provide an intelligent default autoresizing behaviour. For example, buttons automatically know they should not be resizable, while editable textfields automatically know they should be resizable horizontally but not vertically. Containers automatically gather all this information, and can automatically compute reasonable borders and alignments, and use them to layout automatically without programmer's intervention. The result is that you can create a window by just creating objects, and putting them in boxes -- without having to spend time setting spacing, borders, resizing behaviours -- unless you really need to, in order to get a special effect. In the normal case, you will at most need to set a few align flags (left vs center vs right). This cuts down on development time a lot, and also creates better user interfaces, since GNUstep Renaissance is following a strict, mechanical logic when choosing autolayout behaviours: programmers often pay too little attention to sizing and layout flags and details, resulting in user interfaces which work but which often have quite a lot inconsistent (or simply wrong) sizing and layout details. This can't happen with GNUstep Renaissance.

Renaissance is composed of the following blocks:

  • AutoLayout: a collection of autolayout objects (h/v boxes, grids, spaces, ...), providing automated runtime widget layout, similar to what you find in most other toolkits on the market ... similar, but better :-) The missing piece of the AppKit. Depends on gnustep-gui.
  • Markup: an xml parsing/generating engine. Depends on gnustep-base.
  • TagLibrary: a standard set of tag objects for use by the xml parsing/generating engine in order to read/write gui windows, menus, panels, etc. Depends on the previous parts: AutoLayout and Markup.

Renaissance was written by Nicola Pero ( and is part of the GNUstep project (