Releases: dorienh/iruka-releases
Releases · dorienh/iruka-releases
Release list
Iruka v1.1.6.0
Added
- Places and Favorites can be reordered. Settings → Sidebar now lets you drag Places into whatever order suits you — the built-in ones and your cloud folders together in a single list — alongside the existing switches for hiding them. Favorites are listed there too: drag to reorder, remove with the minus button, and Add Folder… picks one without having to navigate to it first. A favourite that duplicates a Place stays hidden from the sidebar, but is still listed in Settings so you can reorder or remove it — and it reappears in the sidebar if you hide that Place, or the whole Places section. Anything new, such as a cloud account added later, appears at the end rather than disturbing your arrangement.
- Iruka reopens where you left off. Quitting now remembers the window's size, position and display, whether the second pane, preview pane and terminal were open, every tab in both panes with its folder, and each tab's sort order and hidden-files setting. Relaunching — including after an update — puts it all back instead of leaving you to rebuild a dual-pane layout by hand each time. Folders that have since disappeared, such as a volume that isn't mounted yet, are skipped rather than reopened as errors. Turn it off with Settings → General → On launch → Start fresh, which also forgets the stored session.
- Optionally connect automatically. Edit Connection has a Terminal switch — "Open an SSH session when I browse this server" — off by default. Per connection rather than global, because whether you want a shell on the box or a local shell pointed at the mount depends on the server.
- Open an SSH session that follows the file browser. While browsing a mounted server, the terminal shows a network button: it logs into that server over SSH, lands in the folder you're looking at, and — unlike an
sshyou type yourself — keeps following as you navigate, translating each folder in the volume to its path on the server. Commands then run on the server rather than through the mount, which is both far faster and immune to a stalled mount hanging the shell. It signs in with the connection's saved password or key passphrase, showsssh <host>in the terminal header while active, and hands control back to the local shell the moment youexit. - Mount an SFTP server as root. Edit Connection now has a Mount as root switch that runs the server's SFTP service under
sudo, so the volume can read and write anywhere on the machine instead of only where your account has access. Off by default.scpitself can never be elevated — it runs a fixed command as the login user — but the SFTP subsystem can be replaced wholesale, and elevating it covers every copy, move, rename and delete the mount performs. Before mounting, Iruka finds the server'ssftp-server(readingSubsystem sftpfrom itssshd_config) and checks thatsudowon't ask for a password — it can't be answered, since the SFTP protocol occupies the channel a prompt would use — and if it does, the error names the exactvisudoline to add, scoped to that one command. The mounted volume is labelled "(root)" so it's obvious wherever it appears. Servers configured for the built-ininternal-sftphave no binary to elevate, and are told so. - Cloud folders appear in the sidebar. OneDrive, Google Drive, Box, Dropbox and anything else using macOS's File Provider live under
~/Library/CloudStorage, which is easy to miss unless you know it's there. Each account now shows up under Places, the way Finder lists them. These are ordinary local folders kept in sync by the provider's own app — nothing is mounted, and nothing needs setting up. Each account can be hidden individually in Settings → Sidebar, listed there under Cloud folders.
Changed
- Sync now says why it paused. The indicator reads "Sync · ssh" or "Sync · vim" rather than just going quiet, with a tooltip explaining it resumes when that program exits — a paused Sync used to be indistinguishable from a setting being ignored.
- Sync keeps following through
suandsudo. It used to stop the moment the shell had any child process for a few seconds —su,vimand a long build were indistinguishable to it. It now looks at what is running: anything that is a shell or hands straight to one (su,sudo,doas,login,nix-shell, nested shells of every flavour) keeps following, while an editor, pager, REPL or build still pauses it — sendingcdto those would type it into whatever they're doing. A hand-typedsshalso still pauses, deliberately: the paths would be local ones the other machine doesn't have.tmux,screenandzellijpause Sync by default, because their panes run under a separate process that Iruka can't see into; if yours are usually at a shell prompt, Settings → Terminal has a switch to follow them anyway. - Closing a tab now closes its shell. The shell survived the tab, so an SSH session started in it stayed connected with nothing left to reach it.
- The terminal's buttons say what they do. The three glyphs above the terminal were 11-point icons with no labels; they're now larger and captioned — Browser here, Terminal here, SSH — so it's clear which direction each one moves things.
- Settings are easier to find. The Appearance tab had grown into a catch-all holding deleting, preview and update options. Those moved to a new General tab; Appearance now covers just the theme and text size.
- Saved passwords are now kept in the macOS Keychain. SSH and server passwords, key passphrases and cloud provider secrets were stored in plain text in a file under Application Support — readable by anything running as you, and copied unencrypted into backups. They now live in the Keychain, encrypted at rest. Existing saved credentials are moved across in one pass at launch, and the plaintext copy is deleted only after the Keychain copy has been read back and verified, so nothing is lost if the Keychain is unavailable. No prompts: an app is never asked to approve access to items it created itself. (Credentials were originally kept out of the Keychain because Iruka was ad-hoc signed and macOS treated every update as a different app; it has been signed with a stable Developer ID since build 58, so that no longer applies.)
Fixed
- No more
cdtyped into vim. With a full-screen program running — an editor, pager ortop— Sync now holds thecdback and sends it once you quit, instead of the command appearing in your document. This works even when the program is running on a server through an SSH session Iruka opened, where it previously had no way to tell: it watches the terminal screen rather than local processes, sossh, thensu, thenvimis caught like anything else. - Saved SSH passwords no longer go missing. Editing a connection could clear its stored password and key passphrase — the update path defaulted both secrets to empty, and empty means "forget this one", so changing any setting on a connection wiped its credentials. Secrets are now left alone unless you actually change them, and a failed write restores the previous value instead of leaving nothing behind.
- "Setup Guide" links now open the actual documentation. Every Setup Guide button in the sidebar's mount warnings pointed at
iruka.app, which isn't Iruka's site — it answers every address with an unrelated landing page, so the links silently led somewhere useless rather than failing visibly. They now open the real docs.
Iruka v1.1.5
Added
- Connecting via SSH no longer asks for a password you've already saved. "Connect via SSH" now answers
ssh's own prompt with the password stored for that connection — or the key passphrase, for a Key File or Automatic connection with an encrypted key.sshonly accepts a password from the terminal itself, never as an argument, so Iruka waits for the prompt and types it; the secret never appears in the command line, the process list, or your shell history. It is armed only for the command Iruka just issued, answers at most one prompt, and gives up after 20 seconds — a latersudoprompt in the same session is never answered. - Type-to-select now works in icon view. Typing a few letters jumps to the first item whose name starts with them, and pressing the same letter repeatedly cycles through the matches — the behaviour list view already had. The query resets after a short pause.
- Column view supports multiple selection. It could only ever select one item. You can now ⌘-click to add or remove individual items, ⇧-click to select a range, extend the selection with ⇧↑ / ⇧↓, and drag out a rubber-band ("elastic") selection starting on an unselected row or in the empty space below the list — matching what the list and icon views already do. Dragging files in and out of a column now works too — dragging carries the whole selection, and a folder row highlights and accepts a drop (dropping beside the rows puts the files in that column's own folder), with the same ⌥-copy / ⌘-move rules as the other views — and the right-click menu acts on every selected item (Copy, Cut, Duplicate, Compress, Move to Trash, Send via SCP, Permissions) instead of only the row you clicked. As in Finder, a selection lives within one column: selecting in another column starts fresh, since each column is a different folder. Plain clicks and arrow keys behave exactly as before, and the list and icon views are untouched.
- ⌫ now asks before deleting, and you can change what it does. Settings → General → Deleting offers Ask first (the new default), Move to Trash, or Do nothing (as in Finder). Previously a bare ⌫ moved the selection to the Trash instantly with no feedback of any kind — one user lost a folder tree of tens of thousands of images to a stray press without noticing it had happened. ⌦ (forward delete) no longer deletes at all, matching Finder; ⌘⌫ still moves to the Trash without asking, and ⌥⌘⌫ still deletes immediately behind its own confirmation.
- A sound when things go to the Trash. Moving items to the Trash, undoing that, and emptying the Trash now play the system Trash sounds, the way Finder and ForkLift do — immediate confirmation that something was removed, rather than silence. Turn it off in Settings → General → Deleting; the system-wide "user interface sound effects" setting is respected too.
- Deleting selects the next item. After a delete the selection moves to the following item (or the previous one, if you deleted the last), so pruning a folder with the preview pane open no longer needs a click between each delete.
- Undo re-selects what it restored. Undoing a delete puts the files back and selects them again, so ⌘Z leaves you where you were.
Fixed
- Folders no longer open empty, needing a Refresh. Once you had changed the sort order, opening a new tab (or a folder) could leave the list blank: applying the sort to the new, still-empty tab started a background re-sort that captured nothing, and when it finished a moment later it wrote that emptiness back over the listing the folder had just loaded. In a quiet folder nothing ever repainted it, so it stayed blank until Refresh; in a busy one like your home folder it corrected itself a second or two later, which is why it looked like a delay in one place and a permanent failure in another. Reported since 1.0.4.
- The SSH agent works in the terminal.
sshin Iruka's terminal failed with "Permission denied (publickey)" on any server that authenticates by agent, even with the agent running and the key loaded. The shell was being started with a minimal environment that omittedSSH_AUTH_SOCK, so it had no agent to ask — the shell now inherits it. This affects agent-authenticated connections generally, not just saved ones, andssh-add -lin the terminal now lists your keys. - A missing SSH agent now says so. Choosing SSH Agent authentication when no agent is reachable produced an ordinary "authentication failed", which looked as though the agent had been ignored. Iruka now checks before mounting: if no agent socket is visible it says so and shows the
ssh-addcommand to start one, and if the agent is running but holds no keys it says that instead.
- Browsing in column view no longer throws you into another view. Folders remember the view they were last shown in, and drilling into one saved as Icons or List switched the whole tab to it mid-navigation, discarding the columns you were browsing. Walking the column chain now keeps you in column view; a folder's saved view still applies when you arrive there any other way (sidebar, path bar, a new tab).
- Redo (⇧⌘Z) works. Every file operation registered an undo whose inverse called the filesystem directly, and never registered anything itself — but macOS only builds the redo stack from registrations made while an undo is running. The menu item existed and was permanently greyed out. All twelve operations (trash, copy, move, duplicate, new file/folder, rename, batch rename, permissions, symlink, hardlink, compress, extract) now register their redo, so undo and redo step back and forth properly.
- A refused SFTP login no longer blames your password when the address may be wrong. A mistyped host or IP that happens to run SSH fails identically to a wrong password — the server refuses the credential either way, and nothing in the SSH exchange distinguishes them. The message now states only what was observed ("The SSH server at 10.0.0.7 refused the password for “root”"), naming the address actually reached, and lists both causes. When the address has no entry in
~/.ssh/known_hosts— i.e. this Mac has never connected to it — it says so and puts checking the address first, which is the common case for a typo. - SFTP login failures now say which credential was refused. A wrong password produced "this is usually the wrong authentication method" and a checklist about picking Password vs Key File — when Password was already selected and the password was simply wrong. Iruka now reads which methods rclone actually offered: a refused password says so and points at the password and username (and notes that some servers disallow password logins entirely), while a refused key explains that its public half likely isn't in the server's
authorized_keys. The old method-picking checklist now appears only when no usable credential was offered at all, which is the case it was written for. - A wrong key passphrase is no longer reported as a connection problem. "failed to parse private key file: x509: decryption password incorrect" was shown under "Couldn't connect to the SFTP server", with advice to check the host and port — but nothing had been sent to the server; the key couldn't be unlocked locally. It now says the passphrase is wrong, points at Edit Connection → Passphrase, and gives an
ssh-keygen -y -fcommand to verify it outside Iruka. - A changed SFTP host key now says so, instead of blaming your password. rclone reports it as "handshake failed: knownhosts: key mismatch", which Iruka was treating as a rejected login — so it showed the authentication checklist and even offered to take a password, none of which could ever help. It's now recognised for what it is: the server's key differs from the entry in
~/.ssh/known_hosts, either because the server was rebuilt or because the connection is being intercepted. The message explains both, shows how to check the server's real fingerprint, and gives the exactssh-keygen -Rline (with the[host]:portform for non-standard ports) — plus a warning not to run it if the change was unexpected. - "Automatic" SFTP authentication now works with an encrypted key. It passed the key file but never the passphrase, so pointing it at a passphrase-protected key failed with an opaque authentication error, and the only way out was knowing to switch the method to "Key File". The Passphrase field is now available for Automatic as well, and is used.
- The scroll wheel now reaches programs running in the terminal. With
set -g mouse on, scrolling over a tmux pane scrolls that pane instead of doing nothing — and the same applies to anything else that tracks the mouse (htop,fzf,less -M). Iruka was scrolling only its own scrollback and never forwarding the wheel, and since tmux runs on the alternate screen (which has no scrollback) the wheel appeared dead there. Hold ⇧ while scrolling to scroll Iruka's own scrollback instead, as in xterm; when no program is tracking the mouse the wheel behaves exactly as before.
Changed
- Type-ahead in column view searches the folder you're standing in. Selecting a folder opens its contents in the next column, and typing a letter was searching inside it rather than among its siblings. Typing now always searches the column holding the selected item.
- Type-ahead now goes to the nearest name when nothing matches. Typing a letter with no matching file used to do nothing at all; it now jumps to where that letter would fall alphabetically, so you can get near a name you only half-remember. Typing the same letter repeatedly still cycles through the exact matches, and column view has type-ahead for the first time — all three views now behave identically.
- Clearer SFTP authentication settings. The "Automatic" method now explains that it is key-based only and never tries a password (so a password-only server needs the "Pa...
Iruka v1.1.4
Fixed
- ⇥ switches panes again in dual-pane mode. It only worked right after clicking a file row; entering a pane any other way — clicking its background or tab bar, or just launching with the terminal focused — left the file browser without logical keyboard focus, so ⇥ fell through to the shell. Clicking anywhere in a pane now focuses that pane's file list, and ⇥ is handed to the terminal only when the terminal actually has keyboard focus. With a single pane there's nothing to switch to, but ⇥ no longer leaks through as a literal tab into the shell either. Tab completion still works in the terminal, the path bar, and the filter field.
- New tabs (and folders like Documents/Desktop) no longer occasionally open empty, needing a manual Refresh. A failed or transiently-empty load is no longer treated as "already loaded" by the tab-switch optimization, so it's reloaded rather than left blank; and a folder that comes back empty right after opening (an iCloud-sync or permission-prompt race) is retried once automatically. Regression from the tab-switch speedup, in the first 1.1.4 build.
- SFTP error messages now lead with the actual error. A failed sign-in, connection, or mount now shows what rclone actually said at the top, with the (often-unnecessary) troubleshooting checklist below — instead of burying the real error under a wall of guidance. Matches the FTP messages.
~usernamein the path bar now resolves to that user's home directory (e.g.~alice), instead of ignoring the name and landing in your own home.- Column view: → now only drills into folders, and selects the folder's first item (like Finder), instead of opening files. Open a file with ↵ or ⌘↓.
- Column view no longer shows an empty gap between the last column and the file preview, or a stray empty panel on the right when there's no preview — the columns now sit flush against the preview and any remaining width is just the plain background.
- Esc reaches the terminal again. When a full-screen terminal program (e.g. Claude, vim, less) is running in the terminal pane, Esc is now passed through to it instead of being swallowed to clear the file selection.
- Large CSV and Markdown files no longer hang the preview. A CSV preview now reads only enough of the file to fill its row cap (instead of loading a multi-GB file whole), and a very large Markdown file renders its head with a "preview truncated" note rather than trying to render the entire document. (These render into a table / formatted text, so they can't stream like the plain-text code preview.)
- Large files now preview like a file reader. Files up to 10 MB load whole and are syntax-highlighted as before; bigger files stream in: Iruka shows the first few MB instantly and loads more as you scroll toward the bottom, so you can open a file of any size without a "too large" message or a hang. Streaming has a 2 GB backstop (with a "limit reached" note) that you won't hit in normal use — scrolling through that much text isn't practical — but which prevents a runaway. The initial read has an 8-second budget (so a slow network volume can't stall the first paint) and aborts if you switch files. Highlighting is skipped for the streamed (large) files and for minified/generated files with very long lines (any line over 5,000 characters), which can otherwise send the highlighter into a hang regardless of total size.
- The new item is now selected after compressing or uncompressing — the created
.zip(Compress) or the extracted folder (Extract) is selected and scrolled into view, matching what happens when you create a new folder (list and icon views). - Clearer FTP mount error. The failure message now leads with the actual cause (e.g. "Port 22 is SFTP, not FTP" and rclone's own error) and puts the FUSE install steps last, so a simple wrong-port mistake isn't buried under installation instructions.
- Opening an archive extracts it in place instead of popping open Finder. Double-clicking (or pressing ↵ on) a
.zip/.tar/.gz/etc. used to hand off to the system Archive Utility, which extracted the files and opened a Finder window. Iruka now unpacks it right where it is — the same as the "Extract Here" menu — and refreshes its own list, no Finder. (Extraction is also undoable with ⌘Z.) - Image and SVG previews now zoom with the − / % / + buttons and ⌘= / ⌘− / ⌘0, matching the text previews, with the controls in the bottom bar. SVG zoom was rebuilt to fit the pane at 100% and scale crisply as you zoom, rather than the earlier approach that left it unscaled. (Trackpad pinch works for images; for SVGs use the buttons or keyboard.)
- Switching tabs is now instant. Each tab already keeps its own live, watched listing, but Iruka was re-reading the whole directory from disk every time you switched to a tab — very slow for large folders. It now reuses the tab's existing listing (kept current in the background by the file-system watcher) and only reads from disk when something actually changed, so clicking or ⌥-Tabbing between tabs is immediate.
.pine(Pine Script) files now show a syntax-highlighted preview instead of falling through to Quick Look.- Compressing and extracting can now be undone. Creating a
.zip(Compress) or unpacking an archive (Extract) is now undoable with ⌘Z, matching New Folder / New File — undo simply removes the archive or the extracted folder it created. Your originals are never touched, and undo of a plain.gz/.bz2/.xzdecompress is skipped if it would have to remove a file that already existed (so it can't delete something Iruka didn't create) - Mounted remote volumes now show the connection's name in the Volumes list. SFTP, FTP, and cloud mounts previously appeared under a generic name (e.g.
sftp{…},s3{…}); each now uses its connection name (SFTP/cloud), oruser@host(FTP), so you can tell mounted remotes apart in Finder - A remote volume could get stuck showing empty with no volume in Finder. rclone can outlive its own mount — a Wi-Fi/VPN drop (e.g. Tailscale) tears down the mount while rclone keeps retrying the connection, leaving the mount folder listing as empty and no volume showing. Trying to mount again just stacked a second stuck rclone on the same folder, which often never came up. Iruka now sweeps that folder before mounting: it adopts the mount if it's genuinely still live, otherwise force-unmounts any dead entry and clears the orphaned rclone first, so re-mounting reliably works instead of piling up zombies. Applies to SFTP, FTP, and cloud mounts
- SFTP mounts now verify the server's host key when it's known. When the server already has an entry in your
~/.ssh/known_hosts(i.e. you've connected to it before), Iruka now checks the server's key against it, so a changed or spoofed key is rejected instead of silently trusted. Genuinely new hosts still connect on first use, matching howsshbehaves - Clearer SFTP errors for misconfigured auth. Choosing Key File authentication with no key set (and no default
~/.ssh/id_*) now says so directly instead of failing opaquely, and SCP commands only add-i <key>for key-based connections (agent/password connections don't get a spurious key flag) - Volumes mounted before a restart are recognized again. rclone keeps an SFTP mount alive after Iruka quits; on the next launch Iruka now re-detects those volumes so the sidebar shows them as mounted (with a working unmount button) instead of appearing disconnected until you remount
- SFTP mounts now tell you why they failed. A failed SFTP mount used to show a bare "failed or timed out" with no detail, because
rclone mountretries the SSH connection with backoff and only prints its real error after the poll window closed. Iruka now runs a fast connection check first (retries disabled), so a bad key, wrong username, or unreachable host fails quickly with rclone's actual message — and the dialog distinguishes "couldn't connect" from "connected but couldn't mount" (a FUSE problem). The connect message also notes that rclone doesn't read~/.ssh/config, so a key referenced only there must be set explicitly in Edit Connection (a common reason SSH works in a terminal but the mount doesn't) - Changing the sort now re-sorts expanded folders too. In the list view you can expand a folder inline to see its contents; previously, changing the sort order (or clicking a column header) only re-sorted the top level, leaving those nested rows in their old order. All visible rows now re-sort together, matching Finder
- "System Default" shell now follows
chsh. The default-shell setting read$SHELL, which the login session captures once and doesn't refresh afterchsh -s …until you log out — so Iruka kept launching the old shell even after a restart. It now reads your actual login shell from the account record, so a restart picks up the change - More plain-text formats now show an inline preview. Files like
.srt/.vttsubtitles and other simple text formats (.text,.nfo,.asc, and more) were falling through to Quick Look instead of the fast text preview; they now render in the built-in text preview (with syntax-aware coloring where applicable) - Clearer guidance when an SFTP server is entered in the FTP tab. Port 22 is SSH/SFTP, not FTP, and connecting to it from the FTP tab would silently time out. The FTP tab now shows a hint when the port is 22 (SFTP lives under SSH Connections, not here), the mount-failure message calls this out directly, and that message no longer leads with rclone's harmless "config file not found" notice
- A folder could briefly show empty or the wrong contents. Directory loads run off the main thread; if you switched folders quickly (or a slow load — e.g. an iCloud-synced Documents folder — was still finishing), a stale load could commit late and paint the previous folder's listing over the one you'd opened. Loads are now tagge...
Iruka v1.1.3
⚠️ One-time step for existing users
Due to an update-checker bug in earlier builds, Iruka may not have been checking for updates on its own — so this release won't reach you automatically. Please open Iruka → Check for Updates… once. After that, Iruka keeps itself up to date automatically (manage this in Settings → Appearance → Updates).
⬇️ Download Iruka 1.1.3 · Requires macOS 14+
Highlights
- Remote connections, rebuilt — FTP, SFTP & cloud mounts now work reliably via rclone + a lightweight FUSE layer (fuse-t), no macFUSE required. Save your server connections in a new Servers sidebar section, and unmount right from the sidebar.
- Copy/Move ask before overwriting (Replace / Keep Both / Skip / Cancel), and interrupted copies to network or removable drives no longer leave a file that looks complete but isn't.
- Drag files onto a folder to drop them inside it; hold ⌥ to force a copy, ⌘ to force a move (like Finder).
- Drag a file into the terminal to insert its full path — now works from either pane. Option-key characters (
|,\,@,{,}…) now type correctly on non-US keyboards. - View shortcuts now match Finder: ⌘1 Icons · ⌘2 List · ⌘3 Columns. Quick Look follows the arrow keys.
- Hide individual Places items; sidebar and list-view polish.
Full changelog
Fixed
- Automatic updates now actually work. Iruka only exposed an "Automatically install updates" setting, which controls how an update is applied once found — it never turned on the periodic check of the update feed (a separate Sparkle setting), so on many installs Iruka never checked for updates on its own. Both checking (about once a day) and installing are now on by default, and Preferences → Appearance → Updates has a new Automatically check for updates toggle. Note: an already-installed copy that never checked won't pick this up until it's updated once via Iruka → Check for Updates…
Added
- Individual Places items can now be hidden in Preferences → Sidebar. Each place (Home, Desktop, Documents, Downloads, Music, Movies, Pictures, iCloud Drive, Applications, Trash) has its own toggle; hidden ones are removed from the sidebar's Places section immediately. "Restore Defaults" clears both section and place customizations
- Copy/Move now ask before overwriting. When an item with the same name already exists at the destination, a dialog offers Replace / Keep Both / Skip / Cancel (with "Apply to all remaining items") instead of silently auto-renaming. Replace moves the existing item to the Trash first, so it's recoverable. Duplicating into the same folder still keeps both without prompting
- Selection menu with Copy to Other Pane (⌥⌘C) and Move to Other Pane (⌥⌘M) — dual-pane aliases for F5/F6 that are discoverable and remappable via System Settings › Keyboard › Keyboard Shortcuts › App Shortcuts
Added
- Save server connections. The Connect to Server dialog now has a Save this connection toggle and an optional name. Saved SMB / AFP / FTP / NFS / WebDAV connections appear in a new Servers sidebar section — click to reconnect in one step (FTP re-mounts via rclone; the rest reopen through macOS), right-click to Edit or Delete. Passwords are stored locally in Application Support (0600, user-only), the same as cloud connections, so reconnecting is silent. The section can be hidden in Preferences → Sidebar like any other
- Connection dialogs warn upfront about missing mount dependencies. FTP, SFTP and cloud connections mount through rclone/sshfs + a FUSE layer. If something needed is missing, the Connect/Edit sheet now names the specific blocker with a one-click "Copy" of the fix before you fill in credentials, instead of only failing on a mount timeout. It detects: no rclone/sshfs, a Homebrew rclone (whose macOS build disables mounting), and no FUSE layer. Native protocols (SMB/AFP/NFS/WebDAV) don't show it — they don't need any of this
- Homebrew rclone is now detected and skipped for mounting. Homebrew's macOS rclone is compiled without mount support and refuses to mount ("rclone mount is not supported on MacOS when rclone is installed via Homebrew"). Iruka now prefers the official rclone (from rclone.org, typically
/usr/local/bin/rclone) for mounts, ignores a Homebrew build (resolved via its…/Cellar/…symlink) for mounting, and tells you to install the official binary if that's all you have — fixing FTP/cloud mounts that failed even with fuse-t correctly installed - FTP servers now mount via rclone instead of macOS's NetFS. Connect to Server → FTP now mounts through rclone + FUSE (with an optional "Use TLS (FTPS)" toggle), passing the username as a separate field so an
@in it is no longer mangled. This fixes the "the share does not exist on the server" failure — macOS's built-in FTP mounter can't mount many servers (e.g. ProFTPD), even though the server, credentials, and passive mode are all fine. Requires the official rclone (from rclone.org — not Homebrew, whose macOS build can't mount) plus a FUSE layer; fuse-t is recommended over macFUSE because it needs no kernel extension, reboot, or Privacy & Security approval, so it also works on locked-down (MDM-managed) Macs. When a mount fails, the error now includes rclone's own last output lines so the real cause is visible rather than a generic checklist
Added
- Setup guidance now links to the documentation. Every in-app message that asks you to run install commands — the connection-dialog dependency banner and the FTP / SFTP / Cloud "mount failed" alerts — now has a Setup Guide link/button that opens the matching docs page (with the exact, up-to-date steps). The old "rclone Not Found" prompt that suggested the wrong
brew install rclone && macfuseis replaced with correct guidance (official rclone from rclone.org + fuse-t)
Changed
- View-mode shortcuts now match Finder: ⌘1 Icons, ⌘2 List, ⌘3 Columns (previously ⌘1 List / ⌘2 Columns / ⌘3 Icons). Updated in the View menu, the Keyboard Shortcuts window, and the documentation
Changed
- SFTP mounts now use rclone instead of sshfs, so they work on Macs with fuse-t. sshfs (sshfs-mac) doesn't actually mount over fuse-t — it connects but the FUSE mount silently fails with "library too old" — which broke SFTP mounting on machines that can't run macFUSE (e.g. locked-down/MDM Macs). SFTP now mounts through rclone's SFTP backend + FUSE, the same path FTP and cloud use, verified end-to-end with both key-file and SSH-agent auth. Requirements are now identical to FTP/cloud (official rclone + fuse-t); no separate sshfs install. Auth picks one path in order: the connection's key file → your SSH agent → a default
~/.ssh/id_*key
Fixed
- Sidebar section headers no longer shift on hover. Collapsible sections (SSH Connections, Servers, Cloud, Apps, Volumes, Recent, Places, Favorites) now use a fixed leading disclosure chevron instead of macOS's hover-reveal control, which appeared on the trailing edge and shoved the section's "+" button sideways whenever you moved toward it. The "+" now stays put
- Folder expand/collapse in list view is easier to hit. The disclosure triangle's click target is wider and the chevron itself is a bit larger, so expanding and collapsing folders no longer requires a precise click
- Dragging a file to the terminal now works from either pane. In dual-pane, only the active pane's terminal is shown but both stay alive stacked together; because AppKit drag-and-drop ignores SwiftUI's hit-testing, a dropped path could land in the hidden terminal (so from the non-active pane it appeared to do nothing). The visible terminal is now raised and is the only one that accepts file drops, so the escaped path always inserts into the terminal you can see. Same fix applies across stacked tab terminals
- FTP (and cloud/SFTP) mounts can now be unmounted from the sidebar. These are FUSE mounts (fuse-t is NFS-backed), so they also show up under Volumes — where they previously had no eject control because macOS doesn't flag them "ejectable". Volumes rows for Iruka-managed mounts now have an Unmount button/menu that routes through the owning connection (keeping its state in sync), and works even for a mount left over from a previous launch. Saved Servers rows show FTP mount status with their own unmount too. Re-connecting a saved FTP server now also re-verifies the mount is still live instead of trusting a stale record
- Option-key characters now work in the terminal. SwiftTerm treated Option as a Meta key (sending ESC-sequences), so on non-US layouts (e.g. French AZERTY) you couldn't type
|,\,@,#,{,},[,]etc. Option now composes the native character, matching Terminal.app's default. (App shortcuts are all ⌘-based and unaffected; only in-shell Option-as-Meta bindings change.) - List drag vs. select is now based on selection, not a horizontal cutoff. Dragging a selected row moves the whole selection (from anywhere on the row); dragging an unselected row (or empty space) starts a rubber-band selection — so you can always select first, then drag. This replaces the fixed 250 pt name/columns split that gave a confusing "drag cursor but still selecting" state with wide names
- Dragging files onto a folder now drops them inside it in both list and icon views. Previously a multi-file drag landed in the pane's current directory instead of the folder under the cursor (a drop-timing race in list view; no location awareness in icon view). Icon view now highlights the folder under the drag, and the spring-loaded "hover to open a folder" delay is slower (≈Finder) so it no longer pre-empts a normal drop
- **Space and typed letters no longer leak into the termin...
Iruka v1.1.2
Fixed
- FTP/network-volume "Connect to Server" sheet now has separate Host, Port, Username, Password, and Share fields per protocol (SMB / AFP / FTP / NFS / WebDAV); special characters such as
@in usernames are correctly percent-encoded viaURLComponents— previously caused "share does not exist" errors - SFTP mount now propagates
SSH_AUTH_SOCKto sshfs when Iruka is launched from the Dock/Finder; SSH agents that register the socket only in~/.zshrc(Passort, 1Password SSH, Secretive, etc.) now work without a key file on disk - SFTP:
StrictHostKeyCheckingchanged toaccept-new— rejects changed host keys while still accepting new ones - SFTP: SSH key paths containing spaces no longer silently break authentication
- SFTP:
BatchMode=yesadded so passphrase-protected keys fail immediately with a clear error instead of hanging - SFTP: IPv6 server addresses are now correctly bracket-wrapped (
user@[::1]) for sshfs and SCP - SCP Send now includes
-rso directories are transferred (previously silently skipped) - SCP: usernames or hostnames containing spaces no longer produce broken shell commands
- Cloud connections file (
cloud_connections.json) is now written with 0600 permissions; directory restricted to 0700 — access key IDs no longer world-readable - Rclone: double-mount guard prevents racing processes when Mount is clicked while a mount is in progress
- Rclone: mount detection now uses filesystem device-number comparison (
isMountPoint) instead ofcontentsOfDirectory, which returned true immediately on the pre-created directory - Rclone:
--daemonflag removed; process lifetime is now managed explicitly so timed-out mounts are properly terminated rather than orphaned
Iruka v1.1.1
Added
- Norton Commander–style function keys in dual-pane mode: F5 copies the selection to the other pane, F6 moves it, F8 moves to Trash
- Right-click "Open in New Tab" on any folder in the file list, icon grid, sidebar (recents, favorites, places, volumes)
- UI text size setting in Preferences → Appearance: Normal / Large / Larger — scales file list rows, icon grid labels, and sidebar items; persists across launches
- SSH connections no longer require a username — leave it blank and Iruka defers to
~/.ssh/config; affects SSH terminal, SFTP mount, SCP send/receive
Changed
- ⌘⌥T toggles focus between the file browser and terminal (was F6, which is now Norton Commander Move)
- Keyboard shortcuts panel: session/tab labels renamed for clarity; all new shortcuts documented
Iruka v1.1.0
Added
- F6 toggles focus between the file browser and the terminal: press once to jump to the terminal (shows it if hidden), press again to return to the file browser; works from either side and does not interrupt typing in the path bar or rename field
- Dual pane: bare Tab switches the active pane (left ↔ right) when the file browser has focus; Tab still completes paths in the URL bar and is passed through to the terminal unchanged
- Shell picker in Preferences → Terminal: choose System Default, zsh, bash, fish (if installed), PowerShell (if installed), or a custom executable path. Changes apply to new tabs; existing sessions are unaffected.
- Navigation Sync and one-shot "cd terminal to folder" now emit PowerShell-native
Set-Location -LiteralPath '…'when the tab's shell is pwsh, with correct single-quote escaping (''); POSIX shells unchanged (cd '…'with'\''escaping) - Configurable sidebar: Settings → Sidebar tab lets you toggle each section on/off and drag to reorder; order and visibility persist across launches
- Daily anonymous heartbeat (install ID + license status + version) for active-user tracking; free trial and licensed users counted separately
- Right-click context menu in the terminal with Copy, Paste, and Select All (Copy is disabled when nothing is selected)
- Rubber-band drag-to-select and Shift+click range selection now work in Icon view — previously only single-click and ⌘-click were supported
- ⌘{ / ⌘} cycle through sessions (previous / next tab), wrapping around; Ctrl-Tab / Ctrl-Shift-Tab remain as alternates
- F2 rename and ⌘⌫ permanent-delete now work in Icon view (were previously list-only)
- Column view now has full keyboard navigation: ↑/↓ to move within a column, ← to go back to the parent column, → / Return / ⌘↓ to enter a folder or open a file; ⌫ to trash, ⌘⌫ to permanently delete, F2 to rename, Space for Quick Look
Fixed
- Window identity is now captured via
NSView.viewDidMoveToWindowinstead ofNSApp.keyWindowatonAppeartime — fixes keyboard shortcuts silently failing on cold-start or when a second window opens andkeyWindowis momentarily the other window; the key monitor window binding is also updated wheneverhostWindowarrives late, so a stale nil capture can always self-correct - Column view: entering a folder no longer leaves the folder itself in
selectedItems(which would have made ⌫ trash the folder you just opened);selectedItemsis now empty until you select something in the new column - Column view ↑↓ now truncates stale child columns to the right, preventing mismatched column trails from old selections
- Column view ESC now clears the column selection highlight (previously
tab.selectedItemswas cleared but the UI highlights stayed) - Column view rename (F2) now updates the selection to the renamed URL so the highlight doesn't stale-point to the old name
- ⌘F / ⌘L (search / path bar) now open only in the active pane in dual-pane mode; previously both panes responded simultaneously
- ⌘F / ⌘⇧F now open search/advanced-search only in the key window — previously both windows opened simultaneously; same fix applied to ⌘L (path bar), and the SSH/SFTP connection dialogs
- Typing a letter while in Icon or Column view now passes the event through instead of silently swallowing it (type-to-select only activates in List view where the handler exists)
- Terminal sync no longer sends two
cdcommands after auto-resume: stalependingCdset before auto-pause is now cleared at pause time; resume always usescurrentDirectorywhich is always current - Hiding the terminal (F4) no longer kills shell processes — the terminal pane is now always kept in the view hierarchy using zero-height clipping instead of conditional removal
- In dual-pane mode, switching the active pane no longer kills the other pane's terminal shells — both panes'
TerminalPaneViewinstances are now permanently in the hierarchy, with the inactive one hidden via opacity - All shell commands sent via the terminal PTY (navigation
cd, git add / stage-all / commit, git pull / push,ssh -ikey path) now use single-quote escaping ('path'/'\''for embedded single quotes) instead of double-quote escaping, preventing injection from$, backticks, and backslashes in paths or commit messages - ⌘V, ⌘C, ⌘X, and ⌘A now work in New Folder, Rename, and New File modal dialogs — NSAlert-based prompts don't route Edit-menu actions through the normal menu system on macOS 13+; the key monitor now forwards them explicitly
- Closing a tab (× button or ⌘W) now shows a confirmation dialog when the tab's terminal has a running foreground process, preventing accidental session loss (e.g. an active Claude Code session); the same warning fires when ⌘W would close the entire window, and when the red close button is clicked
- Turning off dual pane while the right pane has a running terminal process now asks for confirmation ("Close Right Pane?" / "Close Anyway" / "Cancel") before destroying that pane's sessions
- ⌘C, ⌘X, and ⌘A now work correctly in the terminal — the Edit menu commands now dispatch the standard copy:/cut:/selectAll: actions through the responder chain to SwiftTerm instead of falling through to file-manager logic
- ⌘A in the terminal now selects all terminal text instead of selecting all files in the file browser
- ⌘C, ⌘X, ⌘V still route to the inline text editor when it has focus
- ⌘C in the file explorer now correctly copies the selected file instead of routing to the terminal when the terminal was the previous AppKit first responder
- Terminal sync no longer spuriously pauses from short-lived shell children (prompt hooks, vcs_info, VS Code / Claude Code shell-integration scripts): auto-pause now requires 3 consecutive busy polls (~3 s)
- After clicking Re-enable, a prompt hook blip can no longer immediately re-pause sync; suppression lifts only once the shell is genuinely idle
- F4 now toggles the terminal from any focus state, including when the terminal itself has focus
- Keyboard shortcuts (⌫, arrows, F2, type-to-select) now work correctly in a second window and after switching back from another window — each window's key monitor is now scoped to its own NSWindow instead of relying on NSApp.mainWindow which broke cross-window event routing
- Menu commands (⌘[, ⌘R, ⌘T, ⌘W, ⌘C, etc.) now only affect the key window — previously all open windows handled every menu notification simultaneously, causing double navigation, double tab creation, and double file operations
- Arrow keys, type-to-select, F2, and ⌘⌫ in dual-pane now only act on the active pane's file list — previously both panes moved selection simultaneously
- File-browser shortcuts (arrows, ⌫, F2, type-to-select) are now restored automatically when the terminal loses AppKit first responder — previously they stayed dead until you clicked a file row
- Terminal sync now auto-resumes when a long-running command finishes — if sync was auto-paused by Iruka (e.g. during
brew install), it clears automatically on idle and cd's the terminal to wherever you navigated; manually disabled sync (via the Sync toggle) is unaffected
Iruka v1.0.4
Fixed
- Terminal font now applied only when family/size/ligatures actually change, preventing spurious SwiftTerm resetFont/selectNone/grid-resize on every SwiftUI update
- Font face selection uses NSFontManager weight-5 lookup to reliably pick the Regular face instead of Light/Medium/Bold
- Ligatures toggle now labelled "(Experimental)" with an explanation that SwiftTerm's cell-by-cell rendering may limit multi-glyph ligature activation
Iruka v1.0.3
Added
- Terminal font picker: choose any installed monospaced font (Fira Code, JetBrains Mono, Menlo LGS, etc.)
- Ligatures toggle: enables OpenType
ligaandcaltfeatures for programming ligatures
Iruka v1.0.2
Fixed
- Dashboard login now works correctly
- Website download link updated to v1.0.2