Kaf Modding Docs

Pack authoring

Build a standard Modrinth pack that Pastel can run as a dedicated server.

Pastel consumes the standard Modrinth .mrpack format. A pack that accurately describes its dedicated-server files does not need Pastel-specific metadata.

Pastel applies indexed server files, then shared overrides, then server overrides. A later file replaces an earlier file at the same path. Client overrides are ignored.Pastel applies indexed server files, then shared overrides, then server overrides. A later file replaces an earlier file at the same path. Client overrides are ignored.
Override order determines which file the dedicated server receives.

Archive structure

example-pack.mrpack
├── modrinth.index.json
├── overrides/
├── server-overrides/
└── client-overrides/

Use formatVersion: 1, game: "minecraft", a name, and a versionId. Set dependencies.minecraft; a modded pack should also declare exactly one loader. Each downloadable file needs at least one URL and supported hash. Pastel prefers SHA-512, followed by SHA-256 and SHA-1. When fileSize is greater than zero, the downloaded size must also match.

Paths must be clean, relative, slash-separated paths. Pastel rejects absolute paths, traversal components, backslashes, and ambiguous path components.

Dedicated-server files

Pastel installs a file unless env.server is unsupported.

env.serverInstalled
requiredYes
optionalYes; Pastel does not present a file picker.
OmittedYes
unsupportedNo

Mark client-only mods as unsupported. A client-only jar marked required or optional commonly causes dedicated-server startup failures.

Overrides

Pastel applies overrides/ first and server-overrides/ second. A server override replaces a shared override at the same path. client-overrides/ is ignored.

Jars embedded under either override layer's mods/ directory become part of the managed mod set. Prefer normal indexed files when an artifact has a stable URL; the index records its expected size and hashes without making the pack archive larger.

Keep server data out of packs

Pastel refuses indexed files under world/, but does not apply that check to overrides or custom world paths. Overrides replace existing files on refresh. Keep worlds, secrets, operator lists, and other server-owner data out of them.

Loader support

LoaderPack dependencyBehavior
Fabricfabric-loaderDownloads a launcher for the declared Minecraft and loader versions.
NeoForgeneoforgeUses an existing server launch tree or runs the official installer.
ForgeforgeUses an existing server launch tree or runs the official installer.
Quiltquilt-loaderRequires a prepared server launch tree, such as quilt-server-launch.jar; automatic installation is not available.
VanillaNoneRequires a pack-provided server.jar.

For modded packs, declare minecraft alongside exactly one loader dependency. Vanilla packs only need minecraft. For Forge, Pastel combines a loader version without a Minecraft prefix with the declared Minecraft version when resolving the installer artifact.

Forge and NeoForge use the generated unix_args.txt or win_args.txt plus user_jvm_args.txt. In Pastel 0.1.7, an existing launch tree may be reused even after changing the dependency version. Test loader and Minecraft upgrades in a fresh server directory. Quilt and vanilla packs must include any libraries needed by their supplied launcher, not just its jar.

Distribution

Server owners can install the same pack through:

  • a Modrinth slug or project page;
  • a direct HTTPS .mrpack URL;
  • a local archive or unpacked directory; or
  • a Maven coordinate and explicitly configured repository.

Maven distribution uses the normal group/artifact/version/artifact-version.mrpack layout. Provide maven-metadata.xml for latest-version resolution and interactive updates. Pastel fetches .mrpack artifacts directly and does not require a POM. It does not accept a JSON, jar, or .pastel fallback for a Maven pack. Match the index's versionId to the Maven version so installed-version reporting and updates agree.

Author checklist

  • Test the .mrpack in a new, empty directory.
  • Mark every client-only file as unsupported on the server.
  • Include strong hashes and accurate sizes.
  • Test the exact Minecraft and loader pair declared by the index.
  • Keep worlds, credentials, and server-owner data out of overrides.
  • Preview changes with pastel refresh -dry-run.
  • Stop the server before installing, refreshing, or updating a pack.

On this page