What's the best language to write something like this in? Python?
For what I do at work, one of the simple apps just listens on local host and serves templated html and a rest API. Also easy to bake the server and CLI (if you want one) into a single binary. So “myapp server —foo —bar” runs the server, and “myapp” can be used as a CLI interface to the REST API until you make the UI.
All of this can be done with the stdlib, no need for 3rd party tools.
https://dart.dev/server https://flutter.dev/multi-platform/desktop
Python (packed with PyInstaller) is a reasonable choice.
If you know a language that supports cross-platform builds, that (all other things being equal, including library support for what you want to do), that might be more convenient for distribution, OTOH, you probably want to test on your supported platforms anyway, so building on each isn't that much additional work.
Compiled all the way, golang works great
Kotlin/Java could also be used. Also haven't tried this, but it seems like it's become easy to bundle a JRE with a java app to create a single executable https://www.reddit.com/r/java/comments/86l45p/how_do_people_...
My solution was to use a bash installation script (https://github.com/dilan-dio4/Keagate/blob/main/packages/scr...) that checks if Node and NPM is installed. If it not, it automatically installs them via NVMs one-liner (can be seen in the bash here: https://github.com/dilan-dio4/Keagate/blob/d7442118a4846daf3...). The script then invokes the rest of the project via node.
This creates a cross-platform, streamlined installation workflow that natively goes from Bash (eww) to Node (nice).
There are multiple cross platform environments, including Lazarus/Free Pascal if you want a GUI that can connect to the internet as a back end. (That's my decidedly minority favorite)
If you just need command line functionality, It's really hard to ignore Justine's work on actually portable executables.
Python is cross platform, but don't count on the scripts working without support/updates in 2 years.. they tend to change things and break compatibility.
Can you clarify, is the open source program that you distribute to end users serving a REST API (running the server locally), or is it a client (like a CLI) making calls out to a remote REST API?