A modpack manager forged in the depths of the Overworld.
ZenithManager is a complete Minecraft modpack management system built to replace packwiz. It solves the infamous hash corruption caused by Git line-ending conversion on config files, while adding a web dashboard and server synchronization out of the box.
+======================================+
| zenithpack-cli (Node.js) |
| manage, update, build & sync |
+======================================+
| zenithpack-installer (Java) |
| auto-sync clients via Prism Launcher|
+======================================+
- Features
- Project Structure
- Getting Started
- CLI Commands
- Web Dashboard
- Server Sync
- Installer Setup
- How It Solves the Hash Problem
| Feature | Description |
|---|---|
| Hybrid Distribution | Mods via Modrinth CDN, configs/resourcepacks in a files.zip archive |
| Web Dashboard | Local UI to manage mods, check updates, sync server |
| Server Sync | Push/pull mods to your server via SFTP or local filesystem |
| Update Checker | Detect new versions from Modrinth, apply individually or in bulk |
| Version Picker | Roll back or switch to any compatible version per mod |
| Version Pinning | Lock a mod version with a custom reason |
| Side Management | client, server, or both per mod |
| Self-Updating Installer | Java Swing GUI with auto-update from GitHub Releases |
| Config Protection | Never overwrites existing player config files |
zenithpack/
├── packages/
│ ├── cli/ # Developer tool (Node.js)
│ │ ├── src/
│ │ │ ├── commands/ # CLI commands
│ │ │ ├── ui/ # Web dashboard (HTML/CSS/JS)
│ │ │ └── utils/ # Modrinth API, SFTP, crypto, etc.
│ │ └── package.json
│ └── installer/ # Player client (Java JAR)
│ ├── src/main/java/...
│ └── build.gradle
├── .github/workflows/ # CI for installer releases
├── package.json # Workspace root
└── README.md
npm install
npm link --workspace=packages/clicd packages/installer
./gradlew shadowJarOutput: packages/installer/build/libs/zenithpack-installer.jar
# Initialize a new modpack
zenithpack init --name "My Pack" --minecraft 1.21.1 --loader neoforge
# Import from an existing .mrpack
zenithpack import my-modpack.mrpack
# Add a mod from Modrinth (slug, ID, or URL)
zenithpack add create
zenithpack add "https://modrinth.com/mod/sodium"
# Add a local .jar (not on Modrinth)
zenithpack add-local my-mod.jar --name "My Mod" --side server
# Remove a mod
zenithpack remove sodium
# Recalculate all hashes + scan for new files
zenithpack refresh
# Build for publication (GitHub Pages, etc.)
zenithpack build --base-url https://user.github.io/my-modpack
# Export as .mrpack
zenithpack export-mrpack# Configure SFTP connection
zenithpack server set 192.168.1.20 user --key ~/.ssh/id_ed25519 --mods-path /opt/minecraft/mods
# Or use local filesystem (for testing)
zenithpack server set --local /path/to/test/mods
# List mods on the server
zenithpack server list
# Compare server vs pack
zenithpack server diff
# Push missing mods to server
zenithpack server push
# Pull a mod from the server
zenithpack server pull my-mod.jarzenithpack uiOpens a local dashboard at http://localhost:3000 with:
- Mod list with search, side selector, and delete
- Modrinth search to add new mods
- Update checker showing available updates per mod
- Version picker to switch or roll back any mod version
- Version pinning with custom reason (skipped by update checker)
- Server section with diff and one-click sync
ZenithManager can synchronize mods between your pack manifest and a remote Minecraft server.
How it works:
- Mods with
side: bothorside: serverare pushed to the server - Mods with
side: clientare never touched on the server - Sync deletes any JAR on the server that isn't in the manifest
- Server-only mods (anticheat, etc.) should be added to the pack with
side: server
Modes:
- SFTP — connect to any server via SSH key or password (encrypted locally with AES-256)
- Local — point to a local folder for testing before going to production
The installer is a Java JAR designed to run as a Prism Launcher pre-launch command.
- Place
zenithpack-installer.jarin the instance root (.minecraft/) - In Prism Launcher: Settings > Custom Commands > Pre-launch:
"$INST_JAVA" -jar zenithpack-installer.jar https://your-host.github.io/your-pack/pack.json
- Launch the game — mods sync automatically
- Downloads/updates mods from Modrinth CDN
- Extracts configs, resourcepacks, shaderpacks from
files.zip - Never overwrites existing config files
- Removes mods that are no longer in the manifest
- Self-updates from GitHub Releases
The core issue with packwiz: Git converts \r\n to \n in text files, breaking SHA256 hashes on 100+ config files.
ZenithManager's hybrid approach:
| Content | Distribution | Why |
|---|---|---|
| Mods | Individual downloads from Modrinth CDN | Binary files, no line-ending issue |
| Configs, resourcepacks, shaderpacks | Bundled in files.zip |
Archive preserves exact bytes, no Git conversion |
The files.zip is built at zenithpack build time and hosted as a single file. The installer downloads and extracts it — no per-file hash issues.
# 1. Build
zenithpack build --base-url https://user.github.io/my-modpack
# 2. Deploy build/ contents to GitHub Pages
# Hosted structure:
# /pack.json
# /files.zip
# /mods/ (local mods only)Made by Teyko