Snow is a GUI description language for Java and Common
Lisp. Like XUL and similar, it makes it possible to write GUI code
in a declarative fashion.
With Snow, the structure of the code reflects the tree of widgets that make up the GUI. Layout is specified with a CSS-like embedded language. Data binding cleanly separates GUI code from application code and automatically propagates changes in both directions.
Compared to XML-based GUI languages, Snow:
- is more compact;
- supports common abstractions like variables, functions, conditionals, loops, etc., which XML lacks;
- can be faster, since it compiles to JVM bytecode (to be fair, this is likely to have a marginal impact on most GUIs).
Snow is implemented on top of ABCL (ArmedBear Common Lisp) and third-party libraries, most notably JGoodies Binding and Cells (for connecting the GUI and the application, following the model-view-controller paradigm) and MiGLayout (declarative, CSS-like component layout).
At the time of this writing, Snow supports only the standard Swing GUI library, but it should in principle be extensible to other libraries, like SWT.
Also, Snow provides, as examples of its usage, GUI versions of some of ABCL's components (namely the debugger, the inspector and the REPL).
You can run a simple showcase of Snow directly with Java WebStart. WARNING: Snow, and thus the showcase, need Java security privileges because a) ABCL needs to use a custom classloader and b) Snow needs temporary files to load itself. So use at your own risk, no warranty is provided.
Snow is distributed under the GNU GPL with linking ("classpath") exception. It is the same license used by GNU Classpath and ABCL. It basically means that you can use Snow in open source or commercial products without them being covered by the GPL. Any modifications to Snow itself need to be distributed under the GPL.
The latest project releases (source and binaries) are hosted at release.
ExamplesI am working towards porting the SwiXml examples to Snow. You can find them here, along with a brief explanation.
[an error occurred while processing this directive]