| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| macSCP-1.6.0.dmg | 2026-10-01 | 41.6 MB | |
| README.md | 2026-10-01 | 27.6 kB | |
| v1.6.0 source code.tar.gz | 2026-10-01 | 6.1 MB | |
| v1.6.0 source code.zip | 2026-10-01 | 7.2 MB | |
| Totals: 4 Items | 54.9 MB | 0 | |
1.6.0 (2026-10-01)
Features
- app: a failure's cause is read in the user's language (383191e)
- cli: a failed tunnel line marks a generic reason (aa9b789)
- connect: the connection form can swap a host name for one of its addresses (e313639)
- core: RemoteFSFinding, a named finding a mapper can translate (f21893d)
- diagnostics: a session behind a jump is diagnosed through the jump (e5dfc75)
- diagnostics: a step that could not be started says so (db14691)
- diagnostics: a throughput test to the server over the session's own protocol (565ba9f)
- diagnostics: an internet speed test whose service is a setting (c27486c)
- diagnostics: resolve, ping and trace run from the jump host (af7c7d8)
- diagnostics: the idle text says what a walk through a jump measures (f5b4536)
- diagnostics: the resolve step names each address and checks the name resolves back (bdfd860)
- groups: a new group can be created inside a folder (81cc17f)
- groups: group pickers show where a group sits, and the editor can create one (313ac9e)
- keys: a managed key's passphrase can be corrected and changed (dd1877e)
- keys: convert a PEM key from the key manager import and from the failed-connect surface (6dba744)
- keys: converting a PEM key for a login-set session offers to update the set (5ce949b)
- liveness: a tab marked lost says why in the diagnostic log (c0df9a6)
- notifications: lost connections, failed transfers and failed forwardings notify (4dc5483)
- settings: the settings window can be resized and remembers its size (745d62b)
- ssh: convert a copy of a PEM key to OpenSSH format with ssh-keygen (7f3e02b)
- ssh: decode PEM private keys — PKCS#1, SEC1, PKCS#8, legacy and PBES2 encryption (79589a0), closes PKCS#12
- ssh: PEM private keys connect, and an unreadable one names its feature and its remedy (5634c01)
- tabs: a tab is titled by the session it shows or edits (d3059e3)
- terminal: copy on select and paste on right click, each behind its own setting (c573964)
- terminal: the terminal type is a setting with a per-session override (d2a0122)
- terminal: themes as presets and an iTerm2 import (0ccda59)
- transfers: a resumed download can be tied to the object it started on (5b6087c)
- transfers: the toolbar asks before transferring several items or a folder (341ab06)
- tunnels: a failure carries its cause, not only its sentence (7d15bad)
- tunnels: a forwarding connects without an SFTP channel (f0d9f4f)
- tunnels: a forwarding counts connections that failed, and says so while it stays up (b9ee7d2)
- tunnels: a forwarding that keeps failing stops reading healthy (d9f25e2)
- tunnels: a forwarding's failure is typed, and shown in the app's language (ab4a2c4)
Bug Fixes
- cli: reasonIsGeneric is true only when the line fell back to the kind's sentence (0a4f386)
- cli: sessions rm does not promise to delete forwardings it will keep (d94f962)
- cli: sessions rm says the forwarding count is unknown when it is (cf5f2f2)
- cli: tag each secret chain link's kind where it is appended (99fddc7)
- cli: the internet scope refuses a payload size (d8f35a5)
- cli: the secret-required message names every place the tool looked (4fa6974)
- cli: the secret-required message names what it actually checked (7cf85d7)
- connect: a failed dial releases its event loop only after Citadel's login timer (22af622)
- connect: a tab dial against a server without SFTP ends with its own error (19c6dc7)
- connect: the connection form shows no raw error either (c977d76), closes #expect
- connect: the PEM remedy names one file or none, and the message says what ssh-keygen -p really does (71fdf3f)
- core: a named finding keeps its dial kind, and both branches are tested (9111b54)
- core: Task 6 fix round 1 — a constant payload, a narrow guard, a collapsed census (185e882)
- detail: a failure a person must read is shown on the form until it is dismissed (64f66a8)
- detail: a pending host-key question or a failure is never hidden behind the session overview (11ab092)
- diagnostics: a batch of deadlines fires in deadline order, not in hash order (c9a128d)
- diagnostics: a copy of an internet walk carries no server (1df9ebf)
- diagnostics: a form's jump adopts a stored secret only for its key file (66a108c)
- diagnostics: a header-less trace is read against the hop limit it ran with (0c0c5c8)
- diagnostics: a host-key mismatch reason names the host, never the fingerprints (8db25be)
- diagnostics: a jump-host ping and trace end inside their budget (d0fba66)
- diagnostics: a jump's stored secret goes only to that jump, and no caller can drop it (dd2ff12)
- diagnostics: a PTR name can spell no escape and reorder no text (dd83501)
- diagnostics: a refused jump probe's row names the tool it refused (df018e8)
- diagnostics: a step's deadline holds however loaded the machine is (4f4ada5)
- diagnostics: pin the invariant the cut condition rests on (c703c9d)
- diagnostics: say what exit 16 means after Ctrl-C, and what the leftover log line can carry (3d550c6)
- diagnostics: the diagnosis and its jump row name where the key store is (c979b29)
- diagnostics: the firing order breaks a tie on the ticket, not the seed (247fed6)
- diagnostics: the speed service cannot redirect the request elsewhere (e44cb0e)
- diagnostics: the speed test sends no language preference (b2d0861)
- diagnostics: the tab's own jump adopts the store fact, and a count is recounted (5eec925)
- diagnostics: the throughput test names a file it may have left, on a cancel and on Ctrl-C (bded658)
- errors: no S3 error, CLI line or browser banner carries the typed endpoint (9041879)
- export: a login covered by its managed key's passphrase is not missing (a5c7395)
- form: the jump session summary reads no secret on render (6a1b6a0)
- groups: a nested new group expands its folder, and the alert names it (34465b7)
- groups: the editor's group picker reads one list and refuses a vanished parent; the overview shows the path (abff4ed)
- jump: an empty jump slot falls back to the managed key's passphrase (561fc58)
- keys: a connection that fails on an unreadable key store says so (445e6ac)
- keys: a jump's save guard compares the fill, not a fresh probe (a49dfb5)
- keys: a Keychain error on a managed key's slot stops the secret chain (79e161a)
- keys: a managed key's passphrase wins over the hop's own slot (04e8c4d)
- keys: a stopped passphrase rewrite cannot destroy the key file (e6a7a09)
- keys: an unreadable key store answers not-managed, a Keychain error still stops the chain (12573d5)
- keys: an unreadable key store is named at the jump hop (5c1682d)
- keys: bound the repoint dialog's buttons, and let the CLI read a managed key's passphrase (5680442)
- keys: diagnose a dropped session slot through the managed key, and pin both slot drops (91046cc)
- keys: every jump fill goes through the one door, and a carry keeps it (5e0cf3c)
- keys: keep a slot a jump hop reads, and pair each repoint button with its handler (d8db692)
- keys: key writes stay on the main actor and runs use captured inputs (f392c5a)
- keys: ssh-keygen runs are awaited without parking a thread (2dc4fa5)
- keys: the connection tab names an unreadable key store (c858ae0), closes #require
- keys: the conversion drops a session secret only when the key's own slot holds one, and leaves a login set alone (38e1e06)
- keys: the conversion is applied to the tab that failed, and the session keeps no second copy of the passphrase (6e89ee9)
- keys: the import sheet uses the inputs it started with (008f84e)
- keys: the rollback restore puts the key back in one step (6991d0e)
- keys: the unreadable key store message says where the store is (01dfc53)
- liveness: the probe's log line is a closed set, and the surface half is guarded (feadb90)
- local: an unrecognised error is reduced, not described (926144d)
- login-sets: the repoint question counts at the moment it is shown (d1e72ba)
- login-sets: the repoint question counts every session that depends on the set (f9ce645)
- login-sets: the repoint question names the set as it stands now (2914526)
- login-sets: update login set drops and redials only after a saved set (615a417)
- notifications: a post made during the first permission request is held (8749ec5)
- notifications: banners show while the app is frontmost, one per tab until its window is key, and nothing reaches the live notifier by omission (8984d29)
- reconnect: an in-place connect shows a fill that threw (24c7514)
- s3: a batch delete reports a refused redirect as one (5ac23b6)
- s3: a cancelled multipart upload never waits for its abort (b488bdd)
- s3: a cancelled transfer reads as cancelled, not as a lost connection (fa055ec)
- s3: a resumed download rejects a server that ignores Range (83f2743)
- s3: an abort outlives the disconnect that follows it, and the CLI waits for it (2de5684)
- s3: an endpoint with an @ after its host is refused, and the typed door's limit is stated as a class (300a93f)
- s3: no credential typed into an endpoint reaches a presigned URL, a log line or the CLI list (d1f0888)
- s3: send the multipart abort outside a cancelled task and report one that is not confirmed (b949c5f)
- s3: Task 3 fix round 1 — a deleted sentence, a floor not a count, two locale-dependent checks (43a4b64)
- s3: Task 3 fix round 2 — three stale line numbers, a corrected sum (54144f2)
- s3: Task 4 fix round 1 — two falsified comments, a one-way gate, two unnamed surfaces (8e80e3c)
- s3: the endpoint guard reads every spelling, and a doc and a reason say what the tree does (77ef56f)
- sessions: an import no longer erases a session's terminal type (6ad0151)
- sessions: save replaces the session the name rule names (c0ee026)
- settings: one minimum size for the settings window, and the frame-name test compares the real names (fb8ea78)
- settings: the connect timeout does not promise a multiplier (75a0dae)
- settings: the connect timeout is spent once per connection stage (69c9b1c)
- settings: the settings window really is resizable (2a35c83)
- ssh: a PEM EC key falls through to its inner curve, and p/q/iqmp are measured (ce36682), closes PKCS#8
- ssh: restrict a 0644 source to 0600 on the already-OpenSSH branch, remove a partial copy on failure (d22f09d)
- terminal: a pasting control-click reports no drag either (9ecdf2c)
- terminal: a real export shape, its variants, and one panel surface (fa05e9a)
- terminal: a tab's terminal type follows the tab between windows (d6572a9)
- terminal: right-click paste follows the real mouse button (7152f62)
- transfers: a failed transfer never shows a raw error, so no endpoint credential reaches the queue (c9cc6bf)
- transfers: a failed validator re-read keeps the one it was given (27a6897)
- transfers: a retry refuses to resume into a file that changed (42ddb6b)
- transfers: an attempt that starts over reports the object it read (c686a9e)
- transfers: only a read that sent a precondition reports a changed file (7b24610)
- transfers: the carried validator survives an attempt that never reads (ac115f6)
- transfers: the confirmed toolbar transfer goes where the question said (ce66e59)
- tunnels: a bind failure names the errno it hit (67ea454), closes #expect
- tunnels: a failed line is buffered before the state announcing it (8b0d4ed)
- tunnels: a failing forwarding differs from a failed one in shape, not only colour (4ec6df7)
- tunnels: a forwarding's disconnect outlives Citadel's login timer (feb0a55)
- tunnels: a local bind failure names its cause in the app (39a6fb1)
- tunnels: a refused save or delete leaves the running tunnel running (208c1f3)
- tunnels: a remote forward's refusals keep their own kind in the app (8c9289a)
- tunnels: a SOCKS5 handshake has a deadline and a cap on parked handshakes (86135e0)
- tunnels: a stop is never a connection failure, and a drained report logs its port (1947cfe)
- tunnels: a stopped attempt's reports end with it, and failing forwards are not hidden (bc63925)
- tunnels: a stopping runner drops its buffered connection reports (9a96e1c)
- tunnels: an unreadable forwarding store refuses writes instead of starting over (f31212b)
- tunnels: comments say what was read, not measured, and the dial-release test pins its timer (b9172bb)
- tunnels: correct the errno rendering's doc comment and pin its table (8b58539)
- tunnels: make the errno table's coverage guard SDK-independent (807418a)
- tunnels: no read of the forwarding store brings an orphan row back (5fc4f87)
- tunnels: pin the SOCKS5 deadline's handed-over arm and read the port before closing (db43203)
- tunnels: remove takes the row out of the mirror before it stops the runner (ece8528)
- tunnels: the activation reconcile drops rows whose session is gone (8bd29c2)
- tunnels: the connection-lost arm buffers its line before publishing (4d3afe6)
- tunnels: the dock badge marks a degraded count (98d9513)
- webdav: Task 2 fix round 1 — stale line numbers, a real count, an anchored anchor (2294ea0)
- window: resuming the autosave keeps the window on its own display (7cb822b)
- window: the launch put-back gate is a value the plan decides (ac53eb8)
- window: the launch-time frame is restored on its own display (8a8115f)
- window: the main window comes back at the size it was used at (1199a84)