I'm working on a learning project where clients will exchange files with a server. The server will run on a Linux NAS, and clients will be using Windows, macOS, and Linux computers, with potential support for iOS and Android in the future. I'm looking for guidance on choosing the right programming languages, frameworks, or stacks. Should I opt for a native approach for each platform, or is a multi-platform solution a better fit?
5 Answers
For simplicity, I’d suggest starting with a Python backend using FastAPI and a web client. This lets you cover Windows, macOS, and Linux easily. Then later you can branch out into mobile with frameworks like React Native or Flutter. Avoiding a fully native approach from the get-go will save you a lot of development time.
You definitely don’t need separate native stacks for each OS. A solid approach would be to pick a single backend technology like Python with FastAPI, Node.js, or Go, and create a REST API. This way, you can build a web app as the client, which is the easiest and works across all platforms. If you want a desktop feel, options like Electron or Flutter would work too. This method simplifies maintenance and allows for scalability down the road when adding mobile clients.
I'm with you on the single code base! Just wary about potential downsides later on.
If you're inclined towards performance, consider C++ with libraries like Boost.Beast and Asio for networking. Just be ready for more complexity!
I'd recommend using Go for your server-side programming. It's excellent for networking projects and offers good cross-platform support without the headache of managing dependencies that you might face with other languages.
Absolutely, Go is a great choice for backend development, especially with NAS servers. Just keep in mind, if you're looking to create desktop GUIs or mobile apps later, you might want to consider native options or a JS wrapper like Tauri or Electron to make those parts smoother.
Going with Go works, but remember it’s not the only option. Just think about what structure you want for your clients.

That's a solid strategy! I think I’ll kick things off with Linux for the initial client.