Hi @jslarraz , @Lin-Buo-Ren
Thank you for your previous feedback. I’ve taken the time to deeply analyze the technical constraints and user requirements of my application, and I’d like to respectfully reopen this discussion with additional context.
After reviewing the specifics of what strict confinement would mean for AeroFTP users, I’ve concluded that the limitations would severely impact the core functionality of the application. I’d appreciate your input on whether an exception could be made, or if there’s an alternative path I’m not aware of.
I’ll explain my reasoning in detail below.
Core Technical Requirement
The fundamental purpose of an FTP client is to transfer files between a remote server and **any local directory** chosen by the user.
With strict confinement (`home` + `removable-media` plugs), AeroFTP would only be able to access:
- `$HOME/*`
- `/media/*` and `/mnt/*`
This excludes critical paths that are standard in professional workflows:
| Path | Use Case | Accessible? |
| ------------------------- | ------------------------ | ----------- |
| `/var/www/html` | Web development |
No |
| `/opt/application` | Self-hosted apps |
No |
| `/srv/data` | Server data directories |
No |
| `/etc/nginx` | Configuration management |
No |
| `/var/lib/docker/volumes` | Docker deployments |
No |
These are not edge cases — they represent the **primary audience** for FTP clients.
Why `personal-files` Plug Doesn’t Solve This
The `personal-files` plug requires specifying exact paths at build time. This approach doesn’t work for an FTP client because:
1. **Every user has different directory structures** — we cannot predict where projects are stored
2. **Users need to navigate freely** — the destination folder is chosen at runtime, not predetermined
3. **Batch operations and synchronization** require persistent directory access, not one-time file selection
The `desktop` portal for file picking also doesn’t help because:
- FTP clients need to **remember** directories across sessions
- Users perform bulk operations on entire folder trees
- Sync features monitor directories continuously
Precedent - Other FTP Clients
FileZilla, the most popular FTP client, uses classic confinement on the Snap Store for the same reason:
https://snapcraft.io/filezilla
The pattern is established: file transfer applications that need arbitrary filesystem access use classic confinement. This isn’t a workaround — it’s the appropriate solution for this category of software.
Security Considerations
I understand the security rationale behind strict confinement. Here’s how AeroFTP addresses security despite needing classic:
1. **Open source**: Full code at GitHub - axpnet/aeroftp: ⚡ AeroFTP - Fast, Beautiful, Reliable FTP Client built with Tauri + React
2. **No background processes**: Only runs when explicitly opened
3. **No auto-execution**: Only reads/writes files the user explicitly selects
4. **Encrypted transfers**: Supports FTPS (TLS)
5. **Minimal scope**: Doesn’t require audio, bluetooth, or other unrelated permissions
The risk profile is identical to FileZilla and other file managers.
The Alternative Would Harm Users
If I publish AeroFTP under strict confinement, users would:
- Get a broken experience (can’t access `/var/www`, etc.)
- Leave negative reviews (“doesn’t work”)
- Uninstall the Snap
This damages both the user experience and the Snap ecosystem’s reputation.
If classic isn’t granted, my only ethical choice is to:
- Not publish on the Snap Store
- Direct users to AppImage / .deb instead
I would prefer to offer AeroFTP on Snap Store with proper functionality.
Request for Reconsideration
Based on the above, I respectfully request reconsideration of classic confinement for AeroFTP.
Key points:
- **FTP clients inherently require full filesystem access** — this is not optional
- **Precedent exists** — FileZilla has classic confinement
- **Security is addressed** — open source, no background services, encrypted protocols
If there are specific concerns or additional information you need, I’m happy to provide it.
Thank you for your time and consideration.
A.