Skip to content

A search aggregator for finding Minecraft server plugins on Spigot, Modrinth, and Hangar.

License

Notifications You must be signed in to change notification settings

Frumple/mc-plugin-finder

Repository files navigation

MC Plugin Finder

A search aggregator for finding Minecraft server plugins on Spigot, Modrinth, and Hangar.

mc-plugin-finder-screenshot

Elevator Pitch

As a Minecraft server admin, have you ever been annoyed when trying to find a plugin? Do I have to search for it on Spigot? Or maybe it's on Modrinth? Or Hangar? Then you have to check if the plugin has been recently updated or supports your Minecraft version. And on top of all that, the plugin developer might have only uploaded their latest version on some platforms but not others.

What a mess.

MC Plugin Finder seeks to solve this problem by being the one-stop shop for searching all three of these platforms simultaneously, thanks to their public APIs. You can filter and sort your search results as desired, and you can compare versions of the same plugin on each platform to ensure that you are getting the latest version.

How it Works

MC Plugin Finder has two main components: The ingest tool and the web app.

MC Plugin Finder drawio

Ingest Tool

The ingest tool is a CLI application that retrieves plugin project data from the Spiget API (for Spigot), Modrinth API, and Hangar API. The tool runs daily to update the database with the latest plugin information. It also considers projects from different plugin repositories to be the same if they share the same source code repository URL.

For example, suppose there was a project named "Foo" on Spigot and another project named "Bar" on Modrinth, and both projects have https://github.com/foo/foo as their source code repository URL. Both projects would be considered the same on MC Plugin Finder, even though their project names are different.

On the other hand, if there were two projects named "Baz" on Spigot and Modrinth each, but the plugin developer forgot to add a source code URL to one of these plugin repositories, then these projects would not be considered be the same on MC Plugin Finder, even though their project names match.

Examples illustrated:

Spigot Plugin Name Spigot Plugin Source URL Modrinth Plugin Name Modrinth Plugin Source URL Considered the same plugin by MC Plugin Finder
Foo https://github.com/foo/foo Bar https://github.com/foo/foo ✔️
Baz https://github.com/baz/baz Baz N/A

MC Plugin Finder will only recognize URLs from these source code repository hosts:

Web App

The web app allows users to search the database for plugins.

The MC Plugin Finder hosted infrastructure runs an instance of imageproxy to cache plugin project icons from Modrinth and Hangar as they are requested by users. This reduces the load on the Modrinth and Hangar CDNs, and provides improved image loading performance. Icon data for Spigot-hosted plugins are provided directly by the Spiget API and stored in the database, so no proxy or caching is needed in that case.

Development Setup

Rust

Install rustup and the latest version of Rust.

Add the wasm32 target:

  • rustup target add wasm32-unknown-unknown

Install Cargo extensions:

  • cargo install cornucopia
  • cargo install cargo-nextest
  • cargo install cargo-leptos
  • cargo install refinery_cli

Build the workspace:

  • cargo build --workspace

PostgreSQL

Ensure that you have Docker or Podman installed on your system. For more details, see the Cornucopia installation instructions.

Set the database url in the .env file as desired:

MCPF_DATABASE_URL=postgres://postgres:postgres@localhost:5432/mc_plugin_finder

Set the MCPF_DATABASE_URL variable in your environment. This varies depending on your operating system.

Run the migrations:

  • refinery migrate -e MCPF_DATABASE_URL

Run the ingest tool to populate the database, starting with these commands:

  • ingest populate spigot authors
  • ingest populate spigot resources
  • ingest populate modrinth projects
  • ingest populate hangar projects

Optionally, you may populate plugin versions as well (However, note that populating Spigot versions takes several hours):

  • ingest populate spigot versions
  • ingest populate modrinth versions
  • ingest populate hangar versions

After populating all data, run the ingest tool again to fix some errors in upstream resources and projects:

  • ingest --fix

Run the ingest tool yet again to refresh the common projects:

  • ingest --refresh

The database can then be later updated using these commands:

  • ingest update spigot resources
  • ingest update modrinth projects
  • ingest update hangar projects

For daily updates in a live environment, this command is used:

  • ingest update all --fix --refresh

Commands

After making any changes to queries, regenerate your cornucopia.rs file:

  • cornucopia -d src/database/cornucopia.rs schema schema.sql

Run tests:

  • cargo nextest run --workspace

Run the web server:

  • cargo leptos watch

Major Dependencies

  • Cornucopia - Rust code generator for PostgreSQL queries.
  • Leptos - Full-stack isomorphic web framework.

Attributions

License

Copyright © 2025 Frumple

MC Plugin Finder is provided under the GNU Affero General Public License 3.0.

MC Plugin Finder is not an official Minecraft service, and is not approved or associated with Mojang, Microsoft, SpigotMC, Modrinth, or PaperMC.