Last night was the monthly Mozilla Labs open house for July. Atul, Aza and I gave a presentation about our ongoing project, working title Ubiquity.

What is Ubiquity? It’s a Firefox extension which gives you an easy way to create, share, and use commands — tiny snippets of Javascript that do cool stuff with the Web. Commands can act on web content that you select with a mouse, or on information detected in a page in a microformat, or on arguments that you type in. A command that you create can be shared with others simply by giving them the URL to a Javascript file. Commands will be exposed in multiple ways: You’ll be able to choose a command from the context-menu (the one that pops up when you right-click on web content), but also, for more involved use-cases, there will be a linguistic UI that lets you type what you want to do. We’re still in the very early stage of development, but those are our plans, in a nutshell. Atul gives a much better explanation than I can.

Because I’m thinking of Ubiquity in terms of a natural language UI, I’m calling the commands “verbs” and the content that verbs act upon “nouns”. More about this in my next post.

At our presentation last night, we showed off several useful verbs that we’ve already implemented. Ubiquity can take content you’ve selected on a page and email it to someone, pictures and formatting included. It can translate text to another language, right in the page; it can define selected words for you, map an address (and insert the resulting map into the page for you, if you like), google for things or look for them in other search engines, etc. Obviously, all of this is stuff that you can already do on the web thanks to various web applications. But normally, you would have to do an annoying dance: Select stuff on the page you’re on, copy it, open a new tab, type in a URL, find the appropriate input box on that page, paste into it, and hit a “go” button. In some use-cases you’d then have to copy the results, go back to your original page, and paste them in. Ubiquity lets you do all of this in one step and without leaving the page you’re on.

It’s no coincidence that these example commands are similar to ones we had (or wanted to have) in Enso. But Ubiquity is going to be way better than Enso. It is turning out to be many, many times faster and easier to develop a command system on the Mozilla platform than it was to do it on the Win32 platform. Plus this way we get cross-operating-system-ness for free. And the fact that it’s tightly browser-integrated and web-centric lets it do cool things that Enso just couldn’t do.

But the biggest win is that, while creating new Enso commands and publishing them was theoretically possible, it was rather difficult and obscure. In contrast, Ubiquity makes it super-duper easy to create and share verbs. We demonstrated both parts of this last night: how to create a new command with a few lines of Javascript, and how a third-party command can be added to Ubiquity simply by surfing to the page with the Javscript on it and bookmarking the page with the “ubiquity” tag.

If you are someone who thinks about web security at all, the idea of giving people arbitrary javascript to execute should be setting off alarm bells in your head right about now. There are, indeed, huge scary security issues that we have to deal with before Ubiquity can become a usable project. Atul talked about these last night, and his ideas for dealing with them; he has a very thoughtful blog post on the subject.

Ubiquity is getting some good feedback already. It’s even been noticed by ReadWriteWeb who wrote an enthusiastic article about it. (I notice happily that the article picks up on my “verb” terminology.)

We’re getting ready to give another presentation about Ubiquity to a much larger audience at the Mozilla summit next week. But if you want to try it out, you don’t have to wait until then. You can download it right now. You just have to have hg (aka Mercurial) installed:

hg clone

In an upcoming post, I’ll talk about the behavior I’ve been working on with Ubiquity’s linguistic UI, and compare it to the list of requirements I laid out last time. I’ll explain how it works in the places where it measures up to the requirements, and ask for your ideas for the places where it still falls short. See you then!


P.S. I really dislike the name Ubiquity! (Even though I think I’m the one who suggested it in the first place…) It’s too Latinate and abstract and polysyllabic, like an S.A.T. word. I hope we can replace it with a simpler, more fun name for production. Because the idea of verbs is so central to the project, yesterday somebody proposed just calling it “verbs”. As in, “Hey dude, I just made a new Verb, it’s on my page, go install Mozilla Verbs so you can try it out.” I like it. But I’m open to other suggestions.