Skip to main content

Modrinth Auto Updater

The Modrinth Auto Updater is a Python application designed to automate the process of updating Minecraft modpacks using the Modrinth API. It handles version compatibility, modloader filtering, and generates both client and server modpack files in the Modrinth Pack (.mrpack) format.

Overview​

Managing Minecraft modpacks involves tracking numerous mods, each with their own version requirements and compatibility constraints. The Modrinth Auto Updater simplifies this process by:

  • Automatically checking for compatible mod updates
  • Respecting Minecraft version requirements
  • Handling modloader compatibility (Fabric, Quilt, Forge, NeoForge)
  • Generating separate client and server packs
  • Creating comprehensive changelogs
  • Backing up existing mod files

Core Features​

GUI Interface​

The application provides a graphical user interface built with Tkinter, featuring:

Modern Theme​

The interface uses a dark theme optimized for extended use, reducing eye strain during lengthy update operations. The color scheme follows modern design principles with careful contrast ratios.

Configuration Panel​

All update parameters are accessible through an intuitive configuration panel:

  • Modpack directory selection with file browser
  • Minecraft version selector
  • Modloader type dropdown (Fabric, Quilt, Forge, NeoForge)
  • Client/server pack generation toggles
  • Output directory configuration
  • Overrides folder path

Real-Time Output​

The console area displays:

  • Color-coded log messages (success in green, warnings in yellow, errors in red)
  • Progress indicators for long-running operations
  • Detailed information about each mod being processed
  • API response details for debugging

Cross-Platform Support​

The GUI works consistently across:

  • Windows (native look and feel)
  • macOS (respects system theme settings)
  • Linux (GTK compatibility)

Mod Update System​

Modrinth API Integration​

The updater communicates with the Modrinth API v2 to:

  • Query mod information and version history
  • Filter versions by game version compatibility
  • Check modloader requirements
  • Download mod files
  • Retrieve mod metadata

Version Compatibility​

The system performs sophisticated version matching:

Exact Version Matching

When Minecraft 1.21.1 is specified, it matches:

  • Versions tagged for 1.21.1 specifically
  • Versions supporting 1.21.x ranges
  • Versions with inclusive ranges containing 1.21.1

Sub-Version Support

The updater understands Minecraft's version numbering:

  • 1.21.1 is considered part of the 1.21 family
  • 1.20.4 is part of the 1.20 family
  • This allows "works with 1.21" to match "1.21.1" installations

Version Range Interpretation

Handles complex version specifications:

  • Single versions: 1.21.1
  • Ranges: >=1.20.0 <1.22.0
  • Multiple versions: [1.20.4, 1.21.0, 1.21.1]
  • Wildcard patterns: 1.21.x

Modloader Compatibility​

Different modloaders have compatibility relationships:

Fabric and Quilt

Quilt mods can use Fabric mods, but not vice versa. When using Quilt:

  • Quilt-specific mods are preferred
  • Fabric mods are acceptable fallbacks
  • Both are checked for updates

Forge and NeoForge

These are treated as separate ecosystems:

  • Forge mods only work with Forge
  • NeoForge mods only work with NeoForge
  • No cross-compatibility

Loader Detection

The system automatically detects the modloader from:

  • Index.json in the modpack
  • Existing mod files
  • User configuration

Update Process​

Discovery Phase​

The updater begins by:

  1. Parsing the modpack's index.json file
  2. Extracting mod project IDs and current versions
  3. Building a list of installed mods

Version Checking​

For each mod:

  1. Query Modrinth API for available versions
  2. Filter by Minecraft version compatibility
  3. Filter by modloader requirements
  4. Identify the latest compatible version
  5. Compare with currently installed version

Download and Installation​

When updates are found:

  1. Download new mod file to temporary location
  2. Verify file integrity (checksum)
  3. Backup existing mod file to backup directory
  4. Move new file into place
  5. Update index.json with new version information

Error Handling​

The system gracefully handles:

  • Network failures (retries with exponential backoff)
  • API rate limiting (respects rate limit headers)
  • File system errors (permission issues, disk full)
  • Corrupted downloads (checksum verification)
  • Missing dependencies (warns but continues)

