A modern Electron desktop application for managing git stashes across multiple repositories with an intuitive, election-style interface built with React 19.
- π Election-Style Interface - Vote on your favorite stashes with an intuitive browsing experience
- π Multi-Repository Support - Manage stashes across all your git repositories from one place
- β‘ Quick Actions - Apply or drop stashes with single-click actions
- π File-Level Preview - Browse changed files with status indicators before applying
- π Diff Viewer - View detailed code changes with syntax highlighting
- π Resizable Panels - Drag to resize repository and files panels for optimal workflow
- π Theme Toggle - Switch between light and dark modes with manual override of system preferences
- πΎ Persistent Storage - Remembers your repositories, panel sizes, and theme preference between sessions
- π¨ Modern UI - Clean, responsive interface built with React 19 and Tailwind CSS v4
- β‘ Optimized Performance - React 19 features with automatic batching and optimized state management
Clean git workflows made beautiful
Choose your Mac architecture for optimal performance:
Apple Silicon | Intel Mac |
---|---|
Download DMG | Download DMG |
106 MB |
111 MB |
Compatible with Windows 10 & 11
84 MB β’ 64-bit
Universal AppImage - works on any distribution
113 MB β’ No installation required
Quick Setup:
# Make executable and run
chmod +x gitstash-manager-1.0.0.AppImage
./gitstash-manager-1.0.0.AppImage
## π Quick Start
### Prerequisites
- Node.js 16+
- Git installed and accessible from command line
### Installation & Development
```bash
# Clone the repository
git clone https://github.com/w3debugger/gitstash-manager.git
cd gitstash-manager
# Install dependencies
npm install
# Start development mode (React + Electron with hot reload)
npm run dev
# Or start production mode
npm start
# Build React app and create distributable
npm run build
npm run dist
# Or build React app only
npm run build:react
This application uses a modern tech stack with React 19 optimizations:
- Frontend: React 19.1 with new
use()
hook, automatic batching, and optimized Context API - Styling: Tailwind CSS v4 with
@theme
directive and utility-first approach (no config file needed) - Build Tool: Vite for fast development and optimized builds
- Desktop: Electron 28 for cross-platform desktop functionality
- Git Operations: simple-git for reliable git command execution
- Storage: electron-store for persistent repository management
- State Management: React 19 useReducer with batch updates and memoization patterns
gitstash-manager/
βββ src/ # React application source
β βββ components/ # React components
β β βββ GitStashElectionApp.jsx # Main app component with React 19 features
β β βββ RepositoriesPanel.jsx # Repository management panel
β β βββ FilesPanel.jsx # Files browser panel
β β βββ StashList.jsx # Stash list with batch operations
β β βββ StashDetailsView.jsx # Code diff viewer
β β βββ ThemeToggle.jsx # Light/dark mode toggle
β β βββ ui/ # Reusable UI components
β β βββ Button.jsx # Button component with variants
β β βββ IconButton.jsx # Icon button component
β β βββ Column.jsx # Resizable column wrapper
β β βββ ResizeHandle.jsx # Drag-to-resize handle
β βββ context/ # React Context for state management
β β βββ AppContext.jsx # Centralized app state with React 19 optimizations
β βββ main.jsx # React entry point
β βββ index.css # Tailwind v4 imports with @theme directive
βββ main.js # Electron main process
βββ preload.js # Electron preload script
βββ index.html # HTML entry point
βββ vite.config.mjs # Vite configuration (ESM)
βββ package.json # Dependencies and scripts
- Click the β button in the sidebar
- Select a folder containing a git repository
- The repository will appear in your sidebar with expandable stash list
- Expand Repository: Click the repository name to see all stashes
- Select Stash: Click any stash to view its changes
- Apply Stash: Click β to apply the stash to your working directory
- Drop Stash: Click ποΈ to permanently delete the stash
- Browse Files: Select a stash to see changed files in the files sidebar
- View Diff: Click any file to see the detailed code changes
- Resize Repository Panel: Drag the blue handle on the right edge of the repository panel
- Resize Files Panel: Drag the blue handle on the right edge of the files panel
- Theme Toggle: Click the π/π button in the top-right corner to switch between light and dark modes
- Responsive Content: All text and file lists automatically adapt to panel sizes
- Persistent Preferences: Your panel widths and theme choice are remembered between sessions
Cmd/Ctrl + N
- Add new repositoryCmd/Ctrl + R
- Refresh all repositories
npm run dev
- Start development mode with hot reloadnpm run dev:react
- Start only the React dev servernpm run build:react
- Build React app for productionnpm run build
- Build React app and create Electron distributablenpm run dist
- Create distributable packages for current platformnpm start
- Start Electron with production React buildnpm run debug
- Start Electron in debug mode
- Development: Use
npm run dev
for hot-reloading React + Electron - Testing: Use
npm start
to test the production build - Distribution: Use
npm run dist
to create platform-specific installers
The app uses React 19 Context with optimized useReducer for centralized state management:
const {
repositories, // Array of added repositories
selectedRepository, // Currently selected repository
selectedStash, // Currently selected stash index
files, // Files in the selected stash
columns, // Panel width configurations
batchUpdate, // React 19 batch update function
setRepositories, // Optimized action creators
setSelectedRepository
} = useApp()
// React 19 patterns used:
// - use() hook instead of useContext()
// - Automatic batching for multiple state updates
// - Memoized action creators for better performance
// - Conditional dispatch exposure for advanced use cases
- RepositoriesPanel: Repository management with expandable stash lists and batch operations
- FilesPanel: File browser with change status indicators and optimized rendering
- StashDetailsView: Code diff viewer with syntax highlighting and adaptive layout
- ThemeToggle: Light/dark mode toggle with system preference override
- Column: Resizable column wrapper with drag-to-resize handles
- UI Components: Consistent design system with Button, IconButton, and ResizeHandle components
- React 19 Optimizations: Memoized components, batch updates, and performance-optimized rendering
- 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.
- Built with Electron for cross-platform desktop development
- Powered by React 19 for modern UI development
- Styled with Tailwind CSS v4 for utility-first styling
- Uses simple-git for reliable git operations
- Bundled with Vite for fast development experience
Made with β€οΈ for developers who love clean git workflows