First off, thank you for considering contributing to Visual Rclone! 🎉
Visual Rclone is a WPF (.NET 8) control panel that lets anyone mount their cloud drives through rclone without ever touching the command line. Contributions of all kinds are welcome: bug reports, feature requests, translations, documentation and code.
Be respectful, constructive and patient. We are all here to learn and to build something useful. Harassment, discrimination or hostile behavior will not be tolerated.
Before opening an issue, please:
- Search the existing issues to avoid duplicates.
- Make sure you are running the latest release.
- Collect the diagnostic information (see below).
Then open a new issue using the 🐛 Bug Report template. It will ask you for:
- A clear description of the problem
- Steps to reproduce (numbered, precise)
- The expected vs actual behavior
- Your Windows version, rclone version and WinFsp version
- The diagnostic console output (the View Log button on any remote card)
⚠️ Remove any personal information (remote names, tokens, paths) from logs before posting them publicly.
Open an issue using the ✨ Feature Request template. Describe the problem you are trying to solve, not only the solution you have in mind — it helps us find the best approach.
| Tool | Version | Notes |
|---|---|---|
| Windows | 10 / 11 (x64) | Required — the app uses WinFsp and WPF |
| .NET SDK | 8.0 or later | Download |
| Visual Studio | 2022 (17.8+) | Workload: .NET desktop development |
| or VS Code | latest | With the C# Dev Kit extension |
| rclone | latest | Download — must be in PATH |
| WinFsp | latest | Download — required to mount drives |
| Git | latest | Download |
git clone https://github.com/<your-user>/VisualRclone.git
cd VisualRclone
dotnet restore
dotnet build -c Debugdotnet run --project src\RcloneCommanderAdvanceddotnet publish src\RcloneCommanderAdvanced -c Release -r win-x64 ^
--self-contained true -p:PublishSingleFile=true ^
-p:IncludeAllContentForSelfExtract=true -p:DebugType=NoneThe output lands in:
src\RcloneCommanderAdvanced\bin\Release\net8.0-windows\win-x64\publish\
Visual Rclone follows a strict MVVM pattern with dependency injection.
Views (XAML) ──binding──▶ ViewModels ──interfaces──▶ Services
- No business logic in code-behind. Code-behind is only for pure view concerns (window chrome, drag, focus, closing behavior).
- Services are injected through the constructor and registered in
App.xaml.cs. Always program against an interface inServices/Abstractions/. - Never edit
rclone.confby hand. All remote mutations must go throughRcloneConfigManager, which delegates to the officialrclone configCLI. - No hardcoded paths. Use
Environment.GetFolderPath(...)orAppDomain.CurrentDomain.BaseDirectory. Personal paths must never appear in the source. - No hardcoded remote names. Remotes are discovered at runtime from the
user's
rclone.conf.
The UI ships with four languages: en-US, es-ES, fr-FR and de-DE.
- Copy
Themes/Lang.en-US.xamltoLang.<culture>.xaml. - Translate only the values, never the
x:Keynames. - Register the new culture in
LocalizationService.AvailableLanguages.
Important: when you add a new UI string, you must add the key to all four dictionaries, otherwise the fallback (English) will be shown.
- Never commit
rclone.conf,appsettings.json,*.key,*.logor any file containing tokens or credentials. They are already listed in.gitignore— do not remove those rules. - Never hardcode a personal path, username, remote name or secret.
- The master PIN must always be stored as a PBKDF2-SHA256 hash with a random salt. Never store it in plain text.
- Fork the repository and create a branch from
main:git checkout -b feature/my-awesome-feature
- Make your changes following the guidelines above.
- Ensure the build is clean:
It must finish with 0 warnings and 0 errors.
dotnet build -c Release
- Update the documentation (
README.md,CHANGELOG.md) if your change is user-facing. - Commit with a clear message (see below) and push your branch.
- Open a Pull Request against
mainand fill in the template.
We loosely follow Conventional Commits:
feat: add per-remote bandwidth limit
fix: prevent orphan rclone process on crash
docs: clarify WinFsp installation steps
i18n: add Italian translation
refactor: extract port allocation into a service
VisualRclone/
├── .github/ # Issue & PR templates
├── docs/ # Screenshots and extra documentation
├── src/
│ └── RcloneCommanderAdvanced/
│ ├── Models/ # Plain data models
│ ├── Services/ # Business logic (behind interfaces)
│ ├── ViewModels/ # MVVM view models
│ ├── Views/ # XAML windows
│ ├── Converters/ # WPF value converters
│ └── Themes/ # Dark theme + language dictionaries
├── CONTRIBUTING.md
├── CHANGELOG.md
├── LICENSE
└── README.md
If something is unclear, open a Discussion or a Feature Request issue. We are happy to help you get started.
Thank you for making Visual Rclone better! 🚀