Wave's Web of Protocols

Seems that most still believe Google Wave primarily uses XMPP to pass data around. Turns out, XMPP is only used for server to server federation. Joe Gregorio has a good overview of the actual APIs and protocols used in Wave, but I still found it easier to create a diagram:

Google Wave Protocol Diagram

I’m actually concerned about the different protocols and the fact that only the XMPP federation protocol is documented. The other two protocols: the json-rpc robot protocol and the GWT generated client-server protocol have no documentation. Moreover, the protocols are generated rpc protocols and make heavy use of serialized data. I haven’t dug into them too closely yet, but I wouldn’t be surprised if protocol buffers show up.

Ideally, the robot protocol would be identical to or a subset of the client-server protocol. Joe contends that the client-server protocol doesn’t matter, but I respectfully disagree. If I want to create say, an wave client mode for emacs, my only option at the moment is to (1) run my own private wave server and (2) invent yet another client-server protocol for my emacs client. Then my emacs client can talk to my private wave server and it can use the XMPP-based federation protocol to send waves out to other servers. However, if I understand the architecture correctly, this does not allow me to use an existing Google Wave account. I can only use my Google Wave account with Google’s GWT based client. This effectively couples the client and server, making them into one monolithic, opaque application.

At the time of writing, there is a console client used for testing purposes. It’s written in Java and uses protocol buffers to talk to a test Wave server. However the wave protocol website currently states that:

The protocol that it talks to the server is defined only in code and isn’t something we are working on standardizing at this time, but we are open to hosting those discussions on the wave-protocol mailing list and believe that the protocol used in the demo client is a good place to start.

If Google is serious about Wave replacing email, wikis, IM and everything else, then the client-server protocol is something that has to be properly worked out.

Update: You can download the OmniGraffle file here