Wave-y Extensions

This was Pamela Fox’s braindump on how to do Wave extensions in an idiomatic kind of way; this is my braindump of her braindump.


Highlighting info correctly can reduce confusion. You can check current viewer in the API so you can have a change display adaptively. Anything to make it clearer that things are happening concurrently and who’s doing what.

Wave is modal; you can have view or edit mode wave. View mode is intended to be fully private; you should leave no trace at all. The intended metaphor is email, with no tracability and a high degree of privacy for the viewer.

Mode callback method, so you can switch modes easily.


“Users are slow and dumb and don’t integrate well with APIs.”

“Why have a program do it when a robot is faster.” It’s just as well I don’t have the superpower of reading smutty double entendre into the nominally innocent comments.

Robots should assume there may be many people, diverse audience, so you need to think in terms of scalability and niceness. You kiss your mother with that robot?

CartoonyBot - turns text into images. Screwed up ability to back up and edit text, blew out page sizes, and so on. Canonical example of a bad robot.

Separate annotations & text management, so you can e.g. use syntaxy and monty synergistically. Remember the semantic web?

Robots should response to natural language type conversation, rather than locking down syntax to particular robots (e.g. /botname_command or :botname_command); if they only response to special syntaxes you may end up with robots the user wants to use on the same item having mutually exclusive invocations.

Consider toolbars as an alternative if you want to make invocation explicit - select/highight and click a button. It’s something useful and familiar, and doesn’t lock you into the mutually-exclusive syntax problem.

YouTube bot relies on a RegEx API, which is not yet publicaly available, but may be in the future. This is great for any well-formed URLs or similar regular data.

Dropdowns are another currently-closed API that may be opened. Highlight, drop-down and go.


Don’t assume about the number of players - Pamela cites joining a wave with a two player game and being stuck. When porting, think about how many can play. Teams instead of individual players, for example.

Remember Wave can be instant or slow. You should think about accommodating this. Time is fungible in Wave by default.

Multiplayer Zork! World of Zorkcraft! Can you come up with other novel spins on old games. (Personally I like the idea of Pacman with players running ghosts as well as Pacman, but I’m sure it’s been done before).

There’s not a one true answer to the question of whether multiple games should be reset within a wave, a rolling continuity of games, or a wave per game. I like option (b) if you’re playing with the same people over and over, but different games have different metaphors.

Card Games Gadget may allow you to develop your own Scrabble tiles and game. If you do, don’t call it Scrabble.

Manifest for Deplyment

Allows you to spec up the toolbar icons, dropdowns and the like.

Share installers - it’s the friendly way to send people extensions, and allow people to share them onward.

Other Extensions

Salesforce CRM has Booyah extension that integrates with Wave, including robots to have the initial conversation, co-working with a human support rep. Have a look at the featured extensions.