mini-apps

GitHub

指导在浏览器标签页中构建自定义交互式 Web 应用(Mini Apps)的技能,涵盖文件结构、iframe 沙箱约束、通过 Sandbox API 打开应用及双向消息通信机制。

apps/browser/bundled/plugins/mini-apps/SKILL.md stagewise-io/stagewise

Trigger Scenarios

需要创建或编辑 mini-apps 应用文件 需要在 Sandbox 中打开或重载 mini-apps 需要实现 Sandbox 与 mini-apps 之间的双向消息通信

Install

npx skills add stagewise-io/stagewise --skill mini-apps -g -y
More Options

Non-standard path

npx skills add https://github.com/stagewise-io/stagewise/tree/main/apps/browser/bundled/plugins/mini-apps -g -y

Use without installing

npx skills use stagewise-io/stagewise@mini-apps

指定 Agent (Claude Code)

npx skills add stagewise-io/stagewise --skill mini-apps -a claude-code -g -y

安装 repo 全部 skill

npx skills add stagewise-io/stagewise --all -g -y

预览 repo 内 skill

npx skills add stagewise-io/stagewise --list

SKILL.md

Frontmatter
{
    "name": "mini-apps",
    "description": "Guide for building custom interactive web apps (\"mini apps\") displayed in browser tabs — scaffolding, iframe constraints, bidirectional messaging with the sandbox, and iteration workflows."
}

Mini Apps

Mini apps are custom interactive web apps that render in dedicated stagewise browser tabs. Useful for dashboards, visualizations, forms, interactive tools, and any UI that benefits from rich HTML/CSS/JS beyond plain text.


Apps Directory (apps/)

The apps/ mount is always available with full read-write permissions. Each app lives in its own subfolder with index.html as the required entry point. Optional sibling assets (styles.css, script.js, images, etc.) are resolved via relative references.

apps/{appId}/
  index.html      ← entry point (required)
  styles.css      ← optional
  script.js       ← optional

Writing App Files

Create and edit app files (index.html, styles.css, script.js), then open or reload via the sandbox with await API.openApp("appId", { title: 'Readable title' }).


Iframe Constraints

  • Renders inside a dedicated browser tab with normal Stagewise browser chrome.
  • The app itself is sandboxed in an app:// iframe inside a trusted stagewise://internal/preview/{appId} shell.
  • Design responsively. Always include responsive base styles and a viewport meta tag.

Opening Apps (Sandbox)

Use API.openApp(appId, opts?) from the sandbox. The sandbox is used only for opening apps and communicating with them.

Option Type Default Description
pluginId string Opens a plugin app instead of an agent app
title string Human-readable tab breadcrumb label
target 'tab' 'tab' Explicit tab target; retained for compatibility/documentation
setActive boolean true Whether the preview tab should become active immediately
  • API.openApp() always opens an internal preview tab with a sandboxed app:// iframe.
  • Calling with the same appId opens a refreshed tab — use after editing files.

Bidirectional Messaging

Apps and the sandbox communicate via postMessage.

Sandbox → App: API.sendMessage(appId, data, opts?) — sends a JSON-serializable message to the active app.

App → Sandbox: API.onMessage(appId, callback, opts?) — registers a listener for messages the app sends via window.parent.postMessage(data, "*"). Returns an unsubscribe function. Listeners persist across IIFE executions; use globalThis to accumulate messages.

Inside the app (HTML/JS):

  • Receive: window.addEventListener("message", (e) => { /* e.data */ })
  • Send: window.parent.postMessage({ action: "clicked", id: 1 }, "*")

Best Practices

  • Sandbox usage: Use the sandbox only for openApp, sendMessage, and onMessage.
  • Responsive design: Support both narrow and wide tab widths. Use max-width: 100%, overflow-x: hidden, box-sizing: border-box.
  • Viewport meta tag: Always include <meta name="viewport" content="width=device-width, initial-scale=1">.
  • File organization: index.html as entry point. Split CSS and JS into separate files for maintainability.
  • Message protocol: Define a clear action field to distinguish message types.
  • Cleanup listeners: Unsubscribe from API.onMessage when interaction is complete.
  • Error handling: Validate incoming messages on both sides. Gracefully handle unexpected data.

References

For detailed examples, see:

  • references/examples.md — Full mini app examples (minimal app, multi-file app, interactive picker with messaging)

Version History

  • 45a1544 Current 2026-07-24 21:12

Same Skill Collection

.agents/skills/add-llm-model/SKILL.md
.agents/skills/caveman/SKILL.md
.agents/skills/create-skill/SKILL.md
.agents/skills/history-compression/SKILL.md
.agents/skills/karton-best-practices/SKILL.md
.agents/skills/stage-ui-design-system/SKILL.md
.agents/skills/vercel-react-best-practices/SKILL.md
apps/browser/bundled/plugins/figma/SKILL.md
apps/browser/bundled/plugins/github/SKILL.md
apps/browser/bundled/plugins/javascript-sandbox/SKILL.md
apps/browser/bundled/plugins/posthog/SKILL.md
apps/browser/bundled/plugins/remotion/SKILL.md
apps/browser/bundled/plugins/supabase/SKILL.md
apps/browser/bundled/plugins/vercel/SKILL.md
apps/browser/bundled/skills/debug/SKILL.md
apps/browser/bundled/skills/learn-skill/SKILL.md
apps/browser/bundled/skills/plan/SKILL.md
apps/browser/bundled/skills/preview/SKILL.md
apps/browser/bundled/skills/watch/SKILL.md
.agents/skills/copywriting/SKILL.md
.agents/skills/prompt-optimization/SKILL.md
apps/browser/bundled/skills/implement/SKILL.md

Metadata

Files
0
Version
18ac8a2
Hash
a128c2bf
Indexed
2026-07-24 21:12

Главная - Вики-сайт
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-20 10:09
浙ICP备14020137号-1 $Гость$