A lightweight Electron-based desktop application for seamless path conversion between Windows, WSL, and MSYS formats.
- Multi-Format Path Conversion: Convert paths between Windows, WSL (Windows Subsystem for Linux), and MSYS formats
- Smart Path Detection: Automatically detects the input path format
- Clipboard Integration: Quick copy/paste functionality for all path formats
- Path History: Remembers recently converted paths with usage tracking
- System Tray Integration: Minimizes to tray for quick access
- Frameless Custom Window: Modern, VS Code-style interface
- Dark/Light Theme: Toggle between themes with a single click
- Persistent Storage: Path history saved using electron-store
- Frontend: React 18 + TypeScript + Vite
- UI Framework: Tailwind CSS + shadcn/ui
- Desktop: Electron 27
- State Management: React Context API
- Icons: React Icons
- Storage: electron-store
Download the latest release from the Releases page.
- Download
Win-to-WSL-Setup-X.X.X.exe - Run the installer
- Security Warning: You'll see a Windows SmartScreen warning because the app is not yet code-signed with an EV certificate
- Click "More info"
- Click "Run anyway"
- This is a one-time warning - the installed app runs normally after installation
- The app will be installed and can be launched from the Start Menu
- Download
Win-to-WSL-X.X.X.dmg - Open the DMG and drag the app to Applications
- Security Warning: macOS will block the app because it's not yet code-signed with an Apple Developer certificate
- Open Terminal and run:
xattr -cr "/Applications/Win to WSL.app" - This removes the quarantine flag and allows the app to run
- You only need to do this once
- Open Terminal and run:
- Launch the app from Applications
Note: These security warnings are normal for unsigned applications. We're working on obtaining code signing certificates to eliminate these warnings in future releases.
- Node.js 18+ and npm
- Windows with WSL installed (for full functionality)
# Clone the repository
git clone https://github.com/ChrisColeTech/win-to-wsl-app.git
cd win-to-wsl-app
# Install dependencies
npm install
# Start development server
npm run devThe app will start with hot-reload enabled. The frontend runs on port 5173, and Electron loads it automatically.
# Build for production
npm run build
# Create distributable packages
npm run dist # Build for current platform
npm run dist:win # Build for Windows
npm run dist:mac # Build for macOS
npm run dist:linux # Build for LinuxBuilt applications will be in the dist/ directory.
This project uses automatic versioning - every push to master creates a new release!
- Push to master: Any commit pushed to the master branch
- Auto-version bump: GitHub Actions automatically bumps the patch version
- Create tag: Creates a git tag (e.g., v1.0.1)
- Build & Release: Builds installers for Windows, macOS, and Linux
- Publish: Publishes to GitHub Releases automatically
If you want to control the version bump type:
# Patch release (1.0.0 -> 1.0.1) - Default on every push
npm run release:patch
# Minor release (1.0.0 -> 1.1.0) - New features
npm run release:minor
# Major release (1.0.0 -> 2.0.0) - Breaking changes
npm run release:majorEach build includes:
- Version: Auto-incremented patch version
- Build Number: GitHub Actions run number
- Platforms: Windows (NSIS), macOS (DMG + ZIP)
- Input Path: Enter or paste any Windows, WSL, or MSYS path
- Auto-Detection: The app automatically detects your input format
- View Conversions: See all format conversions instantly
- Copy Paths: Click copy buttons to copy any format to clipboard
- Path History: Click the input field to see recent paths
- Windows:
C:\Users\YourName\Documents\project - WSL:
/mnt/c/Users/YourName/Documents/project - MSYS:
/c/Users/YourName/Documents/project
win-to-wsl-app/
├── electron/ # Electron main process
│ ├── src/
│ │ ├── main.ts # Main process entry
│ │ └── preload.ts # Preload script
│ └── assets/ # App icons
├── frontend/ # React frontend
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── hooks/ # Custom hooks
│ │ ├── services/ # Path conversion logic
│ │ └── contexts/ # React contexts
│ └── public/ # Static assets
├── electron-builder.json # Build configuration
└── package.json # Root package config
- ConverterPanel: Main UI panel with input/output sections
- PathHistoryInput: Custom dropdown for path history
- TitleBar: Custom frameless window controls
- ThemeContext: Dark/light theme management
The app uses Electron IPC for:
- Clipboard operations (
clipboard:read,clipboard:write) - Path history management (
history:read,history:add,history:clear) - Window controls (
window:minimize,window:maximize,window:close)
Default window configuration in electron/src/main.ts:
{
width: 800,
height: 364,
minWidth: 600,
minHeight: 364,
maxHeight: 364,
resizable: true, // Horizontal resize only
frame: false // Custom title bar
}Platform-specific icons and build targets in electron-builder.json.
npm run dev # Start dev server (frontend + electron)
npm run build # Build frontend and electron
npm run lint # Run ESLint
npm run dist # Create distributableThis project uses npm workspaces:
frontend/- React application workspaceelectron/- Electron main process workspace
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License - see LICENSE file for details
- Built with Electron
- UI components from shadcn/ui
- Icons from React Icons
For issues, questions, or contributions, please visit the GitHub repository.
Made with ❤️ for Windows + WSL developers