Right-click any folder. Get a URL.
Two VS Code extensions turn any Windows EXE into an install script for your WineJS server — or a native macOS .app bundle.
Three tools unlock packaging.
WineJS Project Packager
Pack and upload Windows apps to your WineJS server — right-click any folder.
Install add-onWineJS Packager Web
Pack and upload web apps to WineJS with the same one-command workflow.
Install add-onAny EXE → install script.
Right-click any folder in VS Code. Get install_yourapp.sh. One script. One app. One URL.
The install script downloads from Spaces CDN, finds the next available port, generates docker-compose.yml with gamepad + Wiimote support, patches KasmVNC, and starts the container. If the app crashes, the auto-heal monitor restarts it immediately.
- Right-click any folder → extension activates
- Scan for EXE files → filters out installers / uninstallers
- User selects the main executable → the app launcher
- Handle icon → extract from EXE, external URL, or default
- Create ZIP archive → full app folder compressed
- Upload to Spaces → both .zip and icon to rtx/wine/
- Generate install_yourapp.sh with all URLs embedded
- Save to foldername_install/ next to the original folder
- 1
Place your Windows EXE and files in a folder
- 2
Right-click the folder in VS Code
- 3
Select WineJS: Package Windows App
- 4
Enter the app name (auto-filled from folder)
- 5
Pick the main EXE from the scanned list
- 6
Choose icon — extract from EXE, URL, or default
- 7
Select category: Game, Graphics, Utility, etc.
Result: foldername_install/install_yourapp.sh. Run it on any WineJS server. Your app appears athttps://yourdomain.com/yourapp.
- rtx/wine/yourapp.zip — full package
- rtx/wine/images/yourapp.png — icon
The install script downloads directly from your Spaces CDN. No scp. No rsync. Just run the script.
When you open the URL, the app launches full-screen. No borders. No toolbars. Just the app, ready to use, on any device. Once installed, the app is always on — even if you close your browser.
Drop a wineregkey.reg · done.
The packager detects wineregkey.reg in your Windows folder and injects it into the Wine registry during installation — per-app only, no system-wide changes.
- During packaging → extension checks for wineregkey.reg
- Sets hasRegFile = true → passes to install script generator
- During install → runs regedit /S wineregkey.reg inside the container
- Keys merge into the app's dedicated Wine prefix
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\MyApp] "Setting1"="value1" "FirstRun"=dword:00000000 [HKEY_LOCAL_MACHINE\Software\MyApp] "InstallPath"="C:\\Program Files\\MyApp"
- Right-click any folder → extension activates
- Scan for EXEs → filters out installers / uninstallers
- Extract real icons from the EXE → icoutils + wrestool
- Create macOS bundle → AppName.app/Contents/MacOS/launcher
- Generate Info.plist → app metadata, category, bundle ID
- Convert PNG → .icns macOS native icon
- Symlink or copy files → instant creation
- Place app on Desktop + ~/Applications
- Add to Dock automatically → via PlistBuddy
- Create Install.command + Uninstall.command
- Sign the app bundle → Gatekeeper compatible
Any EXE → native macOS app.
Double-click to launch. No terminal. No Wine config. No headaches.
The magic is the launcher: instead of manually configuring Wine prefixes, the extension generates a launcher that calls open "$EXE_PATH". macOS Launch Services handles the rest — finding Wine, setting up the environment, running the app.
brew install --cask wine-stable. The extension handles everything else.- AppName.app native bundle
- Placed on Desktop + ~/Applications
- Auto-added to your Dock
- Install.command + Uninstall.command
- Per-app Wine prefix at ~/.wine-AppName/