Representing Minecraft modpacks as a directed acyclic graph of individual packs stored as git repositories or files.
Find a file
2026-07-09 17:49:24 +03:00
crates Add override addition and url entry source 2026-07-09 17:49:24 +03:00
.env Modrinth pack writing 2026-07-07 15:44:44 +02:00
.gitignore Modrinth pack to packlet conversion 2026-07-07 21:42:24 +02:00
Cargo.lock Modrinth pack to packlet conversion 2026-07-07 21:42:24 +02:00
Cargo.toml Modrinth pack to packlet conversion 2026-07-07 21:42:24 +02:00
LICENSE-APACHE Add README, SPEC and licenses 2026-07-07 10:23:26 +02:00
LICENSE-MIT Add README, SPEC and licenses 2026-07-07 10:23:26 +02:00
pack.mrpack Add override addition and url entry source 2026-07-09 17:49:24 +03:00
README.md Modrinth pack to packlet conversion 2026-07-07 21:42:24 +02:00
SPEC.md Add override addition and url entry source 2026-07-09 17:49:24 +03:00

Packcomb

Represent Minecraft modpacks as a graph of reusable "packlets", that combine at install time to create a full modpack.
Read SPEC.md for details about format.
This repository contains the reference implementation of the packcomb format.

root.packlet.json

{
  "id": "example:example",
  "parents": [
    {
      "id": "example:other",
      "location": {
        "File": {
          "path": "other.packlet.json"
        }
      }
    }
  ],
  "entries": [
    {
      "path": "mods/fabricapi.jar",
      "source": {
        "Modrinth": "j4lVW85G"
      }
    }
  ]
}

other.packlet.json

{
  "id": "example:other",
  "parents": [],
  "entries": [
    {
      "path": "mods/sodium.jar",
      "source": {
        "Modrinth": "Ny3XyYle"
      }
    }
  ]
}

resolved.pack.json

{
  "entries": [
    {
      "path": "mods/sodium.jar",
      "source": {
        "Modrinth": "Ny3XyYle"
      }
    },
    {
      "path": "mods/fabricapi.jar",
      "source": {
        "Modrinth": "j4lVW85G"
      }
    }
  ],
  "packlets": [
    "example:other",
    "example:example"
  ]
}

Motivation

Making and maintaing regular modpacks is unnecessarily hard. While working on Create: Aloft, we've dealt with problems such as needing to keep track of server-only / client-only mods, applying our personal client mods on top of the regular pack, different mods being needed on different servers across the network, players's frustration with applying their client mods on top of the regular pack, working together on updating the modpack and last but not least, versioning it all.
Packcomb is designed to solve all these problems. When complete, packlets will be easily assembled from a modrint modpack, stored in a git repository for easy collaboration and versioning, and be one-click installed or updated into an instance in a launcher. Or on a server - SFTP installs are planned too.

Architecture

The packcomb reference implementation is split into 3 crates:

  • packcomb - core types and logic for packlets, entries, and resolved packs
  • packcomb-process - functions for downloading and merging packlets, and converting them into resolved packs
  • packcomb-cli - a CLI client for creating, working with, and installing packcomb packs
    A future GUI client is also planned, as is a fork of Prism Launcher with packcomb support. If this becomes popular enough, maybe it can get merged upstream.

Roadmap

  • Export to mrpack
  • Import from mrpack
  • GUI packlet splitter
  • GUI packlet installer
  • Git storage support
  • Lore storage support
  • Prism Launcher support

License

All code in this repository is dual-licensed under either:

at your option. You can use the license your prefer.