Configuration

Configuration

Complete reference for all settings, environment variables, cache behavior, and detailed provider documentation with errors.


Admin Panel Settings

Open settings via the gear icon on the Plugin Browser page.

Settings Reference

Setting Default Range Env Variable Description
Cache Duration 30 min 0–1440 min PLUGINS_CACHE_DURATION (seconds, default 1800) How long API responses are cached
Request Timeout 10 sec 1–30 sec PLUGINS_REQUEST_TIMEOUT Max wait time for API response
Plugins Per Page 20 5–100 PLUGINS_PER_PAGE Results per browse page
Auto Replace On Toggle PLUGINS_AUTO_REPLACE_VERSIONS Remove old versions on update
CurseForge API Key Text CURSEFORGE_API_KEY Required for CurseForge (password field)

All Environment Variables

Variable Default Description
PLUGINS_CACHE_DURATION 1800 Cache duration in seconds
PLUGINS_REQUEST_TIMEOUT 10 API timeout in seconds
PLUGINS_PER_PAGE 20 Plugins per browse page
PLUGINS_AUTO_REPLACE_VERSIONS true Auto-remove old versions
CURSEFORGE_API_KEY CurseForge API key (shared with Game Mods + Modpacks)

After changes: php artisan config:clear


Provider: SpigotMC / Spiget API (Detailed)

Overview

No configuration required. Largest Minecraft plugin ecosystem.

Technical Details

Property Value
API Base https://api.spiget.org/v2
Auth None required
Empty query sort -downloads at /resources
Search endpoint /search/resources/{query}
Total count X-Total response header
Icon URL https://www.spigotmc.org/{icon.url}

Download Verification

SpigotMC uses a HEAD request to check if the download URL returns an actual JAR file:

Content-Type Result
application/java-archive or similar has_direct_download: true — installs directly
text/html or other has_direct_download: false — manual download required

This check is critical because premium/restricted resources return an HTML page instead of a JAR file.

SpigotMC-Specific Notes

  • No dependency API available — dependencies must be installed manually
  • Premium resources show a link to the SpigotMC page for manual download
  • Icon URLs are relative — prefixed with https://www.spigotmc.org/
  • Some resources may have outdated Spiget data — refresh by visiting the SpigotMC page

SpigotMC-Specific Errors

Error Cause Solution
Empty results Spiget API cache stale or down Try again later, use different search terms
Download returns HTML Premium/restricted resource Download manually from SpigotMC
No version filter Spiget doesn't provide reliable version filtering Browse results may include incompatible plugins
Icon doesn't load Relative URL issue Non-functional, plugin works correctly

Provider: CurseForge / Bukkit Plugins (Detailed)

Overview

Requires free API key. Full-featured with recursive dependency resolution.

Technical Details

Property Value
API Base https://api.curseforge.com/v1
Auth x-api-key header
Class ID 5 (Bukkit Plugins) — different from Mods (9137) and Modpacks (4471)
Game ID 432 (Minecraft)
Default sort Popularity(2) if no query; Featured(1) with query
Sort 4 (Name) Sort order toggles to ascending (only ascending sort)
Max page size 50, total cap 10,000

Dependency Resolution (Recursive)

  • relationType=3 = required dependency
  • Fully recursive: Dependencies of dependencies are also resolved
  • Each dependency triggers a Filament notification
  • Dependencies installed before the main plugin

Description Enrichment

For plugins with empty descriptions in search results:

  • getModDescription() fetches /mods/{modId}/description (HTML)
  • Cached and displayed in detail view

MC Version Extraction

  • From gameVersions array filtered by \d+\.\d+ regex
  • Fallback to general version strings

CurseForge-Specific Errors

Error Cause Solution
"CurseForge API key not set" No key configured Add key in settings or CURSEFORGE_API_KEY
HTTP 403 Invalid key Regenerate at console.curseforge.com
HTTP 429 Rate limit exceeded Increase cache duration, wait
Empty download URL Author restricted downloads Download manually from CurseForge website
Description empty Enrichment API call failed Non-critical — plugin still works

Provider: Modrinth / Plugins (Detailed)

Overview

No configuration required. Server-side focused plugins.

Technical Details

