Cheese talks to VoiDeD (about Vapor)

Recently, I had the opportunity to have a chat with VoiDeD (Ryan Stecker), one of the key developers behind Vapor, an open source cross platform lightweight Steam chat client.

What motivated you to start Vapor, and what motivates you to continue working on it?

Vapor grew out of the need to have some sort of test project while we were developing the underlying library (SteamKit2) that handles all the networking with the Steam network. There was another project that existed before Vapor which acted as a proof-of-concept client, but it wasn't very well designed and existed entirely for testing code as we wrote it. Once we got the library to a semi-stable point I felt that it would have been useful for myself and others to have a light, chat-only alternative to Valve's Steam client.

What kind of feedback/reception have you received from Steam users? Are there any specific comments or complaints that stand out in your mind?

We get quite a bit of feedback from Facepunch users, which is primarily the place where our team posts updates on the software we work on. It's hard when you're a small group of developers to allow users to provide easy feedback, so we mostly post on forums. The most prominent comments that stand out would be when someone mentions that Mono isn't very crossplatform, and I tend to agree with them, as Mono doesn't work flawlessly on every system.

I'm pretty happy with how Vapor currently is. Although, if I had time I'd most likely use a more linux friendly UI framework like gtk#.

The download count on bitbucket is 80,000 for the current version (as at early August 2011). Do you have any thoughts on what this figure could indicate, and how accurately do you think it represents the Linux/Steam community?

The download count is most likely a result of some hooligan spamming downloads on the website, as it abruptly spiked on some day a while back (mid June 2011).

The numbers before the spike weren't too high, maybe in the 100-200 range. It's hard to estimate what the true download count would be now, as we don't get too much visibility by just releasing on Facepunch. Although sometimes Vapor gets mentioned here and there on other sites such as in a few comments on reddit.

Do you have any milestone features that you're looking forward to implementing in Vapor?

Some features I want to eventually implement are the ability to chat in groups, alongside a few redesigns of some poor internal code that needs improvement.

Where do you see the project in two years' time?

Not sure really. I'm hoping people pick up on our work and try to make more alternative clients and libraries. It'd be nice to have a whole selection of libraries in different programming languages for developers to choose from in the future.

Are there any hurdles or problems that you found specifically problematic whilst developing Vapor/SteamKit2? Likewise, are there any pleasant surprises that stand out?

The first few months of development on SteamKit2 were spent figuring out an old relic of the Steam protocol, a TCP protocol called Steam2. It was really the most time consuming part of our whole initial development process. About a year down the line since then, and Valve has changed things up a bit, and that protocol is no longer required (except for content downloading), so all that work was really just thrown away.

I think the biggest surprise I have is how far we've come. We used to have a pretty complicated workflow for updating any of the networking code which defines which messages the client can send/receive, but today we've written up some useful tools which simplify the majority of the time consuming work.

Can you describe your development environment? What toolsets do you make use of, and why?

My development environment is mostly just Visual Studio, and occasionally running a few custom written tools we have that process the steam binaries, or dump network traffic. We also have an interesting solution to defining all the possible network messages.

Instead of taking the tedious time to write out all the possible network messages and their associated serialization/deserialization methods, we simply write out the definitions in our own "Steam Language", which can then processed into either C# or Java code.

Have you received any comments from Valve? *

We emailed a contact at Valve that we had emailed before about bug fixes for a Valve product, but we never received an official response. It's hard to really understand Valve's stance on our work, but hopefully someone in there doesn't mind what we're doing.

Are there any conflicts that you're aware of with the Steam EULA? *

There's a restriction clause in the Steam Subscriber Agreement that restricts reverse engineering and disassembly, the key methods by which the library was created. We've never been directly contacted by Valve about this, and hopefully we'll always be on friendly terms.

Why Mono/C#? *

We chose c# because it was the quickest way to develop a library that most other developers could pick up and use easily. Mono was partly an afterthought, but it turned out to work well in our favor.

What is your favourite Steam game? *

My favorite game would most likely be TF2.

Thanks heaps for your time, Ryan.

A note from cheese

A note from Cheese

Thanks for reading!

Questions marked with an asterisk (*) have been submitted by community members/friends/people who are not me (in this case, xpander and flibitijibibo from the #steamlug irc channel).

If you'd like to know more about Vapor, this facepunch thread is probably the best place to start. Downloads can be found here, as can the source code.

As it's written in C#, Vapor can be run on many non-Windows platforms using the Mono project.

You can email me at

This interview was first published on the 9th of August 2011.