Coming soon: A web-based WYSIWYG editor with visual layout design, real-time preview, Flexbox auto-layout, and multi-provider resource pack generation.
Source Code
View source on GitHub.
Download Releases
Get the latest JARs.
Features
8 Layout Engines
Simple, Scrollable, Frame, Paginated, Composite, Book, Merchant.
23 Inventory Types
Chest, Furnace, Anvil, Enchanting, Smithing, Merchant, Book, and more.
Scrolling & Navigation
Scrollable layouts with configurable up/down/left/right buttons. Scroll buttons are anchored to viewport. Multi-frame with independent zones.
Persistent Storage
Item storage backed by artifacts — per-player or group-based. Accumulation mode for progress tracking. Configurable click actions.
Storage Placeholders
Dynamic
{stored_name}, {stored_amount}, {stored_max} placeholders in slot names and lore.MiniMessage
Full MiniMessage support for titles, item names, and lore. Colors, gradients, hover/click events.
Click Interactions
LEFT, RIGHT, SHIFT, DOUBLE_CLICK, DROP, SWAP_OFFHAND, NUMBER_KEY, SCROLL — per slot or global.
Animations
Smooth slot transitions with configurable easing (linear, ease-in, ease-out).
Input Dialogs
Text input prompts during menu interaction via Paper dialog API.
Architecture
Entry Library
Actions
Open GUI
The main entry point. Defines an inventory GUI with title, layout, items, interactions, and storage.
Configuration
GUI Settings
Global defaults: audio configuration, storage click behavior mapping, skill tree nodes.
Artifacts
GUI Storage
Persistent storage artifact. Per-player or group-based item persistence with accumulation support.
Guides
Understanding Menu Structure
Visual deep-dive into coordinates, layout types, item placement, and storage. Start here if you’re new.
Building Menus — Complete Guide
Step-by-step walkthroughs from simple to complex. All 7 layout types, interactions, storage, and best practices.
Ready-to-Use Demo Pages
Drop-in Typewriter page files — Storage Vault, Vanilla GUI showcase. Copy, paste, reload and play.
Quick Start
1. Create an Open GUI Entry
Create an Open GUI action entry. This single entry defines everything about one menu:Core setup:
title— Inventory title (MiniMessage + PlaceholderAPI)guiType— Inventory type:CUSTOM,CHEST,MERCHANT,BOOK,ANVIL, etc. (23 types)size— ForCUSTOMtype:SIZE_9toSIZE_54
simple— Explicit x,y coordinates, withcount/direction/gap/repeatYfor grid patternsscrollable— Viewport with scroll buttons, inner layout scrollsframe— Multiple independent zones, each with its own child layoutpaginated— Discrete pages with next/previous navigationcomposite— Stacked children in Z-orderbook— MiniMessage pages as a written bookmerchant— Villager trades with custom items
- Define slots with
item,displayName,lore— usex/y/count/directionfor positioning - Attach
interactionListper slot:LEFT,RIGHT,SHIFT_LEFT,SHIFT_RIGHT,DOUBLE_CLICK,DROP, etc. - Attach
triggersto fire Typewriter actions on click
- Add
storageto any slot to persist items - Use
{stored_name},{stored_amount},{stored_max}placeholders
2. Link from Other Extensions
Once your GUI entry exists, reference it from any other extension that needs a menu:
- QuestCodex —
quest_codex_settingsuses GUI layout for quest browsing - Shops — Shop menus use GUI layouts for item display
- BattlePass, Crates, Pets, Party, Profiles, Cosmetics, Dungeon, BTCSky… — All use GUI Extension for their menus
The GUI Extension is a required dependency for 20+ other extensions.
Layout Types
SimpleLayout
Items placed at explicit(x, y) coordinates on a virtual grid. Best for static menus, decorations, and backgrounds. Supports count, direction, gap, and repeatY for grid patterns.
ScrollableLayout
Wraps a child layout with scroll support. Custom scroll buttons (UP/DOWN/LEFT/RIGHT) are anchored to the viewport — they do not move when content scrolls. Best for long item lists.FrameLayout
Divides the screen into independent zones. Each frame has its own position, size, and child layout (typically scrollable). Best for dashboards, sidebars, and multi-pane panels. Each scrollable zone must have a unique ID for proper scroll isolation.PaginatedLayout
Discrete pages with next/previous navigation buttons. Best for multi-page menus and large collections.CompositeLayout
Layers multiple child layouts in Z-order. Best for overlays and complex UI.BookLayout
Renders MiniMessage pages as a written book. Best for lore, guides, and dialogue.MerchantLayout
Defines villager trades with input items and a result. Best for shops and trading.Interactions Reference
All Supported Interactions
All Supported Interactions
| Interaction | Trigger |
|---|---|
LEFT | Left mouse button |
RIGHT | Right mouse button |
SHIFT_LEFT | Shift + Left click |
SHIFT_RIGHT | Shift + Right click |
MIDDLE | Middle mouse button |
DOUBLE_CLICK | Double click |
NUMBER_KEY_1..9 | Hotbar keys 1-9 |
DROP | Q key |
DROP_ALL | Ctrl+Q |
SWAP_OFFHAND | F key |
interactionList per slot for click actions, globalInteractions for menu-wide keybinds.GUI Types Reference
All 23 Supported Inventory Types
All 23 Supported Inventory Types
| Type | Description |
|---|---|
CUSTOM | Configurable chest (1-6 rows) |
CHEST | Standard chest |
FURNACE | Furnace |
BLAST_FURNACE | Blast furnace |
SMOKER | Smoker |
BEACON | Beacon |
ENCHANTING_TABLE | Enchanting table |
GRINDSTONE | Grindstone repair |
CARTOGRAPHY_TABLE | Map modification |
ANVIL | Anvil repair/rename |
LOOM | Banner pattern loom |
SMITHING_TABLE | Smithing table |
STONECUTTER | Stonecutter |
CRAFTING_TABLE | Workbench |
BREWING_STAND | Brewing stand |
HOPPER | Hopper |
DROPPER | Dropper |
DISPENSER | Dispenser |
BARREL | Barrel |
SHULKER_BOX | Shulker box |
ENDER_CHEST | Ender chest |
MERCHANT | Merchant trading |
BOOK | Written book |
Storage & Accumulation
- Standard storage: Click to deposit/withdraw items. All click behaviors are globally configurable via GUI Settings.
- Storage placeholders:
{stored_name},{stored_amount},{stored_max}resolve dynamically in slotdisplayNameandlore forceStorage: true(default): Non-stackable items (swords, tools, armor) can be stored- Accumulation mode: Set
requiredItem+requiredAmount— items are consumed,onReachRequiredtriggers fire at threshold - Group storage: Share storage between players (e.g., island team) via
groupentry - Temporary slots: Items removed after close (
temporary = true) onFill/onEmptytriggers: Fire Typewriter actions on slot state changes
Placeholders
Storage Placeholders
Resolved in storage slotdisplayName and lore:
| Placeholder | Description |
|---|---|
{stored_name} | Display name of the stored item |
{stored_amount} | Current item count in the slot |
{stored_max} | Maximum capacity of the slot |
Engine Placeholders
GUI titles and item lore also support Typewriter Engine placeholders and PlaceholderAPI through@Placeholder fields.
Commands
This extension provides no standalone commands. All menu interactions are through Typewriter entries.Permissions
No custom permissions. GUI access is controlled through the entries that reference Open GUI actions.Dependencies
| Extension | Required | Usage |
|---|---|---|
| (none) | - | This is a foundational extension. 20+ other extensions depend on it. |
| PlaceholderAPI | Optional | For @Placeholder fields in titles, names, and lore. |