On Menus and Commands

Menus are a clumsy way to navigate. This is true both for hunting through reams of bookmarks (which tend to be poorly organized anyway) or a complicated start menu for local applications (also likely to be poorly organized). Menus tend to contain lots of entries you rarely use, and the ones you do often use are buried several layers deep.

The command line is a natural and more powerful interface for giving commands to a computer. A metaphor might be made between trying to communicate with another person by pointing at a word on a menu of possible choices, versus just telling them what you want. Language is far more expressive and offers nearly infinite flexibility, although it has the additional cost of having to learn the vocabulary first.

It's somewhat of a myth that only elite ubergeeks can find utility in a command-line interface. This may be true for something like the unix shell, which is a full-featured programming environment, but simpler command lines can be useful to everyone. Take the Google search engine, for example: this is one command line interface that everyone knows how to use.


Catapult is inspired by local application launchers such as KDE's wonderful Alt-F2 run dialog and Quicksilver for Mac OS X. KDE first added Alt-F2 capability coupled with web shortcuts over half a decade ago. It was revolutionary at the time, but unfortunately hasn't changed much since then.

Both KDE's run dialog and Quicksilver are great, but they have a few problems. First, they are geared toward launching local applications, ignoring the modern reality that 90% of the apps we use on a daily basis are on the web. Yes, they have web capability (KDE's web shortcuts are awesome, and the basis for much of Catapult) but one gets the feeling that it is an afterthought and not the primary focus.

Second, it's difficult to add new launchers. KDE's web shortcuts aren't too bad, but they do require navigating a bunch of menus (oh the irony!) to a configuration page, and then requiring a somewhat obtuse syntax for inserting the search terms. Quicksilver... well, it seems to be extremely powerful, but at the expense of an extremely challenging learning curve. Even something as basic as adding Google search capability is a 9 step process which is not at all intuitive. Certainly it doesn't seem like the sort of thing that just anyone could learn to do, which is a shame, because the concept behind it is not terribly complex.

The final problem is that both of these launchers are heavily tied to the platform they are running on. Now that all our important applications are web based it's easy to hop between operating systems. But if the tools we use to navigate to those apps vary by operating system, some of this benefit is lost.

Enter Catapult

Catapult is completely web-based, which solves both the focus on local applications and cross-platform capability. The launchers are written in javascript and executed by the user's browser. Adding new launchers and managing your launcher kit is straightforward. And when you create new launchers they default to sharing with other users, so most users should find they rarely even need to write launchers for popular apps, they can just grab those written by others.

Note that the launch page command entry box will default to sending you to whatever URL you enter, so you need not use your regular address bar or otherwise switch away from it when you want to navigate to a website by entering or pasting the URL.

Tips & Tricks


You can invoke Catapult through a RESTful call:

http://catapult.dusk.org/launcher?launch=[launch command]

The launch parameter should be urlencoded, naturally. Here's an example of how this API can be used: create a catapult script to launch pages straight from the unix command line.

#!/usr/bin/env ruby

require 'cgi'

cmd = ARGV.join(' ')
cmd = CGI.escape(cmd)

url = "http://catapult.dusk.org/launcher?launch=#{cmd}"

system("firefox #{url} &")


When you run a launcher, only the command is sent to the server, which retreives the javascript that will execute the command. So for example, if you did a Google websearch, the search terms would never be sent to the Catapult application, only to Google. In other words, using Catapult to do a Google search is no less private than just going straight to Google.

Note that this is not true for the API described above, since the entire command is encoded into the URL.

The Competition

The only other comparable app I've found is Yubnub. It's similar in quite a lot of ways. Its main strength seems to be that, having been around longer, they have a lot more commands, and the interface for creating complex commands from just a URL is more powerful. On the other hand, there seems to be no ability to make a full script, so a lot of stuff you can do with a single Catapult launcher is not possible there. For example they have separate commands for composing a new gmail email vs. just opening your inbox, instead of using a subcommand (i.e. "gmail" and "gmail someone@somewhere.com").

Another small point is that the command processing is done server-side instead of in javascript in your browser. This probably makes it easier to debug your commands, but it does make it slightly slower for the round trip to the server, and also doesn't offer the same privacy protection.

It's a great app though, definitely check it out.


Catapult was written by Adam Wiggins. You can reach me at .