원클릭으로
vega-sdk
Fire TV Vega OS (Kepler) build system: npx kepler build, Vega app structure, platform-specific components
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Fire TV Vega OS (Kepler) build system: npx kepler build, Vega app structure, platform-specific components
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Template repo file structure: where screens, navigation, theme, data, and platform entries live in the monorepo
Android TV build and D-pad QA using Android CLI first, with bounded Gradle and ADB fallbacks
Expo Application Services cloud build configuration for TV app APK and IPA generation
Expo TV configuration: app.json plugins, prebuild settings, platform-specific config for react-native-tvos
Fire TV leanback manifest configuration: banner icons, LEANBACK_LAUNCHER intent filter, TV-specific Android settings
Gradle build commands: assembleDebug, assembleRelease, APK output paths, and emulator installation
| name | vega-sdk |
| description | Fire TV Vega OS (Kepler) build system: npx kepler build, Vega app structure, platform-specific components |
| applies_to | ["phase_vega_build"] |
| load_when | target platforms include `firetv-vega`, or touching `apps/vega/` |
Vega OS is Amazon's new TV operating system (Fire TV's next-gen runtime, distinct from Fire OS which is Android-based). It uses the Kepler runtime and its own SDK. The template's
apps/vega/is a separate app that shares UI viapackages/shared-uibut builds on a different toolchain.
apps/expo-multi-tv/.apps/vega/.Both are "Fire TV" in the marketing. The difference is real. A Fire OS APK does not run on Vega. A Vega bundle does not run on Fire OS.
If the AppSpec targets Fire TV in general, target both by default. Drop one only if the user explicitly excludes it.
apps/vega/ layoutapps/vega/
├── src/
│ ├── App.tsx # Vega entry
│ ├── screens/ # Vega-specific screens (if any)
│ └── ...
├── package.json # Has @amazon-devices/* deps
├── vega.config.js # Vega bundler config
└── assets/ # Vega-specific assets
It imports from @multi-tv/shared-ui like the Expo app does. The Metro .kepler.ts resolver picks Vega-specific files automatically.
@amazon-devices/* packagesThese are the Vega-specific ones the agent will encounter:
@amazon-devices/kepler-app — runtime, lifecycle, system events@amazon-devices/kepler-ui-components — native Vega UI primitives (use these for Vega-only screens for best perf)@amazon-devices/kepler-media — media playback APIs (use instead of react-native-video on Vega)@amazon-devices/kepler-pointer — input events, including remote@amazon-devices/kepler-navigation — system back, exit handlingThe shared UI catalog's <Player> has a .kepler.ts override that swaps in @amazon-devices/kepler-media. Don't bypass it.
packages/shared-ui components. Mostly works; .kepler.ts overrides exist where they don't.react-native-video → use @amazon-devices/kepler-media.expo-font → fonts are loaded via Vega manifest, not at runtime.expo-image → use Vega's image primitive or plain <Image>.package.json deps before adding.If you add a new dependency to packages/shared-ui (which both apps consume), check it works on Vega. The safe rule: pure-JS packages port; native-bridged packages probably don't.
# From repo root
yarn workspace vega install
# Dev build (deploys to connected Vega device or sim)
yarn workspace vega dev
# Production bundle
yarn workspace vega build
# Bundle artifact ends up in apps/vega/dist/
The vega_build tool wraps these. The agent should not invoke Vega builds in parallel with Expo builds — both compete for emulator/device handles and the failure modes are confusing.
apps/vega/vega.json (or equivalent — check current template) declares:
When customize_app_metadata runs, it must update both apps/expo-multi-tv/app.json and apps/vega/vega.json. Keeping them in sync is the agent's responsibility.
| Symptom | Cause | Fix |
|---|---|---|
| "Module not found: @amazon-devices/*" on a non-Vega build | Imported a Kepler module without .kepler.ts extension | Move the import to a .kepler.ts file; provide a stub for the other platforms |
| Player shows black screen on Vega only | Using react-native-video directly | Use the <Player> from shared-ui, which has the override |
| App launches but remote doesn't navigate | Missing <SpatialNavigationRoot> on the Vega entry screen | Wrap as usual |
| Build succeeds but app rejected by Vega validator | Missing capability declaration in vega.json | Add the capability |
| Fonts don't render | Custom font not declared in Vega manifest | Declare in vega.json fonts array |
Add .kepler.ts only if:
Don't add it for:
.kepler.ts overrides instead.The Vega Virtual Device Agent is the primary testing target:
npx kepler device start # Start VDA
npx kepler device list # Verify it's running
npx kepler install # Deploy the built app
npx kepler launch # Start the app
npx kepler screenshot <path> # Capture screen
npx kepler key right # Send D-pad right
npx kepler key down # Send D-pad down
npx kepler key center # Send select/enter
npx kepler key back # Send back
npx kepler stop # Stop the app
Don't ship to a real device on first run. VDA catches common issues faster.
The @amazon-devices/amazon-devices-buildertools-mcp package provides additional diagnostic tools:
analyze_perfetto_traces for app launch time analysis (TTFF, TTFD)get_app_hot_functions for CPU profilingsymbolicate_acr for crash report analysissearch_documentation for Vega-specific guidanceVega supports Appium via the Vega Appium Driver for more complex test scenarios. Use locator strategies specific to Vega. For the QA loop, the Kepler CLI commands above are sufficient.
npx kepler logs # Stream app logs (Vega equivalent of logcat)
npx kepler logs --filter=error # Filter for errors only
packages/shared-ui for Vega. Defeats the monorepo. Use .kepler.ts overrides on specific files.if (Platform.OS === 'kepler') in shared files. Use platform extensions; the bundler is the routing layer.apps/vega/ like a copy of apps/expo-multi-tv/. It's a different runtime. Its entry, lifecycle, and APIs differ.