Skip to content

Commit b2f46b6

Browse files
authored
Merge branch 'rust-remake' into codex/implement-steam-cloud-sync-logic-i0c8hs
2 parents dc80550 + 16a7466 commit b2f46b6

4 files changed

Lines changed: 127 additions & 232 deletions

File tree

.github/workflows/rust.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,4 @@ jobs:
5252
uses: actions/upload-artifact@v4
5353
with:
5454
name: steamflow-deb
55-
path: |
56-
target/debian/*.deb
55+
path: SteamFlow/target/debian/*.deb

README.md

Lines changed: 64 additions & 193 deletions
Original file line numberDiff line numberDiff line change
@@ -1,203 +1,74 @@
1-
<img src="Assets/opensteam-logo.svg" alt="OpenSteamClient logo" title="OpenSteamClient" align="left" height="65" />
1+
<img src="Assets/opensteam-logo.svg" alt="SteamFlow logo" title="SteamFlow" align="left" height="65" />
22

3-
# OpenSteamClient (C# version, still in heavy development)
4-
A partially open-source Steam frontend for Windows and Linux
3+
# SteamFlow
4+
A custom, lightweight Steam launcher and client written in Rust.
55

6-
# Current development status
7-
Everything below is blockers for release. Lots of stuff that's only documented in my head is also blockers. Lots of code cleanups are due.
8-
Stuff marked later can wait for after we fix the rest of these things.
9-
Stuff marked future can be done eventually or just completely ignored
10-
Stuff marked rebranch-blocker is required to be solved before replacing the main branch.
11-
- [ ] `steam://` protocol handler
12-
- [ ] Startup wizard
13-
- [ ] initial settings
14-
- [ ] steamapps linking
15-
- [ ] Backend stuff:
16-
- [x] (optional) JITEngine classgen with fields
17-
- [x] Callback system
18-
- [ ] Make more performant and de-spaghettify
19-
- Chokes a bit right now with the HTML rendering
20-
- [ ] Misc code cleanups
21-
- [ ] Fix TODO:s and BLOCKER:s
22-
- [x] Callresult system for non-callback results (needed for steamwebhelper/chromehtml/storepages)
23-
- [ ] Make not spaghetti
24-
- [x] Account system:
25-
- [ ] Profile pictures
26-
- [ ] QR code in the loginwindow doesn't have bottom margin
27-
- [x] 2FA
28-
- [ ] 2FA window improvements (the layout is VERY crude)
29-
- [x] Client settings UI
30-
- [x] Library folder management (rebranch-blocker)
31-
- [x] Compat settings (rebranch-blocker)
32-
- [ ] Persona name change
33-
- [ ] Download speed cap
34-
- [x] Fix CPU fan speeding due to IPCClient
35-
- [x] Friends list
36-
- [x] localizations
37-
- [x] Auto-updating "offline since" timer
38-
- [ ] Online, InGame, Offline sorting
39-
- [ ] Chats
40-
- [x] Join friend's game
41-
- [ ] Different colours for different statuses
42-
- [ ] Rich presence
43-
- [ ] Animated avatars
44-
- [ ] Avatar frames
45-
- [ ] Miniprofiles
46-
- [ ] Library UI
47-
- [ ] Game news and patch notes
48-
- [x] Search bar
49-
- [x] Collections backend
50-
- [ ] Needs to have edit functionality
51-
- [x] Sync to the cloud
52-
- [ ] Collection editing GUI (later)
53-
- [x] Games list
54-
- [ ] Stop using TreeView
55-
- Perf. problems
56-
- Stupid "Name" hack.
57-
- [ ] Context menu for launching, settings, etc
58-
- [ ] Focused game view (library art, friends who play, etc)
59-
- [ ] Friends who play section (later)
60-
- [ ] Store, Community, Workshop, etc buttons (later)
61-
- [ ] Settings button
62-
- [ ] Edit collection button
63-
- [ ] Custom library art
64-
- [ ] Game settings page
65-
- [ ] Overlay settings (later)
66-
- Needs to wait until we actually get an overlay
67-
- [ ] Cloud settings
68-
- [ ] How much space is used
69-
- [ ] Cloud file viewer UI (later)
70-
- [ ] Launch settings
71-
- [x] Launch settings dialog
72-
- [ ] Set command line
73-
- [ ] Set default launch option (later)
74-
- [ ] Visualize the full launch option in the command line box (later)
75-
- [ ] Add custom launch options (later)
76-
- [ ] Lang settings
77-
- [x] Beta branch selection (rebranch-blocker)
78-
- [x] Compat settings (rebranch-blocker)
79-
- The API seemingly has a way to set compat strings like forcelgadd, explore adding this functionality (later)
80-
- [ ] Workshop/Mod settings
81-
- [ ] See installed workshop size
82-
- [ ] See installed items
83-
- [ ] Unsubscribe installed items
84-
- [ ] Disabling workshop mods without unsubbing (later)
85-
- [ ] Load order (later)
86-
- [ ] Support 3rd party mod platforms (future)
87-
- [x] Downloads page
88-
- [ ] Reorder items
89-
- [ ] Cancel items
90-
- [ ] Stylize and explain the UI
91-
- [ ] Support showing 3rd party launcher's download statuses (future)
92-
- [x] Steamwebhelper support (later)
93-
- Seems to break with every other update. We need another way to display store pages.
94-
- [x] Store, community
95-
- [ ] Profile tab
96-
- [ ] Fix blurriness on Linux with non-100% DPIs (later) (avalonia bug with x11 scaling, temp fix is to set scaling to 100%)
97-
- [x] Make reliable???
98-
- Seems to have been fixed.
99-
- [ ] ~~Non-janky typing implementation~~ (probably never, unless we make our own CEF wrapper and use it instead of SteamWebHelper)
100-
- [x] Windows support
101-
- [ ] Installer
102-
- [ ] Uninstaller
103-
- [ ] Close OpenSteamClient when pressing X on the progress dialog
104-
- [x] Split project into multi-repo OpenSteamworks, OpenSteamClient
105-
106-
# Features
107-
NOTE: The features mentioned here are the criteria for full release. Currently we're in alpha phase. Most of these are not done, and this is not a final list.
108-
- The basics you'd expect:
109-
- Achievements (NOT DONE)
110-
- Steam Cloud (No UI, will try to sync though but file conflicts won't be solvable)
111-
- Invites and friends network (you can send invites, but there's no UI to receive messages)
112-
- There's no overlay yet though, so you'll need to ALT+TAB
113-
- Workshop (should work, but no UI)
114-
- Load order, enable/disable
115-
- Family sharing
116-
- No web technology (also known as CEF, SteamWebHelper)
117-
- It's still not particularly lightweight due to it being in heavy development
118-
- Most games should work
119-
- Steam2 games untested
120-
- Some multiplayer games might not work
121-
- VAC games unsupported (nothing we can do about this, sorry!)
122-
- Games that use ISteamHTMLSurface will not work (source engine MOTDs)
123-
- Depot browser (not done)
124-
- Download extra depots
125-
- Download individual files
126-
- Build history browser (not done)
127-
- Lock specific build
128-
- Steam cloud filebrowser (not done)
129-
- Misc QOL features, such as:
130-
- Download all updates button (not done)
131-
- Linux users will also enjoy:
132-
- 64-bit executable
133-
- One app less that requires multilib/32-bit libraries
134-
- ProtonDB Integration (not done)
135-
- Compat tool improvements:
136-
- Run .exe in prefix (not done)
137-
- Run winecfg/winetricks/protontricks for game (not done)
138-
- Adjust compat preferences like forcelgaddr easily (not done)
139-
- Compat tool downloader (not done)
6+
SteamFlow (formerly `CustomSteamLauncher`) is the modern successor to the OpenSteamClient project, leveraging Rust for performance, safety, and a better developer experience. It uses `steam-vent` for Steam network communication and `egui` for the user interface.
1407

8+
# Current development status
9+
SteamFlow is currently in alpha. We are actively working on reaching feature parity with the legacy C# version and beyond.
10+
11+
## SteamFlow Roadmap
12+
- [x] **Authentication**
13+
- [x] Login with password
14+
- [x] Steam Guard (Email/Device codes)
15+
- [x] Steam Guard Mobile App confirmation
16+
- [x] Session restoration (Refresh tokens)
17+
- [x] **Library**
18+
- [x] Fetch owned games from Steam
19+
- [x] Scan local installed games
20+
- [x] Display game covers (automated caching)
21+
- [x] Basic game launching
22+
- [ ] **Installation & Updates**
23+
- [x] Download pipeline (WIP)
24+
- [ ] Update management
25+
- [ ] Uninstall support
26+
- [ ] **Features**
27+
- [ ] Search bar
28+
- [ ] Collections / Categorization
29+
- [ ] Friends list & Chat
30+
- [ ] Steam Cloud integration
31+
- [ ] Workshop management
32+
- [ ] Proton/Wine integration improvements
33+
- [ ] Depot browser (Download specific builds/files)
34+
35+
# Getting Started
36+
## Prerequisites (Linux)
37+
Ensure you have the following system dependencies installed (Ubuntu 24.04 example):
38+
```bash
39+
sudo apt-get install build-essential pkg-config libssl-dev libx11-dev libxi-dev libxrandr-dev libxinerama-dev libxcursor-dev libxkbcommon-dev libasound2-dev libudev-dev libwayland-dev libgtk-3-dev libpulse-dev libdbus-1-dev libegl1-mesa-dev libgles2-mesa-dev
40+
```
41+
42+
## Build and Run
43+
```bash
44+
git clone https://github.com/OpenSteamClient/OpenSteamClient.git --recursive
45+
cd OpenSteamClient/SteamFlow
46+
cargo run --release
47+
```
48+
49+
# Features & Goals
50+
- **No Web Technology:** Unlike the official Steam client, SteamFlow does not use CEF or WebViews for its core interface, making it extremely lightweight.
51+
- **Fast and Responsive:** Built with Rust and `egui` for a native, snappy experience.
52+
- **Privacy Focused:** Open-source implementation of Steam protocols.
53+
- **Linux First:** Great support for Linux, including 64-bit clean architecture and better Proton management.
54+
55+
---
56+
57+
# Legacy: OpenSteamClient (C#)
58+
The original C# implementation of OpenSteamClient is still available in the root directory but is no longer the primary focus of development.
14159

14260
# Contributing
143-
See [CONTRIBUTING.md](https://github.com/OpenSteamClient/OpenSteamClient/blob/c%23-remake/CONTRIBUTING.md) for guidelines.
144-
Clone by running `git clone https://github.com/OpenSteamClient/OpenSteamClient.git --recursive`
145-
Compile and run by going into OpenSteamClient and running `dotnet run`.
146-
Occasionally updates may break existing downloaded repos, just delete the whole repo and reclone if that happens.
147-
148-
149-
## Rust launcher prototype: SteamFlow
150-
151-
This repository now includes **SteamFlow** (formerly `CustomSteamLauncher`) in `SteamFlow/`.
152-
153-
- Run locally: `cargo run --manifest-path SteamFlow/Cargo.toml`
154-
- CI packaging: `.github/workflows/rust.yaml` builds a `.deb` package on Ubuntu 24.04.
155-
156-
## Testing
157-
If you decide to test OSC, you should report issues in GitHub issues.
158-
There's also a [Discord server](https://discord.gg/Vrk6sZfh9u), where you can discuss OpenSteamClient and related projects.
61+
See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
15962

160-
# Screenshots
161-
Nothing for now.
162-
163-
# Usage
164-
This is only meant for developers.
165-
Once this is in a good enough state I will write new install instructions.
166-
167-
# System requirements
168-
- 64-bit x86_64 PC
169-
- Arch Linux or Windows 10
170-
- Dotnet 9 (for development only)
171-
172-
## Credits
173-
Research resources we've used:
174-
- [open-steamworks](https://github.com/SteamRE/open-steamworks)
175-
- [open-steamworks fork by m4dEngi](https://github.com/m4dEngi/open-steamworks)
176-
- [SteamTracking](https://github.com/SteamDatabase/SteamTracking)
177-
- [protobufs dumped from the steam client](https://github.com/SteamDatabase/Protobufs)
178-
Other credits:
63+
# Credits
64+
- [steam-vent](https://github.com/n00b67/steam-vent) - Steam protocol implementation
65+
- [egui](https://github.com/emilk/egui) - Immediate mode GUI library
66+
- [open-steamworks](https://github.com/SteamRE/open-steamworks) - Research resources
17967
- [Logo and sound assets by nPHYN1T3](https://github.com/nPHYN1T3)
18068

18169
# Q&A
70+
## Is this a full replacement for Steam?
71+
SteamFlow aims to provide a lightweight alternative for launching games and managing your library. Some features like VAC-secured games or ISteamHTMLSurface (Source engine MOTDs) may never be supported due to proprietary limitations.
18272

183-
## Partially open source?
184-
This is a GUI for Valve's own Steam Client binary, the `clientdll`
185-
These binaries are not open source and Valve doesn't support 3rd-party usage of these.
186-
This also means we inherit design choices and potential bugs from these files.
187-
Due to this, we cannot fix everything, such as the client not conforming to the XDG paths specification (although we've limited the pollution to a .steam symlink in your home folder only).
188-
189-
Also, thank you Valve for improving Linux gaming, and making a native Steam Client in the first place.
190-
191-
## Is a fully open-source version planned?
192-
Maybe eventually. See [TODO](TODO.md)
193-
194-
## Any non-Discord support channel?
195-
Sure, just file an issue report. Feature requests, issues and suggestions all go into Github Issues.
196-
The Discord channel is really only meant for people who don't have a Github account, and are not too well versed in programming (so, regular folk)
197-
198-
## What version of Steam's binaries do you use?
199-
The same as OpenSteamworks, available [here](https://github.com/OpenSteamClient/OpenSteamworks/tree/master/Manifests)
200-
201-
## The client crashes a lot or doesn't start
202-
Delete `~/.local/share/OpenSteam` and try again. Also check that you have a PC that meets the requirements for Steam officially, as well as OpenSteamClient.
203-
Also, run OpenSteamClient from the terminal and post the logs in a Github issue clearly describing your situation.
73+
## Is it safe to use?
74+
SteamFlow uses official Steam protocols. However, it is a 3rd-party client and is not endorsed by Valve. Use at your own risk.

SteamFlow/src/models.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@ pub struct UserProfile {
2929
pub is_online: bool,
3030
}
3131

32+
#[derive(Debug, Clone, Serialize, Deserialize)]
33+
pub struct UserProfile {
34+
pub steam_id: u64,
35+
pub account_name: String,
36+
pub game_count: usize,
37+
pub is_online: bool,
38+
}
39+
3240
#[derive(Debug, Clone, Serialize, Deserialize)]
3341
pub struct LocalGame {
3442
pub app_id: u32,

TODO.md

Lines changed: 54 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,54 @@
1-
# TODO
2-
## Massive in scope
3-
- Rewrite OSC to not depend on proprietary client at all
4-
- The more I work on this project the more I want to do this
5-
- The app info system is terrible.
6-
- Everything is terrible.
7-
- Race conditions everywhere...
8-
- Appinfo system is terrible, see the TODOs at OSW/AppsHelper.cs for my input on that issue...
9-
- Custom clientdll
10-
- Custom ISteamXXX interfaces
11-
- No need to implement internal client API at all
12-
- Custom IPC system to IPC SDK interfaces instead of internal client interfaces
13-
## Less massive in scope
14-
- Rewrite OSC to not be spaghetti
15-
- Add tests for the most basic issues:
16-
- Missing appinfo
17-
- Invalid owned appids
18-
- Stuck appinfo loading
19-
- "Update Required" on launch
20-
- Use MVVM everywhere and delete OSW.Client
21-
- Library rewrite
22-
- Load all apps synchronously beforehand
23-
- Load all library appids and init those apps
24-
- Parse library and show only apps which are the correct type and have appinfo
25-
## Reasonably scoped / low-hanging fruit
26-
- Update code style:
27-
- Decide on cosmetic style
28-
- Decide on API style
29-
- APIs should either use a "Try"-style (no exceptions, true/false return), or throw exceptions
30-
- Currently, we return 0 or other values, such as LibraryFolders_t, EResult, EAppError, etc. These should be refactored.
31-
- Don't try to do async app stuff, just preload all appinfo and managed app wrappers at login time for owned apps
32-
- The friend list is an exception, as friends may play games you don't own
33-
- We should not even provide async APIs for appinfo stuff, as the callbacks are very unreliable...
34-
- Prefer some APIs over others
35-
- Prefer ToArray over ToList
36-
- Prefer ReadOnlySpan over Span in interop scenarios, if the target method does not modify the buffer
37-
- Try to never use pointers in interop.
1+
# SteamFlow TODO & Roadmap
2+
3+
## Immediate Priorities (Alpha)
4+
- [ ] **Search & Filtering**
5+
- Implement a search bar in the library sidebar.
6+
- Filter by installed/uninstalled (partially done).
7+
- Filter by genre/tags.
8+
- [ ] **Download Manager Improvements**
9+
- Better visualization of download progress (speed, time remaining).
10+
- Queue management (pause, resume, reorder).
11+
- Proper handling of multiple depots.
12+
- [ ] **Game Launching Polish**
13+
- Better Proton detection and selection.
14+
- Support for custom launch options/arguments.
15+
- Environment variable support for games.
16+
- [ ] **UI/UX Polish**
17+
- Context menus for games (Install, Uninstall, Properties).
18+
- Better error reporting in the UI.
19+
- Responsive layout improvements.
20+
21+
## Medium Term (Beta)
22+
- [ ] **Friends & Social**
23+
- Simple friends list.
24+
- Online/Offline status.
25+
- Chat support.
26+
- [ ] **Steam Cloud**
27+
- Sync game saves on launch/exit.
28+
- Conflict resolution UI.
29+
- [ ] **Workshop Support**
30+
- View subscribed items.
31+
- Simple enable/disable mod management.
32+
- [ ] **Collections**
33+
- Support for Steam's native collections.
34+
- Custom local collections.
35+
36+
## Long Term / Future
37+
- [ ] **Depot Browser**
38+
- Advanced tool for downloading specific game versions or individual files.
39+
- [ ] **Achievements UI**
40+
- Display achievements and progress.
41+
- [ ] **Store/Community Proxy**
42+
- Display store pages without using a full browser engine (maybe via simplified HTML/Markdown rendering or proxied data).
43+
- [ ] **Settings UI**
44+
- Comprehensive client settings.
45+
- Account management.
46+
47+
## Technical Debt & Refactoring
48+
- [ ] **Better Error Handling**
49+
- Move away from `anyhow` in some core components to more specific error types.
50+
- [ ] **Testing**
51+
- Add unit tests for `steam_client` logic.
52+
- Add tests for download pipeline state machine.
53+
- [ ] **Modularization**
54+
- Split `ui.rs` into smaller components (Sidebar, GameView, Auth, etc.).

0 commit comments

Comments
 (0)