Packagers

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.

Prerequisites

Three tools unlock packaging.

VS Code

The essential IDE for the WineJS packager workflow and extensions.

Download

WineJS Project Packager

Pack and upload Windows apps to your WineJS server — right-click any folder.

Install add-on

WineJS Packager Web

Pack and upload web apps to WineJS with the same one-command workflow.

Install add-on
Windows Packager

Any 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.

What the packager does
  • 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
Package your own Windows app
  1. 1

    Place your Windows EXE and files in a folder

  2. 2

    Right-click the folder in VS Code

  3. 3

    Select WineJS: Package Windows App

  4. 4

    Enter the app name (auto-filled from folder)

  5. 5

    Pick the main EXE from the scanned list

  6. 6

    Choose icon — extract from EXE, URL, or default

  7. 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.

What gets uploaded to Spaces
  • 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.

Full-screen by default

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.

Registry auto-import

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.

How it works
  • 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
Powerful but use wisely. Avoid putting license keys or serial numbers in public scripts.
wineregkey.reg
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"
Pre-set registry keys before first run
Register DLLs (regsvr32 equivalents)
Set file associations for your app
Skip first-run dialogs and tutorials
What the desktop packager does
  • 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
Desktop Packager

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.

Requires Wine on your Mac: 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/