Open source full-stack project at critical point where it can use some feedback

Hello Rust people! I'm building a social system for video games called Warhorse.

I wasn't sure if this was appropriate for code review because I'm asking for more than just code review here.

Summary

Think Steam-like friends list, parties, chat, etc. I'm targeting small teams and one man armies to help make their lives easier, particularly the Bevy community although this will be engine-agnostic.

I understand there is Nakama and Epic Online Services, as well as Amazon GameLift and Steam itself, however I am also planning on supporting the browser too. If you're launching a game that you want to be supported on multiple launchers or have a complete standalone system, I'm building it for you (also having fun while I do it, too).

I'm looking for just general input, whatever I can get out of this community in regards to my crate(s) I'm building up. Code review, architecture review, the stack, etc.

I chose Rust mostly so I can continue learning it, but I also think a compiled language really helps keep the energy footprint low, as server hosting costs is very important for this niche I'm targeting.

Even just feedback on the general idea itself from a non-technical perspective is valuable. Or if you just wanna hype me up, I'm here for it too.

Here's the link to the workspace as it stands: https://github.com/BrianWiz/warhorse

About me

I'm a web developer recently turned full-time game developer. I've never worked for big tech or large teams, I've always been a near 1 man show in small non profits. Beyond games, I've never really architected something this big before. I'm also ~1 year into Rust just off spare time. I'm strong-intermediate to senior level in my field with C++.

Anyway, ugh dude nobody cares...!

The Stack

So far I've kept it all within Rust, with the exception of experimenting with some C++ <-> Rust FFI.

Server (warhorse_server)

  • axum
  • socketioxide as the main communication layer. For those who don't know, socketioxide is a Rust port of socket.io, which is a whole convenience system wrapped around the WebSockets protocol. It has things like application level acknowledgements, rooms, and the main developer is working on a Redis adapter which from my understanding will allow me to scale horizontally if needed. I chose this system because I think it reads really well, but I think the thing that worries me the most is scalability. Is it the right choice?

Client (warhorse_client)

  • rust-socketio

Client GUI (warhorse_overlay):

  • Currently only supports Windows, I overlay a dioxus app over a game window. I've tested with Unreal, Bevy and VSCode (yeah, as the game :P)
  • I chose dioxus because I'm trying to keep it within Rust and it lends itself to my skills as a web developer. However, Blitz is looking really promising and so I'm banking on Dioxus' native capabilities for the future. Also, since Dioxus is primarily for the web, I should be able to support browser games too. As well as a phone app (ya gotta know when your clan members want you to play at all times!!!)

Known Problems

  • rust-socketio currently does not support wasm, so web capabilities are out of the question right now with the existing client. But I'm planning on helping them out with it (hint hint!).

Progress

Here's what I have working so far

  • Overlay any window (Windows only atm)
  • Temporary in-memory db, plans on swapping this out soonish, I just want to focus on the real-time flow of things first

Auth:

  • basic user/pw, sort of same deal as above, temporary
  • eventually I want to at least support Discord, Steam & Google auth

Friends:

  • Request, Accept, Reject, Block, Remove
  • Realtime updates and online status

Chat:

  • Global chat with some preliminary work for multiple rooms
  • Whisper friends

Well that's it, thank you for reading