GDLauncher logo

Modpack マニフェスト形式

なぜ知る必要があるか

通常 Modpack アーカイブの中身を知る必要はありません。しかし、インストール中にトラブルがあると「manifest」「invalid manifest format」「manifest missing field」「manifest version unsupported」といったメッセージが表示され、それらが何を指すか知りたくなります。共有用にパックを作るとき、あるいは同じパックが片方のランチャーではきれいに入って別のランチャーでは壊れる原因を探るときにも有用です。

GDLauncher は 3 種類の形式を読み書きします:

  • CurseForge (.zip、内部に manifest.json)。
  • Modrinth (.mrpack、内部に modrinth.index.json)。
  • GDLauncher (.gdlpack、内部に gdlpack.json)。

3 つとも内部はプレーンな ZIP アーカイブ。拡張子はどのマニフェストスキーマを期待すべきかの目印にすぎません。

Modpack アーカイブの中身

3 形式とも全体的な構造は同じ:

mypack.{zip,mrpack,gdlpack}/
├── <manifest>.json       ← 形式ごとのマニフェスト
├── overrides/            ← 同梱の設定、スクリプト、任意のスタートワールド
│   ├── config/
│   ├── scripts/
│   └── ...
└── modlist.html          ← (CurseForge のみ、任意、人間用 Mod リスト)

マニフェストがランチャーのパックインストールに必須な唯一のファイル。overrides フォルダーは出来上がるインスタンスに展開されるコンテンツ。

CurseForge: manifest.json

{
  "minecraft": {
    "version": "1.20.1",
    "modLoaders": [{ "id": "forge-47.2.0", "primary": true }]
  },
  "manifestType": "minecraftModpack",
  "manifestVersion": 1,
  "name": "Example Pack",
  "version": "1.0.0",
  "author": "someone",
  "files": [
    { "projectID": 238222, "fileID": 5246076, "required": true }
  ],
  "overrides": "overrides"
}

主要フィールド:

  • minecraft.version: パックがターゲットとする Minecraft バージョン。
  • minecraft.modLoaders: どのローダーとどのバージョン (フォーマットは <loader>-<version>)。
  • files: 各 Mod は CurseForge projectIDfileID で参照。GDLauncher がこれらを CurseForge API で解決してダウンロード。
  • overrides: zip 内のフォルダー名で、Mod ダウンロード完了後にその中身がインスタンスへコピーされる。

projectIDfileID の Mod が CurseForge 上から消えている (作者削除) と、その Mod について「file not found」エラーでインストール失敗。

Modrinth: modrinth.index.json

{
  "formatVersion": 1,
  "game": "minecraft",
  "versionId": "1.0.0",
  "name": "Example Pack",
  "dependencies": {
    "minecraft": "1.21.1",
    "fabric-loader": "0.16.5"
  },
  "files": [
    {
      "path": "mods/sodium-fabric-0.6.0.jar",
      "hashes": { "sha1": "...", "sha512": "..." },
      "env": { "client": "required", "server": "unsupported" },
      "downloads": [
        "https://cdn.modrinth.com/data/AANobbMI/versions/.../sodium.jar"
      ],
      "fileSize": 1234567
    }
  ]
}

CurseForge との主な違い:

  • dependencies で Minecraft とローダーバージョンを直接宣言 (ネストオブジェクトなし)。
  • files エントリに 正確なダウンロード URLハッシュ が含まれ、メタデータ API 呼び出しなしでインストール可能。
  • 各ファイルがクライアント/サーバー/両方のどこで必須かを env で宣言。

形式がシンプルでオフライン対応しやすい (URL が埋め込まれている)。より厳格で、ハッシュ不一致は警告ではなくインストール拒否。

GDLauncher: gdlpack.json

GDLauncher 独自のパック形式は、Export InstanceGDLauncher .gdlpack を選んだときに GDLauncher が書き出す形式。決定的な特徴: 各 Mod はプラットフォーム固有 ID や URL ではなく、コンテンツハッシュだけで識別されます。GDLauncher がインストール時に各ハッシュを CurseForge と Modrinth に対して解決し、ファイルが実際にあるプラットフォームからダウンロードします。

