A modern desktop application for managing SSH keys with ease. Built with React and Electron, this tool provides a user-friendly interface to create, view, and delete SSH key pairs on your system.
- Create SSH Keys: Easily generate new SSH key pairs with customizable options
- View Key Details: Inspect both public and private keys with full details
- Delete Keys: Remove unwanted SSH keys with confirmation
- Search Functionality: Quickly find keys by name or content
- Internationalization: Available in English and Italian with automatic system language detection
- Cross-Platform: Works on macOS, Windows, and Linux (Electron-based)
![]() |
![]() |
![]() |
![]() |
![]() |
|
---|---|---|---|---|---|
React | Redux | Router | Sass | ViteJs | Storybook |
- Node (version >= 22.16.x)
After confirming that your development environment meets the specified requirements.
First, clone the project:
git clone https://github.com/vscaperrotta/ssh-manager.git
cd ssh-manager
Install all dependencies and start electron view
yarn install && yarn electron:serve
To have your build
yarn install && yarn electron:build
If everything works, you should see the homepage
While developing, you will probably rely mostly on yarn electron:serve
; however, there are additional scripts at your disposal:
Command | Description |
---|---|
yarn generate |
Generates new components, routes, and actions using plop templates |
yarn dev:client |
Starts the React client application in development mode |
yarn dev:server |
Starts the Express server in development mode |
yarn dev:storybook |
Runs Storybook for component development and documentation |
yarn build |
Builds the application for production |
yarn electron:serve |
Runs the application in Electron during development |
yarn electron:build |
Builds the Electron application for distribution |
yarn electron:start |
Starts Electron after the development server is ready |
The application structure is fractal, where functionality is grouped primarily by feature rather than file type. The complete structure is documented in MAP.md.
Main directories overview:
/
├── config/ # Project configuration files
│ ├── global_vars.js
│ └── paths.js
├── docs/ # Documentation assets
├── generators/ # Code generators for components and routes
├── public/ # Public assets
├── src/ # Source code
│ ├── main/ # Electron main process
│ ├── preload/ # Electron preload scripts
│ ├── render/ # React application (renderer process)
│ │ ├── assets/ # Frontend assets
│ │ ├── components/ # UI components (Badge, Button, Modal, etc.)
│ │ ├── constants/ # Application constants
│ │ ├── containers/ # App container component
│ │ ├── i18n/ # Internationalization configuration and locales
│ │ ├── routes/ # Application routes
│ │ ├── stories/ # Storybook documentation
│ │ ├── styles/ # Global styles
│ │ └── utils/ # Frontend utilities
│ └── server/ # Express backend for SSH management
│ ├── index.js # Server entry point
│ ├── keys.js # SSH key routes handlers
│ ├── server.js # Express server configuration
│ └── utils.js # Server utilities
└── utils/ # Global utility functions
Default project configuration can be found in ~/vite.config.js
. Here you'll be able to redefine your src
and dist
directories, adjust compilation
settings, tweak your vendor dependencies, and more. For the most part, you should be able to make changes in here
without ever having to touch the actual webpack build configuration.
SSH Keys Manager follows a client-server architecture within the Electron application:
- Backend Server: A Node.js Express server handles SSH key operations by interfacing with the filesystem.
- Frontend Client: A React application provides the user interface and communicates with the server via REST API.
- Electron: Packages everything into a native desktop application.
- Listing Keys: The app reads your
~/.ssh
directory and displays all key pairs. - Creating Keys: Uses the
ssh-keygen
command with customizable parameters. - Viewing Keys: Shows both public and private key contents with copy functionality.
- Deleting Keys: Removes the key files from your system after confirmation.
The application automatically detects your system language and defaults to Italian or English accordingly. This is managed through the React-Intl library with translations stored in the src/render/i18n/locales
directory.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE.md file for details.