Client/Server Pack Generation​

Pack Structure​

Generated .mrpack files follow the Modrinth specification:

modpack.mrpack (zip file)
├── modrinth.index.json # Mod list and metadata
└── overrides/ # Custom files
├── config/ # Configuration files
├── resourcepacks/ # Resource packs
└── ... # Other custom content

Client Pack Generation​

Client packs include:

  • All client-side mods
  • Client-and-server mods
  • Client-only resource packs
  • Client configuration files

Environment tags are set appropriately:

  • client: Client-only mods
  • both: Works on client and server

Server Pack Generation​

Server packs filter for:

  • Server-side mods only
  • Server-and-client mods
  • Server configuration files

Client-only mods are excluded:

  • Minimap mods
  • Shader mods
  • Client-side performance mods
  • Audio enhancement mods

Environment Detection​

The system analyzes mod metadata to determine environment compatibility:

  • Checks Modrinth mod environment tags
  • Examines mod capabilities
  • Respects manual overrides in configuration

Overrides Folder​

Custom content in the overrides folder is included in generated packs:

  • Config files for mods
  • Custom resource packs
  • Custom data packs
  • World generation configurations
  • Custom scripts

Reporting System​

Terminal Output​

The console displays color-coded information:

[✓] Updated mod_name from 1.0.0 to 1.1.0
[!] No update found for stable_mod (current: 2.0.0)
[✗] Failed to check another_mod: API timeout

Colors:

  • Green: Successful operations
  • Yellow: Warnings or no updates available
  • Red: Errors or failures

Changelog Generation​

A Markdown changelog is generated with:

Summary Statistics

# Modpack Update - 2026-02-07

- Total mods checked: 150
- Mods updated: 23
- Mods unchanged: 125
- Errors: 2

Detailed Update List

For each updated mod:

## Updates

### Mod Name
- **Old Version**: 1.0.0 → **New Version**: 1.1.0
- **Changelog**:
- Fixed crash with X feature
- Added support for Y
- Performance improvements

Error Report

Lists any mods that couldn't be updated with reasons:

## Errors

### Failed Mod
- **Error**: Connection timeout after 30 seconds
- **Action**: Retry later or check manually

Update Summary​

The final summary displays:

  • Time taken for the update process
  • Bandwidth used for downloads
  • Number of files backed up
  • Success rate percentage

Installation and Setup​

System Requirements​

  • Python 3.8 or higher
  • Internet connection for API access
  • Sufficient disk space for backups and downloads

Installation Process​

Automated Setup​

Windows​
setup.bat

This script:

  • Creates a virtual environment
  • Installs dependencies
  • Sets up desktop shortcuts
  • Configures file associations
Linux/macOS​
chmod +x setup.sh
./setup.sh

This script:

  • Checks Python version
  • Creates virtual environment
  • Installs dependencies
  • Sets up launcher scripts

Manual Installation​

For more control over the setup:

python -m venv venv

# Activate virtual environment
# Windows:
venv\Scripts\activate
# Linux/macOS:
source venv/bin/activate

# Install dependencies
pip install -r requirements.txt

Dependencies​

The application requires these Python packages:

  • requests: HTTP library for API communication
  • tkinter: GUI framework (usually included with Python)
  • typing-extensions: Type hint support for older Python versions

All dependencies are listed in requirements.txt with pinned versions for reproducibility.

Usage Modes​

GUI Mode​

Launching the GUI​

Multiple methods available:

# Universal launcher (auto-detects best mode)
python launcher.py

# Explicit GUI launch
python launcher.py --gui

# Direct GUI script
python run_gui.py

# Platform-specific launchers
./run_gui.sh # Linux/macOS
run_gui.bat # Windows

GUI Workflow​

  1. Select Modpack: Browse to your modpack directory or .mrpack file
  2. Configure Settings: Set Minecraft version, modloader type
  3. Choose Outputs: Enable client/server pack generation if needed
  4. Start Update: Click the update button
  5. Monitor Progress: Watch real-time console output
  6. Review Results: Check the changelog and summary

