Sunday, August 12, 2007

Introducing Sage

Sage is the realization of an idea I had about 11 years ago after I had built my first Netscape plug-in to provide a table widget capable of doing things that table widgets do in typical desktop applications. I wanted to be able to build desktop caliber apps that are built the way web applications are built, using a markup language to describe the UI and scripting to control the interactions. I also wanted them to be URL centric, such that all resources and data are accessed via an URL.

Except for the quality of tools available for building JavaScript/DHTML (or AJAX) applications, not a lot has changed. Granted the technology has evolved enough such that the table widget plug-in can now be built using AJAX. However, the level of sophistication of desktop has also significantly increased in that span of time, and to match that level of sophistication using existing approaches requires a lot of effort to just get something that is close enough. Also, while the new Yahoo mail client is fairly impressive, I am not about to ditch my Microsoft Outlook client anytime soon.

MS Outlook happens to be one of the three most used applications on my desktop (the other two being FireFox, and NetBeans). One of the goals I had for Sage was to be able to build a UI that looks and functions just like Outlook by simply using markup and scripting. I also wanted the applications capable of being run standalone without the need for a web browser but to also able to be launched via a web browser. Another key requirement was the data model. While there are a number of existing tools out there that allow you to do some of these things, none that I know of, fully addresses the issue of easily populating widgets with data and providing the widgets with some understanding of how to render the data (fonts, colors, action links, icons, tooltips, drag and drop, etc). Basically, to be able to not just markup the UI but also markup data (similar to what you would do if the data was being presented via a web page), yet still able to do typical client-side data manipulations like sorting, filtering, drag and drop etc. It is not that some of these things are not possible with the current technologies, it is the effort required to do them is what I had an issue with.

Thus was Sage born, built on Java (because of the proliferation of the runtime and commercial and open source libraries available), and Swing (because it is written in Java so I could fix bugs and make changes as needed). I do hope to have a .Net version someday. Sage is still in its infancy but the functionality is comprehensive enough and it is stable enough to be officially unveiled to the public. As you might expect, documentation is sparse but there are a couple of full fledged examples (including a MS Outlook clone), and the source code for the engine is also available.

Sage was born out of my needs, wants, and experiences with other technology. If your wants, needs, or experiences differ from mine, then Sage may be of little interest to you. You can find the demos and downloads at


PS. Some of the icons in the MS Outlook clone may be copyright Microsoft. So if you feel the urge to take the demo and make it a real mail application, please change the icons. The icons for Outlook were used merely to demonstrate the ability to easily markup a UI that looks and functions like Outlook.