Expo Tailwind Setup
CherryHQ/cherry-studio-app
Set up Tailwind CSS v4 in Expo with react-native-css and NativeWind v5 for universal styling
Build and iterate on React Native apps for Meta VR / Horizon OS with Expo.
$ npx skills add meta-quest/agentic-tools --skill hz-react-native-expo -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install meta-quest/agentic-tools hz-react-native-expo --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/meta-quest/agentic-tools.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/hz-react-native-expo .claude/skills/hz-react-native-expo && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "hz-react-native-expo" agent skill from https://github.com/meta-quest/agentic-tools/tree/main/skills/hz-react-native-expo into .claude/skills/hz-react-native-expo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hz-react-native-expo", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/meta-quest/agentic-tools/tree/main/skills/hz-react-native-expoType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add meta-quest/agentic-tools --skill hz-react-native-expo -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install meta-quest/agentic-tools hz-react-native-expo --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/meta-quest/agentic-tools.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/hz-react-native-expo .agents/skills/hz-react-native-expo && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "hz-react-native-expo" agent skill from https://github.com/meta-quest/agentic-tools/tree/main/skills/hz-react-native-expo into .agents/skills/hz-react-native-expo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hz-react-native-expo", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add meta-quest/agentic-tools --skill hz-react-native-expo -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install meta-quest/agentic-tools hz-react-native-expo --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/meta-quest/agentic-tools.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/hz-react-native-expo .cursor/skills/hz-react-native-expo && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "hz-react-native-expo" agent skill from https://github.com/meta-quest/agentic-tools/tree/main/skills/hz-react-native-expo into .cursor/skills/hz-react-native-expo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hz-react-native-expo", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/meta-quest/agentic-tools.git --path skills/hz-react-native-expo--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add meta-quest/agentic-tools --skill hz-react-native-expo -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install meta-quest/agentic-tools hz-react-native-expo --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/meta-quest/agentic-tools.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/hz-react-native-expo .gemini/skills/hz-react-native-expo && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "hz-react-native-expo" agent skill from https://github.com/meta-quest/agentic-tools/tree/main/skills/hz-react-native-expo into .gemini/skills/hz-react-native-expo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hz-react-native-expo", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install meta-quest/agentic-tools hz-react-native-expoInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add meta-quest/agentic-tools --skill hz-react-native-expo -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/meta-quest/agentic-tools.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/hz-react-native-expo .github/skills/hz-react-native-expo && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "hz-react-native-expo" agent skill from https://github.com/meta-quest/agentic-tools/tree/main/skills/hz-react-native-expo into .github/skills/hz-react-native-expo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hz-react-native-expo", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add meta-quest/agentic-tools --skill hz-react-native-expo -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install meta-quest/agentic-tools hz-react-native-expo --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/meta-quest/agentic-tools.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/hz-react-native-expo .opencode/skills/hz-react-native-expo && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "hz-react-native-expo" agent skill from https://github.com/meta-quest/agentic-tools/tree/main/skills/hz-react-native-expo into .opencode/skills/hz-react-native-expo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hz-react-native-expo", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
hz-react-native-expoBuild and iterate on React Native apps for Meta VR / Horizon OS with Expo.
Hz React Native Expo is an agent skill from meta-quest/agentic-tools. Build and iterate on React Native apps for Meta VR / Horizon OS with Expo. Covers the fast dev loop — install Expo Go from the Meta Horizon Store, run a Metro dev server, load its bundle URL on the headset, and get live Fast Refresh — plus the full development-build path with the expo-horizon-core config plugin, prebuild, Quest product flavors, and the Horizon-forked libraries (location, notifications, IAP). Use when the user wants to build or run a Meta VR app in React Native/Expo, load a JS bundle URL on a…
Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `references/dev-loop.md`, `references/expo-horizon-core-setup.md` and `references/horizon-libraries.md`).
It sits in Mobile, covering Cross-platform mobile apps. It works with Expo, React Native and Android. The repository describes itself as: Agent Skills for Meta Quest/Horizon OS VR Development. The licence is Apache-2.0.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 3a8553d. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadBash(npx:*)Bash(npm:*)Bash(yarn:*)Bash(expo:*)Bash(metavr:*)Bash(hzdb:*)From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npxexponpmyarnFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
developers.meta.commeta.comoss.callstack.comnpmjs.comdocs.expo.devFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Hz React Native Expo loads about 2.8k tokens when it runs, and up to ~6.2k if it reads all its reference files. Until then it costs about 174 tokens; SKILL.md has 1,159 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from meta-quest/agentic-tools at commit 3a8553d, republished under its Apache-2.0 licence (© meta-quest). 1,159 words, ~2,788 tokens.
.claude/skills/hz-react-native-expo/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.Build React Native apps for Meta VR / Horizon OS using Expo — the tooling Meta recommends for React Native on Meta VR. This skill focuses on the development loop: get your JS running on the headset and iterating with live reload, then graduate to a full Meta VR development build when you need native Horizon features.
A Meta VR RN app renders as a 2D panel in Horizon OS. This is Android app
development, so the headset-setup, ADB, and device basics live in other skills —
this skill references them instead of repeating them (see
hz-new-project-creation for developer-mode
and dashboard setup, metavr-cli for device/ADB
commands, and portal for the Android build toolchain).
There are two runtimes, and picking the right one is the most important decision. Both load a JS bundle URL from a Metro dev server and Fast-Refresh on save; they differ in what native code is available.
| Expo Go (fastest loop) | Development build (full control) | |
|---|---|---|
| What it is | Prebuilt app from the Horizon Store | A dev client you build, with your native config |
| Install | One tap from the Store (link below) | expo run:android --variant questDebug |
| Loads a bundle URL | Yes | Yes |
| Live Fast Refresh | Yes | Yes |
expo-horizon-core config (App ID, panel size) | ❌ not applied (prebuild-time) | ✅ applied |
| Horizon-forked native libs / custom native modules | ❌ | ✅ |
| Best for | Pure-JS + standard Expo module iteration | Real Meta VR apps: App ID, panel size, notifications, location, IAP |
Rule of thumb: start in Expo Go for the tightest UI/logic loop, then move
to a development build the moment you add expo-horizon-core, a Horizon-forked
library, or any custom native module. The dev build is also a dev client, so the
bundle-URL + Fast-Refresh loop is identical — you just rebuild native occasionally.
metavr device list. Full walkthrough: hz-new-project-creation
and metavr-cli.npx expo (no global install needed).metavr --version (standalone binary on PATH; or npx -y metavr --version with no install).Verify the device first:
metavr device list # or: npx -y metavr device listThe quickest way to see your app on the headset. Nothing to build.
Open the Meta Horizon Store on the headset (or the web store) and install Expo Go:
You can also open that link in the Meta Horizon phone app or on the web and click Install to push it to your headset.
In your Expo project on your dev machine:
npx expo start # Metro on :8081; prints a QR + an exp:// bundle URL
# If the headset is on a different network / LAN is blocked:
npx expo start --tunnel # bundle URL over the internet (exp://...exp.direct)Metro prints a bundle URL like exp://<LAN-IP>:8081 (LAN) or an
exp://<id>.exp.direct URL (tunnel). That URL is what Expo Go loads.
Three ways, easiest first:
metavr adb shell am start -a android.intent.action.VIEW -d "exp://<LAN-IP>:8081"exp://… URL with the controller keyboard.Save a file → Fast Refresh repaints the headset with no reload. Press r in
the Metro terminal (or use the in-app dev menu) for a full reload. This is the
"automatic updates / live display of changes" loop — the headset is just another
preview surface, like a browser tab for the web.
Expo Go caveats (details in references/dev-loop.md):
npx expo install --fix realigns deps to the project's
current SDK (it doesn't switch SDKs); to fix a mismatch, upgrade the project's
Expo SDK or install the matching Expo Go build.horizonAppId, panel size, product
flavors, etc. are prebuild-time and are ignored in Expo Go.Use this for real Meta VR apps: it sets your Horizon App ID, panel size, and gives you the Horizon-forked native libraries. The result is a development build — a dev client you install once that then loads bundle URLs and Fast-Refreshes exactly like Expo Go, but with your native config baked in.
npm install expo-horizon-core # or: yarn add expo-horizon-core
npx expo install expo-dev-client # dev-client runtime + launcher (Enter URL screen)Add the config plugin to app.json (or app.config.js/.ts):
{
"expo": {
"plugins": [
["expo-horizon-core", {
"horizonAppId": "DEMO_APP_ID",
"defaultHeight": "640dp",
"defaultWidth": "1024dp",
"supportedDevices": "quest2|questpro|quest3|quest3s",
"disableVrHeadtracking": false,
"orientation": "default"
}]
]
}
}Get a real horizonAppId from the developer dashboard
(https://developers.meta.com). Full option reference and gotchas:
references/expo-horizon-core-setup.md.
expo-horizon-core uses Android product flavors so one project builds for both
Meta VR and mobile:
npx expo prebuild --cleanAdd build scripts to package.json:
{
"scripts": {
"quest": "expo run:android --variant questDebug",
"quest:release": "expo run:android --variant questRelease",
"android": "expo run:android --variant mobileDebug",
"android:release": "expo run:android --variant mobileRelease"
}
}With the headset connected:
yarn quest # builds the questDebug dev client, installs it, starts Metro,
# and the app auto-connects to the bundle URL + Fast RefreshesAfter the first build, JS edits Fast-Refresh with no rebuild. The dev client's
launcher screen also lets you enter or scan a bundle URL manually — the same
loop as Expo Go, for your custom client. Rebuild native only when native deps or
config change (see references/dev-loop.md).
A few libraries need Horizon-specific forks; guard platform-specific code with
isHorizonDevice() from expo-horizon-core. Covered in
references/horizon-libraries.md:
expo-horizon-location — location (Quest has no GPS; limited)expo-horizon-notifications — user notificationsexpo-iap — in-app purchases via the Meta Horizon Billing SDKFor an autonomous edit loop, use metavr as the feedback oracle (see
metavr-cli and hz-vr-debug):
metavr adb logcat --follow --tag ReactNative # Metro/JS logs + red-box errors
metavr capture screenshot -o screen.pngCompile errors surface in the Metro terminal and as an on-device red box; a
missing dependency shows up as a bundling 500.
A questRelease build is a normal signed Android app (APK/AAB). Package it, then
submit to the Meta Horizon Store — see hz-store-submit
for the end-to-end submission flow and ovr-platform-util upload. For
production over-the-air JS updates to installed builds, use EAS Update (out of
scope for the dev loop).
npx expo install --fix realigns deps to the project's current SDK; to actually
match Expo Go, upgrade the project's Expo SDK or install a matching Expo Go build.npx expo start --tunnel.references/dev-loop.md.mobileDebug installs a phone build that won't behave as a
Quest panel; use questDebug/questRelease for the headset.com.company.app before the first install;
changing it later causes reinstalls/data loss.references/dev-loop.md — bundle URLs (LAN vs tunnel),
deep-linking, Fast Refresh, SDK matching, Expo Go vs dev-build capabilities, and
troubleshooting.references/expo-horizon-core-setup.md —
full config-plugin options, expo prebuild, product flavors, and build scripts.references/horizon-libraries.md — the
Horizon-forked libraries, isHorizonDevice(), and unsupported deps/permissions.expo-horizon-core — https://www.npmjs.com/package/expo-horizon-core© meta-quest, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 3 other files (references) in skills/hz-react-native-expo of meta-quest/agentic-tools.
Open the folder on GitHubat commit 3a8553d
Hz React Native Expo next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Hz React Native Expo this skillmeta-quest/agentic-tools | 215 | — | ~2.8k | Automated safety check: Pass | Apache-2.0 | |
| Expo Tailwind SetupCherryHQ/cherry-studio-app | 4k | 8 repos | ~3k | Automated safety check: Pass | MIT | |
| Screenmapaleqsio/screenmap | 243 | — | ~7.2k | Automated safety check: Pass | MIT | |
| Expo Brownfield Integrationmweinbach/agent-coworker | 156 | 2 repos | ~900 | Automated safety check: Notes | Custom licence | |
| Expo UIarcboxlabs/linkcode | 156 | — | ~1.2k | Automated safety check: Pass | MIT | |
| Simfleetentropyconquers/simfleet | 118 | — | ~1.5k | Automated safety check: Pass | MIT |
CherryHQ/cherry-studio-app
Set up Tailwind CSS v4 in Expo with react-native-css and NativeWind v5 for universal styling
aleqsio/screenmap
Generate a visual navigation map of an Expo / React Native or NativeScript app.
mweinbach/agent-coworker
Helps add Expo and React Native to an existing native iOS or Android app, and choose between a prebuilt AAR or XCFramework and a fully integrated build.
arcboxlabs/linkcode
Framework (OSS). An agent skill from arcboxlabs/linkcode.
entropyconquers/simfleet
Operate a simfleet device fleet: slimmed iOS simulators and Android emulators, parallel React Native worktree lanes with leased Metro ports, the native build cache, and per-agent device claims.
talsec/Free-RASP-ReactNative
Performs strict code reviews on React Native plugin projects covering TypeScript, the Kotlin (Android) and Swift (iOS) native bridges, and the Expo config plugin.
meta-quest/agentic-tools
Guides porting existing Android 2D apps to Meta VR and Horizon OS — input adaptation, panel layout, and design requirements.
meta-quest/agentic-tools
Upgrades Meta VR apps to newer Horizon OS SDK versions — migration guides, deprecated API replacements, changelog.
meta-quest/agentic-tools
Builds WebXR experiences for Meta VR and Horizon OS using the Immersive Web SDK (IWSDK) — ECS architecture, Three.js integration, spatial UI.
meta-quest/agentic-tools
Build multi-window Meta Horizon OS experiences with the MetaVrx Layout SDK in Jetpack Compose or React Native.
meta-quest/agentic-tools
Scaffolds new Meta VR and Horizon OS projects after the build path is selected — Standard Android, Meta Spatial SDK, Unity, Unreal, or WebXR.
meta-quest/agentic-tools
Analyzes Meta VR and Horizon OS VR performance using Perfetto traces — frame timing, CPU/GPU bottlenecks, render pass analysis.
Works with
Categories
Build and iterate on React Native apps for Meta VR / Horizon OS with Expo. Hz React Native Expo is an agent skill from meta-quest/agentic-tools. Build and iterate on React Native apps for Meta VR / Horizon OS with Expo.
Hz React Native Expo fits situations like: the user wants to build; run a Meta VR app in React Native/Expo; load a JS bundle URL on a headset; set up expo-horizon-core.
Run `npx skills add meta-quest/agentic-tools --skill hz-react-native-expo -a claude-code`. Or copy the skill folder (skills/hz-react-native-expo in meta-quest/agentic-tools) into .claude/skills/hz-react-native-expo in your project. Claude Code loads it when a task matches its description.
Run `npx skills add meta-quest/agentic-tools --skill hz-react-native-expo -a codex`. Or copy the skill folder (skills/hz-react-native-expo in meta-quest/agentic-tools) into .agents/skills/hz-react-native-expo in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add meta-quest/agentic-tools --skill hz-react-native-expo -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/hz-react-native-expo, .gemini/skills/hz-react-native-expo, .github/skills/hz-react-native-expo and .opencode/skills/hz-react-native-expo in your project.
Going by SKILL.md and its folder, Hz React Native Expo needs the command-line tools its instructions call (npx, expo, npm and yarn). Our summary lists: Node.js. Its frontmatter pre-approves these tools: Read, Bash(npx:*), Bash(npm:*), Bash(yarn:*), Bash(expo:*), Bash(metavr:*), Bash(hzdb:*).
SKILL.md names 5 domains. As links in the text: developers.meta.com, meta.com, oss.callstack.com, npmjs.com and docs.expo.dev. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Hz React Native Expo is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 3.4k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Hz React Native Expo: Expo Tailwind Setup (CherryHQ/cherry-studio-app, 4k stars), Screenmap (aleqsio/screenmap, 243 stars), Expo Brownfield Integration (mweinbach/agent-coworker, 156 stars) and Expo UI (arcboxlabs/linkcode, 156 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
meta-quest (a GitHub organization) maintains it in meta-quest/agentic-tools, which has 215 GitHub stars. The repository holds 34 skills in this directory. The repository was last updated on September 24, 2026.
Source: meta-quest/agentic-tools on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.