The majority of today’s apps is web applications (i.e. browser-based) built with HTML, CSS and JavaScript. Why would anyone want to run a desktop app these days?
Desktop apps have some technical advantages over web applications:
- Auto-away detection. Some apps need to know if the user is actively using the computer. For example, a chat app would want to set user’s status to “Away” if he goes away from the computer.
- System-wide notifications. Not all browsers support desktop notifications, and if they do, your app must ask for permission to display them. Desktop apps can display notifications right away.
- App’s icon on desktop/dock. Less tech-savvy users expect to run your app by clicking the desktop icon, not by typing in an address in the web browser.
- Login on system startup. Users may just forget to launch your web application some day. And if the app is a key part of their everyday workflow, they’d love to have it opened every day automatically.
- Easy access with ALT⌘+TAB shortcut. Don’t bury your web applications amongst tens of opened browser tabs.
The good part is: if you need any of these features, you can still build the app with your favorite web technology. All you need is a “smart client” - a desktop-based container that displays your web application. The container is responsible for handling low-level features (e.g. auto-away detection) and lets the web app use them via JavaScript API.
The development process of a smart client, compared to a native desktop app, is reduced to absolute minimum. You don’t need to build a separate version of your product that will run on desktop.
Releasing new versions of your app is also straightforward. You just update the web application. Desktop app users don’t need to install it once again.
Smart client libraries
There is no universal smart client library to publish your app on all platforms at once. You need to prepare separate apps for Mac and Windows/Linux.
- Mac OS X: macgap is the simplest way to prepare an installable web application on for OS X.
- Windows & Linux: AppJS seems like the best choice, but the project is no longer developed. I couldn’t find better solutions on the horizon.
LiveChat’s Mac app
Inspired by the macgap project, we’ve updated our native Mac application a few weeks ago.
Now the app looks exactly the same as the web version. It supports OS X notifications, and the bouncing Dock icon informs you about incoming chats. After a few minutes of inactivity, your status is set to “Not accepting chats”.
Our Mac application looks exactly like the web application.
The result: higher product stickiness
Offering smart client to our customers is definitely a great step forward. We are seeing that its users are much more engaged with the product than browser-based version users.
The product’s stickiness is 91% higher compared to the browser-based app:
A natural consequence is that users visit more pages inside the app per session:
The results show that this game is really worth playing.