29 KiB
1.1.0
Released on 2026-06-08
Added
- site: catppuccin theme tokens, tailwind 4, self-hosted font
- site: i18n string resolver with en fallback
- site: build-time man.md fetcher pinned to release ref
- site: base layout with og/hreflang, theme bootstrap, umami
- site: x-default hreflang, twitter card, og:image:alt; dedupe locales/site in base layout
- site: nav, footer, theme toggle, language picker
- site: responsive mobile nav, css-driven theme icons, localizePath helper
- site: landing page with dual-pane explorer hero
- site: install page led by install.sh script, package-manager tabs
- site: robots, sitemap reference, vercel redirects + cache headers
- install: add Windows PowerShell installer and copy buttons on site
Add install.ps1 mirroring install.sh for Windows: arch detection, release zip download, binary extraction, user PATH update.
- copy install.ps1 to site public/ at build time (copy-install.mjs)
- serve /install.ps1 with text/plain Content-Type (vercel.json)
- add PowerShell one-liner to install page and README
- bump install.ps1 default version in bump_version.sh
- add CopyButton component next to every install command line
- config: move config dir to ~/.config/termscp on macOS and %USERPROFILE%.termscp on Windows
Resolve the config directory through a single per-platform config_dir() function instead of relying on dirs::config_dir everywhere:
- macOS: ~/.config/termscp (was ~/Library/Application Support/termscp)
- Windows: %USERPROFILE%.termscp (was roaming %APPDATA%\termscp)
- Linux/other: /termscp (unchanged)
Existing users are migrated automatically on first run: when the new directory is absent and the legacy location exists, the whole config directory is moved to the new path. The cache directory stays at the platform-native location.
CI
- automated release workflow
Single workflow_dispatch (version, dry_run) that bumps versions, regenerates CHANGELOG via git-cliff, rebuilds site CSS, builds all targets, creates the GitHub release, updates the Homebrew tap and publishes Chocolatey.
- dist/release/bump_version.sh: version replacer across all tracked locations (+tests)
- .github/workflows/release.yml: prepare -> build matrix -> homebrew/release -> choco
- retire build-artifacts.yml (merged into release.yml)
- Linux builds via cargo-zigbuild (old glibc) for broad compatibility
- pin all actions to verified SHAs and clear zizmor findings
Pin every action to a commit SHA whose tag comment matches (verified via gh api), add least-privilege permissions, set persist-credentials: false, and replace the archived actions-rs/cargo with a plain cargo test. zizmor clean at default persona.
- fix release notes generation in release workflow
prepare job failed: git-cliff --latest crashed with 'trim_start_matches on null' because the checkout was shallow (no tags/history) so no release existed.
- checkout prepare with fetch-depth: 0 + fetch-tags so git-cliff sees full history and tags (also fixes an otherwise-truncated CHANGELOG)
- generate release notes with --unreleased --tag v$VERSION instead of --latest: --latest selected the previous real tag (stale notes); --unreleased --tag renders the version being released
- remove pages workflow, fix release version-bump for astro site
- site: add format/lint/test/build workflow for astro site
Add Site GitHub Actions workflow running prettier format check, astro check, tests, and build on changes under site/. Wire prettier into the site package with config, ignore, and scripts, and format existing sources.
- add github pages workflow for docs site
- unify os workflows into one
- release: publish to crates.io via OIDC trusted publishing
- rename ci workflow
- site: always run site
- release: fetch full git history and tags for build.rs
build.rs uses vergen-git2 (Git2::all_git), which runs
git describeand reads commit metadata. The build and publish-crate jobs checked out a shallow clone without tags, so vergen could not resolve the describe string and libgit2 may fail on shallow repos. Add fetch-depth: 0 and fetch-tags: true to both jobs that compile the crate.
Changed
- site: type-safe i18n keys derived from en
- site: drop in-site manual, link to external docs.termscp.rs
- site: english-only, remove i18n machinery
Documentation
- point READMEs to termscp.rs + install.sh, docs.termscp.rs
- replace last termscp.veeso.dev refs (install.sh manual/changelog, crate homepage)
- add shared mdbook assets and favicon.ico
- add mdbook language switcher script
- add CNAME for docs.termscp.rs
- scaffold en-US mdbook
- add en-US table of contents
- en: write introduction and getting-started pages
- en: write usage pages
- en: write configuration pages
- en: write cli reference and developer pages
- en: fix CLI references (no -t / --update flags; -b is a value option)
- add markdownlint config for docs site
- scaffold zh-CN mdbook
- zh: translate introduction and getting-started pages
- zh: translate section headings in getting-started pages
- zh: translate usage pages
- zh: translate configuration pages
- zh: translate cli reference and developer pages
- disable MD060 table alignment (incompatible with CJK width)
- drop extra language docs/READMEs, point manual links to docs.termscp.rs
- zh: align README with root README, drop dead language links
- fix update command (termscp update, not --update) in READMEs
- zh: fix keyring deep-link anchor to translated heading slug
- config: update config dir paths for macOS/Windows in en & zh
Reflect the new config directory locations (~/.config/termscp on macOS, %USERPROFILE%.termscp on Windows) across the English and Chinese docs, and add a CLAUDE.md note to keep both translations in sync.
Fixed
- site: robust man-fetch invocation guard, add timeout+retry
- site: hero selected-row contrast (latte) + mobile row truncation
- site: drop @ts-check on astro config to clear false vite type error
- install: quote vars, fix set -e cargo check and rustup tmpfile cleanup
- silence SC3043 by declaring dash dialect (local is supported)
- quote unquoted vars (SC2086/SC1090)
- fix set -e aborting arch install before cargo check
- fix install_cargo removing unset $archive instead of $rustup
- make brew upgrade fallback a real if-then-else (SC2015)
- drop leftover starship BASE_URL and debug echo $1
- progress: rework transfer progress panel (#424)
Migrate the transfer progress UI to tuirealm 4, where the stdlib
ProgressBarwidget was dropped, by rebuilding the dual-bar panel on top ofGauge.- Restore the unified two-bar look: the full bar (top) and partial bar (bottom) draw joined borders so they read as a single panel; a single file shows one fully-bordered bar.
- Redraw on every file boundary in the send/recv queue loops so the full bar's (N/total) counter advances even for small files that finish within one in-loop redraw interval.
- Track progress with a single
TransferProgress(exact file count from the pre-scan, lazy partial/full computation) and consolidate the theme progress-bar fields.
- progress: equalize dual progress bar heights
The bottom (partial) bar carried a block title (the current filename), which forces a 1-row top inset in ratatui's
Block::innereven though its top border is dropped to join the seam with the full bar. That left the partial bar with one inner row while the full bar kept two, so the two gauges rendered at unequal heights.- Move the filename from the partial bar's title into its gauge label.
- Skip setting an empty title so no phantom top-positioned title triggers the inset.
- Put the panel title on the top (full) bar for multi-file transfers.
- Bump the two-bar popup height to fit the joined panel.
Also bump Cargo.lock and adapt the embedded terminal to the new vt100
screen_mut()API. - copy: prevent emptying file when copy destination is empty (#421)
An empty copy destination resolved to the source file's own path, so std::fs::copy truncated the original file to 0 bytes.
- localhost::copy now refuses to copy a file onto itself, returning an error instead of truncating it (root cause).
- action_copy treats an empty/whitespace destination as a cancel.
- transfer: enqueue full destination path instead of directory
Queued transfers stored only the destination directory as the target path. Downstream upload logic treats the queued destination as the full file path and passes it straight to create_file, so transfers failed with a Failure error when the remote target resolved to a directory.
Append each entry's file name to the destination directory at enqueue time in both enqueue_file and enqueue_all, matching the single-file transfer path which already builds the full target path.
Build
- add chocolatey package, remove legacy dist build scripts
The old manual dist/build/* scripts and dist/{deb,rpm}.sh are superseded by the automated release workflow. Add the chocolatey package consumed by release.yml.
- site: copy install.sh from repo root at build time (single source)
1.0.0
Released on 2026-04-18
Added
- rework TransferProgress to track bytes with lazy estimation
- replace dual progress bar components with single TransferProgressBar
- simplify progress bar layout to single component
- update progress bar display for new unified data model
- update transfer loop to use unified TransferProgress
- consolidate theme progress bar fields into single transfer_progress_bar
CI
- Codeberg mirroring
- run test workflows once
- check fmt with nightly toolchain
- add linux and windows aarch64 build targets
Changed
- FileTransferActivity pane-agnostic dispatch (#386)
Comprehensive design for incremental refactoring of the 13k-line FileTransferActivity god-struct using a unified Pane abstraction. Detailed step-by-step plan covering 6 phases: split monoliths, error handling, Pane struct, action dedup, session split, view reorg. Extract 26 popup components from the monolithic 1,868-line popups.rs into 20 individual files under popups/. Each file contains one or two related components with their own imports. The popups.rs module file now contains only module declarations and re-exports. Replace 8 panic!() calls with error!() logging and early returns/fallthrough. These panics documented invariants (e.g. "this tab can't do X") but would crash the app if somehow triggered. Error logging is safer and more resilient. Replace raw FileExplorer fields in Browser with Pane structs that bundle the explorer and connected state. Move host_bridge_connected and remote_connected from FileTransferActivity into the panes. Add navigation API (fs_pane, opposite_pane, is_find_tab) for future unification tasks. Rename private get_selected_file to get_selected_file_by_id and add three new unified methods (get_selected_entries, get_selected_file, is_selected_one) that dispatch based on self.browser.tab(). Old per-tab methods are kept for now until their callers are migrated in subsequent tasks. Collapse local/remote action method pairs (mkdir, delete, symlink, chmod, rename, copy) into unified methods that branch internally on is_local_tab(). This halves the number of action methods and simplifies the update.rs dispatch logic. Also unifies ShowFileInfoPopup and ShowChmodPopup dispatching to use get_selected_entries(). Move
host_bridgeandclientfilesystem fields from FileTransferActivity into the Pane struct, enabling tab-agnostic dispatch viafs_pane()/fs_pane_mut(). This eliminates mostis_local_tab()branching across 15+ action files. Key changes:- Add
fs: Box<dyn HostBridge>to Pane, remove from FileTransferActivity - Replace per-side method pairs with unified pane-dispatched methods
- Unify navigation (changedir, reload, scan, file_exists, has_file_changed)
- Replace 147-line popup if/else chain with data-driven priority table
- Replace assert!/panic!/unreachable! with proper error handling
- Fix typo "filetransfer_activiy" across ~29 files
- Add unit tests for Pane
Net result: -473 lines, single code path for most file operations.
- Add
- replace lazy_static with std::sync::LazyLock
- migrate from mod.rs to named module files
- split parser internals into focused modules
- split auth form components by protocol
- split auth update handlers by context
- split auth view helpers by responsibility
Documentation
- date
- add core module and API documentation
- document core host and ssh modules
- document parser and file transfer params
- complete remaining core module docs
- document ssh key storage API
Fixed
- replace panics reachable from user input with proper error handling
- replace assert! calls in UI activities with graceful error handling
- correct typos in BadSytax and theme_provider log messages
- replace magic-crypt with aes-gcm for bookmark encryption
magic-crypt has known vulnerabilities. Replace it with aes-gcm for new encryption (authenticated, with random nonces) while keeping a legacy AES-128-CBC decryption path to transparently handle existing bookmarks.
- replace recursive byte-counting with entry-based transfer progress (#395)
- fix: replace recursive byte-counting with entry-based transfer progress
Replace the expensive recursive
get_total_transfer_sizepre-calculation with a lightweight entry-based counter (TransferProgress) for the overall progress bar. This avoids deeplist_dirtraversals before transfers begin, which could cause FTP idle-timeout disconnections on large directory trees.The per-file byte-level progress bar (
ProgressStates) remains unchanged. Bytes are still tracked viaTransferStates::add_bytesfor notification threshold logic. - return after empty terminal prompt
- resolve
.and..in terminalcdand prevent panic in path elideabsolutizenow lexically normalizes paths socd ..navigates to the parent directory instead of appending..literally. Also guard againstfile_name()returningNoneinfmt_path_elide_ex, which caused a panic on paths containing unresolved..components. - pass full command string to exec, not just the first word
The
Execarm ofCommand::from_stronly captured the first whitespace-delimited token, silently dropping all arguments. Now passes the entire input string so e.g.ls -la /tmpworks. - sync browsing when entering a directory from filtered/fuzzy view
- stabilize core error handling
Remove production panic and unwrap paths from core modules.
Propagate bookmark encryption failures, harden file watcher and temp mapped file handling, and clean up dead code in shared utilities.
- normalize localhost relative path checks
- use time-based redraw interval instead of progress-delta threshold
The old 1% progress threshold caused the UI to appear frozen on large files (e.g. 1GB) because many read/write iterations passed between redraws. Switching to a 100ms time-based interval ensures consistent UI responsiveness regardless of file size.
- render progress bar immediately after mounting
Call self.view() right after mount_progress_bar() at all 6 call sites so the bar is visible on screen before the transfer loop begins.
- filter self-references and dot entries from remote directory listings
Some non-compliant FTP servers (e.g. LiteSpeed) include a self-reference to the listed directory in the LIST response, causing the current folder to appear as a duplicate entry in the explorer.
Performance
- use sort_by_cached_key to avoid repeated lowercase allocations in file sorting
Testing
- add parser and bookmark regression coverage
- extend config and explorer regression coverage
- extend system regression coverage
Build
- removed
hostname, usewhoamiinsteadwhoami provides
hostnamefunction, so we don't need the hostname dependency, since whoami is also being used for getting the username - replaced libssh with russh for remotefs-ssh
- replace
version-comparecrate withsemver - remotefs-ssh 0.8.1
- remotefs-ssh 0.8.2
this version removes any usage of sh commands from the sftp backend and only uses pure protocol functions
- migrate to tui-realm 4.0
Upgrade tuirealm (3.x -> 4.0.0), tui-realm-stdlib (3 -> 4), tui-term (0.2 -> 0.3). Apply all breaking changes from the 4.0 migration guide across the termscp UI.
Key changes:
- Root-level re-exports removed; imports moved to module-qualified
paths (
tuirealm::application,::component,::event,::props,::state,::subscription,::listener,::ratatui). Same for stdlib component types (tui_realm_stdlib::components::*). MockComponenttrait renamed toComponent; oldComponenttrait renamed toAppComponent.#[derive(MockComponent)]is now#[derive(Component)].Component::onnow takes&Event<_>.TextSpanreplaced withSpanStatic/LineStatic/TextStatic(ratatui-based); tuple(String, Alignment)titles replaced with the newTitlebuilder;Alignmentsplit intoHorizontalAlignment/VerticalAlignment; stdlib components use.alignment_horizontalinstead of.alignment.State::One/PropPayload::One->Single.CmdResult::None->NoChange.Props::get_orremoved;Props::getnow returns a borrowedOption<&AttrValue>(call sites switched to.and_then(AttrValue::as_*)).Component::queryreturnsOption<QueryResult<'a>>.Attribute::HighlightedColor->HighlightStyle(a fullStyle)..highlighted_*helpers renamed to.highlight_*.PollStrategy::UpTo(n)now requires aDuration; tick timeout moved fromEventListenerCfg::poll_timeoutintoPollStrategy.TerminalBridgeremoved;Contextnow holdsCrosstermTerminalAdapterdirectly and enables raw mode + alternate screen explicitly. TheTerminalAdaptertrait is imported where its methods are used.Updatetrait removed; activityupdatemethods are plain inherent functions.ProgressBarreplaced by stdlibGauge. Paragraph.wraprenamed to.wrap_trim;.textnow takes anInto<Text>. StdlibListrow items are now individual lines (Vec<Span>per row) rather than aTableof spans; customFileList/Logconvert between the two models.- Radio builders drop
.foreground(color)so unselected items render with the terminal default foreground, and sethighlight_style(Style::default().fg(color).add_modifier(REVERSED))so the selected entry is visibly highlighted only with the theme color. - Custom
FileListkeeps the selected row highlighted with the full highlight style when focused and falls back to a foreground-only style when unfocused. - Theme loading is now backwards compatible:
Themeuses a customDeserializethrough an intermediateThemeFilewith optional fields, so missing keys, unknown values or legacy aliases (transfer_progress_bar_full/_partial) fall back to defaults on a per-field basis instead of failing the whole load.
- Root-level re-exports removed; imports moved to module-qualified
paths (
- upgrade remotefs-ssh to 0.8.3
Style
- linter
0.19.1
Released on 2025-12-20
CI
- windows artifact name
Fixed
- install.sh deb name
- install.sh deb name
- Updated dependencies to allow build on NetBSD
0.19.0
Released on 2025-11-11
Added
- Import bookmarks from ssh config with a CLI command (#364)
- feat: Import bookmarks from ssh config with a CLI command
Use import-ssh-hosts to import all the possible hosts by the configured ssh config or the default one on your machine
- Changed file overwrite behaviour (#366)
Now the user can choose for each file whether to overwrite, skip or overwrite all/skip all.
- Added
<CTRL+S>keybinding to get the total size of selected paths. (#367)- feat: Added
<CTRL+S>keybinding to get the total size of selected paths.
- feat: Added
- Merge branch '0.19.0'
CI
- Build artifacts for Windows x86_64 and Ubuntu x86_64 (#368)
- Debian
- debian fix
- deploy site
Documentation
- User manual and get started links
- Release date
Fixed
- typo in file open error message (#349)
- SMB support for MacOS with vendored build of libsmbclient.
- Report a message while calculating total size of files to transfer. (#362)
- fix: Report a message while calculating total size of files to transfer.
Currently, in case of huge transfers the app may look frozen while calculating the transfer size. We should at least report to the user we are actually doing something.
- Issues with update checks (#363)
Removed error popup message if failed to check for updates. Prevent long timeouts when checking for updates if the network is down or the DNS is not working.
Performance
- Migrated to libssh.org on Linux and MacOS for better ssh agent support.
Build
- 0.19 deps
- remotefs-ssh 0.7.1
This version fixes compatibility with hosts which don't use bash/sh as the default shell.
0.18.0
Released on 2025-06-10
Added
- Updated dependencies and updated the Rust edition to
2024 - Replaced the
Execpopup with a fully functional terminal emulator (#348)- feat: Replaced the
Execpopup with a fully functional terminal emulator
- feat: Replaced the
- 0.18
Fixed
- larger file info popup
- lock
Style
- catppuccin themes
0.17.0
Released on 2025-03-23
Added
- cli: added
--wno-keyringflag to disable keyring - 132 queuing transfers (#332)
the logic of selecting files has been extended! From now on selecting file will put the files into a transfer queue, which is shown on the bottom panel. When a file is selected the file is added to the queue with a destination path, which is the **current other explorer path at the moment of selection. It is possible to navigate to the transfer queue by using
Pand pressingENTERon a file will remove it from the transfer queue.Other commands will work as well on the transfer queue, likeCOPY,MOVE,DELETE,RENAME.
CI
- build: build vendored smb and refactor platform deps (#333)
Documentation
- CONTRIBUTING: docs(CONTRIBUTING): mistakes
- veeso.me instead of veeso.dev
- version
Fixed
- unused import isolated tests
- isolated-tests for localhost
- clippy error
- ui: fixed input mask on host bridge on local dir up
if you go up on local dir when localhost is selected it panics
- fixed a crash when the local directory specified in the auth form does not exist
- the return value of
--versionshould be0 - aws-s3: updated remotefs-aws-s3 to 0.4.1
should fix #329
- log: add suppaftp/pavao/kube to allowed logs
- bookmarks: Local directory path is not switching to what's specified in the bookmark
Testing
- remotefs_builder: check result, build doesn't panic anymore
Build
- deps: updated dependencies and edition to 2024
- bump to ssh2-config 0.4 and remotefs 0.6 to have support for Include in config files
- aws-s3 0.4.2
- build docker for x86
- so apparently native-tls vendored tries to build openssl on windows, wtf guys?
0.16.1
Released on 2024-11-12
Fixed
- cfg unix forbidden in rust .82
- gg rust 1.82 for introducing a nice breaking change in config which was not mentioned in changelog
- 0.16.1
0.16.0
Released on 2024-10-14
Added
- version 0.16
- Show
..directory before all the others in the explorer to navigate to the parent dir (#301)
Fixed
- Use
uzersinstead of the dead packageuserswhich has several vulnerabilities (#295) - vergen (#296)
- users from lock
- tuirealm 2.x (#299)
- issue 292 New version alert was not displayed due to a semver regex issue. (#300)
- 0.16
- tiny ui issue
0.15.0
Released on 2024-10-03
Added
- init 0.15
- Pods and container explorer for Kube protocol (#281)
- it is now possible to cancel find command; show find progress (#284)
Fixed
- tokio rt builder
- dbus deveL
- bump vers
- keyring test not passing macos
- notify 6
- bump vers
- don't clear screen after terminating termscp
- issue 277 Fix a bug in the configuration page, which caused being stuck if the added SSH key was empty
- popup texts
isolated-testsfeature to run tests for releasing on distributions which run in isolated environments (#286)-
fix:
isolated-testsfeature to run tests for releasing on distributions which run in isolated environments -
fix: cond
-
- set date
- github ci is stable and reliable (one worker broken each 2 weeks)
- ci
- readme
- include build.rs
0.14.0
Released on 2024-07-17
Added
- ALT+A to deselect all files (#263)
- ssh-agent (#264)
- issue 256 - filter files (#266)
- kube protocol support (#267)
- termscp 0.14
Documentation
- update Arch Linux instructions (#243)
Fixed
- install script version
- correct help text for update subcommand (#259)
- lint
- CLI remote args cannot handle '@' in the username (#261)
- sorted flags in readme
- Jump to next entry after select (#262)
- remotefs-ssh 0.3.1
- german manual
- removed support for RPM
- changelog
0.13.0
Released on 2024-03-02
Added
- WebDAV support (#235)
- termscp 0.13.0
Fixed
- AWS S3 wasn't working anymore due to rust-s3 outdate
- test
- debian script
- debian script
- lint???
0.12.2
Released on 2023-10-01
Added
- tui-realm 1.9
Fixed
- fmt
- panic if the terminal screen is too small
0.12.1
Released on 2023-07-06
Added
- smb is now an optional feature (#200)
- build artifacts workflow (#202)
Fix
- Some URL typos on 'install.sh' and 'README.md'. (#197)
Fixed
- install workflow
- sh compliant macos.sh build script
- readme site links
- better main runner
- deps
- don't run CI on site/.md change
- rustup target
- don't update path breadcrumb if enter/scan dir failed (#203)
0.12.0
Released on 2023-05-16
Added
- allow unknown fields in ssh2 configuration file (#181)
Fixed
- #153 show a loading message when loading directory's content (#180)
- specify ssh2 config params
- release date
- build
- pavao 0.2.2
- pavao 0.2.3
- macos script
- release date
0.11.3
Released on 2023-04-19
Added
- site improvements
Fixed
- relative paths windows (#167)
0.11.2
Released on 2023-04-18
Added
- dependencies up-to-date
- site 0.11.2
0.8.1
Released on 2022-03-22
Fixed
- footer listed "Delete" shortcut as "Make Dir"
0.8.0
Released on 2022-01-06
Arch
- install rust only if not found on local system
0.7.0
Released on 2021-10-12
Option
- prompt user when about to replace an existing file caused by a file transfer
0.6.1
Released on 2021-08-30
Fixed
- When copying files with tricky copy, the upper progress bar shows no text
0.5.1
Released on 2021-06-21
Fix
- target_family unix means also macos and linux; use BSD target_os
0.5.0
Released on 2021-05-23
Coverage
- githubActions
- githubActions
Grcov
- exclude activities
0.4.1
Released on 2021-04-06
FTP
- transfer type set to binary
- added support for symlinks for Linux servers
Readme
- one-liner for Homebrew
The one-liner command
brew install veeso/termscp/termscp
is equivalent to the two commands
brew tap veeso/termscp brew install termscp
SCP
- fixed symlink not properly detected
0.4.0
Released on 2021-03-27
Clippy
- don't allow warnings
Codecov
- ignore activities, context, input but not layout/
PropsBuilder
- use from trait
View
- return String instead of id
0.3.3
Released on 2021-02-28
Git
- check for new updates (utils)
0.3.2
Released on 2021-01-24
Testing
- don't run on windows
0.3.0
Released on 2021-01-10
AuthActivity
- enter setup with <CTRL+C>
ConfigClient
- return key path, not content
Docs
- private keys with passwords
Explorers
- append '/' to directories name
FileTransferActivity
- load ConfigClient; set text editor to configuration's value
- :Explorer refactoring; toggle hidden files with
- sort files with
FsEntry
- :get_name() returns &str
- :is_hidden() method
SetupActivity
- <CTRL+E> as
0.2.0
Released on 2020-12-21
FsEntry
- :is_file
Scp
- when username was not provided, it didn't fallback to current username
0.1.2
Released on 2020-12-13
FsEntry
- :*::symlink is now a Option<Box>; this improved symlinks, which gave errors some times
0.1.0
Released on 2020-12-06
FileTransferActivity
- ftp is now allowed
Host
- :mkdir and Host::remove
- mkdir support for absolute path
Scp
- use oneshot channels instead of ptys (more stable; more reliable and overall works)
Std
- :fmt::Display for HostError
- :fmt::Display for HostError