v0.13.0
Oryxis 0.13.0
The sync-anywhere and organization release. The encrypted vault snapshot now travels over a folder (which means any cloud you already use), a Git remote with history, or a WebDAV server. Groups hand their defaults down to the hosts inside them, the terminal sidebar splits into two dockable regions with an mRemoteNG-style hosts tree, the dashboard gains the same tree as a view mode, and a second tab to a connected host rides the connection it already has. Six more clients import their sessions, and your terminal can finally wear a background image.
Sync anywhere
- A folder is a transport. One encrypted snapshot in a directory your machine already mounts: a cloud client's folder (OneDrive, Google Drive, Dropbox, iCloud), a network share, Syncthing, an external disk. Oryxis writes a file atomically and whatever owns the folder carries it; no account, no OAuth, no provider baked into the app.
- A Git remote is a transport, with history. The same snapshot committed to anything
git cloneaccepts, forge or bare repo. The only transport that keeps past versions, so a vault wrecked by a bad import can be read back from an earlier commit; a rejected push means another device wrote first, and the round redoes itself on top instead of forcing. - WebDAV is a transport, and the one that catches a conflict. Nextcloud, ownCloud, Synology: a URL, an account, an app password. Writes carry the ETag from the read (
If-Match), so a server that changed in between refuses the write and the round starts over; the card warns whenhttp://would send the password in the clear. - All three ride the same encrypted blob and group passphrase as SFTP and P2P, so a device moves between transports without leaving its sync group. One Auto cadence serves every snapshot transport now, none of them syncs while the vault is locked, and the pairing/relay UI only shows for the transport that actually uses it.
Organize
- Group defaults reach their hosts. A group can set login user, identity, proxy identity, terminal theme, startup snippet, environment variables and the port for new hosts; a host that leaves a field empty takes it from the nearest group that sets it, up through nested subgroups. Resolution is per parameter, the host editor says where a value comes from ("Inherits deploy from prod"), env vars merge by name, and credentials are a reference to an identity, never a copy of a password.
- A hosts tree beside your session (#102). The new Hosts sidebar tab shows the vault as an mRemoteNG-style tree: folders nest and fold in place, a click opens a session next to the one you are in, saved split arrangements sit alongside their hosts, and dynamic ECS / Kubernetes groups resolve inline on expand.
- A tree view for the dashboard (#102). The same shape as a third view mode next to grid and list: dense rows, indent guides, search force-expands every match and a matching folder shows its whole subtree. Both trees share the sort preference, the search fields (label, hostname, tags, username) and the expansion state.
- The sidebar splits into two dockable regions (#102). Every sidebar tab picks left, right, or hidden in Settings > Terminal; both regions can be open at once, each with its own strip, active tab and width. The toggle hotkey follows the tabs (a lone populated region is always its target; with both populated it prefers whichever is open), and a new Ctrl+Alt+B reaches the other region, the way VS Code pairs its two side bars.
Connections
- A second tab reuses the connection. Opening or duplicating a tab to a connected host opens a channel on the live connection instead of paying the TCP + key exchange + auth toll again (per hop, on a jump chain), and it cannot ask for a host key or a second factor because the ride was already verified. The connection closes with its last tab; a pooled link that died just dials fresh. Settings > Connection, on by default.
- The latency segment stops lying. A dead link no longer shows its last good round trip: silence replaces the number ("no reply 21s"), the figure is colour-banded (green under 80 ms, amber under 250, red above), and hovering gives average, peak, jitter and timeouts.
- Bastion login scripts (#122). JumpServer-style boxes that authenticate inside the terminal get a reusable expect/send sequence attached to the host, with secrets read from the vault at send time,
{placeholders}so one script serves many hosts, per-step deadlines, and any keystroke of yours aborting the run. - Stored passwords at password prompts (#117). When a session blocks on
[sudo] password for you:(orsu,ssh, a passphrase), a popup lists the vault's credentials for that host; Down engages, Enter sends, Esc hides. Nothing is sent without picking a row, prompts that ask you to CHOOSE a password are recognized and never offered one, and the credential is scrubbed after the write.
Terminal
- Background image, per host. A picture behind the grid with cover / fit / stretch / centre / tile and a fade into the theme's background so text stays readable. Every host can override the picture, fit, fade and opacity, or opt out of the global picture; only the path is stored, never the pixels.
- Translucent background. Background opacity fades the terminal down to 30% so the desktop shows through while the chrome stays opaque. Linux (Wayland, or X11 with a compositor) and macOS; on Windows the setting says so instead of breaking the window.
- Downloadable font pack (#109). JetBrains Mono, CaskaydiaCove, Fira Code, Hack, MesloLGS, Roboto Mono, Ubuntu Mono and Iosevka in the font picker; each downloads on first pick, SHA-256 pinned, cached, applied live, mirror-aware.
tmux, monitoring and the fleet
- tmux sessions from the sidebar (#116). List, create, attach and kill the tmux sessions on the focused pane's host over the connection you already have; nothing installed on the server, nothing injected into your shell, kills ask first, and it never polls. Off by default behind a Features & Plugins toggle.
- Multi-host monitoring dashboard (#95). A Monitoring pill shows live vitals cards for every opted-in host at once; hosts with an open tab are read over that session, the rest get pooled headless probes. Card grid or a sortable table, search and tag filters, and the same sample rings feed the dashboard, the sidebar and the status bar.
- Pick which disks a host reports. Auto (one row per storage device) or an explicit mount list with
*globs, reaching the Monitor tab, the dashboard, the status bar and the alerts at once. - GPU gauges from
nvidia-smi(and amdgpu sysfs), rendered only when the probe answers. - Wake-on-LAN. Store a MAC on a host, wake it from the card menu.
Import
- MobaXterm, Xshell, SecureCRT, FinalShell, Termius and CSV. A "Choose folder" button batches the one-file-per-session clients; MobaXterm reads its ini bookmarks; any CSV imports through header matching,
passwordcolumn honored and landing encrypted. Clients that encrypt with a per-install key import the host and say so in the notes instead of guessing. - mRemoteNG (confCons.xml). SSH, Telnet, RDP and VNC nodes map, the container hierarchy lands in the notes, passwords decrypt with mRemoteNG's own scheme including fully-encrypted files (the hub asks for the password and retries). KiTTY sessions import too.
- One Import entry. The per-source buttons collapse into a hub with content-based format detection; PuTTY .reg and WinSCP .ini/.reg flow through the same preview, and a combined full-registry export imports as one batch.
- First-run setup grew two steps. Shape the optional features before first use, and bring your hosts along by opening the importer right after the vault is created.
- Quick connect from outside. Oryxis registers as the OS
ssh://handler and acceptsoryxis user@host; a running instance lands the session in a new tab.
Removed
- The OSC 7 injection toggle is gone, and the app no longer types anything into your shell. The supported path is a snippet in your own dotfiles (see
docs/CWD.md); the Files sidebar keeps following your directory through the window title without it.
Fixes worth naming
- The Monitor tab lists one disk per device, not one per mount: a rooted Android phone answered with 176 bind-mount rows and the status bar picked one as the busiest disk (#135, #139).
- A master password change no longer orphans stored TOTP secrets; the re-encryption column list is covered by a rotation test.
- Duplicating a host keeps its whole configuration (quirks, algorithms, forwards, env vars) by cloning instead of a drifted field list.
- The sudo-password snippet action resolves the host from the pane, not the tab label, so split tabs stop sending the wrong host's password.
- Group inheritance reaches every dial site (SFTP mounts, sync, port forwards, monitoring, remote desktop, MCP, jump hops), not just the terminal paths, and a dangling identity default no longer disables the host's own credentials.
- Per-host forwards belong to the connection, so they survive the dialing tab closing while reused tabs keep the link.
- A hostile session file can no longer freeze the importer (iteration caps, size caps, async decryption) or slip a ProxyCommand past the preview.
- SFTP: the editor save-back goes through the temp-name upload, an OS-drop cancel removes its scratch file, a shrunken remote file resumes correctly, and a sidebar-only conflict answer no longer parks the queue forever.
- mDNS advertises addresses (LAN discovery could never resolve) and shuts its threads down when sync is disabled.
- Closing or hiding the AI chat's panel aborts the running tool loop everywhere it could keep executing unseen (#102 review).
- The soft-wrap copy fix (#141, by @shideqin): copying a wrapped line joins it without eating the spaces at the fold.
Under the hood
- Dependency wave: argon2 0.6 (one hashing stack, exact-pinned with a cross-version golden vector), the RustCrypto 0.10 to 0.11 block, winit 0.31 through the iced fork, russh-sftp 2.4, mdns-sd 0.20, quinn 0.11.11, and a single
windows-sysin the Windows build. - ZMODEM returned to the upstream crate: our fixes shipped in 0.7.2, the fork pin is gone.
- Decrypt-to-send copies are zeroized, setting rotation is pinned by test, and the sync endpoint settings are excluded from portable export.
- Two full pre-release review passes (seven agents, then adversarial verification of the fixes) ran over everything above; every confirmed finding is fixed in this tag.