なぜ ID や URL ではなくハッシュなのか

  • 1 つのソースでクロスプラットフォーム。 CurseForge と Modrinth 両方にある Mod は、各サイトで ID が異なる。.gdlpack は気にしない。1 つのハッシュリストで両方に対応。
  • URL 腐敗なし。 Modrinth CDN URL はコンテンツアドレス指定で安定だが、URL を埋め込むとダウンロード元が固定される。ハッシュなら片方のプラットフォームが落ちていてもフォールバック可能。
  • 構造的な検証。 mods/ に書き込まれる全バイトがマニフェストのハッシュと照合される。別の JAR をこっそり差し替える手段はありません。

アーカイブ構造

mypack.gdlpack/
├── gdlpack.json          ← マニフェスト
├── .gdl/
│   └── icon.png          ← 埋め込みパックアイコン (任意)
└── overrides/            ← 同梱ファイル (設定、スクリプト、解決不能 Mod)
    ├── config/
    └── ...

マニフェストは直下。.gdl/ フォルダーにはランチャーが埋め込むメタデータ (現状はアイコンのみ)。overrides は CurseForge と同じで、Mod 解決後の出来上がりインスタンスに展開されます。

最小マニフェスト

{
  "formatVersion": 1,
  "name": "Example Pack",
  "createdAt": "2026-05-11T10:30:00Z",
  "dependencies": {
    "minecraft": "1.20.1",
    "modloaders": [
      { "type": "forge", "version": "47.2.0", "primary": true }
    ]
  },
  "entries": [],
  "overrides": "overrides"
}

ロードに必須なのは formatVersionnamecreatedAtdependencies.minecraftentriesoverrides のみ。

フルマニフェスト (注釈付き)

{
  "formatVersion": 1,
  "name": "Example Pack",
  "version": "1.0.0",
  "summary": "A short pack tagline",
  "author": "Pack Author",
  "createdAt": "2026-05-11T10:30:00Z",
  "icon": ".gdl/icon.png",
  "dependencies": {
    "minecraft": "1.20.1",
    "modloaders": [
      { "type": "forge", "version": "47.2.0", "primary": true }
    ]
  },
  "entries": [
    {
      "type": "platform",
      "hashes": {
        "sha512": "abc...",
        "sha1": "def...",
        "murmur2": 123456789
      }
    },
    {
      "type": "optional",
      "description": "Shader support - skip for low-end GPUs",
      "platforms": [
        { "sha512": "xyz...", "sha1": "uvw...", "murmur2": 987654321 }
      ],
      "overridePaths": [
        "config/iris",
        "shaderpacks/default"
      ]
    },
    {
      "type": "optional",
      "description": "Hardcore difficulty preset",
      "overridePaths": ["config/hardcore"]
    }
  ],
  "overrides": "overrides",
  "serverOverrides": null,
  "clientOverrides": null,
  "source": {
    "platform": "curseforge",
    "projectId": 12345,
    "fileId": 67890,
    "name": "Original Pack",
    "url": null
  }
}

トップレベルフィールド

フィールド必須意味
formatVersionintegerはいマニフェストスキーマバージョン。現状は常に 1
namestringはいパック表示名。インポート時のデフォルトインスタンス名。
versionstringいいえパックバージョン (semver 推奨、例: 1.0.02.1.0-beta.1)。
summarystringいいえ一行のキャッチフレーズ。
authorstringいいえパック作者またはチーム。
createdAtRFC 3339 タイムスタンプはいアーカイブをエクスポートした日時。
iconstringいいえアーカイブ内のアイコンファイルへのパス (例: .gdl/icon.png)。
dependenciesobjectはいMinecraft と Mod ローダーの要件 (下記参照)。
entriesarrayはいプラットフォームファイルとオプション機能 (下記参照)。overrides のみのパックなら空配列も有効。
overridesstringはい (デフォルトは "overrides")インスタンスへ展開するアーカイブ内ディレクトリ名。
serverOverridesstringいいえサーバー専用 overrides のディレクトリ。
clientOverridesstringいいえクライアント専用 overrides のディレクトリ。
sourceobjectいいえCurseForge / Modrinth パックから派生した場合、元パックを指す (下記参照)。

