Introduction to XULUX

The main goal of XULUX is to provide an easy way to create frontends.

This was the main goal and still is. The evolution of Xulux however had me reconsider the scope a bit : I consider Xulux a FrontEnd API. You probably read that before, but there is a different twist to XULUX that makes it somewhat different to other libraries. Here is a list of those things that I think are essential to having a FrontEnd API as I like to call it :

  • Xulux is independent of the Gui Layer. This gives you the ability to create an application which will work with Swing, SWT or internet application without any code change.
  • Xulux is independent of the Data Layer. This means your application will still work the same way if you switch from Hibernate to Webservices.
  • Xulux is independent of the Rule Engine. Don't like the default in one ? Just choose another one.
  • Xulux is independent of logging systems. Xulux provides a logging API that let's you be in charge of the logging.
  • Xulux is independent of the gui driver. Xulux has an XML gui definition, but please ignore it. You can simply completely code your gui or create your own gui driver (eg Creating gui's based on DSL's will seem trivial if you use xulux as a base compared to doing the work yourself)
  • Xulux allows you to reuse most components outside of xulux. The goal is to minimize dependencies on each other.
  • You decide how to use Xulux. You don't have to throw away any code you have written. You can choose to use Xulux as a base, or just have one screen in your application handled by xulux and ignore the things in xulux that you don't care about.
  • Xulux promotes reuse of gui "compositions". Why solve everything more than once ?
  • Xulux provides defaults for widgets. It will allow you in a very easy way to override those defaults as a whole or partially. If you don't like the default background color of a required field, you just override that specific setting.
  • Xulux let's you focus on business logic instead of writing the same gui code over and over again.
  • Don't like certain parts of Xulux ? Just replace it with your own code! You can hook in everywhere, since even the smallest component in Xulux is replacable, without the need to change the complete Xulux codebase. No inheritance nightmares (at least where possible).
  • Xulux doesn't have any external dependencies (the core kind of expects an xml parser to be present, although you even could do without that one)
  • Xulux runs on jdk1.3 and higher.
Please have a look at the features page to see in more detail what Xulux provides.

A bit of history

In October 2002 I started to work on Xulux. I was fed up with creating Swing based programs, which took about 80% of my development time, instead of spending 80% of the time for programming business logic. After some research on the internet to find some ready made solutions, I decided to write my own. Most of the known solutions had licenses not suitable for my needs or were just merely XML wrappers around the Swing API. Since SWT was gaining ground at that time I wanted to rule out any "vendor lock-in". If I want to run the application on SWT I shouldn't need to change my application. NYX (Not Yet Xulux) was the first "Proof Of Concept" of Xulux, which was completed (but never publicly released) at some point and running very succesfully at a couple of customer sites and it proved to be very excellent in representing DSL's in a GUI. The problem was that I started to dislike the codebase and creating new widgets was a job a monkey could do (copy & paste of code). If you start copy & pasting code to get things done, it's time to stop what you are doing or fix the problem. At the end of 2005 I abandond Xulux development, since I didn't have any time anymore and my day-to-day work didn't involve gui development. However in the back of my mind I was constantly thinking that Xulux was the right approach and started on a new API for Xulux (Xulux2). I got kind of districted with other things in my life after that and last month I have decided to make most of my development time I have in making Xulux to become what I want, so I can say "Here is the solution" instead of thinking it could be the solution.

Contributing to Xulux

Even though Xulux is open source (Apache License 2.0), I cannot accept any contribution yet. Development is driven by the fact that I want to solve things a certain way and that I want to scratch an itch I have. I am not saying that I know what's best for you, I just know whats best for me. Since I already invested a lot of time in the codebase and thought process in Xulux, accepting contributions, will result in me not being to full owner of the codebase anymore (exception are small patches, which are covered by the Apache License). There are ways around it (eg creating a CLA kind of system, like the ASF has), but I am not ready for that yet, since I want to focus on coding :)

If you think my "policy" is something that can hold you back from getting involved, please let me know!

Is this XUL?

For me XUL is Mozilla XUL, not XML UI Language. I first intended to have XULUX be a Mozilla XUL implementation, but chose a different path, which is be completely independent of any gui markup. You can consider XULUX out of the box however as an XML UI Language, but that is just there for convenience. The GuiDriver can be just about anything.


Currently there are no releases of XULUX.

XULUX is a moving target and probably some API's will change and you can consider it not usable at this moment, since I am in the middle of a major refactor. I antipate on releasing the first version around October 2007.