Skip to content

Configuration

LlaGuiTo edited this page Oct 4, 2026 · 1 revision

Configuration

Applies to SKD Menu 1.0.0 for Minecraft 1.21.1, and to 1.2.5 for 26.2.

Where the config lives

<gamedir>/config/skd_menu/menu.json      # the menu itself, generated on first launch
<gamedir>/config/skd_menu/menu-common.toml  # two switches

menu.json is created with a complete default layout the first time you launch with the mod installed. Every recognised button ID is already listed, so you can see what exists without guessing.

On 26.2 only, the loading screen has its own file:

<gamedir>/config/skd_menu/loading.json

When changes apply

By default the JSON is read once, at game launch. To see a change, restart Minecraft.

Set reloadJsonOnTitle = true in menu-common.toml and the file is re-read every time the title screen initialises — on window resize, or on returning to the title screen from a world or server.

It does not reload live while the title screen sits open. With the option enabled, resizing the window a little is the fastest way to preview a change.

Coordinates: percentages, not pixels

This is the single most important thing to know.

x and y are percentages, 0–100, of the window's width and height.

  • Origin (0, 0) is the top-left of the window.
  • x grows to the right, y grows downwards.
  • x is a percentage of the current width; y of the current height.

So "x": 50 puts the element halfway across the window whether it is 800 pixels wide or 3000. The position is recalculated on each title-screen open, so your layout stays proportional instead of stranding elements in the corner.

Sizes are pixels. width and height are never percentages — an element does not need to scale with the window the way its position does.

Sentinel values

Two values are not percentages:

Value Meaning
-1 Automatic. The mod computes the position from the current window size, like the vanilla layout.
-999 Hidden. A custom button left at -999 is not created at all.

Anything >= 0 is read as a fixed percentage.

Images: three interchangeable formats

Every image field — background, logos, title, overlays, button images — accepts all three, and the mod works out which is which:

  1. modid:path/to/file.png — a texture bundled in the mod's JAR or served by a resource pack. For example skd_menu:textures/gui/bg_main_default.png. The efficient option: no disk or network access per frame.

  2. A file path — absolute, or relative to the game's launch directory. For images you do not want to package: C:\Users\tu\Pictures\fondo.png.

  3. http:// or https:// — a direct URL to an image file. Downloaded once in the background, never blocking the render, and cached in memory for the rest of the session.

    If the download fails or has not finished, the black fallback is used until it is ready. That is worth knowing: a slow or unreachable URL shows as black rather than as an error.

background

"background": {
  "type": "image",           // "image" | "color" | "animated" | "panorama" | "custom_panorama"
  "image": {
    "path": "skd_menu:textures/gui/bg_main_default.png",
    "fit": "cover",          // "cover" keeps proportion and crops | "stretch" can distort
    "effect": {
      "type": "zoom",        // "zoom" | "none"
      "durationMs": 20000,   // one full zoom-in/zoom-out cycle
      "minScale": 1.0,
      "maxScale": 1.15
    }
  }
}
type Behaviour
image A single fixed image, with the effect above.
color A flat colour.
animated The legacy rotating-frame background.
panorama A vanilla panorama.
custom_panorama A custom panorama.

fit: "cover" is the default because it preserves the aspect ratio — the image fills the window and the overflow is cropped, so it never looks distorted on a small window. "stretch" fills exactly and can deform.

The zoom effect is the slow "breathing" animation: scale moves between minScale and maxScale over durationMs and back.

logos and title

"logos": {
  "topLeft":  { "x": 0, "y": 0, "width": 150, "image": { "path": "..." } },
  "topRight": { "x": -1, "y": 0, "width": 150, "image": { "path": "..." } }
},
"title": { "x": 50, "y": 12, "scale": 1.0, "image": { "path": "..." } }

Two fixed corner logos, each configured independently, plus a custom title image. -1 in a logo or overlay means automatic placement — for a top-right logo that resolves to the top-right corner.

See Images.

Recovering

Set enableMod = false in menu-common.toml and the title screen goes fully vanilla with your config untouched. Then fix the JSON at your own pace. This is the first thing to try if the menu looks broken.

Clone this wiki locally