A modern, cross-platform terminal client built with Electron that supports both SSH connections and Serial port communication.
- Secure SSH connections with password authentication
- Multiple concurrent SSH sessions
- Tabbed interface for easy session management
- Connection history and favorites
- Serial port communication with configurable baud rates
- Support for various serial devices
- Real-time data transmission
- Multiple concurrent serial sessions
- Buffered Logging System: Memory-efficient logging with automatic file saving
- Real-time File Storage: Logs automatically saved to
~/ash-logs/directory - Smart Buffer Management: 100 lines or 10KB triggers automatic file flush
- Session-specific Logs: Each session maintains its own log file
- Log Controls: Start/stop/save/clear logging with intuitive UI
- Dark theme with customizable appearance
- Resizable session manager panel (VSCode-style)
- Toggle session manager visibility via View menu
- Responsive terminal with automatic resizing
- Tab-based session management
- Create, connect, and manage multiple sessions simultaneously
- Session persistence and favorites
- Quick session switching
- Connection status indicators
- Node.js 16+
- npm or yarn
git clone https://github.com/gurumian/ash.git
cd ash
npm install
npm run makenpm start- Click "New Session" or use
Cmd/Ctrl + N - Select "SSH" as connection type
- Enter host, port, username, and password
- Click "Connect"
- Click "New Session" or use
Cmd/Ctrl + N - Select "Serial" as connection type
- Choose serial port from dropdown
- Configure baud rate and other settings
- Click "Connect"
- Start Logging: Click the βΊ (record) button in the terminal header
- Stop Logging: Click the βΉ (stop) button
- Save Log: Click the πΎ (save) button to manually save current buffer
- Clear Log: Click the π (trash) button to clear current log data
Logs are automatically saved to ~/ash-logs/ with timestamped filenames.
- Resize Panel: Drag the resize handle to adjust panel width
- Toggle Visibility: Use
View > Appearance > Toggle Session Manager - Switch Sessions: Click on session tabs or use keyboard shortcuts
- Frontend: React 18, Xterm.js
- Backend: Electron (Node.js)
- SSH: ssh2 library
- Serial: serialport library
- Styling: CSS3 with modern features
src/main.js: Electron main process with IPC handlerssrc/App.jsx: React frontend with terminal managementsrc/preload.js: Secure IPC bridgesrc/App.css: Modern UI styling
The logging system uses a buffered approach for memory efficiency:
- Buffer Management: Data is collected in memory buffers
- Automatic Flushing: Buffers are flushed when they reach 100 lines or 10KB
- File Storage: Logs are saved to
~/ash-logs/with session-specific filenames - Real-time Updates: UI shows current logging status and controls
ash/
βββ src/
β βββ main.js # Electron main process
β βββ App.jsx # React frontend
β βββ App.css # Styling
β βββ preload.js # IPC bridge
β βββ renderer.jsx # Renderer entry point
βββ assets/ # Icons and resources
βββ forge.config.js # Electron Forge configuration
βββ package.json # Dependencies and scripts
Cmd/Ctrl + N: New sessionCmd/Ctrl + W: Close current sessionCmd/Ctrl + T: Toggle session managerTab: Switch between sessions
Logs are saved as plain text files with the following naming convention:
~/ash-logs/
βββ SSH_Session_2024-01-15T10-30-45-123Z.log
βββ Serial_Device_2024-01-15T10-35-20-456Z.log
βββ ...
Each log file includes:
- Timestamp markers for session start/stop
- All terminal input and output
- Connection status changes
- Session metadata
The application follows a modular architecture:
- Main Process: Handles system-level operations (SSH, Serial, file I/O)
- Renderer Process: Manages UI and user interactions
- Preload Script: Secure communication bridge between processes
- Add IPC handlers in
main.js - Expose APIs in
preload.js - Implement UI in
App.jsx - Add styling in
App.css
- Use
npm run startfor development mode - Check browser DevTools for renderer process debugging
- Check main process logs in terminal
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add 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 file for details.
For support, feature requests, or bug reports, please open an issue on GitHub.
Ash - Modern terminal client for SSH and Serial communications with advanced logging capabilities.