
msw-ui-system
MSW .ui single entry point — design + component API + builder + runtime. Anchor/pivot/RectTransform, UIGroup/CanvasGroup hierarchy, layout recipes (HUD/popup/toast/menu/inventory/scroll-list/ranking/leaderboard/quest list/friend list/mailbox), full API tables for ButtonComponent/TextGUIRendererComponent/SpriteGUIRendererComponent/ScrollLayoutGroup/GridView/TextInput/Slider/Mask/AvatarGUIRenderer + UI enums (AlignmentType/TextOverflowMode/ImageType/FillAmount), .mlua runtime patterns (popup open-close, toast, HP bar, GridView, drag, tab, cooldown, world nametag), UI-client-only caveats (nil on server, no RPC), .ui↔.mlua UUID auto-binding (write+injectBindings), resolution/safe-area/touch. UIBuilder (mswuibuilder.cjs): all node types (empty/panel/text/sprite/button/slider/scrollLayout/textInput/group/mask/gridView/avatar/skeleton etc.), component add/replace/patch/remove, 13 anchor presets+stretch, auto-inject .mlua UUID bindings after write.
- Installs
- 9.8K
- Last 24h
- +73
- Trending rank
- #2508
- Security
- Pass
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/msw-git/msw-ai-coding-plugins-official --skill msw-ui-system- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads msw-ui-system automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
Security audits
Independent scans of the skill's instructions and bundled files.
SKILL.md
The instructions your agent reads when the skill is triggered.
msw-ui-system
MSW .ui single entry point — design guide + component API + builder invocation + runtime patterns bundled into one skill.
Role division with existing skills:
| Skill | Responsibility |
|---|---|
msw-ui-system (this skill) | Everything .ui — design (which/when/why), component API/enum (what), builder invocation (how to mutate), runtime mlua patterns. .ui mutations must always go through this skill's builder |
references/templates/ | Pre-built style bundles — .ui + ruid-map + button handler packages |
0. Routing
Branch to sub-references based on request keywords.
| Trigger | Reference Document |
|---|---|
| "anchor/pivot/coordinates/why is the position wrong", "RectTransform", "stretch" | references/ui-fundamentals.md §1–§8 |
| "mobile", "safe area", "1920", "MobileOnly", "ActivePlatform", "touch size", "PC reserved zone", "font size by device" | references/ui-fundamentals.md §9 |
| "UIGroup", "above popup", "z-order", "displayOrder", "CanvasGroup", "opacity propagation", "Enable vs Visible" | references/ui-hierarchy.md; for runtime sibling reorder also read references/runtime-patterns.md §7 |
| "which component", "Sprite vs Text vs Button", "9-slice", "scroll list", "GridView vs ScrollLayoutGroup" | references/component-api.md §"Component Selection Guide" |
| "sprite pivot", "9-slice border", "slice boundary", "set sliced asset metadata", "resource storage properties" | Set asset-side metadata via msw-mcp asset_update_resource_storage_info directly; for the .ui side see references/component-api.md §"SpriteGUIRenderer — ImageType Selection" |
| "make a HUD", "popup placement", "toast", "menu", "inventory grid", "scroll list", "ranking", "leaderboard", "quest list", "friend list", "mailbox" | references/layout-recipes.md |
| "connect .mlua after building with .ui builder", "property default UUID", "binding without drag" | ../msw-general/references/builder-protocol-ui.md §3.6 Binding Injection (unified entry point — load with the builder-protocol.md core) |
Runtime UI component field read/write, component property name/type (ButtonComponent.Colors, TextGUIRendererComponent.Overflow, SpriteGUIRendererComponent.FillAmount…) | references/component-api.md required before every .mlua access to UI component fields |
Enum values (AlignmentType, TextOverflowMode, ImageType, UIBasicParticleType…) | references/component-api.md §Enums |
| Runtime mlua patterns (popup open/close, toast fade, HP bar, GridView, drag, tab, cooldown), Runtime UI Caveats (client-only, server-side nil, etc.) | references/runtime-patterns.md |
.ui builder invocation methods (UIBuilder API, anchor presets, write auto-lint, component add/patch/remove) | ../msw-general/references/builder-protocol-ui.md §3 UIBuilder (unified entry point — load with the builder-protocol.md core; .map MapBuilder / .model ModelBuilder live in sibling per-builder files) |
| "sound", "sfx", "click sound", "hover sound", "button audio", "PlaySound" | references/ui-sound.md |
1. Basic Workflow
(1) Clarify intent Layout sketch (ASCII or verbal) + which group to attach to
(2) Check design guide Match at least one of ui-fundamentals / ui-hierarchy / component-api §Component Selection Guide
(3) Builder Preflight Read ../msw-general/references/builder-protocol.md (core) + builder-protocol-ui.md §3 (unified call-protocol entry point)
(4) Match recipe Select the closest template from layout-recipes.md
(5) Invoke builder Create/patch via scripts/msw_ui_builder.cjs (protocol: builder-protocol-ui.md §3)
(6) Inject bindings Auto-inject .mlua property default UUIDs via b.write(path, { bind: {...} }) or b.injectBindings(...) (builder-protocol-ui.md §3.6 Binding Injection)
(7) Self-verify write() auto-runs scripts/ui_lint.cjs (strict ON by default)
(8) Preview Visual check via scripts/preview_ui_layout.cjs
(9) Sound pass For any interactive button, offer click/hover SFX wiring (references/ui-sound.md)
(10) Maker Refresh Apply to engine
2. Global Rules
NEVER
- Do not directly edit
.uiJSON —.uicreation/modification must go throughscripts/msw_ui_builder.cjs. Manual editing breaks UUID·ValueType·@componentsconsistency and causes silent drops. - Read existing
.uifiles through the builder too — Query viaUIBuilder.read(filepath)/.find()/.listEntities(). Do not directly grep/parse raw JSON..uidirectReadand shell commands such ascat/type/Get-Content/rg/grep/sed/awk/cp/mvare blocked by the registered guard. UseUIBuilder.read/load/snapshotfor reads andb.write()for writes. Deleting an entire.uifile has no builder API — delete it withnode -e "require('fs').unlinkSync('ui/<File>.ui')"thenrefresh(shellrm/catare guard-blocked; anode -ebuilder call is not).
- Set
Positiondirectly — Use onlyanchoredPosition(Position is engine-managed) - Express size via OffsetMin/Max on fixed anchors (AnchorsMin == AnchorsMax) while also using
anchoredPosition— Do not mix the two modes - Builder creates new UUIDs but
.mluaproperty defaults are not updated — Binding breaks
ALWAYS
- Builder Protocol Preflight —
../msw-general/references/builder-protocol.md(core) +../msw-general/references/builder-protocol-ui.md§3 must be in context before any.uimutation (read them only if never loaded this session or lost to compaction) (UIBuilder API, write auto-lint, pos / anchor rules, binding injection, coverage gaps). The core carries the shared contract and cross-builder flow;.mapMapBuilder /.modelModelBuilder live in sibling per-builder files — one unified entry point because the cross-flow is interlocked. - Check at least one design guide before invoking the builder (
ui-fundamentals/ui-hierarchy/component-api§Component Selection Guide) - Match a recipe first; build from scratch only as a last resort
- For edge placement use the formula:
pos = ±(margin + size/2) - Separate popups and toasts into their own
.uiroot UIGroup, standalone show/hide; useempty()/panel()for inner containers, never nestedgroup() - "I centered it but it sticks to the left" → the text carries an explicit
UpperLeft(0)alignment value — setMiddleCenter(4). Alignment defaults are centered in both text component generations - Button touch target ≥ 88×88 (mobile support)
- After creating any interactive button — proactively suggest wiring click/hover SFX via
references/ui-sound.md(default UI SFX RUIDs available). Skip only if the user explicitly opts out or the button is purely decorative. - Build the tree nested, not flat. Controls of one unit (window + title/close, row + chip/value, slot + icon/count) must share a parent via
"Parent/Child"paths so they move / fade / toggle / bind as a block. Create each parent before its children; missing parents fail lint (L025ERROR). - Do not stack root-level text over a sibling box.
ui_lintreports this asL030WARN. Nest the text under the box, usebutton()for clickable labeled boxes, or put a direct label onpanel()/sprite()via theirtextoptions.
3. Sub-documents
references/ui-fundamentals.md— Coordinate system, RectTransform 3 elements, anchor mode determination (§1–§8) + Resolution·safe area·PC reserved zones·touch targets·font sizes·platform separation (§9)references/ui-hierarchy.md— UIGroup / displayOrder / CanvasGroup / Enable vs Visiblereferences/component-api.md— §"Component Selection Guide" (which/when/why) + full component property/method/event tables (what) + all UI-related enum values (§Enums)references/layout-recipes.md— Layout template collectionreferences/runtime-patterns.md—.mluaruntime patterns (popup/toast/HP/grid/drag…) + Runtime UI Caveatsreferences/ui-sound.md— UI sound integration (_SoundService:PlaySound, click/hover hook, default UI SFX RUIDs)../msw-general/references/builder-protocol-ui.md§3 —.uiCJS builder call protocol (unified entry point — load with thebuilder-protocol.mdcore) —.mapMapBuilder /.modelModelBuilder live in sibling per-builder files. panel / text / sprite / button / slider / scroll / script / group / mask / grid / avatar / touchReceive / skeleton / areaParticle / basicParticle, component CRUD, anchor presets, write auto-lint, and.mluaproperty UUID auto-binding all live in §3 + §3.6.references/templates/templates.md— Pre-built style bundle index (style-N-*.ui,ruid-map.md,Popupbutton.mlua)
4. Scripts
scripts/msw_ui_builder.cjs—.uibuilder core (UIBuilder class). Read../msw-general/references/builder-protocol.md(core) +../msw-general/references/builder-protocol-ui.md§3 (unified entry point) before use.scripts/preview_ui_layout.cjs—.uilayout visual check + touch target warningsscripts/ui_lint.cjs—.uifile self-verification (auto-called bywrite())scripts/ui_recipe.cjs— Recipe-based scaffolding
Out of Scope
.map/.model/.tilesetbuilders — Outside this skill's scope.uiJSON schema (raw field shapes,@type/@componentswrapping, AlignmentOption 0–15 mapping, etc.) — Handled internally by the builder. Users/AI do not need to know directly- Accessibility patterns (alt text, screen-reader hints, focus order) — Not covered
- Error-state UI patterns (disabled-button styling beyond
Transition.Disabled, validation messages, loading spinners) — Not covered; design ad-hoc per project - Automated UI testing / layout assertions beyond
ui_lint.cjsandpreview_ui_layout.cjs— Not provided - Custom shader materials (
MaterialId) — Field is exposed but authoring shaders is outside this skill's scope
FAQ
What does the msw-ui-system skill do?
MSW .ui single entry point — design + component API + builder + runtime. Anchor/pivot/RectTransform, UIGroup/CanvasGroup hierarchy, layout recipes (HUD/popup/toast/menu/inventory/scroll-list/ranking/leaderboard/quest list/friend list/mailbox), full API tables for ButtonComponent/TextGUIRendererComponent/SpriteGUIRendererComponent/ScrollLayoutGroup/GridView/TextInput/Slider/Mask/AvatarGUIRenderer + UI enums (AlignmentType/TextOverflowMode/ImageType/FillAmount), .mlua runtime patterns (popup open-close, toast, HP bar, GridView, drag, tab, cooldown, world nametag), UI-client-only caveats (nil on server, no RPC), .ui↔.mlua UUID auto-binding (write+injectBindings), resolution/safe-area/touch. UIBuilder (mswuibuilder.cjs): all node types (empty/panel/text/sprite/button/slider/scrollLayout/textInput/group/mask/gridView/avatar/skeleton etc.), component add/replace/patch/remove, 13 anchor presets+stretch, auto-inject .mlua UUID bindings after write.
How do I install msw-ui-system?
Run npx skills add https://github.com/msw-git/msw-ai-coding-plugins-official --skill msw-ui-system in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/msw-ui-system/ (personal) or .claude/skills/msw-ui-system/ (project).
Which AI agents can use msw-ui-system?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is msw-ui-system safe to install?
Security partners have reviewed it: Gen Agent Trust Hub passed; Socket passed; Snyk passed. As with any skill, read the SKILL.md and bundled scripts before installing.
Who maintains msw-ui-system?
It is published by msw-git in msw-git/msw-ai-coding-plugins-official. It has 9,787 recorded installs.
More from msw-git/msw-ai-coding-plugins-official
msw-general
msw-git/msw-ai-coding-plugins-official
Foundation skill for MSW (MapleStory Worlds). Read this FIRST before anything else in MSW.
msw-defaultplayer
msw-git/msw-ai-coding-plugins-official
MSW DefaultPlayer (character) management. Use the msw-general ModelBuilder to inspect/patch DefaultPlayer.model and Player.model, add/remove components, configure movement speed / jump force / HP / camera, and per-map-mode movement components. Use for DefaultPlayer model, player components, movement speed, jump force, HP, camera, physics. Keywords: player, DefaultPlayer, speed, jump, HP, camera, gravity, revive, respawn, character.
msw-scripting
msw-git/msw-ai-coding-plugins-official
Authoring MSW scripts (.mlua) plus integrated playtest and debugging. Covers mlua syntax, annotations (@Component/@Logic/@ExecSpace/@Sync), lifecycle, exec spaces, property sync, event system, file workflow, build-log inspection, error classification, and the test/debug loop. Keywords: script, mlua, lua, Component, Logic, annotation, ExecSpace, Sync, event, play, test, debug, lifecycle.
msw-search
msw-git/msw-ai-coding-plugins-official
MSW search integration — (1) vector search for API docs and implementation guides via the msw-mcp MCP server (mluaapiretriever / mluadocumentretriever), (2) REST API search for resources (sprite / animation / sound / resource pack / avatar). Use for 'find details, examples, or related APIs not in .d.mlua', 'need a SpriteRUID', 'monster sprite', 'background image', 'find a sound', 'avatar item lookup', etc. Keywords: document search, API details, examples, guide, retriever, resource, sprite, animation, sound, RUID, resource pack, avatar.
msw-avatar
msw-git/msw-ai-coding-plugins-official
MSW avatar management — costume (CostumeManagerComponent, 17 slots) + animation 3-layer pipeline (StateComponent → AvatarStateAnimationComponent → AvatarRendererComponent). Four-level distinction: State key (uppercase) / AvatarBodyActionStateName (lowercase) / MapleAvatarBodyActionState enum / sprite action ID (swingO1, shoot1). Two mapping systems via IsLegacy/ActionSheet/StateToAvatarBodyActionSheet. PlayerControllerComponent auto-transition conflicts with ActionStateChangedEvent resolved via RemoveActionSheet/SetActionSheet/BodyActionStateChangeEvent. Applies to any avatar-bearing entity (NPC, monster, etc.), not only DefaultPlayer. Use for costume get/set, 17 equip slots, animation state mapping, action override, weapon-specific attack motion, custom shoot/cast/dance action. Keywords: avatar, costume, animation, state, action, shoot, swing, weapon, equipment, custom action, block auto playback, remap.
msw-combat-system
msw-git/msw-ai-coding-plugins-official
MSW combat system integration guide. Covers the Attack→Hit pipeline, damage model, i-frame, knockback, Hit Stop, Camera Shake, Sprite Flash, SFX, death/revive, damage skin, hit effect, avatar combat motion, custom events, and AI FSM — all based on MSW native APIs for 2D multi-genre coverage. Keywords: attack, hit, damage, combat, monster, hit effect, critical, projectile, damage skin, knockback, hit stop, combo, HP bar, collision, contact hit, TriggerComponent.
Popular frontend & design skills
setup-matt-pocock-skills
mattpocock/skills
Configure this repo for the engineering skills: set up its issue tracker, triage label vocabulary, and domain doc layout. Run once before first use of the other engineering skills.
frontend-design
anthropics/skills
Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.
hyperframes-animation
heygen-com/hyperframes
All animation knowledge for HyperFrames — atomic motion rules, multi-phase scene blueprints, scene transitions, broader motion-design techniques, AND the seven runtime adapters (GSAP default, plus Lottie, Three.js, Anime.js, CSS keyframes, Web Animations API, TypeGPU). Use for any motion or animation task: pick 2-4 rules and compose, or load a blueprint, or look up runtime-specific API (e.g. GSAP eases / Lottie player / Three.js mixer). Also covers auditing an existing composition's choreography (animation map) and 24 named text-animation effects. HyperFrames-native: single paused timeline, seek-safe, deterministic.
prototype
mattpocock/skills
Build a throwaway prototype to answer a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like.
hyperframes-core
heygen-com/hyperframes
The HyperFrames composition contract — build one renderable project. Use for composition structure, the data- timing attributes, class="clip", tracks, sub-compositions, variables, framework-owned media playback, deterministic-render rules, and validation. Read before writing composition HTML.
vercel-react-best-practices
vercel-labs/agent-skills
React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.