{"id":24001701,"url":"https://github.com/spantaleev/sftpman-iced-rs","last_synced_at":"2025-04-30T17:27:33.177Z","repository":{"id":271387315,"uuid":"913270531","full_name":"spantaleev/sftpman-iced-rs","owner":"spantaleev","description":"A GUI frontend to sftpman (an application for managing and mounting sshfs (SFTP) filesystems)","archived":false,"fork":false,"pushed_at":"2025-03-23T08:16:57.000Z","size":509,"stargazers_count":8,"open_issues_count":1,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-30T18:22:29.419Z","etag":null,"topics":["gui","iced","sftp","sftp-client","sftpman","sshfs","sshfs-gui"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/spantaleev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-07T11:06:01.000Z","updated_at":"2025-03-23T08:17:00.000Z","dependencies_parsed_at":"2025-02-25T09:43:58.930Z","dependency_job_id":"e5562809-d492-41bd-9cd5-61973bad167f","html_url":"https://github.com/spantaleev/sftpman-iced-rs","commit_stats":null,"previous_names":["spantaleev/sftpman-iced-rs"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spantaleev%2Fsftpman-iced-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spantaleev%2Fsftpman-iced-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spantaleev%2Fsftpman-iced-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spantaleev%2Fsftpman-iced-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spantaleev","download_url":"https://codeload.github.com/spantaleev/sftpman-iced-rs/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251750578,"owners_count":21637747,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gui","iced","sftp","sftp-client","sftpman","sshfs","sshfs-gui"],"created_at":"2025-01-08T00:37:27.960Z","updated_at":"2025-04-30T17:27:33.147Z","avatar_url":"https://github.com/spantaleev.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\t\u003cimg src=\"./assets/sftpman-iced.svg\" alt=\"sftpman-iced logo\" width=\"150\" /\u003e\n\t\u003ch1 align=\"center\"\u003esftpman-iced\u003c/h1\u003e\n\u003c/p\u003e\n\n`sftpman-iced` is a GUI application for Linux systems that makes it easy to setup and mount [sshfs](https://github.com/libfuse/sshfs)/[SFTP](https://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol) filesystems.\n\nIt's a GUI frontend to the [sftpman](https://github.com/spantaleev/sftpman-rs) command line application and library (`libsftpman`). See the [sftpman](https://github.com/spantaleev/sftpman-rs) repository for more information.\n\n## 📸 Screenshots\n\n1. [sftpman-iced home screen](./assets/screenshots/sftpman-iced-home.png)\n2. [sftpman-iced record screen](./assets/screenshots/sftpman-iced-record.png)\n\n## 🚀 Installing\n\n### Dependencies\n\n- `libsftpman`, provided by [sftpman](https://github.com/spantaleev/sftpman-rs)\n\n- [sshfs](https://github.com/libfuse/sshfs), required by [sftpman](https://github.com/spantaleev/sftpman-rs)\n\n- an askpass application, so you can be asked to enter SSH key passphrases. Examples are: [ksshaskpass](https://github.com/KDE/ksshaskpass) (included in KDE Plasma), [seahorse](https://wiki.gnome.org/Apps/Seahorse) (included in GNOME). Also see [Alternative passphrase dialogs](https://wiki.archlinux.org/title/SSH_keys#Alternative_passphrase_dialogs) on the ArchLinux wiki.\n\n💡 **Note**: Installing the `sftpman-iced` GUI application will automatically pull the `libsftpman` library (provided by [sftpman](https://github.com/spantaleev/sftpman-rs)) as a dependency, but will **not** automatically install the `sftpman` CLI binary.\n\n### Installing on ArchLinux\n\nFor [ArchLinux](http://www.archlinux.org/), there's an [sftpman-iced](https://aur.archlinux.org/packages/sftpman-iced) package in the [AUR](https://wiki.archlinux.org/title/Arch_User_Repository).\n\n### Installing on other distributions\n\nFor other Linux distributions you can install using [cargo](https://doc.rust-lang.org/cargo/):\n\n```sh\ncargo install sftpman-iced\n```\n\nYou also need to:\n\n- install [sshfs](https://github.com/libfuse/sshfs) yourself\n\n- make sure the `/mnt/sshfs` directory exists and is writable (e.g. `mkdir /mnt/sshfs \u0026\u0026 chown root:users /mnt/sshfs \u0026\u0026 chmod 0775 /mnt/sshfs`)\n\n\n## ❓ FAQ\n\n### Why was sftpman-gtk rewritten to sftpman-iced?\n\nSince the underlying CLI application and library (`sftpman`) was rewritten from [Python](https://www.python.org/) to [Rust](https://www.rust-lang.org/), we found ourselves having to rewrite the GUI application as well.\n\nAlso see:\n\n- [Why was iced chosen as a UI framework instead of Gtk?](#why-was-iced-chosen-as-a-ui-framework-instead-of-gtk)\n- [Why was iced chosen as a UI framework instead of Qt?](#why-was-iced-chosen-as-a-ui-framework-instead-of-qt)\n- [Why was iced chosen as a UI framework instead of Slint?](#why-was-iced-chosen-as-a-ui-framework-instead-of-slint)\n\n\n### Why was iced chosen as a UI framework instead of Gtk?\n\nAlso see: [Why was sftpman-gtk rewritten to sftpman-iced?](#why-was-sftpman-gtk-rewritten-to-sftpman-iced).\n\n[GNOME](https://www.gnome.org/) has been becoming more dumbed-down and its [Gtk](https://www.gtk.org/) UI framework has been starting to feel more alien on other [Desktop Environments](https://wiki.archlinux.org/title/Desktop_environment) (like [KDE](https://kde.org/)).\n\nFurthermore, the imperative nature of Gtk makes it an ugly mess to develop for. Choosing a declarative UI framework was deemed a better choice.\n\nThe [Rust](https://www.rust-lang.org/) bindings for various UI frameworks ([Gtk](https://www.gtk.org/), [Qt](https://www.qt.io/product/framework), etc.) are all poor and [iced](https://iced.rs/) ticked all our boxes.\n\n\n### Why was iced chosen as a UI framework instead of Qt?\n\nAlso see: [Why was sftpman-gtk rewritten to sftpman-iced?](#why-was-sftpman-gtk-rewritten-to-sftpman-iced).\n\nWhen working on this rewrite, we gave [Qt](https://www.qt.io/product/framework) a try via [qmetaobject-rs](https://github.com/woboq/qmetaobject-rs).\nIt felt like a very fragile and ugly way to write code.\n\n[Rust](https://www.rust-lang.org/) bindings for [Qt](https://www.qt.io/product/framework) are all in a poor state and are likely to remain this way.\n\n\n### Why was iced chosen as a UI framework instead of Slint?\n\nAlso see: [Why was sftpman-gtk rewritten to sftpman-iced?](#why-was-sftpman-gtk-rewritten-to-sftpman-iced).\n\nWhen working on this rewrite, we gave [Slint](https://slint.dev/) a try.\n\nWhile it seems like a promising UI framework, we weren't sure another commerical Qt clone is an ideal choice.\n\nWe also found that Slint yielded very large executables even for simple \"Hello world\" application.\niced executables are not tiny either, but our complete `sftpman-iced` binary appears to be on par with Slint's \"Hello world\" (~17 MB).\n\n\n### Why was iced chosen given that it has poor accessibility?\n\n[Accessibility support](https://github.com/iced-rs/iced/issues/552) in [iced](https://github.com/iced-rs/iced) is currently lacking.\nThis is usually an important reason to look past it.\n\nSince we provide a more accessible CLI application (see [sftpman](https://github.com/spantaleev/sftpman-rs)) which can serve as a substitute to various handicapped users, we believe the lack of accessibility support is not a deal-breaker for us.\n\n\n### Why does sftpman-iced temporarily freeze during mounting?\n\nMounting is done by delegating to the [sshfs](https://github.com/libfuse/sshfs) command line application.\n\nIf `sshfs` needs to ask you for an SSH key passphrase or password, it will create a dialog box (via [ssh-askpass](https://man.openbsd.org/ssh-askpass.1), etc.) that does it.\n\nWe start `sshfs` on the main thread so that this dialog box can be displayed and interacted with correctly.\n\n\n### Why does sftpman-iced temporarily freeze during unmounting?\n\nUnmounting (running `fusermount -u ..` commands, etc.) can more easily be accomplished in the background, but we haven't implemented it because:\n\n- unmounting is usually quick and doing it sequentially does not impact performance too much\n\n- we don't yet support displaying multiple error alerts at the same time. If multiple filesystems are being unmounted in parallel and they all error out, we would need to notify you properly (something which we can't do yet).\n\n- not blocking the main thread while unmounting would allow you to (accidentally) trigger a mount operation while unmounting is still in progress. Handling this gracefully will need further work.\n\n\n\n#### Is sftpman-iced compatible with sftpman-gtk?\n\n[sftpman](https://github.com/spantaleev/sftpman-rs) v2 (and the [sftpman-iced](https://github.com/spantaleev/sftpman-iced-rs) GUI frontend) are still **mostly-backward compatible** with the old Python-based `sftpman` software ([sftpman-python](https://github.com/spantaleev/sftpman-python) and the associated [sftman-gtk](https://github.com/spantaleev/sftpman-gtk)):\n\n- ✅ The old configuration files can be read and used as-is\n\n- ✨ You can now use custom local mount endpoints for filesystems, instead of just the default `/mnt/sshfs/{id}` directory\n\nAlso see: [Is sftpman v2 compatible with sftpman v1?](https://github.com/spantaleev/sftpman-rs/blob/master/README.md#is-sftpman-v2-compatible-with-sftpman-v1)\n\n\n## Acknowledgements\n\n`sftpman-iced` is built with [iced](https://github.com/iced-rs/iced) - a cross-platform GUI library for Rust focused on simplicity and type-safety.\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://github.com/iced-rs/iced\"\u003e\n\u003cimg alt=\"\" title=\"iced\" src=\"https://raw.githubusercontent.com/gist/hecrj/ad7ecd38f6e47ff3688a38c79fd108f0/raw/74384875ecbad02ae2a926425e9bcafd0695bade/white.svg\" width=\"350px\"/\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\nThe application includes icons from [Bootstrap Icons](https://icons.getbootstrap.com/), licensed under the [MIT license](./assets/bootstrap-icons/LICENSE). See the [assets/bootstrap-icons](assets/bootstrap-icons) directory.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspantaleev%2Fsftpman-iced-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspantaleev%2Fsftpman-iced-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspantaleev%2Fsftpman-iced-rs/lists"}