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





Что он делает
- Один файл на систему:
Moe-Prilozhenie-setup.exe(Windows 10 и 11),Moe-Prilozhenie-setup-macos.zip(Mac на Apple silicon и Intel),Moe-Prilozhenie-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.ru
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.ru/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\…).