jumphp2installer: een installatieprogramma voor je software
jumphp2installer maakt echte native installatieprogramma's voor Windows, macOS en Linux, voor je game, je JumPHP-app of welke software dan ook. Je schrijft een kort, leesbaar YAML-script, en je gebruikers downloaden één bestand. Dat toont een wizard (welkom, licentie, map, opties), installeert altijd de nieuwste versie en voegt een verwijderprogramma toe. Het is vrij en open source: github.com/davidnurdin/jumphp2installer.





Wat het doet
- Eén bestand per systeem:
Mijn-App-setup.exe(Windows 10 en 11),Mijn-App-setup-macos.zip(Macs met Apple silicon en Intel),Mijn-App-setup-linux-x86_64. Vooraf niets te installeren. - Altijd de nieuwste versie: het programma leest je script bij het starten. Een installatieprogramma dat een jaar geleden is gedownload, installeert dus de versie van vandaag.
- Een wizard in jouw kleuren: je naam, je pictogram, je afbeelding aan de zijkant, je kleur, je licentie en je teksten. In het Engels of het Frans, volgens de taal van de computer.
- De gebruikelijke stappen: downloaden (met SHA-256-controle), uitpakken (
.zip,.tar.gz), kopiëren, een bestand schrijven, uitvoerbaar maken, een opdracht starten, snelkoppelingen maken (bureaublad, menu). - Een echt verwijderprogramma: het verschijnt onder "Apps" in Windows en in het Linux-menu. Het verwijdert precies wat de installatie heeft gemaakt, niets anders.
- Zonder beheerdersrechten: alles wordt voor de gebruiker geïnstalleerd, in diens eigen programmamap.
- Ook via de opdrachtregel:
--silentinstalleert zonder venster (uitrol, scripts, CI).
Het installatiescript
Een bestand install.yaml zegt wat het programma toont (pages) en wat het doet (steps). Hetzelfde script
werkt op alle drie de systemen: variabelen ({folder}, {platform}, {exe}…) en de sleutel os: regelen de
verschillen.
app:
name: Mijn App
publisher: Ik
website: https://voorbeeld.nl
icon: icon.png
banner: banner.png # de afbeelding links in de wizard (172 x 420)
accent: "#2f6fed"
version:
github: ik/mijn-app # de nieuwste GitHub-release geeft {version}
pages:
- welcome
- license: LICENSE.txt
- folder: "{programs}/{app}"
- options:
desktop: Een snelkoppeling op het bureaublad
- install
- finish: {run: "{folder}/mijn-app{exe}"}
steps:
- download: https://github.com/ik/mijn-app/releases/download/v{version}/mijn-app-{platform}.zip
- extract: {strip: 1}
- executable: "{folder}/mijn-app"
os: [linux, macos]
- shortcut: {target: "{folder}/mijn-app{exe}", where: desktop}
if: desktop
- uninstaller
De pagina's
| Pagina | Wat ze toont |
|---|---|
welcome |
een welkomsttekst (standaard: "Welkom bij de installatie van {app} {version}") |
license |
een bestand van het pakket, te accepteren om verder te gaan |
folder |
de map, met "Bladeren…", de benodigde en de vrije ruimte; waarschuwt als de map al in gebruik is |
options |
selectievakjes, opnieuw gebruikt door de stappen (if: desktop) |
install |
de voortgangsbalk en de details |
finish |
het einde, met een vakje "{app} starten" (run, dat per systeem kan verschillen) |
De stappen
| Stap | |
|---|---|
download |
een adres of een bestand van het pakket; sha256 stopt alles als het bestand niet het juiste is |
extract |
pakt uit in {folder}; strip: 1 laat de bovenste map van het archief weg |
copy, mkdir, write, delete |
bestanden en mappen (delete raakt alleen de installatiemap, de map van de gebruiker en de tijdelijke map) |
executable |
maakt een bestand uitvoerbaar (Linux, macOS) |
shortcut |
desktop, menu of both: .lnk op Windows, .desktop op Linux, een link op macOS |
run |
start een opdracht in de map |
uninstaller |
installeert het verwijderprogramma en meldt het aan bij het systeem |
Elke stap kent if: (een aangevinkte optie, of "!optie"), os: (windows, macos, linux) en label:.
De versie
| Schrijfwijze | {version} |
|---|---|
version: 1.4.0 |
vast |
version: {github: ik/mijn-app} |
de nieuwste release van de repository (de tag, zonder de v) |
version: {latest: https://…/latest.json} |
wat het adres antwoordt: {"version": "1.4.0"} of tekst |
De variabelen
| Variabele | Windows | Linux | macOS |
|---|---|---|---|
{programs} |
%LOCALAPPDATA%\Programs |
~/.local/opt |
~/Applications |
{desktop}, {menu} |
bureaublad, Startmenu | bureaublad, ~/.local/share/applications |
~/Desktop |
{platform} |
windows-x86_64 |
linux-x86_64 |
macos-arm64 / macos-x86_64 |
{exe} |
.exe |
(leeg) | (leeg) |
{folder}, {app}, {version}, {home}, {temp}, {os}, {arch}, {download} |
De volledige referentie staat in docs/installer/script.md.
Drie manieren om het te publiceren
1. Op jumphp.net, zonder iets te installeren
In de studio opent "Nieuw installatieprogramma" een editor:
- het YAML-script wordt gecontroleerd terwijl je typt (elke fout met zijn regel);
- een voorbeeld van de wizard wordt ernaast bijgewerkt;
- je zet de afbeeldingen, de licentie en de kleine bestanden van het pakket erin.
Bij het publiceren krijgt het installatieprogramma zijn downloadpagina en zijn drie links, één per systeem. Zolang het niet gepubliceerd is, kun alleen jij het uitproberen.
2. In GitHub-releases, zonder server
Het pakket (install.yaml en zijn bestanden) en de installatieprogramma's worden bij elke release van je repository
gevoegd. De programma's lezen de nieuwste release, dus van versie tot versie hoeft er niets te veranderen. Een
workflow doet het bij elke release:
# .github/workflows/installer.yml
on:
release:
types: [published]
jobs:
installer:
uses: davidnurdin/jumphp2installer/.github/workflows/package.yml@main
with:
folder: installer # install.yaml en zijn bestanden
permissions:
contents: write
Je kunt het ook met de hand doen, vanuit een kloon van jumphp2installer:
tools/github-release.sh ik/mijn-app installer. Je links:
https://github.com/ik/mijn-app/releases/latest/download/Mijn-App-setup.exe.
Publiceert je repository meerdere producten (tags v* voor het ene, ide-v* voor het andere), dan kan de
"nieuwste release" bij het andere product horen. Bied het pakket dan aan vanuit de bestanden van de repository
(https://raw.githubusercontent.com/…/installer/), met een version.json ernaast. Zo doet
JumPHP IDE het.
3. Op je eigen server
De server van jumphp2installer is een Symfony- en MariaDB-app in Docker (server/ in de repository): accounts,
editor, voorbeeld, downloadpagina's en statistieken. Eén docker compose up -d start hem. Een eenvoudige statische
webpagina kan ook als server dienen (een map met install.yaml en zijn bestanden):
php tools/package-release.php mijn-pakket/ https://mijn-site.nl/installer/ bases/ out/
Voor een JumPHP-game of -app
bin/jumphp app:export mijn-app --windows --macos (of export:standalone voor een game) maakt één uitvoerbaar bestand
per systeem. Voeg ze toe aan een release en gebruik
het voorbeeld jumphp-app.yaml.
Je Claude kan het: vraag hem "maak een installatieprogramma voor mijn game" (de repository bevat een skill
jumphp2installer).
Via de opdrachtregel
Mijn-App-setup-linux-x86_64 --silent --folder=/opt/mijn-app --no-option=desktop
Mijn-App-setup.exe --silent
"C:\…\Mijn App\uninstall.exe" --uninstall --silent
jumphp2installer-linux-x86_64 --check --script=install.yaml # een script controleren
jumphp2installer-linux-x86_64 --script=install.yaml # de wizard uitproberen met een lokaal script
jumphp2installer-linux-x86_64 --make=Mijn-App-setup.exe --server=github:ik/mijn-app --from=jumphp2installer-windows-x86_64.exe
Hoe het werkt
Het installatieprogramma is zelf een JumPHP-app: een HTML-pagina voor de wizard, PHP voor het werk en de zelfstandige PHP van StaticPHP. Het adres van het pakket wordt in de ingebouwde php.ini van het uitvoerbare bestand geschreven, met een vaste grootte. Een server maakt zo voor elk pakket in een fractie van een seconde een installatieprogramma, zonder iets te compileren. Downloaden en uitpakken gaan elk frame een stukje verder: het venster bevriest nooit. Vóór elke versie probeert GitHub Actions het programma echt uit op Linux, Windows en twee Macs (Apple silicon en Intel): installatie, snelkoppelingen, verwijderitem, daarna verwijdering.
Beperkingen
- De installatieprogramma's zijn niet ondertekend: Windows SmartScreen en macOS Gatekeeper waarschuwen de eerste keer (op een Mac: rechtsklik › Open).
- Alleen installatie voor de gebruiker (geen Program Files, services of bestandskoppelingen).
- Geen Linux ARM, geen telefoons.
- Start het op Windows via het lange pad, nooit via een korte 8.3-naam (
C:\Users\RUNNER~1\…).