Expo Config Plugin
The package exports a run-once Expo config plugin from plugin/src/index.ts.
Plugin entry
Section titled “Plugin entry”plugins: ['@ddgutierrezc/legato-react-native']LegatoExpoConfigPluginOptions is currently Record<string, never>, so milestone-1 has no public option knobs.
What the plugin modifies
Section titled “What the plugin modifies”iOS (plugin/src/ios.ts)
Section titled “iOS (plugin/src/ios.ts)”- Ensures
UIBackgroundModesincludesaudio. - Uses set semantics to avoid duplicates.
Android (plugin/src/android.ts)
Section titled “Android (plugin/src/android.ts)”- Ensures manifest permissions:
android.permission.FOREGROUND_SERVICEandroid.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACKandroid.permission.WAKE_LOCK
- Ensures exactly one
expo.modules.legato.LegatoPlaybackServicedeclaration under application services with:android:enabled="true"android:exported="false"android:foregroundServiceType="mediaPlayback"
Boundaries
Section titled “Boundaries”| Category | In scope | Out of scope |
|---|---|---|
| Build-time native wiring | ✅ prebuild manifest/plist baseline | ❌ runtime playback orchestration |
| Options | ✅ plain plugin string registration | ❌ custom channels/service-class overrides/arbitrary patch options |
| Host claims | ✅ Expo dev build (prebuild, run:ios, run:android) | ❌ Expo Go native proof claims |
Test-backed guardrails
Section titled “Test-backed guardrails”plugin/src/__tests__/boundary.test.ts: plugin remains build-time and avoids runtime bridge imports.plugin/src/__tests__/docs-readiness.test.ts: docs boundary statements and readiness evidence requirements are enforced.