GUI Features​

  • Live Console: Real-time updates during processing
  • Scrollable Output: Review long log histories
  • Copy Support: Select and copy log messages
  • Status Bar: Shows current operation and progress
  • Cancel Button: Stop long-running operations

Command Line Mode​

For automation, scripting, or server environments:

Basic Update​

python update_modpack.py --modpack-dir /path/to/modpack

Generate Client Pack​

python update_modpack.py \
--modpack-dir /path/to/modpack \
--client

Generate Server Pack​

python update_modpack.py \
--modpack-dir /path/to/modpack \
--server

Custom Overrides​

python update_modpack.py \
--modpack-dir /path/to/modpack \
--overrides-folder custom_files \
--client \
--server

Command Line Options​

  • --modpack-dir: Path to modpack folder or .mrpack file (required)
  • --client: Generate client .mrpack file
  • --server: Generate server .mrpack file
  • --overrides-folder: Folder with custom files to include (default: overrides)

Automated Mode​

For scheduled updates or CI/CD integration:

Cron Job Example (Linux)​

# Update modpack daily at 3 AM
0 3 * * * /path/to/venv/bin/python /path/to/update_modpack.py --modpack-dir /path/to/modpack >> /var/log/modpack-update.log 2>&1

Windows Task Scheduler​

Create a scheduled task that runs:

"C:\Path\To\venv\Scripts\python.exe" "C:\Path\To\update_modpack.py" --modpack-dir "C:\Path\To\Modpack"

CI/CD Integration​

GitHub Actions example:

name: Update Modpack
on:
schedule:
- cron: '0 0 * * 0' # Weekly on Sunday
workflow_dispatch:

jobs:
update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.8'
- name: Install dependencies
run: pip install -r requirements.txt
- name: Update modpack
run: python update_modpack.py --modpack-dir ./modpack --client --server
- name: Commit changes
run: |
git config user.name "Bot"
git config user.email "bot@example.com"
git add .
git commit -m "Update mods" || echo "No changes"
git push

Configuration​

Modpack Structure​

The updater expects this structure:

modpack/
├── modrinth.index.json # Mod definitions
├── overrides/ # Custom files
│ ├── config/
│ ├── resourcepacks/
│ └── ...
└── mods/ # Downloaded mod files (auto-managed)

Index.json Format​

The modrinth.index.json file contains:

{
"formatVersion": 1,
"game": "minecraft",
"versionId": "1.0.0",
"name": "My Modpack",
"summary": "An awesome modpack",
"files": [
{
"path": "mods/example-mod-1.0.0.jar",
"hashes": {
"sha512": "abc123...",
"sha1": "def456..."
},
"env": {
"client": "required",
"server": "required"
},
"downloads": [
"https://cdn.modrinth.com/data/PROJECT_ID/versions/VERSION_ID/example-mod-1.0.0.jar"
],
"fileSize": 1048576
}
],
"dependencies": {
"minecraft": "1.21.1",
"fabric-loader": "0.15.0"
}
}

Environment Variables​

Optionally configure via environment variables:

  • MODRINTH_API_KEY: API key for higher rate limits (optional)
  • MODPACK_DIR: Default modpack directory
  • DOWNLOAD_THREADS: Number of concurrent downloads (default: 5)

Advanced Features​

Backup Management​

Automatic Backups​

Before updating, mods are backed up to:

modpack/backups/YYYY-MM-DD_HH-MM-SS/

Each backup is timestamped and contains:

  • Original mod files
  • Original index.json
  • Backup metadata

Backup Retention​

Configure automatic cleanup:

# Keep last 5 backups
BACKUP_RETENTION_COUNT = 5

# Keep backups from last 30 days
BACKUP_RETENTION_DAYS = 30

Manual Restore​

To restore from a backup:

python restore_backup.py --backup-dir backups/2026-02-07_03-00-00

Rate Limiting​

The updater respects Modrinth API rate limits:

  • Checks rate limit headers in responses
  • Automatically throttles requests when approaching limits
  • Implements exponential backoff for 429 responses
  • Caches API responses to minimize requests

Dependency Resolution​

Automatic Dependency Detection​