Property Value
API Base https://api.modrinth.com/v2
Auth None required
Facets [["project_type:plugin"], ["categories:bukkit","categories:spigot","categories:paper"]]
Loaders filter ["bukkit","spigot","paper"]
Download Direct URL from files[0].url

Dependency Resolution

  • dependency_type === 'required' → auto-install
  • Direct version_id → exact version
  • No version_id → search latest compatible

Modrinth-Specific Errors

Error Cause Solution
No results API temporarily unavailable Check status.modrinth.com
Empty version list No server-side versions for your MC version Try different version filter
Download failed CDN URL expired Clear cache, search again

Provider: PaperMC / Hangar (Detailed)

Overview

No configuration required. Version-agnostic — no MC version filter.

Technical Details

Property Value
API Base https://hangar.papermc.io/api/v1
Auth None required
Plugin ID format owner/slug (e.g., ViaVersion/ViaVersion)
Platform priority PAPER → VELOCITY → WATERFALL (or specified variant)

Download Types

URL Type Behavior
downloadUrl (internal) Direct download — installs normally
externalUrl External link — sets requires_manual_download: true

Dependency Resolution

  • pluginDeps with required: true → auto-install
  • Only Paper platform dependencies resolved

Hangar-Specific Errors

Error Cause Solution
Plugin not found Wrong owner/slug format Plugin ID must be owner/slug
External download Author uses external hosting Download manually from linked site
Wrong platform VELOCITY plugin on PAPER server Check platform tags

Provider: GeyserMC (Detailed)

Overview

No configuration required. 6 hardcoded projects with special download handling.

The 6 GeyserMC Projects

Project Description Download Key
Geyser Bedrock-to-Java bridge spigot
Floodgate Bedrock auth integration spigot
Hurricane Performance optimizer spigot
GeyserConnect Server selector spigot
ThirdPartyCosmetics Cosmetics support spigot
EmoteOffhand Emote offhand fix spigot

Technical Details

Property Value
API Base https://download.geysermc.org/v2
Version ID format {version}-{build} (e.g., 2.4.0-670)
Icon Base64 SVG island icon — same for all projects
Download counts Hardcoded (API doesn't provide them)
Metadata cache 24 hours per project

GeyserMC-Specific Notes

  • Version-agnostic — no MC version filter shown in UI
  • Downloads bypass DaemonFileRepository::pull() entirely
  • Uses direct cURL download to temp file → upload via DaemonFileRepository::putContent()
  • Custom User-Agent header sent
  • No dependency API — dependencies must be installed manually
  • Display name is capitalized project name

GeyserMC-Specific Errors

Error Cause Solution
"GeyserMC download failed" CDN unreachable or network error Check download.geysermc.org accessibility
Wrong build Old metadata cached Wait 24 hours or clear cache
Plugin doesn't load Missing Geyser if installing Floodgate Install Geyser first — it's a dependency

Cache Behavior

Cache Prefix: MP_

What's cached TTL Key Pattern
Browse results 15 min browse_plugins__{uuid}__{provider}__{version}__{md5}__{page}
Installed plugins list 10 min plugins_server_{uuid}
Version lists 1 hour plugin_versions_cache_{uuid}_{provider}_{pluginId}
Update metadata 24 hours plugin_update__{uuid}__{pluginId}
Detected MC version 5 min minecraft_version_{uuid}
Enriched installed data 24 hours minecraft_plugins__{uuid}
Widget update check 15 min plugin_updates_{uuid}
Server plugin filenames 1 hour server_{uuid}_plugin_filenames

SafeCacheService: File-based, prefix MP_, auto-creates directories with 0755, tracks all keys for flush.


Search Behavior

Query Sanitization

Characters < > { } ' " are removed from all search queries. Version filter validated against \d+\.\d+(\.\d+)? regex.

Search Retry on Failure

If a search with version filter returns zero results, the plugin automatically retries without the version filter — expanding results to all versions.


Troubleshooting

Settings don't save

  • Check storage/ directory write permissions
  • php artisan config:clear
  • Check browser console (F12) for JS errors

Cache won't clear

  • SafeCacheService flush() iterates all tracked keys
  • If storage/framework/cache/ missing or not writable → cache operations fail
  • Error notification shows $e->getMessage()