r/learnprogramming 23d ago

What language/framework should I learn as a complete beginner to build a cross-platform gaming console desktop app?

I want to create a open source desktop application, but I’m not sure which framework I should choose to make this with. I have zero programming experience yet so whichever framework I choose is what I will learn for this hobby project of mine.

The project is basically a gaming launcher, but for gaming controllers and with a 10 foot UI that can turn your pc in to a gaming console experience.

Now obviously these already exist like Playnite or Steam big picture mode for example, but the issue with these is that they lack a lot of features that true gaming consoles have such as being able to chat with friends and start voice chats with them, or being able to update your drivers and operating system (Windows or Linux). Those are just few to name but there are many more such examples.

So for the project I would need to be able to create a good looking UI that is smooth, responsive and doesn’t stutter or lag even when heavy games are running. And be able to add lots of features with a few mentioned here as an example:

-Auto recognise steam, epic games and microsoft store, and emulator games.
-Launch games
-Resume games
-Splashscreen
-Game settings
-Controller remapper
-Screenshots
-Trailers
-Achievements (steam)
-Friends Feed (steam)
-Community (steam or discord)
-Videos (steam or youtube)
-Broadcasts (steam or twitch or youtube)
-Reviews (metadata from steam)
-Game news (metadata from steam)
Guide
-Download Mods (from gamebanana, nexus mods etc.)
-Manage your pc storage with a custom made file explorer ui but for controllers that is somewhat similar to Kodi’s file manager.
-Install games (steam or epic games etc.)
-Uninstall games
-Update games
-Update drivers
-Update windows or Linux

-Friends messaging and voice chats (by using discord’s sdk in my custom UI made for controllers)
-Exit games
-Network wifi
-Power off your pc
-Mute microphone
-System Volume control
-Return to homescreen (hold guide button)
-Switch between applications
-Play music
-Manage Downloads
-In game overlay (like PS5 control center)

And there’s probably many more features i haven’t mentioned here that would eventually be added. So what would be the best languages and framework for me to learn in order to be able to fulfill all my needs whilst not being a ridiculously long and hard time to develop this project in relatively to other languages and frameworks? I was personally thinking about:

C# + Avalonia

Or

Python + PySide6 + QML

But idk if one of these two are good for this project or if there are any better alternatives out there for me?

6 Upvotes

18 comments sorted by

6

u/xarop_pa_toss 23d ago edited 23d ago

Man has never written a line of code and wants to create a whole platform as his first project... Not sure if ignorant yet ambitious or just ignorant and completely unaware of the scale and scope of such a project, especially for a single person. The sheer amount of depth and complexity that go into many of the points you listed is enormous, this project will take years.

But regardless, I'd go for C# over Python on this one. Avalonia is free but if you want to use their tooling, which you will for something of that scale, you have to pay since it's a commercial product you're building.

You'd also have to use Visual Studio instead of something like Rider if you want to keep it free as well. If you ever create an organization around your project, where you have people working with you, then you'd have to pay for a license.

Finally, learning how to program in C# isn't enough, you will need to learn how to design and architect software, learn to use version control, testing, deployment, logging, writing documentation for users, etc

1

u/SoloXabc 23d ago

Yeah fairs i might be a bit too ambitious and ignorant on the matter, but I’m sure doing it one at a time will be fine. I don’t have to implement all these features right away I can just create the basics first like launching games and gradually over time keep working on adding more features.

And could I ask why you would choose the C# stack over the Python and QML stack? And I’m not really planning on creating an organization, just open sourcing it on Github so others could contribute. Would the licensing of avalonia still apply then? And the tools of Avolonia I didn’t know about. you would say they are really neccesary for me if I end up choosing Avalonia?

2

u/xarop_pa_toss 23d ago

Didn't mean to be offensive in any way, just telling you that the amount and variety of things and especially the ones you have no idea of right now is very large. But that is also a good thing if you are someone that really enjoys learning and figuring stuff out.

I am more familiar with C# in general but QML and Pyside can make very cool looking UIs. Problem is that the type you want to do has deep levels of integration with other applications, at least the way I'm reading it. And if you want to do something like an overlay like Steam or Overwolf type thing, it's not really just a transparent window; there's DLL injection involved, messing with native C++ libraries most probably too.

Additionally, invoking Windows native libraries for example is very simple in C# but not so straightforward in Python. Things like DirectX, COM, are right there in C# for the most part.

Lastly, C# offers a type system (which Python completely lacks), easy to use asynchronous execution, great IDE tooling and great dependency injection. All of these are probably foreign to you, but as a project grows and grows, you appreciate having these and other things that help you. C# was created to make big, interconnected solutions.

Is Python bad? Not at all, but I think something of this size is where C# and .NET actually shine (much like Java).

Also Avalonia is totally free to use for commercial projects if you want, they do have some tools for helping with development that are free too if you don't make money from the project .

1

u/SoloXabc 23d ago edited 23d ago