The updater can:

  • Detect required dependencies for mods
  • Warn about missing dependencies
  • Optionally download required dependencies

Conflict Detection​

Identifies potential conflicts:

  • Mods that shouldn't be used together
  • Version incompatibilities
  • Duplicate functionality

Custom Filters​

Exclude Specific Mods​

Create a blacklist file:

{
"excluded_mods": [
"project-id-1",
"project-id-2"
]
}

Pin Specific Versions​

Prevent certain mods from updating:

{
"pinned_mods": {
"project-id-3": "1.0.0",
"project-id-4": "2.5.1"
}
}

Troubleshooting​

Common Issues​

API Connection Failures​

Symptoms:

  • Timeout errors
  • Connection refused messages
  • 503 Service Unavailable

Solutions:

  • Check internet connection
  • Verify Modrinth API status
  • Wait and retry (may be temporary outage)
  • Check firewall settings

Version Compatibility Issues​

Symptoms:

  • No updates found for mods that have updates
  • "No compatible version" messages

Solutions:

  • Verify Minecraft version is correct
  • Check modloader type matches your setup
  • Look for beta/alpha versions if stable versions are missing
  • Check mod's Modrinth page manually

File Permission Errors​

Symptoms:

  • "Permission denied" when writing files
  • "Access denied" when creating backups

Solutions:

  • Run with appropriate permissions
  • Check directory ownership
  • Ensure disk isn't full
  • Verify antivirus isn't blocking access

GUI Won't Launch​

Symptoms:

  • Window doesn't appear
  • Crashes immediately
  • Import errors for tkinter

Solutions:

  • Ensure Python includes tkinter (python -m tkinter)
  • Install tk package (Linux: sudo apt-get install python3-tk)
  • Check Python version is 3.8+
  • Try command-line mode as fallback

Debug Mode​

Enable verbose logging:

python update_modpack.py --modpack-dir /path/to/modpack --verbose

This outputs:

  • API request/response details
  • File operations
  • Decision logic
  • Timing information

Validation​

Verify modpack integrity:

python validate_modpack.py --modpack-dir /path/to/modpack

Checks for:

  • Valid index.json format
  • File existence and checksums
  • Dependency satisfaction
  • Environment tag correctness

Best Practices​

Regular Updates​

  • Run updates weekly to stay current
  • Test updates in a development environment first
  • Keep backups before major version changes
  • Review changelogs for breaking changes

Version Control​

  • Keep modpack definition in version control (Git)
  • Exclude downloaded mod files (large binary files)
  • Include index.json and configuration
  • Track changelog files

Testing​

Before deploying updates:

  1. Update a test instance
  2. Launch Minecraft and verify loading
  3. Test critical functionality
  4. Check for console errors
  5. Verify mod compatibility

Documentation​

Maintain documentation for your modpack:

  • Required Minecraft version
  • Modloader and version
  • Known issues
  • Custom configuration notes
  • Update history

Security Considerations​

API Key Protection​

If using an API key:

  • Never commit API keys to version control
  • Use environment variables
  • Rotate keys periodically
  • Monitor API key usage

Download Verification​

The updater verifies downloads:

  • Checks SHA-512 checksums
  • Validates file sizes
  • Compares against Modrinth metadata

Safe Execution​

  • Run with minimal required permissions
  • Use virtual environment isolation
  • Review downloaded files if concerned
  • Keep Python and dependencies updated

Future Enhancements​

Planned features include:

  • Mod dependency auto-installation
  • Multi-pack management
  • Update scheduling interface
  • Mod recommendation system
  • Performance profiling
  • Automated testing integration

Community and Support​

Getting Help​

  • GitHub Issues: Bug reports and feature requests
  • Documentation: This guide and README
  • Modrinth Documentation: API reference
  • Community Forums: General discussion

Contributing​

Contributions welcome:

  • Bug fixes
  • Feature implementations
  • Documentation improvements
  • Testing and feedback

Follow the contribution guidelines in CONTRIBUTING.md.

License​

The Modrinth Auto Updater is released under the MIT License, allowing free use, modification, and distribution with attribution.