Download Latest Version v1.7.0 source code.zip (10.1 MB)
Home / v1.6.0
Name Modified Size InfoDownloads / 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)
Source: README.md, updated 2026-10-01