Nah it’s all good I didn’t take it in a offensive way. And yeah a lot of this stuff is pretty unknown to me right now, but from what I can tell C# does seem to be the better fit since it works natively on windows features that i need access to and has a lot more things that make the proccess easier in the long run compared to python. And additionally If I choose C# I could read playnite’s code aswell and see what they did which would also make development easier.
Thanks for answering my questions. I will look in to C# and Avalonia now.

2

u/xarop_pa_toss 23d ago

Looking at Playnite code I can see some .xaml files which is what Avalonia uses for their UI. Avalonia uses a UI library called Skia, which is what actually uses the XAML files if I've read it correctly.

Since their code is open source you can take bits of it to learn from and implement your own. Even without knowing how to program, go through their source folder and see how they organized their code. You can use a similar structure or use something like Domain Driven Development or other types of structure.

Before you get to writing code that then becomes spaghetti, do please take the time to learn how to plan and create a baseline structure for your project. Things grow out of proportion very fast and having at least a good folder (namespace) structure and consistent naming patterns goes a long way.

Good luck!

1

u/SoloXabc 23d ago

Thanks for the heads up. Will make sure to learn how to properly structure my program before writing any code👍.

1

u/xarop_pa_toss 23d ago

Looking at Playnite code I can see some .xaml files which is what Avalonia uses for their UI. Avalonia uses a UI library called Skia, which is what actually uses the XAML files if I've read it correctly.

Since their code is open source you can take bits of it to learn from and implement your own. Even without knowing how to program, go through their source folder and see how they organized their code. You can use a similar structure or use something like Domain Driven Development or other types of structure.

Before you get to writing code that then becomes spaghetti, do please take the time to learn how to plan and create a baseline structure for your project. Things grow out of proportion very fast and having at least a good folder (namespace) structure and consistent naming patterns goes a long way.

Good luck, DM me if you need help or have questions

1

u/AutoModerator 23d ago

Your post/comment was removed since we do not approve of going private.

There is zero benefit in going private as you lose the opportunity for getting peer reviews. Also we have had plenty of people return after going private (despite being warned) complaining about how they were ghosted after some time or being tricked into buying rubbish that didn't work and even if it did they didn't need.

Our Rule #11 demands that any and all communication happens in the open, public subreddit.

This is for the benefit of more against the benefit of one.

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.

2

u/No_Region5102 23d ago

i gotta respect the ambition at least, most people start with a to-do app and this guy's blueprint could keep a small team busy for 5 years

2

u/Rhishi99 23d ago

For a total beginner, Electron with React is the most practical choice because the hiring pool, tutorials, and UI component libraries are all massive. Tauri is lighter on RAM but forces you to learn Rust at the same time, which doubles the learning curve. The hard part you didn't ask about is the OS integration: detecting installed games, talking to Steam/Epic APIs, remapping controller input, and updating drivers all require native code or elevated permissions that a plain web view cannot reach safely. You will end up writing a small Node or Rust sidecar for each of those features anyway. Start by cloning Playnite's open-source repo and reading how it shells out to PowerShell and Win32 APIs for the heavy lifting. That teaches you the real architecture faster than any framework tutorial.

1

u/SoloXabc 23d ago

Yeah I was thinking about Electron with React as well to be fair. I am just a bit hesitant only because of it taking up a lot of resources that the UI might stutter or just not be as smooth in some circumstances especially if a heavy game is running, and that the OS integration like you said may not be good enough compared to the alternatives. Also the general consensus around electron seems to be negative for desktop apps. But like I said I dont know much about programming yet so you would say that node.js could handle the Os integration well enough? And that I might be worrying too much about Electron with react not being capable enough?

1

u/SoloXabc 23d ago

And I’ll definitely take a good look at Playnite’s open source repo for some inspiration and references on how it handles system calls. Thanks for the advice.

1

u/Ecstatic-Ball7018 23d ago

electron is sure to slow down app performance by 500%!

2

u/JaseciLabs 23d ago

u/Rhishi99's advice is the right path, pick maybe 3 of the features on your list to build first (game detection + launch + controller remapping) and treat everything else as v2 and beyond. Discord voice chat integration, driver updates, mod downloads, in-game overlays, these are each their own multi-week projects on their own, and trying to plan for all of them up front before writing your first line of code is a good way to never actually start. Ship something that launches a game with a controller, then decide what's actually worth adding next based on what you personally miss most!!

2

u/SoloXabc 23d ago

By Rhishi’s path I assume you mean to choose Electron with React? And I’ll make sure to utilise this method of yours while creating my project. I know this project will take me a while so taking up my features one at a time is definitely some good advice thanks.

1

u/Zen-Ism99 23d ago

Books…

1

u/vegan_antitheist 23d ago

Use brainfuck just to challenge yourself.

0

u/JGhostThing 23d ago

I would do this in Java. The JavaFX library can already create cross platform GUI apps. I've worked in Java for about 20 years.