8 releases
Uses new Rust 2024
| 0.4.2 | Oct 20, 2025 |
|---|---|
| 0.4.1 | Oct 16, 2025 |
| 0.4.0 | Sep 6, 2025 |
| 0.3.1 | Oct 29, 2024 |
| 0.1.0 | Aug 4, 2023 |
#1700 in Network programming
Used in steam-cdn
140KB
3.5K
SLoC
Steam-Vent
Interact with the Steam network via rust
Allows communication with the steam servers using the same protocol as the regular steam client.
State
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.
- Anonymous sessions
- Password Authentication
- QR Authentication
- Steam guard (device or email) confirmation
- Device notification confirmation
- Saved machine token confirmation
- Sending and receiving raw messages
- Making RPC calls over the connection
- Communicating with the game coordinator
- Allow using messages from protobufs not included in the project
Non-goals
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.
Documentation
The main documentation can be found at steam-vent.grebedoc.dev, additional api documentation can be at docs.rs/steam-vent.
Usage
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(())
}
Protobuf packages
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.
Credit
This is in large parts inspired by and based of @DoctorMcKay's work on SteamUser, massive credits go to all who worked on that.
Dependencies
~50–73MB
~1.5M SLoC