Unleash the MiniApp

It's gonna be a busy week so I'll keep this short. I've been thinking a lot about moveable applications and the idea of rich clients. This is mainly on my mind because the Flying Saucer team has been hard at work on the next version of XHTMLRenderer. (We're shooting for an August 31st release) An embedded rendering component has pretty much one core use: applications with both GUI and html interfaces. But what do they look like? What creatures live in that shadowy borderland between the desktop and the web?

The obvious example is the iTunes Music store. Having an HTMLish component lets Apple embed visually rich content which can change without requiring a software update. But iTunes still has as a desktop interface that satisfies the core function, playing and organizing music, better than a purely webbased program ever could. But this is old news. What else is out there? And why don't I have them?

I think that we should have a Konfabulator / Dashboard equivalent in Java. They each approach the same idea, small easy to write/install/use applications, from different sides. Konfabulator starts with a desktop program and adds internet dynamic content (like rss feeds and webservices), then makes it pretty with web-era graphics and animation. Dashboard starts with pretty webpages and pulls them out of the webbrowser into separately launchable programs with more local control than HTML and Javascript typically allow. I'd like to see us do something like this in Java.

I want to be able to hit Ctrl-Alt-F2 to get my RSS headlines to popup. F3 gives me my MP3 player and F4 for an internet wide Online Help search. (With first priority for JavaDocs of course). F5 would be a MiniApp implementation of Frink, the coolest calculator I have ever seen. (It performs conversions between any unit, letting you definitively calculate the density of the alien mothership from Independence Day). These are MiniApps (TM) I want to see.

Imagine a constantly running program that manages MiniApps. It could be visualized as a dock, taskbar, or sliding Expose' sheet. Or maybe all three! Every program implements a simple common API, say a subclass of org.javadesktop.MiniApp. The MiniApps would run in a sandbox similar to WebStart apps or Applets with crossplatform APIs for user alerts, preferences, and webservice access. Since everything runs inside the same JVM (with the appropriate safety mechanisms), we could avoid the 25MB hit that each separate Swing instance and runtime.

Every MiniApp has the ability to access web resources but runs locally, even when disconnected. Think of it as the best of Gnome Panel applets combined with server based web programs.

Here's a few more ideas for MiniApps:

  • Local Weather, Movie, and Traffic Listings with alerts, like an accident that's going to block my exit on 285 for the next four hours!
  • SuperRef: search through the dictionary, thesaurus, and quotation index to make my articles appear smarter than they actually ar.

  • MiniCal: which ties to Outlook/iCal and alerts when it's time for lunch.

  • MiniSheet: for quick calculations. Is there enough in my bank account to buy that new SouthPark DVD?

  • MiniDraw: annotate the current screen with a precise description of why feature X doesn't match the documentation, automatically CCed to the developer list

  • InstaFlame. Lets me compose short blog entries as the ideas arrive and post immediately to my blog without starting up new software or having to reconsider my ill-conceived opinion.

  • eBayLert. Tell me when I'm about to be scooped on that valuable 1961 vintage Jetson's Lunchbox.

  • SafariSearch. Let me search through books and documentation in my current Safari subscription. I want to know the syntax of JComponent.repaint() and I want to know now!

And of course the best thing about MiniApps is that they would be written in 100% Java, letting the minis run on any platform without fear of malware or viruses

Talk to me about it on Twitter

Posted August 23rd, 2004

Tagged: java.net