jumphp2installer: ein Installationsprogramm für Ihre Software
jumphp2installer erstellt echte native Installationsprogramme für Windows, macOS und Linux, für Ihr Spiel, Ihre JumPHP-App oder beliebige Software. Sie schreiben ein kurzes, lesbares YAML-Skript, und Ihre Nutzer laden eine einzige Datei herunter. Sie zeigt einen Assistenten (Willkommen, Lizenz, Ordner, Optionen), installiert immer die neueste Version und richtet ein Deinstallationsprogramm ein. Frei und quelloffen: github.com/davidnurdin/jumphp2installer.





Was es kann
- Eine Datei pro System:
Meine-App-setup.exe(Windows 10 und 11),Meine-App-setup-macos.zip(Macs mit Apple Silicon und Intel),Meine-App-setup-linux-x86_64. Vorher muss nichts installiert werden. - Immer die neueste Version: Das Programm liest Ihr Skript beim Start. Ein vor einem Jahr heruntergeladenes Installationsprogramm installiert also die Version von heute.
- Ein Assistent in Ihren Farben: Ihr Name, Ihr Symbol, Ihr Bild an der Seite, Ihre Farbe, Ihre Lizenz und Ihre Texte. Auf Englisch oder Französisch, je nach Sprache des Computers.
- Die üblichen Schritte: herunterladen (mit SHA-256-Prüfung), entpacken (
.zip,.tar.gz), kopieren, eine Datei schreiben, ausführbar machen, einen Befehl starten, Verknüpfungen anlegen (Desktop, Menü). - Ein echtes Deinstallationsprogramm: Es erscheint unter „Apps“ in Windows und im Linux-Menü. Es entfernt genau das, was die Installation angelegt hat, und sonst nichts.
- Ohne Administratorrechte: Alles wird für den Nutzer installiert, in seinen eigenen Programmordner.
- Auch auf der Kommandozeile:
--silentinstalliert ohne Fenster (Verteilung, Skripte, CI).
Das Installationsskript
Eine Datei install.yaml legt fest, was das Programm zeigt (pages) und was es tut (steps). Dasselbe
Skript funktioniert auf allen drei Systemen: Variablen ({folder}, {platform}, {exe}…) und der Schlüssel os:
kümmern sich um die Unterschiede.
app:
name: Meine App
publisher: Ich
website: https://beispiel.de
icon: icon.png
banner: banner.png # das Bild links im Assistenten (172 x 420)
accent: "#2f6fed"
version:
github: ich/meine-app # das neueste GitHub-Release liefert {version}
pages:
- welcome
- license: LICENSE.txt
- folder: "{programs}/{app}"
- options:
desktop: Eine Verknüpfung auf dem Desktop
- install
- finish: {run: "{folder}/meine-app{exe}"}
steps:
- download: https://github.com/ich/meine-app/releases/download/v{version}/meine-app-{platform}.zip
- extract: {strip: 1}
- executable: "{folder}/meine-app"
os: [linux, macos]
- shortcut: {target: "{folder}/meine-app{exe}", where: desktop}
if: desktop
- uninstaller
Die Seiten
| Seite | Was sie zeigt |
|---|---|
welcome |
einen Begrüßungstext (Standard: „Willkommen bei der Installation von {app} {version}“) |
license |
eine Datei des Pakets, die vor dem Weitergehen akzeptiert werden muss |
folder |
den Ordner, mit „Durchsuchen…“, dem benötigten und dem freien Platz; warnt, wenn der Ordner schon belegt ist |
options |
Kontrollkästchen, die die Schritte wieder verwenden (if: desktop) |
install |
den Fortschrittsbalken und die Details |
finish |
das Ende, mit einem Kästchen „{app} starten“ (run, je nach System verschieden möglich) |
Die Schritte
| Schritt | |
|---|---|
download |
eine Adresse oder eine Datei des Pakets; sha256 bricht ab, wenn die Datei nicht die richtige ist |
extract |
entpackt nach {folder}; strip: 1 entfernt den obersten Ordner des Archivs |
copy, mkdir, write, delete |
Dateien und Ordner (delete betrifft nur den Installationsordner, den Ordner des Nutzers und den temporären Ordner) |
executable |
macht eine Datei ausführbar (Linux, macOS) |
shortcut |
desktop, menu oder both: .lnk unter Windows, .desktop unter Linux, ein Link unter macOS |
run |
startet einen Befehl im Ordner |
uninstaller |
installiert das Deinstallationsprogramm und meldet es beim System an |
Jeder Schritt kennt if: (eine angekreuzte Option oder "!option"), os: (windows, macos, linux) und
label:.
Die Version
| Schreibweise | {version} |
|---|---|
version: 1.4.0 |
fest |
version: {github: ich/meine-app} |
das neueste Release des Repositorys (sein Tag, ohne das v) |
version: {latest: https://…/latest.json} |
was die Adresse antwortet: {"version": "1.4.0"} oder Text |
Die Variablen
| Variable | Windows | Linux | macOS |
|---|---|---|---|
{programs} |
%LOCALAPPDATA%\Programs |
~/.local/opt |
~/Applications |
{desktop}, {menu} |
Desktop, Startmenü | Desktop, ~/.local/share/applications |
~/Desktop |
{platform} |
windows-x86_64 |
linux-x86_64 |
macos-arm64 / macos-x86_64 |
{exe} |
.exe |
(leer) | (leer) |
{folder}, {app}, {version}, {home}, {temp}, {os}, {arch}, {download} |
Die vollständige Referenz steht in docs/installer/script.md.
Drei Wege zur Veröffentlichung
1. Auf jumphp.net, ohne etwas zu installieren
Im Studio öffnet „Neues Installationsprogramm“ einen Editor:
- das YAML-Skript wird beim Tippen geprüft (jeder Fehler mit seiner Zeile);
- eine Vorschau des Assistenten aktualisiert sich daneben;
- Sie legen die Bilder, die Lizenz und die kleinen Dateien des Pakets ab.
Beim Veröffentlichen erhält das Installationsprogramm seine Download-Seite und seine drei Links, einen pro System. Solange es nicht veröffentlicht ist, können nur Sie es ausprobieren.
2. In GitHub-Releases, ohne Server
Das Paket (install.yaml und seine Dateien) und seine Installationsprogramme werden an jedes Release Ihres
Repositorys angehängt. Die Programme lesen das neueste Release, von Version zu Version ist also nichts zu ändern.
Ein Workflow erledigt das bei jedem Release:
# .github/workflows/installer.yml
on:
release:
types: [published]
jobs:
installer:
uses: davidnurdin/jumphp2installer/.github/workflows/package.yml@main
with:
folder: installer # install.yaml und seine Dateien
permissions:
contents: write
Oder von Hand, aus einem Klon von jumphp2installer:
tools/github-release.sh ich/meine-app installer. Ihre Links:
https://github.com/ich/meine-app/releases/latest/download/Meine-App-setup.exe.
Veröffentlicht Ihr Repository mehrere Produkte (Tags v* für eines, ide-v* für ein anderes), kann das
„neueste Release“ zum anderen Produkt gehören. Stellen Sie das Paket dann aus den Dateien des Repositorys bereit
(https://raw.githubusercontent.com/…/installer/), mit einer version.json daneben. So macht es
JumPHP IDE.
3. Auf Ihrem eigenen Server
Der Server von jumphp2installer ist eine Symfony- und MariaDB-App in Docker (server/ im Repository): Konten,
Editor, Vorschau, Download-Seiten und Statistiken. Ein docker compose up -d startet ihn. Auch eine einfache
statische Webseite kann als Server dienen (ein Ordner mit install.yaml und seinen Dateien):
php tools/package-release.php mein-paket/ https://meine-seite.de/installer/ bases/ out/
Für ein JumPHP-Spiel oder eine JumPHP-App
bin/jumphp app:export meine-app --windows --macos (oder export:standalone für ein Spiel) erzeugt eine ausführbare
Datei pro System. Hängen Sie sie an ein Release an und nutzen Sie
das Beispiel jumphp-app.yaml.
Ihr Claude kann das: Bitten Sie ihn „mach ein Installationsprogramm für mein Spiel“ (das Repository enthält einen
Skill jumphp2installer).
Auf der Kommandozeile
Meine-App-setup-linux-x86_64 --silent --folder=/opt/meine-app --no-option=desktop
Meine-App-setup.exe --silent
"C:\…\Meine App\uninstall.exe" --uninstall --silent
jumphp2installer-linux-x86_64 --check --script=install.yaml # ein Skript prüfen
jumphp2installer-linux-x86_64 --script=install.yaml # den Assistenten mit einem lokalen Skript ausprobieren
jumphp2installer-linux-x86_64 --make=Meine-App-setup.exe --server=github:ich/meine-app --from=jumphp2installer-windows-x86_64.exe
Wie es funktioniert
Das Installationsprogramm ist selbst eine JumPHP-App: eine HTML-Seite für den Assistenten, PHP für die Arbeit und das eigenständige PHP von StaticPHP. Die Adresse des Pakets wird in die eingebettete php.ini der ausführbaren Datei geschrieben, mit gleichbleibender Größe. Ein Server erstellt so für jedes Paket in Sekundenbruchteilen ein Installationsprogramm, ohne etwas zu kompilieren. Downloads und Entpacken laufen in jedem Frame ein Stück weiter: Das Fenster friert nie ein. Vor jeder Version probiert GitHub Actions das Programm echt unter Linux, Windows und auf zwei Macs (Apple Silicon und Intel) aus: Installation, Verknüpfungen, Deinstallationseintrag, dann Deinstallation.
Grenzen
- Die Installationsprogramme sind nicht signiert: Windows SmartScreen und macOS Gatekeeper warnen beim ersten Mal (auf dem Mac: Rechtsklick › Öffnen).
- Nur Installation für den Nutzer (kein Program Files, keine Dienste, keine Dateizuordnungen).
- Kein Linux ARM, keine Telefone.
- Unter Windows über den langen Pfad starten, nie über einen kurzen 8.3-Namen (
C:\Users\RUNNER~1\…).