Crash course in Wave and Apache Wave

This articles tries to give a brief introduction to that ‘Wave‘ thingy everyone used to talk about, explaining the concept, history overview and even how to get it running by yourself.

Quick history lesson

At the Google I/O conference on May 27, 2009, Google announced this new communication concept: “Wave”. Most technical people attending the event “got it” right away and applauded.

Later that year, Wave was open for testing through the typical invite system. Google Wave, however, was still half baked and unusable. Most of the critics dismiss it as yet another unnecessary social network, a solution waiting for a problem, etc.

Nearing the end of 2010, statistical analysis at Google showed the public reception wasn’t as good as expected. Google decides to pull the plug and open source parts of it, deviating resources to other projects.

Before the year 2010 ends, with many parts of it open sourced by Google, the small dev community gathers the pieces, and starts the new Apache Wave project.

Nowadays, in 2011, Apache Wave is actively developed by the open source community, and an alpha version can be easily run in your computer.


Cool… what was “wave” again?

For the computer literates, here you have two easy to understand comparison tables, using email as a reference:

Concept descriptionE-Mail termWave term
A piece of informationan emaila wave
The act of sending a piece of informationto email someoneto wave someone
ProtocolSMTP, POP3, IMAP...Wave Protocol
Interaction between different serversability to send email from one @domain to another @domainwave server federation
Development of the project concepts and reference softwareIETF + independent developers?Apache Wave

Software descriptionE-Mail softwareWave software
Proprietary server+webclient packageYahoo! MailGoogle Wave
Open source server+webclient packageZimbraWave In A Box
Open source serverEximGoogle FedOne
Open source clientThunderbirdGoogle Wave-Splash
Open source webclientRoundCubeMicro-Box

What can Wave be used for?

Wave aims to be a common denominator to many other communication forms. An open standard that anyone can use and implement (even in the form of proprietary servers or clients, like Google Wave). Let’s see an example:


In a common use case, your internet workflow could involve:

  • An email client running on your desktop
  • Twitter client
  • Facebook tab
  • An feed reader
  • Receiving messages from two mailing lists
  • Manually checking some random movie forums weekly for new posts
  • Get notified by email of replies to some blog post comments you wrote


In the wave world case, your internet workflow would involve:

  • A Wave client
  • Or, alternatively, go the old route: keep using the very same specific clients for each of those services, even if they use the Wave Protocol under the hood (just like Facebook Chat and GTalk run on top of Jabber).


Most importantly, and this cannot be stressed enough:

You are free to choose which clients to use as interface.

And you are also free to choose which servers to use for storing your data waves.

Now try doing that with Facebook, Twitter, Flickr…


Test a WaveInABox demo now

So you want to test the open source Apache Wave software? The wave community runs some test servers and clients on the net. The most common one is located at http://waveinabox.net, and is updated daily.

Disclaimer: WaveInABox server and client are still in very early development stage, so do not rely on them at all, and do not expect everything to work correctly.

Wave In A Box

Or deploy your own WaveInABox

Maybe you want to test it locally, perhaps play with the code, or even run it privately for personal purposes. In that case, it’s really easy to get it up and running in Linux:

# apt-get install mercurial ant default-jdk eclipse
$ hg clone https://wave-protocol.googlecode.com/hg wave-in-a-box
$ cd wave-in-a-box
$ ant compile-gwt
$ ant dist-server
$ ant -f server-config.xml -Dwave_server_domain=$HOSTNAME -Dsigner_info_store_type=file -Daccount_store_type=file -Ddelta_store_type=file -Dattachment_store_type=disk
$ ./run-server.sh

(there’s instructions for Windows and MacOSX too)

At this point, the server is running, and the web client can be accessed at http://localhost:9898.

Final words

Even if this article is very shallow, I hope it provides a different perspective of the whole subject, and helps people see the actual purpose behind the waves.

By the way, I’m reachable at stenyak@googlewave.com and stenyak@waveinabox.net. Feel free to wave me any time! 😉