Putter is a lightweight multi-session editor for PuTTY on Windows.
It reads PuTTY sessions directly from:
HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions
0.22
- Browse saved PuTTY sessions in a sortable table
- Filter sessions by name, window title, host, login, scrollback, or key file, with a persistent 20-entry filter history and a one-click Clear button
- Edit PuTTY window titles (
WinTitle) and scrollback line counts (ScrollbackLines) directly in the grid - Drag data columns into a preferred order; the order is remembered in
Putter.config.json - Multi-select rows with Ctrl/Shift
- Double-click a cell to edit it
- Press Enter to save an inline edit
- Standard text editing shortcuts while editing cells:
- Ctrl+C / Ctrl+Insert - Copy
- Ctrl+V / Shift+Insert - Paste
- Ctrl+X / Shift+Delete - Cut
- Ctrl+A - Select all
- Rename sessions
- Delete one or multiple sessions from the context menu
- Multi-edit selected sessions
- Find/Replace for bulk session-name changes
- Automatic
.regbackup before registry modifications - Preserve the grid position and selection when session data is reloaded where possible
- Optional close-to-tray and minimize-to-tray behavior
- Notification-area menu with About, Reopen, and a real Exit
For the simplest ready-to-run option, download Putter.exe from the latest release and run it directly.
To run Putter from source with automatic PowerShell selection, use:
Putter.batPutter.bat prefers PowerShell 7.x when pwsh.exe is available and falls back to Windows PowerShell 5.1.
To choose the PowerShell generation explicitly, use:
Putter5.bat
Putter7.batOr run the script directly:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\Putter.ps1
pwsh.exe -NoProfile -ExecutionPolicy Bypass -File .\Putter.ps1Putter has been tested with Windows PowerShell 5.1 and PowerShell 7.6.6 on Windows.
No installer is required. The EXE is ready to run, while the script version requires a compatible PowerShell installation.
If you download the repository as a ZIP file, Windows may mark the archive as coming from the Internet. Files extracted from such an archive can retain this Mark-of-the-Web metadata and may trigger an "Open File - Security Warning" prompt when starting files such as Putter.bat or Build.bat.
If you trust the downloaded archive, you can remove this metadata before extracting it by opening the ZIP file's Properties dialog and selecting Unblock. For files that have already been extracted, PowerShell can remove the mark with:
Unblock-File .\Putter.bat
Unblock-File .\Build.batThis warning is a Windows security feature related to the file's download origin; it does not indicate that Putter detected a problem with the file.
Putter is intentionally available in both source and ready-to-run forms.
Ready-to-run Windows executable: Download the latest release
Putter.ps1is the complete source. It remains available so the program is transparent, inspectable, editable, and easy to audit.Putter.batis the automatic launcher. It prefers PowerShell 7.x whenpwsh.exeis available and falls back to Windows PowerShell 5.1.Putter5.batexplicitly runs the source with Windows PowerShell 5.1.Putter7.batexplicitly runs the source with PowerShell 7.x.Putter.exeis the ready-to-run build generated from the samePutter.ps1source with PS2EXE.
The EXE is provided for convenience, not to hide or replace the source. PS2EXE embeds the PowerShell script in a .NET executable and hosts the PowerShell engine through the .NET PowerShell API. The current PS2EXE build model targets PowerShell 5.1-compatible scripts and produces .NET Framework 4.x executables. It does not use the BAT launcher logic and does not automatically select PowerShell 7 when it is installed.
Important: the current Putter.exe build is not digitally signed. Windows SmartScreen or other security software may therefore display a warning when the executable is downloaded or started. Users who prefer not to run an unsigned executable can use the fully available Putter.ps1 source with one of the provided BAT launchers instead.
The ready-to-run Putter.exe release is built directly from the same Putter.ps1 source using ps2exe 1.0.18.
For convenience, the repository includes Build.bat and Build.ps1 so the executable can be rebuilt locally without typing the full ps2exe command manually. Build.bat prefers PowerShell 7.x when pwsh.exe is available and falls back to Windows PowerShell 5.1. Build.ps1 checks for Putter.ps1, uses an available ps2exe installation if one is present, offers to install the latest ps2exe from PowerShell Gallery when it is missing, asks before replacing an existing Putter.exe, disables console QuickEdit for the builder console so accidental mouse selections cannot pause the build, and prints the resulting SHA-256 hash after a successful build.
To build using the helper:
Build.batThe underlying build command remains:
Invoke-ps2exe .\Putter.ps1 .\Putter.exe -noConsoleTo verify the installed ps2exe version:
Get-Module ps2exe -ListAvailable | Select-Object Name, Version, PathPutter requires Windows PowerShell 5.1 or a compatible PowerShell 7.x installation.
- Windows 10 and Windows 11: Windows PowerShell 5.1 is included with the operating system, so Putter can run without installing a newer PowerShell.
- Windows 7 SP1: Putter can use Windows PowerShell 5.1 after installing Windows Management Framework (WMF) 5.1 and its required .NET Framework prerequisites.
- Windows Server 2016 and newer: Windows PowerShell 5.1 is included with the operating system.
- Windows Server 2008 R2 SP1, 2012, and 2012 R2: Windows PowerShell 5.1 can be provided by installing WMF 5.1 and its prerequisites.
Windows 7 and the older Windows Server versions above are compatibility targets based on their ability to run Windows PowerShell 5.1; they have not yet been tested with Putter. The currently tested environments are Windows PowerShell 5.1 and PowerShell 7.6.6 on Windows.
Putter edits the current user's PuTTY session registry keys directly. Automatic full .reg backups are enabled by default before modifying operations; the backup location and automatic-backup behavior can be changed in Settings.
Putter is designed as a local Windows utility. It does not upload, synchronize, or transmit PuTTY session data, configuration, registry contents, backup files, credentials, or usage information to any Putter-operated server or cloud service.
Putter has no telemetry, analytics, account system, background service, or remote database. Its own configuration and automatic backups are stored locally on the computer.
Network activity can still occur as a direct result of user actions. For example, Putter can launch PuTTY sessions configured by the user, and clicking the repository link in About opens GitHub in the default browser. Those actions are explicit and are not background data collection by Putter.
The complete PowerShell source is available in this repository so the program's behavior can be inspected directly.
Putter modifies PuTTY session data in the Windows Registry. Features such as rename, multi-edit, import, and delete can therefore make real changes to saved sessions.
Automatic backups are intended to reduce the risk of accidental changes, but they are not a substitute for reviewing what you are about to modify and maintaining your own backups where appropriate.
Putter is provided without warranty, as described by the GNU General Public License v3.0. The authors and contributors are not responsible for data loss, misconfiguration, interrupted access, or other damage resulting from use or misuse of the software. You are responsible for the changes you choose to apply.
GNU General Public License v3.0.
While editing a cell, Home and End move the caret to the beginning or end of the field instead of being handled as DataGridView navigation commands.
- File -> Export all sessions... uses Windows reg.exe export.
- File -> Export selected sessions... exports only the selected PuTTY session keys into a Regedit-compatible .reg file.
- File -> Import .reg... validates that every registry section is inside the PuTTY Sessions tree before importing.
- Settings controls automatic backups and the backup folder.
- About shows the version, build date in YYYY.MM.DD format, GPL license, backup status, backup folder, and a clickable GitHub link.
- Export selected sessions... is also available from the grid context menu.
The per-user configuration is stored in Putter.config.json next to the script and is intentionally ignored by Git.
- Press Delete in the session grid to delete the selected session or sessions. The normal Delete key behavior is preserved while editing text inside a cell.
- Copy session... in the right-click context menu duplicates one selected PuTTY session and asks for the new session name.
- Putter can remember the main window position and size between runs. This is controlled by Settings and is stored in the local
Putter.config.jsonfile.
- Window geometry is restored only after the anchored controls have been created, so the session grid starts at the correct size immediately.
- Maximized window state is now remembered and restored in addition to the normal window position and size.
- Added optional Night mode with a light-on-dark palette for the main window and Putter dialogs.
- Added a configurable PuTTY launcher in Settings. The browse dialog prefers
.exe,.lnk,.bat, and.cmd, while still allowing All files (.). - Added a configurable delay between launching multiple sessions.
- Right-click the session grid and choose Open session or Open selected sessions (N).
- Press Enter outside inline editing to launch the selected session or sessions. Enter still commits an active cell edit.
- Fixed Night mode menu rendering with a dedicated dark ToolStrip renderer.
- Added configurable grid font size and a Normal/Bold choice in Settings.
- Disabled manual row-height resizing in the session grid.
- Added a compact > button column to launch an individual session directly.
- Night mode now uses a custom ToolStrip renderer so menu backgrounds, hover states, text, separators, and dropdowns are drawn with the dark palette instead of Windows light-menu colors.
- User-resized grid column widths are now remembered between runs. Because the grid uses Fill mode, Putter stores each data column's FillWeight so the chosen proportions survive window resizing.
- Fixed restoring user-resized grid column proportions. Putter now temporarily disables Fill layout while applying all saved FillWeight values, then restores Fill mode so DataGridView cannot rebalance each value during the restore loop.
- Putter now remembers the last grid sort expression, including the selected column and ascending/descending direction.
- Fixed another DataGridView Fill-mode timing issue when restoring column proportions. Saved FillWeight values are now applied only after the form is shown and the grid has completed its initial layout, preventing the first WinForms Fill calculation from overwriting the restored proportions.
- Replaced the compact > session launcher with a standard WinForms Open button.
- Added a custom Putter application icon based on the mirrored-t monogram.
- The ICO is embedded directly in Putter.ps1 as Base64, so no additional icon file is required.
- The embedded icon contains 16x16, 32x32, and 48x48 sizes and keeps the PowerShell source ASCII-safe.
- Enabled native Windows visual styles for WinForms controls.
- The per-row Open launcher now uses the native Windows button renderer.
- Added a bottom action bar with Refresh, Open, Rename, Copy, and Delete buttons.
- Open and Delete are enabled for one or more selected sessions.
- Rename and Copy are enabled only when exactly one session is selected.
- Refresh is always available and reloads the PuTTY session list.
- Added one-script compatibility logic for both Windows PowerShell 5.1 and PowerShell 7+.
- Windows PowerShell 5.1 keeps the original .NET Framework references.
- PowerShell 7+ resolves the loaded WinForms, Drawing, and ComponentModel assembly paths dynamically before compiling Putter's small C# helper classes.
- No separate PS5/PS7 script is required.
- Added PS2EXE-aware base-directory detection. Putter now resolves its local working directory from
$PSScriptRoot, then$ScriptRoot, and finally[AppDomain]::CurrentDomain.BaseDirectory. Putter.config.jsonand the defaultBackupsdirectory are now resolved relative to that detected Putter directory.- About now shows the PowerShell version and edition used to run Putter.
- Added the PuTTY window title (
WinTitle) to the session grid as Title. - Simplified grid headers to Session, Title, Host, Port, Login, and PublicKeyFile.
- Added Title to multi-edit and to the session filter.
- Grid columns can be reordered by dragging their headers, and the data-column order is now stored in
Putter.config.json. - Refresh and other full session-list reloads now preserve the visible grid position and selection where possible instead of jumping to the top.
- Replaced the old nested About command with a direct About menu item.
- Fixed registry import behavior in the PS2EXE GUI build by suppressing
reg.exe importerror-stream output that could otherwise appear as misleading message boxes after a successful import. - Added
Build.batandBuild.ps1helpers for local executable builds. Build.batprefers PowerShell 7.x when available and falls back to Windows PowerShell 5.1.Build.ps1checks forPutter.ps1, uses an installed ps2exe version when available, offers to install the latest ps2exe from PowerShell Gallery when missing, asks before replacing an existing executable, and reports the resulting SHA-256 hash.Build.ps1disables console QuickEdit for the builder console, preventing accidental mouse selections from pausing the build process.- Added a Clear button next to the session filter.
- Replaced the filter text box with an editable history drop-down that stores up to 20 unique recent filters in
Putter.config.json, using case-insensitive Unicode-aware matching while preserving the most recently entered form. - Added Clear history to the filter history drop-down.
- Added configurable tray behavior: closing Putter goes to the notification area by default, while normal minimize-to-taskbar remains the default for the minimize button unless changed in Settings.
- Added a notification-area menu with About, Reopen, and a real Exit command that always terminates Putter.
- Added documentation for Windows Mark-of-the-Web warnings that may affect source files extracted from a ZIP downloaded from GitHub.
- Added PuTTY scrollback line count (
ScrollbackLines) to the session grid as Scrollback. - Added Scrollback to inline editing, multi-edit, filtering, and remembered grid column order and width settings.
- Scrollback values are validated as non-negative integers before being written to the PuTTY session registry.