Skip to content

shulker.json

The project manifest. Hand-edited, committed, and read by every command.

Shulker project manifest. Lists direct mods, targets, and first-class configuration. Resolution results live in shulker.lock.

Schema: https://shulker.sh/schema/v1/manifest.json

Properties

Required properties are marked with *.

PropertyTypeDescription
$schemastringformat uri
name *stringProject name. Used in messages and as the default instance name for launchers.
pattern ^[a-z0-9][a-z0-9._-]*$
versionstringPack version shown to people, e.g. "1.0" or "2026-09". Never parsed. Used as the versionId of an exported .mrpack and in its file name.
min length 1
descriptionstringOne paragraph about the pack, shown to players. First paragraph of the ModMenu entry and, joined with note, the summary of an exported .mrpack.
min length 1
authorsstring[]Shown by ModMenu as "by ..." under the pack name. init seeds the git user.name and shulker.sh; delete entries freely.
unique items
linkslinks
minecraft *semverRangeSemver range over Minecraft version ids, e.g. "~26.2", "^26.1", or an exact version. Pre-release order is snapshot < pre < rc < release.
loader *loader
javastringOptional override. Either an absolute path to a JDK/JRE home or a semver range over the Java major version, e.g. ">=25". Omit to derive from the Minecraft version json and use the managed runtime.
min length 1
providersprovider[]Provider preference order. A single entry makes the tool single-provider.
min items 1, unique items, default ["modrinth","curseforge"]
targets *map of targetBuild targets. Each lists its override layers explicitly; paths are never inferred.
min properties 1, keys match ^[a-z][a-z0-9_-]*$
packspack[]Packs whose mods and overrides merge into this project. A pack's own lock is ignored.
modsmap of modDirect mods keyed by in-jar mod id. An empty object selects the newest release-channel file for the locked Minecraft and loader.
keys are modId, default {}
ignoreignore[]Per-pair overrides for unmet depends or matched breaks found in jar metadata.
variablesvariables
serverserver
clientclient
notenote

No other properties are allowed.

Definitions

Links shown on the pack's ModMenu entry. website, issues, and source become the Website, Issues, and Source buttons. A key ModMenu knows (discord, modrinth, curseforge, wiki, youtube, reddit, twitter, mastodon, twitch, patreon, kofi, paypal, donate, ...) uses its label; any other key is shown as written.

PropertyTypeDescription
websitestringformat uri
issuesstringformat uri
sourcestringformat uri
discordstringformat uri
modrinthstringformat uri
curseforgestringformat uri
wikistringformat uri
youtubestringformat uri
redditstringformat uri
twitterstringformat uri
mastodonstringformat uri
twitchstringformat uri
patreonstringformat uri
kofistringformat uri
paypalstringformat uri
donatestringformat uri

note

Free-text documentation. The comment substitute; ignored by the tool.

Type: string

semverRange

Type: string. pattern ^\S(.*\S)?$, min length 1

provider

Type: "modrinth" | "curseforge"

modId

In-jar mod id as declared in fabric.mod.json or neoforge.mods.toml.

Type: string. pattern ^[a-z][a-z0-9_-]{1,63}$

projectId

Provider project id. Modrinth ids are base62 strings, CurseForge ids are integers.

Type: string | integer

versionId

Provider version id. Modrinth version ids are base62 strings, CurseForge file ids are integers.

Type: string | integer

side

Type: "client" | "server" | "both"

loader

PropertyTypeDescription
type *"fabric" | "quilt" | "neoforge" | "forge"
version *semverRangeSemver range over the loader's own version. "*" selects the newest for the locked Minecraft version.
notenote

No other properties are allowed.

relativePath

Path relative to the project root, forward slashes, no leading slash. The tool rejects .. segments.

Type: string. pattern ^[^/\\], min length 1

variables

Values substituted for ${name} in *.tmpl override files and in server.properties values.

Type: map of string | number | boolean. keys match ^[A-Za-z_][A-Za-z0-9_]*$

target

PropertyTypeDescription
namestringDisplay name launchers show for this target (Prism instance name, official launcher profile name). Defaults to the manifest name.
min length 1
side *"client" | "server"Which side this target builds. Mods with side "both" are included in every target.
overrides *relativePath[]Override layers applied in order; later layers win. Pack overrides sit beneath all of these.
min items 1, unique items
buildrelativePathOutput directory. Defaults to build/<target>.
variablesvariables
notenote

No other properties are allowed.

pack

PropertyTypeDescription
source *stringLocal path, git URL, or raw manifest URL.
min length 1
refstringBranch, tag, or commit for git sources. The lock records the resolved commit.
min length 1
namestringDisplay name used in messages and requiredBy. Defaults to the last path segment of the source minus .git. Must be unique across packs.
pattern ^[a-z0-9][a-z0-9._-]*$
notenote

