Ask HN: Recommendations for a desktop app development environment?
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.
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)
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.
Our priorities are as follows:
1. The final product should be easy to install for the user (ie not require them to install any additional software)
2. Decent looking GUI (doesn't have to be perfectly native looking)
3. Quick to develop in
4. Ideally single codebase, at least for Win/OSX
EDIT: cleaned up a bit and added requirements
21 comments
[ 2.6 ms ] story [ 49.3 ms ] threadIf 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.
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.
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.
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).
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.
It's a bit bloated and slow and doesn't have native widgets at all, but for a one-time wizard it should be fine.
Download TweetDeck (which is an AIR app) to get a feel for what to expect.
Also, AIR is still alive and kicking. It seems like Adobe is planning for Air to outlive (in-browser) Flash.
My biggest gripe with with AIR is that the user has to install Adobe AIR before he can install your application and you know how Adobe installations are.
Java applications can be launched by downloading a small file (JNLP).
1) Java is required to be installed, but is fairly common already.
2) Decent loooking GUI, it can look a little dated but it works.
3) Java is relatively easy to develop with.
4) Java is cross platform so it will work on Windows/OSX/Linux.
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.
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.
http://www.tidesdk.org/
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.
If you're providing a useful tool to already-committed users of your website, this might not be an issue.
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.
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.
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 Microsoft .NET 4.5 Runtime Environment pisses your users off and hurts conversion rates, etc.
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.
1. It is cross-platform (yes, to the extent) but much better than anything else out there.
2. Pluggable LaF.
3. Utilize your java skills and knoweldge.
4. Potentially - easy start on Android.
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.