We need to build a small downloadable client software to complement our web app. Basically users will download this, install and it will guide them through a series of steps to help them upload certain files.<p>Most of the current solutions in this space use Java applets, which are often not supported by default and thus hard for our users (who are relatively non-technical)<p>Would love to hear your recommendations for a good solutions to this. Ideally we'd like to have one codebase, but having separate executables for Win/OSX/Linux would be fine.<p>Our priorities are as follows:<p>1. The final product should be easy to install for the user (ie not require them to install any additional software)<p>2. Decent looking GUI (doesn't have to be perfectly native looking)<p>3. Quick to develop in<p>4. Ideally single codebase, at least for Win/OSX<p>EDIT: cleaned up a bit and added requirements
<a href="http://en.wikipedia.org/wiki/Java_Web_Start" rel="nofollow">http://en.wikipedia.org/wiki/Java_Web_Start</a><p>Java applications can be launched by downloading a small file (JNLP).<p>1) Java is required to be installed, but is fairly common already.<p>2) Decent loooking GUI, it can look a little dated but it works.<p>3) Java is relatively easy to develop with.<p>4) Java is cross platform so it will work on Windows/OSX/Linux.
It depends upon your language of choice; I'd advise you to use a well known and well supported cross-platform GUI toolkit (by order of personal recommendation): WxWidgets, Qt, Gtk, Tk, GNUStep,Fltk ... It largely depends upon your familiarity with the toolkit, the quality of available bindings for your language of choice, and the importance (or not) of having a nice GUI, following more or less closely the host system visual guidelines.<p>Generally I'd naturally go for WxWidgets, which is mature, relatively easy to use, provides bindings for about any language in common use, and gives a good look-and-feel and OS integration on Windows, Mac OS X and Gnome/KDE desktops.<p>Many people (more often Apple purists) will pretend that cross-platform toolkits are ugly and don't fit well anywhere. That's blatant nonsense, IMO; nowadays in fact it's quite the opposite, even the old cranky Tk can be made decent-looking without much work (but good knowledge of its internals).<p>Java applets are a real problem mostly on windows, because windows hasn't come with Java pre-installed for a very long time; the JRE is a complete PITA to manage (long, slow updates about each time you need it...), then Java desktop apps have pretty horrible startup time and heavy memory usage. Python, or Perl, or even C/C++/ObjC are probably saner and easier choices overall.
If your goal is to provide a quality solution for your users, you should be writing it in the native platform SDKs.<p>If your goal is to try to save yourself some effort, even though it will negatively impact your users, then you should use whatever set of cross-platform tools you can be successful in.
IMO, if conversion rates are a concern, the need to download a separate runtime first makes Java, newer versions of .NET, etc non-starters. Note that Adobe AIR doesn't require this anymore: <a href="http://www.adobe.com/devnet/air/articles/air3-install-and-deployment-options.html" rel="nofollow">http://www.adobe.com/devnet/air/articles/air3-install-and-de...</a><p>If you're providing a useful tool to already-committed users of your website, this might not be an issue.<p>If slightly non-native looks aren't a concern, go with whatever's easiest. I'd choose Qt/C++, but I'm already comfortable with them. py2exe/py2app are probably reasonable if you know Python.<p>Consider outsourcing this if you can. The details will occupy a lot of your time. For instance: you ideally want both a standard Windows installer (put together with something like NSIS), and to sign your installer + installed executable to avoid Windows warning your users that it's probably malware. That's a day's work for someone who has done it before, probably a week for you to do it the first time.<p>EDIT: that said, if you do outsource, beware that most contractors will be blind to their preferred environment's sore spots. Java+Swing devs don't account for Swing apps looking like ass, .NET devs don't care that needing to find, download and install the <i>Microsoft .NET 4.5 Runtime Environment</i> pisses your users off and hurts conversion rates, etc.<p>EDIT 2: test, test, and test some more. Just because your app runs fine on Windows XP doesn't mean it will work fine on Windows 7 64-bit, and vice versa. If you're eligible (most startups are), it's worth signing up to Microsoft BizSpark just to get access to ISOs of every Windows version from XP up from MSDN.
Look into Qt. It's cross platform and widely used and I think you can even use JavaScript if you aren't familiar with other programming languages.<p>Also personally for a simply program I would not have the users install it. A self contained executable would be sufficient and less of a hassle. You can still put store data in the user's own configuration directory.
python + pyside + {py2exe, py2app} is pretty nice, but it still has the problem of users having to find a file that they downloaded to run it.<p>If you know what browser they're running the extension apis for firefox, chrome, and safari give you access to the OS and the ability to run your own native code.
I'd pick Qt. If you are more familiar with web technologies, the QML based UI-design comes naturally. If your app is very simple (like static content with state changes), you can code most of it in QML/JavaScript. It's cross-platform, quick to develop, native UI, etc.
You might have some luck with wrapping a web application into a desktop one by using something like Tide SDK (formerly Titanium Desktop). You wouldn't get a proper desktop application, but I think it would definitely work as a file uploader and it should be easier for your team to manage.<p><a href="http://www.tidesdk.org/" rel="nofollow">http://www.tidesdk.org/</a><p>Things like Adobe AIR would serve the same purpose, but the user experience isn't that great, arguably on the same level with Java if not worse.
Since you already hava java applets, looks like developing it in Java Swing is a no brainer. Bundle JVM with your application. Yes, it will take ~50 megs in size, but:<p>1. It is cross-platform (yes, to the extent) but much better than anything else out there.<p>2. Pluggable LaF.<p>3. Utilize your java skills and knoweldge.<p>4. Potentially - easy start on Android.
If it's just for uploading files, I would (if you haven't already) seriously consider your options for just building it into the web app.<p>Otherwise, I'd vote Qt/C++ as I've seen quite a few solid, fast apps built on this platform, though I'm not a C++ dev.
Have a look at Real Studio <<a href="http://www.realsoftware.com/realstudio/>" rel="nofollow">http://www.realsoftware.com/realstudio/></a>. I've used it for several cross platform projects and it's reasonably inexpensive and produces decent apps.
Thanks everyone for the recommendations so far! Looks like we need to check out Qt and wxWindows. BTW does anyone have any experience with Adobe Air for this? (Not sure if still maintained or not..)
dropbox uses python extensively in their client apps, with some bindings to native platforms.<p>Personally, I'm looking into doing c#/mono and either qt or sdl for graphics, but wouldn't really recommend it unless your app depends on graphics speed.