cap-go/capgo-skills/capacitor-splash-screen
Claude Code and agent skill by cap-go/capgo-skills
- community
Checking that the SKILL.md file is still in the repository.
Configures and debugs launch splash screens in Capacitor apps with @capacitor/splash-screen and @capacitor/assets - `launchAutoHide`, `SplashScreen.hide()`, `launchFadeOutDuration` (Android default changed 200 -> 0 in Capacitor 9), Android 12+ SplashScreen API theme (`Theme.SplashScreen`, `windowSplashScreenAnimatedIcon`), iOS `LaunchScreen.storyboard` + `Splash.imageset`, and Capacitor 8.5 UIScene/SceneDelegate effects (window created in code, Main.storyboard no longer supplies the root view controller). Use for white/black flash at launch, splash never hiding, cropped/tiny Android 12 icon, dark-mode splash, or regenerating icons and splash assets. Do not use for status/navigation bar color and insets (safe-area-handling), the UIScene migration itself (capacitor-uiscene-migration), or startup performance profiling (capacitor-performance).
Install
npx vskill@latest install cap-go/capgo-skills/capacitor-splash-screenSKILL.md
Splash Screen in Capacitor
When to Use
TRIGGER when:
- Configuring or regenerating splash / icon assets (
npx capacitor-assets generate) - Splash never disappears, disappears too early, or flashes white/black before the web app paints
- Android 12+ shows a small cropped icon on a solid color instead of the full image
- Upgrading to Capacitor 9 and the Android fade-out animation vanished
- iOS shows a black screen after adding
SceneDelegate.swift(8.5+)
Do not use:
- Status bar / navigation bar styling and edge-to-edge insets:
safe-area-handling - Migrating AppDelegate to SceneDelegate:
capacitor-uiscene-migration - Slow first paint / bundle size:
capacitor-performance - Icon requirements for store submission:
capacitor-app-store
How launch works (decide what to edit)
| Phase | iOS | Android 12+ | Android <= 11 | |
|---|---|---|---|---|
| OS launch screen (before any code) | LaunchScreen.storyboard (UILaunchStoryboardName), image Splash in Assets.xcassets/Splash.imageset | System SplashScreen API: theme AppTheme.NoActionBarLaunch with Theme.SplashScreen parent - icon + background color only | androidx.core:core-splashscreen compat, or android:background drawable | |
Plugin splash (until hide()) | Plugin overlay on the bridge view | Same system splash held via the API | Plugin ImageView / Dialog (androidSplashResourceName, androidScaleType) |
Most androidScaleType, showSpinner, splashFullScreen, layoutName, useDialog, backgroundColor options do not apply on Android 12+ launch (the OS draws it). They only affect show() and pre-12 devices.
Workflow
- Inspect:
capacitor.config.*plugins.SplashScreen,android/app/src/main/res/values/styles.xml,android/variables.gradle(coreSplashScreenVersion),ios/App/App/Info.plist,ios/App/App/SceneDelegate.swift,assets/orresources/folder. - Install:
npm install @capacitor/splash-screen && npx cap sync. - Assets: put sources in
assets/(icon-only.png,icon-foreground.png,icon-background.png,splash.png,splash-dark.png; splash >= 2732x2732, icons >= 1024x1024), thennpm install -D @capacitor/assets && npx capacitor-assets generate(--ios,--android,--pwato scope). Keep the logo inside the center ~1/3 so Android 12+ circular masking does not crop it. - Hide deliberately: set
launchAutoHide: falseand callhide()after the first meaningful render (below). - Android 12+ tuning if needed: references/android-12-splash.md.
- Verify (below).
Recommended config
Traps:
- With
launchAutoHide: false, a JS crash beforehide()leaves the app stuck on the splash. Add a fallback:setTimeout(() => SplashScreen.hide(), 8000). - Default when auto-hiding is 500 ms (
launchShowDuration). Long fixed durations hurt perceived startup; hide on readiness instead. - Set
<body>/ root background to the splash background color, or the gap between native splash and first web paint flashes white (dark mode: black). - Live updates (
capgo-live-updates): callnotifyAppReady()independently ofhide(); do not gate one on the other.
Version notes
| Version | Change | |
|---|---|---|
| 4 | Android uses the Android 12 SplashScreen API + compat library | |
| 7 | SplashScreenShowOptions / SplashScreenHideOptions types removed -> ShowOptions / HideOptions | |
| 8 | coreSplashScreenVersion = '1.2.0' | |
| 8.5 (iOS) | UIScene template creates the window and CAPBridgeViewController in SceneDelegate; Main.storyboard no longer supplies the root view controller. LaunchScreen.storyboard is unchanged and still required. | |
| 9 | Android launchFadeOutDuration default 200 -> 0 (the old default could block UI changes right after hide()). Set 200 explicitly to keep the fade. |
iOS notes (Capacitor 8.5+ scenes)
- Keep
UILaunchStoryboardName = LaunchScreenin Info.plist. Apple requires a launch storyboard; deleting it causes letterboxed / wrong-size rendering. - Do not add views or a custom view controller to
Main.storyboardexpecting them to show: the 8.5 SceneDelegate setswindow.rootViewController = CAPBridgeViewController()in code. Put a customCAPBridgeViewControllersubclass there instead. - Black screen right after launch with a scene manifest = SceneDelegate creates no window (missing
window = UIWindow(windowScene:)+makeKeyAndVisible()) orUISceneDelegateClassNamepoints to a missing class. Fix withcapacitor-uiscene-migration. - The storyboard is cached by iOS. After changing it, delete the app from the device/simulator and reinstall.
- On resizable windows / iPad / foldables the launch storyboard must use Auto Layout constraints, not fixed frames (see
capacitor-ios-resizabilityif present).
Verification
npx cap syncthen a clean native build (Product > Clean Build Folderin Xcode;./gradlew cleaninandroid/).- Delete and reinstall the app (both platforms cache launch screens).
- Cold launch on: iOS device light + dark mode, Android 12+ device, Android <= 11 emulator (if minSdk allows; Capacitor 9 minSdk is 26).
- Confirm: no white/black flash, splash hides once the first screen is visible, fade matches the configured duration.
- Grep for leftovers:
Error Handling
| Symptom / message | Cause | Fix | |
|---|---|---|---|
| Splash stays forever | launchAutoHide: false and hide() never runs (JS error, wrong import, called before plugin load) | Check web console; add timeout fallback | |
| Fade-out gone after Capacitor 9 upgrade (Android) | Default launchFadeOutDuration is now 0 | Set launchFadeOutDuration: 200 | |
UI changes right after hide() not visible (Android, pre-9) | 200 ms fade blocked updates | Set launchFadeOutDuration: 0 | |
| Android 12+ shows small icon, image cropped | OS splash is icon-only by design | Provide adaptive icon-safe artwork; tune windowSplashScreenAnimatedIcon | |
| Android 12/12L no splash from third-party launchers or Android Studio | Platform bug fixed in Android 13 | Test from the stock launcher | |
error: resource drawable/splash not found | androidSplashResourceName or styles reference a missing drawable | Regenerate assets or fix the name in both config and styles.xml | |
AAPT: error: style attribute 'attr/windowSplashScreenAnimatedIcon' not found | core-splashscreen dependency missing | Restore implementation "androidx.core:core-splashscreen:$coreSplashScreenVersion" | |
| iOS black screen after 8.5 scene adoption | No window created in SceneDelegate | See iOS notes / capacitor-uiscene-migration | |
| Old splash still shows on iOS | Launch screen cache | Delete app, reboot device if needed, reinstall |
Resources
- Plugin API: https://capacitorjs.com/docs/apis/splash-screen
- Splash screens and icons guide: https://capacitorjs.com/docs/guides/splash-screens-and-icons
- Updating to 9.0: https://capacitorjs.com/docs/updating/9-0
- Android SplashScreen API: https://developer.android.com/develop/ui/views/launch/splash-screen
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/capacitor-splash-screen/SKILL.md
Popularity
- Repository stars
- 24
- Repository forks
- 5
- Repository npm downloads, 7 days
- 46
- 7-day trend score
- 25
Stars and forks are for the whole GitHub repository, not this skill alone. Downloads are for the repository's npm package. Refreshed 6 Apr 2026, 6 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/cap-go/capgo-skills/capacitor-splash-screen)