dependencies

{
  "minecraft": "1.20.1",
  "modloaders": [
    { "type": "forge", "version": "47.2.0", "primary": true }
  ]
}
  • minecraft: 必須の Minecraft バージョン (例: 1.20.11.21.4、スナップショットなら 25w20a)。
  • modloaders: 0 個以上のローダーエントリ。各エントリ:
    • type: forgeneoforgefabricquilt のいずれか (小文字)。
    • version: パックがビルドされた正確なローダーバージョン。
    • primary: 複数列挙時の推奨ローダーを示す (例: Fabric と Quilt の両方に対応するパック)。

バニラパックは modloaders が空配列。

entries

type フィールドで識別される 2 種類のエントリ:

platform, ハッシュ経由で解決される必須 Mod:

{
  "type": "platform",
  "hashes": {
    "sha512": "...",
    "sha1": "...",
    "murmur2": 1234567890
  }
}

3 つのハッシュすべてが必須。解決時にそれぞれ用途が異なります:

ハッシュ用途
sha512Modrinth 解決 (Modrinth の version_file エンドポイント)、ダウンロードファイルの主要整合性チェック。
sha1Modrinth 解決 (フォールバック)、起動時に Minecraft 自身がファイル検証で使用。
murmur2CurseForge 解決 (CurseForge の fingerprints エンドポイント)。

インストール時、ランチャーはまず Modrinth (sha512 ルックアップ) を試し、CurseForge (murmur2 フィンガープリント) にフォールバック、両方になければ当該エントリを失敗とします。解決されたファイルは常に応答したプラットフォームからダウンロードされます。

optional, ユーザーが含めるか除外するか選べる、スキップ可能な Mod / オーバーライドパスのグループ:

{
  "type": "optional",
  "description": "Shader support - skip for low-end GPUs",
  "platforms": [
    { "sha512": "...", "sha1": "...", "murmur2": 1234567890 }
  ],
  "overridePaths": [
    "config/iris",
    "shaderpacks/default"
  ]
}
  • description: インポートプレビューでユーザーに表示され、機能を含めるか判断する材料。
  • platforms: この機能を含めたときだけダウンロードされる 0 個以上のハッシュエントリ。
  • overridePaths: この機能を含めたときだけ展開される overrides/ 内の 0 個以上のパス (ファイルかフォルダー)。パスは overrides/ からの相対。

機能はプラットフォームファイルだけ、overrides だけ、両方、いずれも可能。関連する任意コンテンツのまとめ方として使えます: シェーダー Mod とその設定、設定のみのハードコア難易度プリセット、任意のリソースパックなど。

source

既存の CurseForge / Modrinth Modpack インスタンスからエクスポートされた場合、GDLauncher は出処を記録します:

{
  "platform": "curseforge",
  "projectId": 12345,
  "fileId": 67890,
  "name": "Original Pack",
  "url": null
}

または

{
  "platform": "modrinth",
  "projectId": "AANobbMI",
  "versionId": "abc123",
  "name": "Original Pack",
  "url": null
}

情報用で、ランチャーはこれを使ってダウンロードはしません (それは entries 配列の役目)。公開パックの派生物が元パックへのアトリビューションを保つために存在します。

バンドル vs マニフェストのみエクスポート

