Introducing Apache Wave

Monday, December 6, 2010 | 4:03 PM


One of the best outcomes from November's Wave Protocol Summit was a proposal for Wave to enter the Apache Software Foundation's incubator program. Apache has a fantastic reputation for fostering healthy open source communities that create great software. Last week, that proposal was accepted, and we're spinning up the project infrastructure so that the community can continue to grow in the Apache way.

During the summit, it became quite clear that there is a healthy community of startups, independent developers, and industry partners enthusiastic to continue development of the Wave Federation protocols and Wave in a Box product. We've posted videos of the technical talks and demos presented throughout the summit so that those who couldn't make it to San Francisco needn't miss out.

The final days of the summit were dedicated to technical design and coding. Progress since then includes significant improvements to the wave panel, visual enhancements to the login pages, gadgets hooked up and working, improved development set-up and documentation, and a draft HTTP transport for wave federation.

In recognition of this work, we're proud to announce that the open source project leadership is expanding to include a number of new committers from outside Google: Tad Glines, Michael McFadden (Solute), James Purser, Ian Roughley (Novell), Anthony Watkins (SESI), and Torben Weis (University Duisburg-Essen). They are joining graduated Google interns Joseph Gentle and Lennard de Rijk as trusted contributors who have demonstrated high quality code and valuable design insight.

The creation of Apache Wave will serve to accelerate the growth of the existing community with strong open source processes. If you'd like to get involved, please join the Apache Wave mailing list (send an email to We're looking forward to working with you.

This Week's Wave Protocol Summit: Updates

Wednesday, November 10, 2010 | 6:10 PM


We've just wrapped up day 3 of this week's Wave Protocol Summit in San Francisco. Developers and industry partners have gathered from all over the world to discuss the architecture of Wave, opportunities for use in enterprise, government, and consumer technology, and the future of the open source project. The last few days have included a great mix of architecture presentations, technical discussions, and interesting demos using Wave technology (WaveLook, Novell Vibe,, and others).

Since the Wave in a Box announcement in September, progress has been rapid. We've recently added:

Wave in a Box "out of the box"

You can keep up to date by following the Progress Reports wave.

For the rest of this week we'll be hacking on Wave in a Box, helping new contributors tackle some starter projects, resolving open issues, and adding even more functionality.

As a reminder, we'll continue running at least through the end of the year. We've also recently introduced a wave export feature. In addition, we're working on ways for you to access waves through Google Docs and we hope to share more on our progress soon.

If you're following along from home, we'll be sharing videos following the event -- but please join us in the Wave Protocol group.

Join us at the Wave Protocol Summit

Monday, October 4, 2010 | 3:39 PM


The Wave in a Box project is shaping up well and we're now posting regular progress reports to the group forum (the most recent is here). We've also created a list of starter projects, easy tasks for developers to get started contributing to the codebase. You can chat with some of the Wave engineers at the upcoming online office hours (in Google Wave). The next one is on Monday (Tuesday down under) - details are in the forum.

To bring the developer community together we are hosting a Wave Protocol Summit in San Francisco, November 2010. Through the summit we aim to grow the Wave developer community, share technical knowledge, and discuss the future of Wave technology and its community. The summit will be targeted towards technical people interested in using, contributing to, or building on Wave technology. Content will include:

  • technical talks on specific aspects of Wave technology,
  • problem solving around open technical issues,
  • discussions about project organisation and governance, and
  • group coding sessions (fun!).

The summit will be three days of talks and discussion (November 8 - 10) followed by two days of coding (November 11 - 12) on Wave in a Box and federation. We're still working out the detailed schedule, so stay tuned to the forums for further details (and give your feedback).

