hz-android-2d-porting
Guides porting existing Android 2D apps to Meta VR and Horizon OS — input adaptation, panel…
Builds app UI for Meta VR and Horizon OS with the MetaVrx UI Set, a Jetpack Compose component library and design system. Covers UiSetTheme, buttons, cards, controls, dialogs, dropdowns, inputs, side navigation, sliders, tooltips, the Icons.Regular library, Gradle setup, and
$ npx -y skills add meta-quest/agentic-tools --skill hz-metavrx-ui-set --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/hz-metavrx-ui-setContext preview
The summary Claude sees to decide when to auto-load this skill.
Builds app UI for Meta VR and Horizon OS with the MetaVrx UI Set, a Jetpack Compose component library and design system. Covers UiSetTheme, buttons, cards, controls, dialogs, dropdowns, inputs, side navigation, sliders, tooltips, the Icons.Regular library, Gradle setup, and
name: hz-metavrx-ui-set license: Apache-2.0 description: "Builds app UI for Meta VR and Horizon OS with the MetaVrx UI Set, a Jetpack Compose component library and design system. Covers UiSetTheme, buttons, cards, controls, dialogs, dropdowns, inputs, side navigation, sliders, tooltips, the Icons.Regular library, Gradle setup, and migration from the Spatial SDK UI Set. Build path: Standard Android; use hz-quest-verify-first if the path is unclear."
UISet is a Jetpack Compose component library and design system for Android apps on Meta Horizon OS. Its dark and light themes ship Meta VR typography, shapes, density, interaction states, and semantic colors complete and usable with no configuration. Everything public lives under `metavrx.uiset.compose` and its subpackages.
It ships as the Maven artifact `com.meta.metavrx.uiset:uiset-compose-compat`.
This skill uses **progressive disclosure**: this page is the map — load the one reference file that matches your task.
@Composable
fun AppContent(onContinue: () -> Unit) {
UiSetTheme { // dark scheme, VR typography, Standard density
Surface {
Column {
Text("Guardian", style = UiSetTheme.typography.headline)
LabelButton(label = "Continue", onClick = onContinue)
}
}
}
}Below the theme it is ordinary Compose — `Row`/`Column`/`Box` from foundation, your own state, normal recomposition. The deltas from a Material 3 app are small but they are **replacements, not additions**:
| Material 3 | UISet | |-----------------------------------------------------|-------------------------------------------------------| | `androidx.compose.material3.MaterialTheme` | `metavrx.uiset.compose.theme.UiSetTheme` | | `androidx.compose.material3.Text` / `.Icon` | `metavrx.uiset.compose.Text` / `.Icon` | | `Button(onClick) { Text(…) }` | `LabelButton(label, onClick)` | | `androidx.compose.material.icons.Icons.Filled.Add` | `metavrx.uiset.compose.theme.icons.Icons.Regular.Add` | | `MaterialTheme.colorScheme.primary` | `UiSetTheme.colorScheme.accent` | | `androidx.compose.material3.LocalContentColor` | `metavrx.uiset.compose.LocalContentColor` |
UISet does not extend Material. The names collide, the types do not — import from `metavrx.uiset.compose.*` and do not mix the two in one screen.
`RadioButton`, `Switch`, `Slider`, `Icons`, `LocalContentColor` all exist in both. Mixed imports compile and then render unthemed.
resource, so reading it *is* a composable call — it cannot be evaluated in a `val`, an enum argument, or a `remember { }` block. Component `icon` / `leadingIcon` parameters take `@Composable () -> Unit` for exactly that reason.
`ChoiceListDialog` take `PersistentList<…>` from kotlinx-collections-immutable; build with `persistentListOf(…)` inside `remember`.
`if (showDialog) { … }` and always pass `onDismissRequest`.
density preset or a custom `Dimensions.minimumInteractiveSize` says. Visible artwork can be smaller than its target; lay out with the target in mind.
parameter on `IconButton`, not an optional one.
`UiSetTheme` gets the built-in defaults and your customization never reaches it.
reach for, what the `ButtonStyle` emphasis levels mean, and the behaviour that is not visible in a signature. Start here for "which component, and what will it do that I don't expect".
semantic `ColorScheme` roles, typography, shapes, density, and interaction indications, plus the customization ladder from a one-value copy to a full replacement. Read when colors or metrics need to change.
composable-getter constraint, the icon-slot pattern, and how to find an icon.
an Android app with Gradle and the Horizon OS manifest shape. Read when wiring the dependency, not the API.
Spatial SDK UI Set (`com.meta.spatial:meta-spatial-sdk-uiset`): the coordinate and package changes, the `Spatial*` rename table, and the behavioral differences. Read when the existing code says `SpatialTheme`.
For exact signatures and KDoc, hover the symbol in your IDE — every public type is documented. Outside the IDE, `metavr docs api-search "<Component>"` reaches the same reference.
Agentic skills and tools for Meta VR and Horizon OS development.
Repo: meta-quest/agentic-tools
Guides porting existing Android 2D apps to Meta VR and Horizon OS — input adaptation, panel…
Upgrades Meta VR apps to newer Horizon OS SDK versions — migration guides, deprecated API…
Guides design of comfortable, intuitive VR/MR experiences for Meta VR and Horizon OS —…
Builds WebXR experiences for Meta VR and Horizon OS using the Immersive Web SDK (IWSDK) — ECS…
Build multi-window Meta Horizon OS experiences with the MetaVrx Layout SDK in Jetpack Compose…
Scaffolds new Meta VR and Horizon OS projects after the build path is selected — Standard…