Skip to content

Repository files navigation

steamie

A terminal-native Steam client written in Rust, powered by Ratatui.

Browse your library, chat with friends, and launch games — all from a fast, keyboard-driven TUI, with no browser and no Steam window in your way.

Crates.ioCILicense: MITRust 1.85+PlatformsX

Unofficial. steamie is an independent project and is not affiliated with, endorsed by, or sponsored by Valve or Steam. It talks to Steam's own connection-manager protocol the same way the official client does; use it at your own discretion.

Table of Contents

Features

  • Login over the Steam CM protocol — QR-code sign-in (default) or username/password, no Web API key required.
  • Friends — your friends list, loaded directly from Steam.
  • Library — owned games and tools, filtered Steam-style by app type (t cycles All / Games / Software-Tools).
  • Real-time 1-on-1 chat — a Chat tab with conversation list, scrollable history, and a composer; messages send and arrive live over the modern FriendMessages service, with local history kept per-conversation.
  • Per-game playtime & achievements — native, pulled over the protocol (no scraping, no API key).
  • News — sourced from your library, recently-played, and wishlist apps.
  • Launch games — start any installed game from the library. By default Steam is launched silently (minimized to the tray, no window); an experimental mode can launch DRM-free titles with no Steam at all. See Launching games below.

Installation

steamie requires Rust 1.85+ (it uses edition 2024) when building from source.

# Cargo (installs the `steamie` binary)
cargo install steamie
# Arch Linux (AUR) — prebuilt binary (faster)
yay -S steamie-bin
# Arch Linux (AUR) — build from source
yay -S steamie
# Homebrew (macOS)
brew install LargeModGames/steamie/steamie
# Windows (winget)
winget install steamie

Or download a prebuilt binary from GitHub Releases.

Build from source

git clone https://github.com/LargeModGames/steamie.git
cd steamie
cargo build --release
./target/release/steamie

cargo run --bin steamie works too for a debug build. No special system libraries are required — networking uses rustls and desktop notifications use zbus, so there's no OpenSSL, X11, or audio dependency to install.

Configuration

Configuration is optional — steamie runs with sensible defaults. To customize, create ~/.config/steamie/config.toml:

# api_key = "YOUR_STEAM_WEB_API_KEY" # optional fallback; https://steamcommunity.com/dev/apikey# steam_id = "76561198XXXXXXXXX" # optional; auto-detected after login
[auth]
method = "qr"# "qr" (default) or "credentials"account_name = ""# optional hint for credential login
[ui]
tick_rate_ms = 250# default 250theme = "dark"# default "dark"
[chat]
notifications_enabled = true# terminal bell on incoming messagedesktop_notifications = false# also raise a notify-rust desktop notificationhistory_retention_days = 30# local chat history kept; 0 = keep everything
[launch]
steam_path = ""# override; auto-detected (registry / default path) when emptydry_run = false# log the exact launch command instead of spawning itkill_steam_on_exit = false# if steamie started Steam, shut it down when the game exits (best-effort)silent = true# start Steam minimized to tray (no window); false shows itdirect_launch = false# experimental: launch DRM-free-listed games with NO Steam runningforce_direct = false# experimental: with direct_launch, try the direct path for any installed game
[launch.game_args] # optional per-game args, keyed by appid string# "730" = "-novid -high"

Usage

Run steamie to start the UI. Press ? at any time for the in-app keybinding help.

KeyAction
j / Move down
k / Move up
g gJump to top
GJump to bottom
EnterOpen detail · launch in detail view
lLaunch highlighted game
LRecently-played quick-launch overlay
Esc / BackspaceGo back
/Search library
tCycle library type filter (All / Games / Software-Tools)
rReload current view
15Switch tab: Library · Friends · Wishlist · News · Chat
?Toggle help
q / Ctrl+CQuit

Launching games

From the Library tab: press l to launch the highlighted game, Enter to open its detail view (then Enter/l to launch), or L for a recently-played quick-launch overlay.

By default the game launches through the official Steam client, but Steam stays out of your way: it starts minimized to the system tray with no window (steam -silent -applaunch <appid>), the game appears, and DRM/presence work normally. Set silent = false if you'd rather see Steam's window.

Experimental — launch with no Steam at all. Games that are confirmed to run without the Steam client (DRM-free titles) can be launched directly from their executable, so Steam never wakes. Enable it with direct_launch = true; a game is eligible when it's on the community DRM-FREE-GAMES.md list and installed. Anything else falls back to the silent Steam launch above. The status line shows ▶ Launched X (no Steam) when it goes direct.

kill_steam_on_exit only ever shuts down a Steam that steamie itself started, and is best-effort (reliable on Windows, weaker on Linux, a no-op on macOS). Set dry_run = true to preview the exact command a launch would run without starting anything.

Contributing to the DRM-free list

DRM-FREE-GAMES.md is a community-maintained table of Steam games that run with Steam fully closed. To add a game: quit Steam, confirm the game still launches from its steamapps/common/<game>/ executable, then add a row with its AppID and name and open a PR. You can also keep a private list at ~/.config/steamie/drm-free.md (same format).

Limitations

  • Direct launch needs the library load to have populated PICS launch info; otherwise it falls back to Steam. Proton/Wine prefix wrapping for the direct path is not yet implemented (Steam still applies Proton itself for the mediated path).
  • force_direct on a DRM-protected game spawns an executable that will bounce (Steam isn't running) and won't auto-recover.
  • kill_steam_on_exit detection is best-effort: reliable on Windows (registry), weaker on Linux, a no-op on macOS.
  • Launch arguments are whitespace-split (no quoted-argument grouping).
  • Group chat is not yet supported (1-on-1 only); the chat list is populated as conversations arrive or are opened, and per-message wall-clock timestamps aren't displayed yet.

Architecture

steamie is a Cargo workspace with three crates:

  • steamie-api — Steam Web API / Store API HTTP client.
  • steamie-core — config, session, caching, the game launcher, and local chat history.
  • steamie — the ratatui terminal UI (produces the steamie binary).

The raw Steam connection-manager protocol (WebSocket connection, auth, friends, service calls) lives in a separate crate, steam-cm-protocol (crates.io).

Development

cargo run --bin steamie # run (debug)
cargo build --release # release build
cargo check --workspace # type-check everything
cargo test --workspace # run tests
cargo clippy --workspace --all-targets -- -D warnings
cargo fmt --all # format

See CONTRIBUTING.md for the full contributor guide.

Roadmap

  • Group chat (ChatRoom.*)
  • Proton/Wine prefix wrapping for the direct (no-Steam) launch path
  • Per-message wall-clock timestamps in chat
  • Preloading the conversation list from disk on startup
  • Quoted-argument grouping for launch options

Have an idea? Open a Discussion or an issue.

Contributing

Contributions are welcome — code, docs, bug reports, and additions to the DRM-free games list. See CONTRIBUTING.md and our Code of Conduct.

Security

Found a vulnerability? Please report it privately — see SECURITY.md.

Maintainer

Built and maintained by LargeModGames.

License

MIT.

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Security policy

Stars

9 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages