Systems
minecraft version
fabric
forge

Compatibility System

Prevents version/loader/modpack mismatches and surfaces compatibility in the browser.

Overview

Tunnely's compatibility system automatically detects and displays technical requirements for each server, preventing frustrating connection failures due to version or modpack mismatches. It supports multiple modpack platforms and custom formats.

Quick Summary

  • Detects Minecraft version, loader, modpack ID/version
  • Stores in DB and displays badges in server browser
  • Match rules: version and loader must match; modpack (if both present) must match
  • Supports CurseForge, Modrinth, and custom JSON format

How It Works

1

Tunnely automatically detects your Minecraft version, mod loader (Fabric/Forge/Quilt), and modpack ID when you start hosting.

2

For CurseForge packs, it reads the manifest.json file containing project ID and file ID.

3

For Modrinth packs, it reads the modrinth.index.json file with project ID and version ID.

4

For custom packs, you can create a tunnely-modpack.json file with your own identifiers.

5

This information is stored in the database and displayed as colored badges in the server browser.

6

The system enforces strict matching rules: Minecraft version and loader must match exactly, and if both players have modpacks, those must match too.

7

Visual indicators show compatibility at a glance - green badges indicate matches, red indicates mismatches.

Use Cases

Real-World Examples

CurseForge Modpack Format

Standard CurseForge manifest.json: { "minecraft": { "version": "1.20.1", "modLoaders": [{"id": "forge-47.1.3", "primary": true}] }, "manifestType": "minecraftModpack", "manifestVersion": 1, "name": "My Modpack", "version": "1.0.0", "files": [{"projectID": 12345, "fileID": 67890}] } Tunnely extracts: version, loader (forge-47.1.3), modpack ID from files array.

Modrinth Modpack Format

Standard Modrinth modrinth.index.json: { "formatVersion": 1, "game": "minecraft", "versionId": "abc123xyz", "name": "My Modpack", "dependencies": { "minecraft": "1.20.1", "fabric-loader": "0.15.0" }, "files": [{"path": "mods/example.jar", "hashes": {...}}] } Tunnely extracts: version, loader (fabric-0.15.0), versionId as modpack ID.

Custom Modpack Format

Create tunnely-modpack.json in .minecraft directory: { "id": "my-custom-pack", "version": "2.1.0", "name": "My Custom Modpack", "platform": "custom", "description": "Optional description" } This format works for private packs, self-hosted distributions, or any pack not on CurseForge/Modrinth.

Multi-Platform Support

To support both CurseForge and Modrinth, include both manifest.json and modrinth.index.json in your pack. Tunnely prioritizes tunnely-modpack.json if present, then Modrinth, then CurseForge. Use tunnely-modpack.json with platform field to override detection: { "id": "my-pack-unified", "version": "3.0.0", "platform": "multi", "curseforge_id": "12345", "modrinth_id": "abc123" }

Technical Details

  • Version detection uses Minecraft's version manifest and loader metadata.
  • CurseForge detection looks for manifest.json in the modpack root with fields: minecraft.modLoaders[].id, files[].projectID, files[].fileID
  • Modrinth detection looks for modrinth.index.json with fields: versionId, dependencies.minecraft, dependencies.fabric-loader or dependencies.forge
  • Custom format uses tunnely-modpack.json with fields: id (string), version (string), platform (optional: 'custom', 'curseforge', 'modrinth')
  • File search order: tunnely-modpack.json → modrinth.index.json → manifest.json
  • Compatibility checks happen both client-side (UI) and server-side (relay) for security.
  • Database stores: minecraft_version, mod_loader, modpack_id, modpack_version, modpack_platform
  • Indices on version/loader/modpack fields enable fast filtering queries.

Best Practices

  • Always verify the server's version badges before attempting to join.
  • If hosting a modpack server, ensure your pack has a proper manifest for detection.
  • For custom packs, create a tunnely-modpack.json file in your .minecraft directory.
  • Use semantic versioning (e.g., 1.0.0, 2.1.3) for modpack versions.
  • Include both CurseForge and Modrinth files if distributing on both platforms.
  • Use the search/filter features to show only compatible servers.
  • When hosting, test that your compatibility info displays correctly in the browser.

Common Issues & Solutions

  • Custom or heavily modified modpacks may not be detected automatically - add tunnely-modpack.json.
  • Version mismatches will show an error before connection attempt to save time.
  • If your modpack isn't detected, check that manifest files exist in .minecraft root.
  • Ensure JSON files are valid - use a JSON validator if detection fails.
  • Platform-specific IDs (CurseForge project ID vs Modrinth slug) are not interchangeable.

TAGS

minecraft version
fabric
forge
modpack
curseforge
modrinth