GroupeZ Docs
Configurations

Informations

Essential information about configuring zMenu

This page provides essential information about how to configure zMenu and understand its configuration philosophy.

Understanding YAML

zMenu uses YAML (YAML Ain't Markup Language) for all its configuration files. If you're new to YAML, here are some important things to know:

Basic YAML Rules

  1. Indentation matters - Use spaces (not tabs) for indentation
  2. Consistent spacing - Use 2 spaces per indentation level
  3. Case sensitive - Material is different from material
  4. Colons need spaces - key: value not key:value

Example Structure

# This is a comment
inventory-name: "My Inventory"    # String value
size: 54                          # Number value
enabled: true                     # Boolean value

items:                            # Start of a section
  my-button:                      # Button name (key)
    slot: 0                       # Property of my-button
    item:                         # Nested section
      material: DIAMOND
      name: "&bDiamond"

Useful Tools

  • YAML Validator: YAML Lint - Check your YAML syntax
  • VS Code Extension: YAML by Red Hat - Syntax highlighting and validation
  • Notepad++: Lightweight editor with YAML support

Configuration Philosophy

zMenu follows a modular configuration approach:

File Organization

plugins/zMenu/
├── config.yml                 # Global settings
├── global-placeholders.yml    # Shared values
├── commands/                  # Command definitions
│   └── commands.yml
├── inventories/               # Your menus
│   ├── menu1.yml
│   └── subfolder/
│       └── menu2.yml
├── patterns/                  # Reusable templates
├── items/                     # Reusable items
└── actions_patterns/          # Default actions

Key Principles

  1. One inventory per file - Each YAML file in inventories/ defines one inventory
  2. Subfolders supported - Organize inventories in subfolders
  3. Reusability - Use patterns and items to avoid repetition
  4. Hot reload - Enable the hot reload and your inventory changes are applied as soon as you save the file, or use /zm reload to apply changes without restart

Color Codes

zMenu supports multiple color code formats:

Legacy Color Codes

Using the & symbol:

CodeColorCodeColor
&0Black&8Dark Gray
&1Dark Blue&9Blue
&2Dark Green&aGreen
&3Dark Aqua&bAqua
&4Dark Red&cRed
&5Dark Purple&dLight Purple
&6Gold&eYellow
&7Gray&fWhite

Formatting Codes

CodeEffect
&lBold
&oItalic
&nUnderline
&mStrikethrough
&kObfuscated
&rReset

Hex Colors

name: "&#FF5555This is red &#55FF55and this is green"

MiniMessage (Paper/Purpur)

If you're using Paper, Purpur, or Pufferfish, you can enable MiniMessage format in config.yml:

enable-mini-message-format: true

Then use MiniMessage syntax:

name: "<gradient:red:blue>Gradient Text</gradient>"
lore:
  - "<rainbow>Rainbow text!</rainbow>"
  - "<bold><gold>Bold gold text</gold></bold>"
  - "<click:run_command:/spawn>Click to spawn</click>"

Placeholders

zMenu supports placeholders throughout your configurations:

PlaceholderAPI

Any PlaceholderAPI placeholder works in zMenu:

name: "&6%player_name%'s Profile"
lore:
  - "&7Balance: &a$%vault_eco_balance%"
  - "&7Level: &e%player_level%"

zMenu Built-in Placeholders

PlaceholderDescription
%player%Player name
%page%Current page number
%maxPage% or %max-page%Total pages
%zmenu_player_page%Current page
%zmenu_player_max_page%Maximum page

See the Placeholders page for the complete list.

Reloading Configurations

After making changes, reload your configurations:

/zm reload                    # Reload everything
/zm reload config             # Reload config.yml only
/zm reload inventory [name]   # Reload specific inventory
/zm reload command [name]     # Reload specific command

Use /zm reload inventory <name> when testing changes to a specific inventory - it's faster than reloading everything.

Common Mistakes

1. Incorrect Indentation

# Wrong
items:
my-button:
  slot: 0

# Correct
items:
  my-button:
    slot: 0

2. Missing Quotes for Special Characters

# Wrong - will cause parsing error
name: &6My Menu

# Correct
name: "&6My Menu"

3. Tab Characters

YAML doesn't allow tabs. Always use spaces:

# Wrong (tabs)
items:
→ my-button:
→ → slot: 0

# Correct (spaces)
items:
  my-button:
    slot: 0

4. Duplicate Keys

# Wrong - second 'slot' overwrites first
my-button:
  slot: 0
  slot: 1

# Correct
my-button:
  slot: 0
another-button:
  slot: 1

File Encoding

Always save your files with UTF-8 encoding to properly support:

  • Special characters
  • Non-English text
  • Color codes

Most modern text editors use UTF-8 by default, but check your editor's settings if you experience issues with special characters.

Next Steps

Now that you understand the basics:

  1. Learn about Commands & Permissions
  2. Explore available Placeholders
  3. Create your first inventory

On this page

GroupeZ MCP

Documentation in your AI

MCP lets your AI search GroupeZ documentation and read current examples to help you configure your plugins.

Read-only · No documentation API key needed

1. Copy the server URL

Transport: HTTP (Streamable HTTP). Authentication: none. Your tool uses its own model and subscription limits.

  1. Open Plugins in ChatGPT on the web, then + → Add custom MCP server.
  2. Name it ‘GroupeZ Documentation’, paste the URL above and choose ‘No authentication’. Create and install the plugin.
  3. In a conversation, type @ and select the plugin before asking. If needed, enable search, get_page and list_pages in its settings.
Official setup guide

3. Ask a question

Use GroupeZ MCP to help me create a zMenu inventory. Search relevant pages, read the examples and cite your sources.
Other clients and troubleshooting

For clients using mcpServers, adapt this example to their format:

{
  "mcpServers": {
    "groupez-docs": {
      "url": ""
    }
  }
}

Available tools are search, get_page and list_pages. Refresh the connector’s tools after updates. If your AI cannot access them, check that the connector is enabled in the conversation and your account allows custom MCP servers. Opening the URL in a browser is not an MCP test.