| Crates.io | steam-vent |
| lib.rs | steam-vent |
| version | 0.4.2 |
| created_at | 2023-08-04 18:48:00.976986+00 |
| updated_at | 2025-10-20 20:48:19.611033+00 |
| description | Interact with the Steam network via rust |
| homepage | |
| repository | https://codeberg.org/steam-vent/steam-vent |
| max_upload_size | |
| id | 935562 |
| size | 259,752 |
Allows communication with the steam servers using the same protocol as the regular steam client.
Most forms of authenticating to steam are implemented, and you can send requests for using protobufs that are either packaged by the project or that you bring yourself.
While the api isn't fully stable yet, it's unlikely to receive major changes at this point.
This crate intentionally does not include any high level apis, instead it's
encouraged to implement high level apis in separate crates that wrap a
Connection.
See steam-vent-chat for an example high-level library.
The main documentation can be found at steam-vent.grebedoc.dev, additional api documentation can be at docs.rs/steam-vent.
Note that this project is still in early development and apis might see large changes.
use std::error::Error;
use steam_vent::connection::Connection;
use steam_vent::proto::steammessages_gameservers_steamclient::CGameServers_GetServerList_Request;
use steam_vent::serverlist::ServerList;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let server_list = ServerList::discover().await?;
let mut connection = Connection::anonymous(server_list).await?;
let mut req = CGameServers_GetServerList_Request::new();
req.set_limit(16);
req.set_filter(r"\appid\440".into());
let some_tf2_servers = connection.service_method(req).await?;
for server in some_tf2_servers.servers {
println!(
"{}({}) playing {}",
String::from_utf8_lossy(server.name()),
server.addr(),
server.map()
);
}
Ok(())
}
Game-specific probufs are packaged for the following games:
They can be used by either enabling the features in this crate or by depending on the protobuf package directly.
This is in large parts inspired by and based of @DoctorMcKay's work on SteamUser, massive credits go to all who worked on that.