Skip to content

Teyk0o/zenithmanager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ZenithManager

A modpack manager forged in the depths of the Overworld.

Node.js Java NeoForge License

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|
        +======================================+

Table of Contents


Features

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

Project Structure

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

Getting Started

Prerequisites

Node.js Java

Install the CLI

npm install
npm link --workspace=packages/cli

Build the Installer

cd packages/installer
./gradlew shadowJar

Output: packages/installer/build/libs/zenithpack-installer.jar


CLI Commands

Pack Management

# 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

Server Management

# 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.jar

Web Dashboard

zenithpack ui

Opens 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

Server Sync

ZenithManager can synchronize mods between your pack manifest and a remote Minecraft server.

How it works:

  • Mods with side: both or side: server are pushed to the server
  • Mods with side: client are 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

Installer Setup

The installer is a Java JAR designed to run as a Prism Launcher pre-launch command.

For Players

  1. Place zenithpack-installer.jar in the instance root (.minecraft/)
  2. In Prism Launcher: Settings > Custom Commands > Pre-launch:
"$INST_JAVA" -jar zenithpack-installer.jar https://your-host.github.io/your-pack/pack.json
  1. Launch the game — mods sync automatically

What the Installer Does

  • 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

How It Solves the Hash Problem

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.


Deployment

# 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

About

A complete Minecraft modpack manager — web dashboard, server sync via SFTP, Modrinth update checker, and auto-sync installer for Prism Launcher.

Topics

Resources

Stars

Watchers

Forks

Contributors