>>109683946
User config, program state and logs should all be stored on the machine in a user controlled and user writable directory ($env:USERPROFILE/AppData) by default. However the locations of each should be configurable in the program settings so a user can opt-in to storing that stuff directly alongside the portable exe if they want.
The switch between portable and non-portable should be implicit by the presence of a hidden file named .portable created in the same directory as the executable itself.
The settings file should be .ini or .json so that it is trivially modifiable in default powershell with no external modules required. If your program needs complex settings or re-use you can use .yaml but that should be avoided.
Program/
|- program.exe
|- .portable
|- settings.{ini,json}