jumphp2installer: інсталятор для вашої програми
jumphp2installer створює справжні нативні інсталятори для Windows, macOS і Linux — для вашої гри, застосунку JumPHP або будь-якої програми. Ви пишете короткий зрозумілий скрипт YAML, а користувачі завантажують один файл. Він показує майстер встановлення (вітання, ліцензія, тека, параметри), завжди встановлює останню версію і додає деінсталятор. Це вільне ПЗ з відкритим кодом: github.com/davidnurdin/jumphp2installer.





Що він робить
- Один файл на систему:
My-App-setup.exe(Windows 10 і 11),My-App-setup-macos.zip(Mac на Apple silicon та Intel),My-App-setup-linux-x86_64. Заздалегідь нічого встановлювати не треба. - Завжди остання версія: інсталятор читає ваш скрипт під час запуску. Інсталятор, завантажений рік тому, встановить сьогоднішню версію.
- Майстер у ваших кольорах: ваша назва, піктограма, зображення збоку, колір, ліцензія й тексти. Англійською або французькою — залежно від мови комп'ютера.
- Звичайні кроки: завантажити (з перевіркою SHA-256), розпакувати (
.zip,.tar.gz), скопіювати, записати файл, зробити виконуваним, виконати команду, створити ярлики (робочий стіл, меню). - Справжній деінсталятор: він видно в «Застосунках» Windows і в меню Linux. Він видаляє рівно те, що створило встановлення, і нічого більше.
- Без прав адміністратора: усе встановлюється для користувача, у його власну теку програм.
- І з командного рядка:
--silentвстановлює без вікна (розгортання, скрипти, CI).
Скрипт встановлення
Файл install.yaml описує, що інсталятор показує (pages) і що робить (steps). Той самий скрипт працює на
трьох системах: змінні ({folder}, {platform}, {exe}…) і ключ os: враховують відмінності.
app:
name: Мій застосунок
publisher: Я
website: https://example.ua
icon: icon.png
banner: banner.png # зображення ліворуч у майстрі (172 x 420)
accent: "#2f6fed"
version:
github: me/my-app # останній реліз на GitHub дає {version}
pages:
- welcome
- license: LICENSE.txt
- folder: "{programs}/{app}"
- options:
desktop: Ярлик на робочому столі
- install
- finish: {run: "{folder}/my-app{exe}"}
steps:
- download: https://github.com/me/my-app/releases/download/v{version}/my-app-{platform}.zip
- extract: {strip: 1}
- executable: "{folder}/my-app"
os: [linux, macos]
- shortcut: {target: "{folder}/my-app{exe}", where: desktop}
if: desktop
- uninstaller
Сторінки
| Сторінка | Що показує |
|---|---|
welcome |
текст вітання (типово: «Ласкаво просимо до встановлення {app} {version}») |
license |
файл пакета, який треба прийняти, щоб продовжити |
folder |
теку, з кнопкою «Огляд…», потрібним і вільним місцем; попереджає, якщо тека вже зайнята |
options |
прапорці, які потім використовують кроки (if: desktop) |
install |
індикатор поступу й подробиці |
finish |
кінець, з прапорцем «Запустити {app}» (run, може залежати від системи) |
Кроки
| Крок | |
|---|---|
download |
адреса або файл пакета; sha256 зупиняє все, якщо файл не той |
extract |
розпаковує в {folder}; strip: 1 прибирає верхню теку архіву |
copy, mkdir, write, delete |
файли й теки (delete торкається лише теки встановлення, теки користувача та тимчасової теки) |
executable |
робить файл виконуваним (Linux, macOS) |
shortcut |
desktop, menu або both: .lnk у Windows, .desktop у Linux, посилання в macOS |
run |
виконує команду в теці |
uninstaller |
встановлює деінсталятор і реєструє його в системі |
Кожен крок приймає if: (позначений параметр або "!параметр"), os: (windows, macos, linux) і label:.
Версія
| Запис | {version} |
|---|---|
version: 1.4.0 |
фіксована |
version: {github: me/my-app} |
останній реліз репозиторію (його тег без v) |
version: {latest: https://…/latest.json} |
те, що відповідає адреса: {"version": "1.4.0"} або текст |
Змінні
| Змінна | Windows | Linux | macOS |
|---|---|---|---|
{programs} |
%LOCALAPPDATA%\Programs |
~/.local/opt |
~/Applications |
{desktop}, {menu} |
робочий стіл, меню «Пуск» | робочий стіл, ~/.local/share/applications |
~/Desktop |
{platform} |
windows-x86_64 |
linux-x86_64 |
macos-arm64 / macos-x86_64 |
{exe} |
.exe |
(порожньо) | (порожньо) |
{folder}, {app}, {version}, {home}, {temp}, {os}, {arch}, {download} |
Повний довідник: docs/installer/script.md.
Три способи опублікувати
1. На jumphp.net, нічого не встановлюючи
У студії кнопка «Новий інсталятор» відкриває редактор:
- скрипт YAML перевіряється під час введення (кожна помилка з номером рядка);
- поруч оновлюється попередній перегляд майстра;
- ви завантажуєте зображення, ліцензію та невеликі файли пакета.
Після публікації інсталятор отримує свою сторінку завантаження і три посилання, по одному на систему. Доки він не опублікований, спробувати його можете лише ви.
2. У релізах GitHub, без сервера
Пакет (install.yaml і його файли) та інсталятори додаються до кожного релізу вашого репозиторію. Інсталятори
читають останній реліз, тож між версіями нічого змінювати не треба. Workflow робить це під час кожного релізу:
# .github/workflows/installer.yml
on:
release:
types: [published]
jobs:
installer:
uses: davidnurdin/jumphp2installer/.github/workflows/package.yml@main
with:
folder: installer # install.yaml і його файли
permissions:
contents: write
Можна й вручну, з клону jumphp2installer:
tools/github-release.sh me/my-app installer. Ваші посилання:
https://github.com/me/my-app/releases/latest/download/My-App-setup.exe.
Якщо репозиторій випускає кілька продуктів (теги v* для одного, ide-v* для іншого), «останній реліз» може
належати іншому продукту. Тоді віддавайте пакет із файлів репозиторію
(https://raw.githubusercontent.com/…/installer/), з файлом version.json поруч. Так робить
JumPHP IDE.
3. На власному сервері
Сервер jumphp2installer — це застосунок Symfony + MariaDB у Docker (server/ у репозиторії): облікові записи,
редактор, попередній перегляд, сторінки завантаження і статистика. Запускається однією командою
docker compose up -d. Сервером може бути й проста статична вебсторінка (тека з install.yaml та його файлами):
php tools/package-release.php my-package/ https://my-site.ua/installer/ bases/ out/
Для гри або застосунку JumPHP
bin/jumphp app:export my-app --windows --macos (або export:standalone для гри) створює по виконуваному файлу на
систему. Додайте їх до релізу й використайте
приклад jumphp-app.yaml.
Ваш Claude це вміє: попросіть його «зроби інсталятор для моєї гри» (у репозиторії є skill jumphp2installer).
З командного рядка
My-App-setup-linux-x86_64 --silent --folder=/opt/my-app --no-option=desktop
My-App-setup.exe --silent
"C:\…\My App\uninstall.exe" --uninstall --silent
jumphp2installer-linux-x86_64 --check --script=install.yaml # перевірити скрипт
jumphp2installer-linux-x86_64 --script=install.yaml # спробувати майстер з локальним скриптом
jumphp2installer-linux-x86_64 --make=My-App-setup.exe --server=github:me/my-app --from=jumphp2installer-windows-x86_64.exe
Як це працює
Інсталятор і сам є застосунком JumPHP: HTML-сторінка для майстра, PHP для роботи та автономний PHP від StaticPHP. Адреса пакета записується у вбудований php.ini виконуваного файлу, без зміни його розміру. Тому сервер за частку секунди робить інсталятор для будь-якого пакета, нічого не компілюючи. Завантаження й розпакування просуваються потроху в кожному кадрі: вікно ніколи не зависає. Перед кожною версією GitHub Actions по-справжньому перевіряє інсталятор на Linux, Windows і двох Mac (Apple silicon та Intel): встановлення, ярлики, запис для видалення, потім видалення.
Обмеження
- Інсталятори не підписані: Windows SmartScreen і macOS Gatekeeper попереджають під час першого запуску (на Mac: правий клік › Відкрити).
- Встановлення лише для користувача (без Program Files, служб і асоціацій файлів).
- Немає Linux ARM і телефонів.
- У Windows запускайте його за довгим шляхом, ніколи за коротким іменем 8.3 (
C:\Users\RUNNER~1\…).