# expo-horizon

A skill that walks the agent through adding Meta Quest support to an Expo app, including the package swaps it should never do without asking.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 1200 installs · ★ 296
- Author: software-mansion-labs
- License: not stated · policy=link-only · description only; the file stays with the author
- Source: https://github.com/software-mansion-labs/skills/tree/HEAD/skills/expo-horizon/SKILL.md
- Updated: 2026-10-15
- HTML: https://affpapa.org/en/nevibecode/skills/expo-horizon

## What it does

The skill hands the agent a fixed order for Quest work: install `expo-horizon-core`, set up its config plugin, add quest and mobile build scripts, then detect the device at runtime with `isHorizonDevice` and `isHorizonBuild`. It ships no copy of the docs. Whenever detail is needed, the agent is told to fetch the README of the matching expo-horizon package.

Location and notifications are gated behind a question. The agent reads `package.json`, spots `expo-location` or `expo-notifications`, and waits for your answer before replacing anything. Quest hardware has no GPS, geocoding or geofencing, so those calls have to be guarded with `ExpoHorizon.isHorizonDevice`. Push requires a `horizonAppId` and goes through Meta's own service; Expo push tokens and badge counts are out.

Config values arrive as one list with defaults in brackets, so you can accept or override in a single reply. `supportedDevices` is required to submit to the Meta Horizon Store. A wide panel means your Expo orientation needs to be `"landscape"`. Any config change only lands after `npx expo prebuild --clean`, and skipping that step leaves the native project untouched.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add software-mansion-labs/skills --skill expo-horizon -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/expo-horizon/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/expo-horizon/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add software-mansion-labs/skills --skill expo-horizon -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/expo-horizon/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add software-mansion-labs/skills --skill expo-horizon -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/expo-horizon/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install software-mansion-labs/skills expo-horizon
```

2. **Manually: put the files in place**
- File: `.github/skills/expo-horizon/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add software-mansion-labs/skills --skill expo-horizon -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/software-mansion-labs/skills --path skills/expo-horizon
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/expo-horizon/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add software-mansion-labs/skills --skill expo-horizon -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/software-mansion-labs/skills/tree/HEAD/skills/expo-horizon/SKILL.md

## When to use it
- add Meta Quest support to an existing Expo app
- produce separate questDebug and questRelease builds
- configure the expo-horizon-core plugin for the devices you target
- swap expo-location while handling what Quest lacks
- route push notifications through Meta device tokens

## Example prompts
- Add Meta Quest support to this Expo app and list the config plugin values I need to decide on
- Look through `package.json` for `expo-location` and `expo-notifications` and propose moving to the expo-horizon packages
- Set up push notifications on Quest and explain why `getExpoPushTokenAsync` does not apply here

## Similar
- [vercel-react-native-skills](https://affpapa.org/en/nevibecode/skills/vercel-react-native-skills.md) — skill · 255200 installs
- [animate-expo](https://affpapa.org/en/nevibecode/skills/animate-expo.md) — skill · 137900 installs
- [mobile-native](https://affpapa.org/en/nevibecode/skills/mobile-native.md) — skill · 86600 installs
- [aso](https://affpapa.org/en/nevibecode/skills/aso.md) — skill · 75400 installs
- [swiftui-pro](https://affpapa.org/en/nevibecode/skills/swiftui-pro.md) — skill · 35200 installs
- [orca-emulator](https://affpapa.org/en/nevibecode/skills/orca-emulator.md) — skill · 5800 installs

From the same set: [software-mansion-labs/skills](https://affpapa.org/en/nevibecode/by/software-mansion-labs/skills.md) — 8 cards

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
