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
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.