PackPulse
Open-source Fabric mod updater that syncs mods, configs, resource packs, and shader packs from a remote manifest before you play.
PackPulse
PackPulseMod
PackPulseMod is an open-source client-side updater for private Minecraft modpacks.
It is designed for server owners and small communities who want players to keep their `mods`, `config`, `resourcepacks`, and `shaderpacks` folders in sync without shipping a full launcher.
PackPulseMod is not tied to any specific server. You host your own files and `manifest.json`, then set the manifest URL in the client config.
Features
- Syncs missing or changed files on Minecraft startup - Uses SHA-256 hashes for file checks - Supports `mods`, `config`, `resourcepacks`, `shaderpacks`, and optional `options.txt` - Shows a confirmation screen before downloading - Lets players choose which files to download - Includes a scrollable file list - Shows clean mod/file names without `.jar`, `.zip`, `.txt`, etc. - Has a `Download all` button - Supports HTTP and HTTPS manifest URLs - Supports explicit file removal through the manifest `delete` list - Can optionally remove stale files that are no longer in the manifest - Shows a restart screen when updated `.jar` mods require a restart
Supported Builds
| Loader | Minecraft versions | | --- | --- | | Fabric | `1.20.1` - `1.20.6` | | Fabric | `1.21` - `1.21.11` | | NeoForge | `1.20.5` - `1.20.6` | | NeoForge | `1.21` - `1.21.11` |
Client Setup
1. Install the correct Fabric Loader or NeoForge version. 2. Put the matching PackPulseMod jar into `.minecraft/mods`. 3. Start Minecraft once to create the config. 4. Close Minecraft. 5. Open:
```text .minecraft/config/packpulse.json ```
6. Replace the example `manifestUrl` with your own URL:
```json { "manifestUrl": "https://your-domain.example/packpulse/manifest.json", "removeFilesMissingFromManifest": false, "updateOnStartup": true, "showProgressWindow": true, "autoRestartAfterModUpdates": false, "restartExecutable": "" } ```
The default URL is only a placeholder. You must host your own manifest.
Server Pack Layout
Put pack files on your server like this:
```text server-pack/ mods/ config/ resourcepacks/ shaderpacks/ options.txt ```
`options.txt` is optional.
Manifest
PackPulseMod expects a JSON manifest with file paths, download URLs, SHA-256 hashes, and an optional `delete` list for files that should be removed from clients.
The repository includes scripts that can generate and deploy this manifest automatically. When a previously published file disappears from the server pack, the generator adds it to `delete`, so old renamed mods can be removed safely.
Example script workflow:
```bash sudo mkdir -p /opt/packpulse/scripts /opt/packpulse/server-pack cd /opt/packpulse
curl -fsSL -o scripts/generate_manifest.py https://raw.githubusercontent.com/Kamilhik/PackPulseMod/main/scripts/generate_manifest.py curl -fsSL -o scripts/deploy_http_ip.sh https://raw.githubusercontent.com/Kamilhik/PackPulseMod/main/scripts/deploy_http_ip.sh curl -fsSL -o scripts/deploy_https_letsencrypt.sh https://raw.githubusercontent.com/Kamilhik/PackPulseMod/main/scripts/deploy_https_letsencrypt.sh chmod +x scripts/deploy_http_ip.sh scripts/deploy_https_letsencrypt.sh ```
HTTP by IP:
```bash sudo ./scripts/deploy_http_ip.sh --server-ip YOUR_SERVER_IP ```
HTTPS with domain and Let's Encrypt:
```bash sudo ./scripts/deploy_https_letsencrypt.sh --domain files.example.com --email you@example.com ```
After changing your pack files, run the same deploy script again.
Notes
- This mod is client-side. - It is meant for private packs, server packs, and community packs. - For public releases, test the edge versions of each supported Minecraft range.
Русский
PackPulseMod - это open-source клиентский мод для автоматического обновления приватных Minecraft-сборок.
Он подходит для владельцев серверов и небольших сообществ, которым нужно синхронизировать у игроков папки `mods`, `config`, `resourcepacks` и `shaderpacks` без отдельного лаунчера.
PackPulseMod не привязан к конкретному серверу. Ты размещаешь свои файлы и `manifest.json`, а затем указываешь ссылку на manifest в конфиге клиента.
Возможности
- Синхронизация отсутствующих или измененных файлов при запуске Minecraft - Проверка файлов по SHA-256 - Поддержка `mods`, `config`, `resourcepacks`, `shaderpacks` и опционального `options.txt` - Экран подтверждения перед скачиванием - Выбор, какие файлы скачивать - Список файлов со скроллом - Красивые названия файлов без `.jar`, `.zip`, `.txt` и других расширений - Кнопка `Скачать всё` - Поддержка HTTP и HTTPS ссылок на manifest - Явное удаление файлов через список `delete` в manifest - Опциональное удаление устаревших файлов, которых больше нет в manifest - Экран перезапуска, если после обновления `.jar`-модов нужен перезапуск
Поддерживаемые Сборки
| Лоадер | Версии Minecraft | | --- | --- | | Fabric | `1.20.1` - `1.20.6` | | Fabric | `1.21` - `1.21.11` | | NeoForge | `1.20.5` - `1.20.6` | | NeoForge | `1.21` - `1.21.11` |
Настройка Клиента
1. Установи подходящий Fabric Loader или NeoForge. 2. Положи нужный jar PackPulseMod в `.minecraft/mods`. 3. Запусти Minecraft один раз, чтобы создался конфиг. 4. Закрой Minecraft. 5. Открой:
```text .minecraft/config/packpulse.json ```
6. Замени примерный `manifestUrl` на свою ссылку:
```json { "manifestUrl": "https://your-domain.example/packpulse/manifest.json", "removeFilesMissingFromManifest": false, "updateOnStartup": true, "showProgressWindow": true, "autoRestartAfterModUpdates": false, "restartExecutable": "" } ```
Стандартная ссылка является только примером. Нужно разместить свой manifest.
Структура Серверной Сборки
Файлы сборки на сервере должны лежать так:
```text server-pack/ mods/ config/ resourcepacks/ shaderpacks/ options.txt ```
`options.txt` необязателен.
Manifest
PackPulseMod ожидает JSON manifest с путями файлов, ссылками для скачивания, SHA-256 хэшами и опциональным списком `delete` для удаления файлов у клиентов.
В репозитории есть скрипты, которые могут автоматически создать manifest и развернуть файлы на сервере. Если ранее опубликованный файл исчез из серверной сборки, генератор добавит его в `delete`, чтобы старые переименованные моды удалялись безопасно.
Пример:
```bash sudo mkdir -p /opt/packpulse/scripts /opt/packpulse/server-pack cd /opt/packpulse
curl -fsSL -o scripts/generate_manifest.py https://raw.githubusercontent.com/Kamilhik/PackPulseMod/main/scripts/generate_manifest.py curl -fsSL -o scripts/deploy_http_ip.sh https://raw.githubusercontent.com/Kamilhik/PackPulseMod/main/scripts/deploy_http_ip.sh curl -fsSL -o scripts/deploy_https_letsencrypt.sh https://raw.githubusercontent.com/Kamilhik/PackPulseMod/main/scripts/deploy_https_letsencrypt.sh chmod +x scripts/deploy_http_ip.sh scripts/deploy_https_letsencrypt.sh ```
HTTP по IP:
```bash sudo ./scripts/deploy_http_ip.sh --server-ip YOUR_SERVER_IP ```
HTTPS через домен и Let's Encrypt:
```bash sudo ./scripts/deploy_https_letsencrypt.sh --domain files.example.com --email you@example.com ```
После изменения файлов сборки просто запусти тот же deploy-скрипт снова.
Примечания
- Мод работает на стороне клиента. - Подходит для приватных сборок, серверных сборок и сборок небольших сообществ. - Перед публичным релизом лучше проверить крайние версии каждого поддерживаемого диапазона Minecraft.
License
MIT