OmnySSH: PuTTY-Style Copy and Paste

Open SourceRustDesktop App
Rust Tauri Svelte TypeScript xterm.js Playwright Vitest Open Source

Project Overview

Who

OmnySSH is someone else's open-source SSH client and server manager, with a desktop app and a terminal app. It has over a thousand stars on GitHub. This feature is for its users who come from PuTTY.

What

PuTTY-style copy and paste for the desktop app's terminal. Selecting text copies it. Right-click pastes, or does Windows Terminal's copy-or-paste, or opens a menu, depending on a setting. Middle-click and Shift+Insert paste, and Ctrl+Insert copies.

I also added Copy all, which copies the whole scrollback like PuTTY's "Copy All to Clipboard", a terminal menu on Ctrl+right-click, trimming of trailing spaces, and an optional confirmation before a multi-line paste. Apps that use the mouse, like vim or tmux, keep their clicks, and holding Shift takes them back. Everything can be switched in a new Copy & paste section in Settings.

When

Built in October 2026. I sent it upstream as a pull request on October 29.

Where

The pull request is #162 on timhartmann7/omnyssh, and it closes the open feature request #161. The work also lives on my fork.

Why

Someone asked for exactly this in #161. Anyone used to PuTTY expects to select to copy and right-click to paste, and the app didn't do either.

The maintainer had already turned down a different copy and paste change because it took over Ctrl+C and Ctrl+V, which the shell needs. So mine leaves those keys alone and adds the PuTTY behavior around them.

How It Works

  • The browser engine inside the app won't let a page write to the clipboard on a mouse-up, and reading it can raise a permission prompt. So copy and paste go through the system clipboard on the Rust side, using Tauri's clipboard plugin. The web side gets no plugin permission, just two small commands.
  • The project tries hard not to add dependencies, so the pull request explains why this one is needed.
  • Unit tests cover the key and mouse handling and the settings. End-to-end tests cover copy on select, right-click paste, the menu, and the Settings section.
  • It's one clean commit on top of the current release, in the project's commit style.

Still open: the pull request is waiting for the maintainer's review, and the project's CI is waiting for the maintainer to approve the run, which is normal for a first contribution. The PuTTY behavior is on by default. I offered to make it opt-in if the maintainer prefers.

Stack & Tools

Backend
Rust, Tauri 2
Frontend
Svelte, TypeScript
Terminal
xterm.js
Clipboard
tauri-plugin-clipboard-manager
Testing
Vitest, Playwright e2e
Contribution
Fork, pull request #162