No other properties are allowed.

mod

PropertyTypeDescription
projectprojectIdWritten by add when the provider slug differs from the mod id or the provider is CurseForge.
pinversionIdPin to one provider version. update skips pinned mods.
channel"release" | "beta" | "alpha"Least stable channel accepted. A channel admits itself and anything more stable.
default "release"
sidesideOverrides the side derived from provider environment data.
providerproviderOverrides the provider preference list for this mod.
notenote

No other properties are allowed.

ignore

PropertyTypeDescription
rule *"depends" | "breaks"
mod *modIdThe mod whose jar metadata declares the constraint.
on *stringSubject of the constraint: a mod id or one of the built-ins minecraft, fabricloader, neoforge, java.
pattern ^[a-z][a-z0-9_-]{1,63}$
declared *stringThe range exactly as the jar declared it when this ignore was written. A jar that declares a different range makes the ignore stale and the original failure re-surfaces.
min length 1
note *stringWhy this constraint is safe to ignore. Required.
min length 1

No other properties are allowed.

player

A player by name, uuid, or both. The lock stores both after resolution.

PropertyTypeDescription
namestringpattern ^[A-Za-z0-9_]{3,16}$
uuidstringpattern ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
notenote

propertyValue

Type: string | integer | boolean

serverProperties

Keys written into server.properties. Values may reference ${variables}. Known keys are listed for completion (verified against the 26.2 table on 2026-09-10); the tool validates the full set against the locked Minecraft version.

PropertyTypeDescription
accepts-transfersboolean
allow-flightboolean
broadcast-console-to-opsboolean
broadcast-rcon-to-opsboolean
bug-report-linkstring
chat-spam-threshold-secondsinteger
command-spam-threshold-secondsinteger
difficulty"peaceful" | "easy" | "normal" | "hard"
enable-code-of-conductboolean
enable-jmx-monitoringboolean
enable-queryboolean
enable-rconboolean
enable-statusboolean
enforce-secure-profileboolean
enforce-whitelistboolean
entity-broadcast-range-percentageinteger
force-gamemodeboolean
function-permission-levelinteger
gamemode"survival" | "creative" | "adventure" | "spectator"
generate-structuresboolean
generator-settingsstring
hardcoreboolean
hide-online-playersboolean
initial-disabled-packsstring
initial-enabled-packsstring
level-namestringWorld folder name. Also selects which world under data/ is linked into the server build.
pattern ^[^/\\]+$
level-seedstring | integer
level-typestring
log-ipsboolean
management-server-allowed-originsstring
management-server-enabledboolean
management-server-hoststring
management-server-portinteger
management-server-secretstring
management-server-tls-enabledboolean
management-server-tls-keystorestring
management-server-tls-keystore-passwordstring
max-chained-neighbor-updatesinteger
max-playersinteger
max-tick-timeinteger
max-world-sizeinteger
motdstring
network-compression-thresholdinteger
online-modeboolean
op-permission-levelinteger
pause-when-empty-secondsinteger
player-idle-timeoutinteger
prevent-proxy-connectionsboolean
query.portinteger
rate-limitinteger
rcon.passwordstring
rcon.portinteger
region-file-compression"deflate" | "lz4" | "none"
require-resource-packboolean
resource-packstring
resource-pack-idstringpattern ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
resource-pack-promptstring
resource-pack-sha1string
server-ipstring
server-portinteger
simulation-distanceinteger
spawn-protectioninteger
status-heartbeat-intervalinteger
sync-chunk-writesboolean
text-filtering-configstring
text-filtering-versioninteger
use-native-transportboolean
view-distanceinteger
white-listboolean

server

PropertyTypeDescription
eulabooleaneula.txt is written only when true. serve refuses to start otherwise.
default false
memorystringHeap size passed as -Xms/-Xmx, e.g. "6G".
pattern ^[1-9][0-9]*[MmGg]$
jvmFlags"aikars" | "none"JVM flags preset used by serve. aikars applies Aikar's G1 flags (12 GB+ variant chosen from memory, -Xms set equal to -Xmx); none passes only the memory flags.
default "aikars"
jvmArgsstring[]Extra JVM arguments appended after the preset, e.g. ZGC flags.
propertiesserverProperties
playersobject
notenote

No other properties are allowed.

client

PropertyTypeDescription
optionsmap of string | number | booleanKeys written into options.txt as key:value. Other keys already in the file are left alone.
keys match ^[A-Za-z][A-Za-z0-9_.:]*$
serversobject[]Entries written into servers.dat.
notenote

No other properties are allowed.