.gdlpack にエクスポートするとき、エクスポートウィザードの Bundle Addons トグルで内容物の配置が決まります:

  • バンドル OFF (マニフェストのみ)。 GDLauncher が CurseForge / Modrinth で解決できる各 Mod は entriesplatform エントリに。実際の JAR はアーカイブに 含まれません。受け手のランチャーがインポート時にプラットフォームから再ダウンロード。GDLauncher が解決できない Mod (手動で投げ込んだ JAR など) はフォールバックとして overrides/mods/ にバンドルされます。結果: 小さなアーカイブ、受け手はインストール時にネット必須。
  • バンドル ON (自己完結)。 platform エントリは出力されず、全 Mod が overrides/mods/ にコピー。結果: 大きなアーカイブ (数百 MB から数 GB)、Minecraft アセットがキャッシュ済みならオフラインでインストール可能。

リソースパックとシェーダーパックも同じ振る舞い: バンドル OFF なら解決可能なものは platform エントリ、バンドル ON なら全て直接バンドル。

横並び比較: 3 形式

プロパティCurseForge .zipModrinth .mrpackGDLauncher .gdlpack
マニフェストファイル名manifest.jsonmodrinth.index.jsongdlpack.json
Mod 識別CurseForge プロジェクト + ファイル IDダウンロード URL + ハッシュコンテンツハッシュのみ
解決元CurseForge APIマニフェスト内 URLCurseForge Modrinth (応答した方)
オフラインインストール不可 (CDN 必須)可能 (URL 自体は CDN 必須かも)Bundle Addons ON なら可能
オプション機能Mod ごとに required: falseファイルごとに env (client/server)専用 optional エントリで複数ファイル可
オーバーライドフォルダーoverrides/ファイルごとのパスoverrides/ (設定可)
サーバー専用ファイル別パックenv.serverserverOverrides ディレクトリ
アイコン外部外部.gdl/icon.<ext> に埋め込み
ソース追跡なしなしsource フィールド
移植性最広 (ほぼ全ランチャー対応)Modrinth 対応ランチャーGDLauncher

Overrides の詳細

マニフェストが overrides フォルダーや client-required としてマークされたパックファイルを参照すると、ランチャーは Mod 解決ステップ後にそれらをインスタンスへ展開します。パックはこれで以下を同梱できます:

  • デフォルト Mod 設定 (誰がインストールしても同じ初期体験になる)。
  • KubeJS / CraftTweaker スクリプト。
  • スタートワールド (たまに)。
  • パックが有効化を期待するリソースパック。
  • パック向けに調整された options.txt

Override は自動生成デフォルトより優先されますが、後でプレイヤーが手動で変えたものには負けます。GDLPack はさらに serverOverridesclientOverrides ディレクトリをサポートし、片側だけに配置すべきファイル (一致するクライアントとサーバーのバンドルを配布するパック用) に便利です。

マニフェストが古くなるとき

パックマニフェストはパック作者が最後に公開したスナップショット。マニフェスト構築後にソースプラットフォームから参照先 Mod が削除されると、そのパックバージョンのインストールは作者が新バージョンを公開するまで失敗します。古いパックバージョンはきれいに入るのに新しいバージョンが壊れるのはこのケース: 新バージョンが現在利用できないものを参照しています。

修正はパック作者側の作業で、ランチャーは与えられたマニフェスト通りにしか動けません。GDLPack はこの点で部分的な優位を持ちます: 単一プラットフォームに縛られないため、Mod が CurseForge から消えても Modrinth に残っていれば (逆も同様)、同じ entries 配列は依然解決します。

自分でマニフェストを読む

特別なツール不要です。mypack.mrpackmypack.gdlpackmypack.zip に改名、任意のアーカイブツールで開き、中の JSON ファイル (modrinth.index.json または gdlpack.json) を見るだけ。CurseForge .zipmanifest.json も同様。3 つともプレーン JSON、テキストエディタで読めます。

パックを作る

共有用にパックを作る場合、最も簡単な道は GDLauncher でインスタンスを構築し、Export Instance (右クリック → Export Instance) を使うこと。エクスポートウィザードで出力形式を選べます: CurseForge .zip、Modrinth .mrpack、または GDLauncher 独自の .gdlpack。受け手も GDLauncher を使い、オプション機能や埋め込みアイコンが欲しいなら .gdlpack。クロスランチャー互換性を最大化したいなら .zip