Mod Browser

Mod Browser

Complete guide to the Mod Browser — searching, browsing, filtering, mod details, installation, dependency resolution, and provider-specific behaviour.


Browser Interface

Tab Purpose
Browse Search and discover new mods from all platforms
Installed View and manage installed mods (see "Managing Mods" guide)

Searching for Mods

How Search Works

  1. Type a mod name or keyword in the search bar
  2. Results load after a 300ms debounce (prevents excessive API calls while typing)
  3. Searches the currently selected platform only
  4. Queries are sanitised: < > { } ' " characters are stripped
  5. Results displayed as a grid of mod cards

Search Tips

Tip Example
Search by exact mod name Sodium, Create, JEI
Search by keyword optimisation, minimap, storage
Use short names ic2 instead of IndustrialCraft 2
Different platforms have different content Try multiple tabs
Empty search Shows popular/featured mods (sort depends on platform)

Platform-Specific Search Behaviour

Platform Empty Search Behaviour With Query Sort Default
Modrinth Popular mods with facets Full text search with facets Relevance
CurseForge Sort by Popularity (ID 2, descending) Sort by Featured (ID 1, descending) See Configuration guide
Modtale Browse all by game Full text search Default order

Filters

Filter Description Default
Minecraft Version Only show compatible mods Auto-detected version ("🟢 Detected: X.X.X")
Mod Loader Forge, Fabric, NeoForge, Quilt All loaders
Provider Switch platform tabs Modrinth

Version Dropdown Contents

  • Auto-detected version (if available) — "🟢 Detected: 1.21.4" prefix
  • Common versions: 1.21 (Latest), 1.20, 1.19, 1.18, 1.17, 1.16, 1.15, 1.14, 1.13, 1.12 (Popular), 1.11, 1.10, 1.9, 1.8 (Legacy), 1.7

Mod Loader by Platform

Loader Modrinth CurseForge (Enum ID) Modtale
Forge 1 Game-based
Fabric 4 Game-based
NeoForge 6 Game-based
Quilt 5 Game-based

Mod Cards

Each result shows:

Element Description
Icon Mod logo from platform CDN
Name Mod title
Author Creator's username
Summary Short description
Downloads Total across all versions
Updated Last version's publish date
🟢 Installed Green indicator if already installed

Mod Detail View

Click any mod card to open the detail panel:

  • Full description — CurseForge: HTML via enrichment endpoint /mods/{modId}/description. Modrinth: Markdown
  • Author and link to platform page (CurseForge uses getModSlug() for URL)
  • Total downloads
  • "View on [Platform]" button

Version Selection

Label Meaning
🟢 installed prefix This version is installed on your server
(Latest) Newest published version
(Popular) Most downloaded version (if different from Latest)
(Legacy) Older version

Versions cached 1 hour per mod per provider.


Installing a Mod

What Happens Step by Step

Step Detail
1. Pre-check Validates download URL exists
2. Old version check Looks for existing installation by mod ID in database
3. Download DaemonFileRepository::pull() to /mods/ directory
4. cURL fallback If pull() fails → cURL download with 60s timeout. Logged: "Error downloading mod"
5. Filename detection 3 retries: 200ms → 300ms → 500ms. Checks for mod ID in filenames. UUID prefixes (server's uuid_short) cleaned
6. JAR metadata Opens JAR (≤30 MB, 256 MB memory limit). Reads plugin.yml, fabric.mod.json, META-INF/mods.toml. On fail: "Failed to extract mod name from JAR"
7. Database save Records: provider, mod_id, mod_slug, mod_url, version_id, version_number, version_name, filename, download_url, installed_at
8. Old version cleanup If auto-replace enabled → deleteFiles() removes old version
9. Done Success: "Mod installation started". Logged: "Successfully installed mod"

Failure Notification

  • Title: "Mod installation failed"
  • Body: "Installation failed" with error details
  • Full error logged to storage/logs/laravel.log

Automatic Dependency Resolution

Modrinth Dependencies

  • dependency_type === 'required' triggers auto-install
  • Specific version_id → exact version fetched
  • No version_id → latest compatible version searched
  • Each dependency goes through full installation flow

CurseForge Dependencies

  • relationType=3 (required) triggers auto-install
  • Recursive: Dependencies of dependencies also resolved
  • Each resolved by CurseForge mod ID

Modtale Dependencies

  • Not available — Modtale API doesn't provide dependency data
  • You must install dependencies manually

Dependency Notification

"Installing X additional library mods required for this mod to function"


Troubleshooting

No Search Results

  1. Check internet: curl -I https://api.modrinth.com
  2. Check platform status (visit website directly)
  3. Click Clear Cache
  4. Broaden search terms
  5. Check version filter — wrong version hides results
  6. Try a different platform tab
  7. Check storage/logs/laravel.log
  8. CurseForge: verify API key is set

"Mod download failed"

  • Expired URL: Clear cache, re-search, retry
  • CDN down: Platform CDN temporarily unavailable → wait and retry
  • cURL fallback triggered: If primary pull() fails, 60s cURL download tried. Log: "Error downloading mod"
  • Disk full: No space on game server
  • Large file timeout: Increase request timeout in settings

"Installation failed"

  • /mods/ directory not writable → check permissions
  • Disk space full
  • Filename detection failed after 3 retries → log: "Failed to detect filename after download"
  • Database write error

"Mod identification not found!"

  • Empty pluginId when attempting install/manage
  • Re-search the mod for fresh metadata
  • Clear cache and retry

Mod Name Shows Filename Instead of Name

  • JAR metadata extraction failed (file >30 MB, or no plugin.yml/fabric.mod.json/META-INF/mods.toml)
  • Log: "Failed to extract mod name from JAR"
  • Cosmetic only — mod works correctly

CurseForge Returns "Manual Download Required"

  • Author restricted direct downloads
  • downloadUrl is empty in API response
  • Plugin shows link to CurseForge page
  • Download manually and upload via SFTP/file manager

Search Results Differ Between Platforms

  • Each platform has its own index and search algorithm
  • CurseForge sort changes with/without query (Popularity vs. Featured)
  • Modrinth uses facet-based filtering (server_side required/optional only)
  • Modtale uses 0-based pagination

Version Detection Retry

  • Click Detect Version button to retry
  • Detection uses 11 methods in sequence
  • Result cached 5 minutes — wait 5 min before retrying or clear cache