If you would like to join us, you can request a seat (due to capacity constraints, we'll confirm your seat in the coming weeks). To help improve the summit, please also suggest or request session content of particular interest to you.

In the meantime, see you on the forums!

Wave open source next steps: "Wave in a Box"

Thursday, September 2, 2010 | 5:48 PM


Since the announcement that we will discontinue development of Google Wave as a standalone product, many people have asked us about the future of the open source code and Wave federation protocol. After spending some time on figuring out our next steps, we'd like to share the plan for our contributions over the coming months.

We will expand upon the 200K lines of code we've already open sourced (detailed at to flesh out the existing example Wave server and web client into a more complete application or "Wave in a Box."

This project will include:

  • an application bundle including a server and web client supporting real-time collaboration using the same structured conversations as the Google Wave system
  • a fast and fully-featured wave panel in the web client with complete support for threaded conversations
  • a persistent wave store and search implementation for the server (building on contributed patches to implement a MongoDB store)
  • refinements to the client-server protocols
  • gadget, robot and data API support
  • support for importing wave data from
  • the ability to federate across other Wave in a Box instances, with some additional configuration
This project will not have the full functionality of Google Wave as you know it today. However, we intend to give developers and enterprising users an opportunity to run wave servers and host waves on their own hardware.

Since the beginning, it has been our vision that the Google Wave protocols could support a new generation of communication and collaboration tools. The response from the developer community to date has been amazing and rewarding. Even more so now, we believe that developers and other projects are a critical part of this story.

While Wave in a Box will be a functional application, the future of Wave will be defined by your contributions. We hope this project will help the Wave developer community continue to grow and evolve. We'll discuss more technical details of our plan on the Wave Protocol Forum, which is the best place to keep up with the latest progress on the open source project and learn how you can contribute.

Wave on

Upcoming Wave Talks: Michigan & Washington, DC

Monday, August 2, 2010 | 8:44 PM


Every so often, I leave this beautiful city of Sydney, Australia and depart for foreign lands to meet developers from around the world. This time, I'm heading to the states and dropping by two GTUGs (Google Technology User Groups) to talk about Google Wave and the APIs:

After the GTUG talks, I'll also be swinging by the HTML5 GTUG campout in San Francisco, setting up waves for the teams to document their progress and ask questions.

If you're in the area, I hope to see you there!

Update: In light of the recent update on Wave, the talks have changed topic and will now be on Google APIs: A-Z.

Wave Visualizer: Turning Threads into Trees

Friday, July 30, 2010 | 4:45 PM


Two years ago, I discovered the JavaScript InfoVis Toolkit, a really cool library for doing visualizations in Javascript, like force-directed graphs, hypertree, treemaps, sunbursts, and more. Since then, I've been looking for an excuse to use the library in conjunction with a Google API, and after our latest API release, I found the perfect use.

A few weeks ago, we released a new feature in the data and robot APIs: threads. This feature means that developers can render threaded waves in alternative clients and export waves to other formats while retaining their true structure. It also means that I can finally use the InfoVis Toolkit, in order to visualize the threads in a wave as a structured tree.

To create the visualization, I started with the code for the Inbox Checker sample, a Python App Engine app that asks a user to authenticate (via OAuth), and then shows them their inbox and any wave they click on. I modified that app to output JSON instead of HTML for each wave, and I piped that JSON into the SpaceTree class from the toolkit.

Here's an side-by-side example of how a wave might look like in the client, and what it looks like as a SpaceTree:

You can try the app out for yourself here: Wave Visualizer. After granting access to the app, you can click each of the waves in your inbox and browse the tree for it. As you mouse over each blip, you'll see a snippet of the content of the blip in the tooltip. When you click on a blip, you'll be taken to that exact blip in the Wave client, utilizing our other new feature: blip linking.
(You can also try out the "Timeline" view, which shows the sequence of blips over time, using the Google Visualization API).

This app shows off one of my favorite features of Wave - flexibly structured conversations. Some waves are very flat long trees, and others are wide and deeply nested, and they are all made possible by the Wave conversation model. And now, thanks to the new Wave data APIs, apps like this are possible.

Enjoy playing around with the visualizer, and if you have any questions about building apps like it, stop by the Wave API forum and let us know!

Wave UI: Making your gadgets look & feel Wave-y

Thursday, July 29, 2010 | 6:16 PM


As part of my Google I/O talk on "Anatomy of a Great Extension", I talked about the optimal look & feel for Wave gadgets. On one hand, if your Wave gadget is based off an existing website, like the 6Rounds gadget, then we recommend mimicing the UI of your website inside the gadget, so that your existing users feel like they're using an extension of your website into Wave. On the other hand, if your Wave gadget is independent and designed purely for Wave, like many extensions in the gallery, then we suggest mimicing the UI of the Google Wave client itself, so that users feel like the gadgets fit inside their environment, and so that waves with multiple independent gadgets look cohesive. To make that easier for developers, we've introduced a new feature to the Wave Gadgets API, the wave.ui library, which makes it easy to turn your gadget elements into wave-styled elements.

For example, you might start with an anchor with some javascript onclick behavior:

<a id="button" href="javascript:void(0)" onclick="doIt()">Do Cool Stuff!</a>

You can then call makeButton and pass in the anchor element:


And, presto, your button will be wave-styled like this:

The wave.ui library also offers the loadCss, makeDialog, and makeFrame methods, and will expand to include additional methods as needed by developers.

For examples of gadgets using the new wave.ui library, check out the Flammard bible bot, which uses makeFrame for a multi-tabbed interface, or the Google Maps gadget, which uses makeDialog for a welcome screen and makeButton for the info window buttons.

As usual, please let us know in the forum how you're using this feature and if you have any questions.

Enjoy wave-styling!