> For the complete documentation index, see [llms.txt](https://katacr.gitbook.io/plugins/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://katacr.gitbook.io/plugins/kamenu-en/readme.md).

# Home

> A next-generation Minecraft GUI plugin based on the native Dialog API, delivering a brand-new interactive experience beyond traditional chest menus

**KaMenu** It is a menu plugin for Minecraft servers. The public runtime uses the Bukkit/Spigot 1.16.5 API as the compatibility baseline; Paper/Folia use the Paper Dialog API, and Spigot 1.21.6+ uses the Bungee Dialog API. Lower versions automatically disable native Dialog, but container-style menus, actions, variables, JavaScript, storage, and custom commands are still available.

> **Important Notes**:
>
> * **Minimum version for public features**: Bukkit/Spigot/Paper-compatible core 1.16.5
> * **Minimum version for Paper/Folia**: 1.21.7
> * **Minimum version for Spigot Dialog**: Spigot 1.21.6
> * **Plugin Java version**: Java 16+
> * **Paper/Folia 1.21.7+**: the server core itself still requires Java 21+
> * **Recommended version**: Paper 1.21.8+
> * **Advanced text components version**: Minecraft 1.21.9+ (supports new client text components such as sprites)
> * **Supported cores**: Paper, Folia, Spigot, and compatible derivative cores
>
> Some features that depend on the Paper API may not be available on Spigot. For full functionality and better compatibility, we still recommend using a Paper core.

KaMenu has been adapted to Folia's region-thread model. Menu opening, delayed actions, periodic tasks, JavaScript delay helper methods, and the external menu API will use the Paper or Folia scheduler depending on the running core. Custom JavaScript in menus, external action handlers, and third-party PlaceholderAPI expansions still need to comply with Folia's threading rules on your own.

***

## Core Features

### Modern GUI based on Dialog API

Say goodbye to traditional chest menus and embrace the native UI:

* Brand-new Paper Dialog menu interface with a more modern look
* Supports multiple rich interactive components: text input fields, numeric sliders, single-choice buttons, checkboxes
* Supports content components such as item displays (Item) and plain text messages (Message)
* Three bottom button layout modes:`notice`,`confirmation`,`multi`

### Highly customizable

* Fully YAML-based configuration, no programming knowledge required
* Supports multi-level folder structures, making it easy to manage large numbers of menus
* Supports hot reload; no server restart needed after modifying configuration

### Powerful action system

Supports a rich set of button click actions:

* `tell` / `actionbar` / `title` — Multiple message-sending methods
* `command` / `console` — Execute player or console commands
* `sound` — Play sounds (supports volume, pitch, and category parameters)
* `open` / `close` — Menu navigation and closing
* `hovertext` — Hoverable and clickable chat text
* `actions` — Execute predefined action lists (supports reuse and conditional logic)
* `wait` / `return` — Delayed execution and interruption of action chains
* `set-data` / `set-gdata` — Read and write persistent data
* `url` / `copy` — Open links or copy to clipboard

Additionally supports:

* `{js:...}` — Use JavaScript expressions or JavaScript package return values at any text position; if there is no return value, it will be empty
* `Events.Open` — Waits for the entire action chain to complete before opening the menu
* `Events.Tasks` — Periodically executes an action group at fixed intervals while the menu is open

### General conditional logic

* In**any text field**Use conditional logic in (titles, button text, component text)
* In**action list** Nest conditions to implement branching execution logic
* Supports PlaceholderAPI variables, comparison operators (`==` `!=` `>` `<` `>=` `<=`) and logical operators (`&&` `||`)
* Conditions can directly use `{js:...}` for dynamic calculations

### Built-in data storage

* Support **SQLite**(default) and **MySQL** dual databases
* **Player data** (`{data:key}`): independent key-value pairs stored by player UUID
* **Global data** (`{gdata:key}`): key-value pairs shared by all players
* Via **PlaceholderAPI** Extensions expose data variables externally

### Quick open methods

* `/kamenu guide` — On first use, opens the built-in setup wizard to guide language selection and import example menus
* `/km open <menu ID>` — Open via standard command
* **Hotkey listening**: supports configuring the key press `F`(swap off-hand) to trigger opening a specified menu
* **Custom command registration**: turn any word into a shortcut command for opening menus with one line of configuration
* **External plugin API**: other plugins can directly open file-based menus, or render in-memory YAML / `YamlConfiguration` menus without writing to `menus` the directory and performing reload

### PlaceholderAPI support

* Full support for PAPI variable parsing (usable in menu titles, component text, and actions)
* Provides `%kamenu_data_<key>%`,`%kamenu_gdata_<key>%`,`%kamenu_list_<key>%`,`%kamenu_glist_<key>%` and `%kamenu_online_players%` variables

***

## Support

KaMenu is a free and open-source plugin. You can download the source code on GitHub and build the latest experimental features yourself.

{% embed url="<https://github.com/Katacr/KaMenu/>" %}

***

## Community and Feedback

* **GitHub**: [Katacr/KaMenu](https://github.com/Katacr/KaMenu/)
* **Issue Reports**: [GitHub Issues](https://github.com/Katacr/KaMenu/issues)

## License

This project is open-source under the [GPL-3.0](https://www.gnu.org/licenses/gpl-3.0.html) license.
