Help us improve
Share bugs, ideas, or general feedback.
Creates complete webapps for Meta Display Glasses with D-pad navigation, EMG input, and 600x600 dark-theme display. Useful when starting a new smart glasses project or scaffolding a glasses app.
npx claudepluginhub facebookincubator/meta-wearables-webapp --plugin meta-wearables-webappHow this skill is triggered — by the user, by Claude, or both
Slash command
/meta-wearables-webapp:create-webapp [app-type] [app-name][app-type] [app-name]The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Before generating or modifying any code, read both:
Adds interactive UI components (screens, buttons, lists, cards, forms, toggles, counters, nav bars) to Meta Display Glasses webapps (vanilla JS or React) with D-pad navigation, fixed viewport, and dark theme constraints.
Scaffolds Even Hub G2 smart glasses apps from scratch with Vite, TypeScript, SDK, CLI, simulator, and app manifest. Use for new projects or bootstrapping development.
Provides Apple Human Interface Guidelines for visionOS apps, covering spatial layout rules, eye/hand input, and immersive experiences for Vision Pro comfort and usability.
Share bugs, ideas, or general feedback.
Before generating or modifying any code, read both:
${CLAUDE_PLUGIN_ROOT}/references/display-guidelines.md${CLAUDE_PLUGIN_ROOT}/references/performance-guidelines.mdThese define the non-negotiable display physics, input model, and performance budgets for Meta Display Glasses webapps. Do not skip — generated UI that ignores these will fail on-device.
Create complete webapps for Meta Display Glasses with EMG wrist-band input, D-pad navigation — including sensor integration and real API connections.
No touch input is available. The EMG wrist band translates gestures into D-pad events automatically.
| Skill | Purpose | When to Use |
|---|---|---|
/add-ui | Add screens, buttons, UI components | Expanding the app |
/connect-api | Add API connection | Connect to REST/WebSocket APIs |
/add-device-sensors | Add sensor data | Motion/orientation/GPS features |
/add-local-storage | Add data persistence | Save settings, cache, state |
<app-name>/
index.html # HTML structure with screens
styles.css # Dark theme with focus states, loading states, components
app.js # Logic, navigation, D-pad, APIs, SDK integration
favicon.png # 128x128 PNG icon themed to the app idea
manifest.webmanifest # Web App Manifest referencing the favicon
If the user specified a webapp type, proceed to Step 2.
If not specified, ask what they want to build. Suggest from categories in references/app-ideas.md.
Ask where to create the webapp, or use defaults:
~/meta-display-glasses-webapps/<app-name>/ for new webappsmkdir -p ~/meta-display-glasses-webapps/<app-name>
Generate three files using these templates as the foundation:
Key requirements for the HTML:
width=600, height=600class="focusable" and tabindex="0" if not a buttondata-action="action-name"data-action="back" with ← arrow character<div class="screen"> with a unique idCustomize these sections in app.js for each app:
CONFIG — API URLs, storage key, SDK optionsstate.data — App-specific data shapehandleAppAction() — App-specific action dispatchonScreenEnter() — Screen-specific data loading/renderingAdd app-specific styles to styles.css as needed, building on the template foundations.
Create a favicon.png themed to the app idea using the bundled pure-Python script (no dependencies — stdlib only).
Constraints (do not violate):
index.html (<link rel="icon">) and the Web App Manifest. The template already wires both.How to generate:
background (solid or vertical gradient), optional rounded plate, and layers of circle / ring / rrect / polygon / points / glyph. See the script header for the full schema.python3 <plugin-path>/skills/create-webapp/scripts/favicon_generator.py \
--spec - --out <app-name>/favicon.png <<'EOF'
{
"size": 128,
"background": {"type": "gradient", "from": "#1C1E21", "to": "#0A0B0C"},
"plate": {"color": "#FF6B35", "radius": 28, "inset": 8},
"layers": [
{"type": "ring", "cx": 64, "cy": 64, "r": 38, "width": 4, "color": "#1C1E21"},
{"type": "glyph", "char": "B", "cx": 64, "cy": 64, "scale": 7, "color": "#1C1E21"}
]
}
EOF
manifest.webmanifest next to index.html:{
"name": "<App Name>",
"short_name": "<App Name>",
"icons": [
{ "src": "favicon.png", "sizes": "128x128", "type": "image/png" }
],
"background_color": "#000000",
"theme_color": "#000000",
"display": "standalone"
}
The <link rel="icon"> and <link rel="manifest"> references are already present in templates/index.html — no HTML edits needed.
See references/api-catalog.md for free public APIs and integration patterns.
Use /add-device-sensors to add motion, orientation, or GPS data to the webapp.
See references/ui-components.md for reusable HTML component patterns (cards, lists, tabs, loading states).
.screen class and unique id.focusable classdata-action attributesdata-action="back"width=600, height=600overflow-y: auto with max-heightfavicon.png exists at the app root, is >52×52 PNG (not SVG), and is referenced from both index.html and manifest.webmanifestCreated: ~/meta-display-glasses-webapps/<app-name>/
index.html (screens, structure)
styles.css (dark theme, focus states, loading/error states)
app.js (D-pad nav, API calls, SDK integration)
favicon.png (themed app icon)
manifest.webmanifest (web app manifest)
Expand with:
/add-ui Add screens, buttons, UI components
/connect-api Connect to more APIs
/add-device-sensors Add motion/orientation/GPS sensors
/add-local-storage Add data persistence
Test locally by opening index.html in a browser and using arrow keys + Enter.
After expansion options, ask the user how they want to run the app on Meta Display Glasses. The glasses load webapps via HTTPS, so the app needs to be hosted on a public URL.
Prompt the user with:
Your webapp is ready and works locally. To run it on Meta Display Glasses, it needs to be hosted on a public HTTPS URL. Two options:
/test-on-device— deploy to a public staging URL (e.g.stage-<app>.vercel.app) for iterating/publish-to-vercel— publish to a stable production URL (e.g.<app>.vercel.app)Both use Vercel (free tier works) and I can set the whole thing up for you. If you'd rather host the app yourself elsewhere, you can skip both — anywhere that serves HTTPS will work.
Do not auto-invoke either skill. Wait for the user's choice.
| Issue | Solution |
|---|---|
| Webapp doesn't load on device | Check browser console for JS errors |
| Focus ring not visible | Verify .focusable class on interactive elements |
| D-pad not navigating | Check moveFocus() handles the current screen |
| Enter not activating | Verify data-action attribute on element |
| Back button not working | Check data-action="back" or Escape handler |
| API calls failing | Check CORS headers, use proxy if needed |
| API data not updating | Clear cache: state.cache = {} |
| Sensor data not flowing | Check sensor types are valid, verify device support |
| Data not persisting | Verify saveData() called after state changes |
| Screen not showing | Check hidden class and navigateTo() call |
| Demo mode not working | Verify fallback code in sensor helpers |
Use browser developer tools to view console.log output for debugging.