crazycodeboy/react-native-splash-screen
A splash screen for react-native, hide when application loaded ,it works on iOS and Android.
Stale — last commit 2y ago
weakest axislast commit was 2y ago; no CI workflows detected
Has a license, tests, and CI — clean foundation to fork and modify.
Documented and popular — useful reference codebase to read through.
last commit was 2y ago; no CI workflows detected
- ✓36+ active contributors
- ✓MIT licensed
- ✓Tests present
Show all 6 evidence items →Show less
- ⚠Stale — last commit 2y ago
- ⚠Concentrated ownership — top contributor handles 54% of recent commits
- ⚠No CI workflows detected
What would change the summary?
- →Use as dependency Mixed → Healthy if: 1 commit in the last 365 days
- →Deploy as-is Mixed → Healthy if: 1 commit in the last 180 days
Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Forkable" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/crazycodeboy/react-native-splash-screen)Paste at the top of your README.md — renders inline like a shields.io badge.
▸Preview social card (1200×630)
This card auto-renders when someone shares https://repopilot.app/r/crazycodeboy/react-native-splash-screen on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: crazycodeboy/react-native-splash-screen
Generated by RepoPilot · 2026-05-09 · Source
🤖Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding. - Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/crazycodeboy/react-native-splash-screen shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
🎯Verdict
WAIT — Stale — last commit 2y ago
- 36+ active contributors
- MIT licensed
- Tests present
- ⚠ Stale — last commit 2y ago
- ⚠ Concentrated ownership — top contributor handles 54% of recent commits
- ⚠ No CI workflows detected
<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>
✅Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live crazycodeboy/react-native-splash-screen
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/crazycodeboy/react-native-splash-screen.
What it runs against: a local clone of crazycodeboy/react-native-splash-screen — the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in crazycodeboy/react-native-splash-screen | Confirms the artifact applies here, not a fork |
| 2 | License is still MIT | Catches relicense before you depend on it |
| 3 | Default branch master exists | Catches branch renames |
| 4 | Last commit ≤ 677 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of crazycodeboy/react-native-splash-screen. If you don't
# have one yet, run these first:
#
# git clone https://github.com/crazycodeboy/react-native-splash-screen.git
# cd react-native-splash-screen
#
# Then paste this script. Every check is read-only — no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of crazycodeboy/react-native-splash-screen and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "crazycodeboy/react-native-splash-screen(\\.git)?\\b" \\
&& ok "origin remote is crazycodeboy/react-native-splash-screen" \\
|| miss "origin remote is not crazycodeboy/react-native-splash-screen (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(MIT)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"MIT\"" package.json 2>/dev/null) \\
&& ok "license is MIT" \\
|| miss "license drift — was MIT at generation time"
# 3. Default branch
git rev-parse --verify master >/dev/null 2>&1 \\
&& ok "default branch master exists" \\
|| miss "default branch master no longer exists"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 677 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~647d)"
else
miss "last commit was $days_since_last days ago — artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) — safe to trust"
else
echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/crazycodeboy/react-native-splash-screen"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
⚡TL;DR
react-native-splash-screen is a native bridge library that provides programmatic control over the native splash screen in React Native apps. It lets JavaScript code show and hide the splash screen after the app loads, supporting both iOS (Objective-C) and Android (Java). The core problem it solves: preventing the jarring flash when your app transitions from native launch screen to JavaScript-rendered UI. Dual-platform structure: android/src/main/java/org/devio/rn/splashscreen/ contains SplashScreen.java (core logic), SplashScreenModule.java (JS bridge), and SplashScreenReactPackage.java (native module registration). iOS implementation mirrors this in native code (not shown in file list but referenced). The /examples directory contains a full React Native app demonstrating usage with App.js as the entry point.
👥Who it's for
React Native developers building iOS and Android apps who need to display a splash screen during app startup and hide it once their JavaScript bundle has loaded and initial data is ready. Specifically useful for apps with long startup times or asynchronous initialization (API calls, database setup).
🌱Maturity & risk
Actively maintained and production-ready. At v3.3.0 with clear version compatibility (v3.x for React Native ≥0.47.0). The codebase is compact (~8.5KB across Java/Objective-C), has working examples in /examples, and handles both platforms. Last visible activity and release badges suggest ongoing support, though commit frequency data isn't shown.
Low-to-moderate risk for current RN versions. Single-maintainer project (crazycodeboy) with relatively few dependencies (relies on react-native peer dependency only). Main risks: future React Native API changes (native module API evolves), and the gap between v3.3.0 and current RN versions (now at 0.73+) may introduce compatibility issues. No visible test suite in file structure suggests limited automated validation.
Active areas of work
No specific PR or milestone data visible in the file list. The repo appears to be in maintenance mode—the badge shows v3.3.0 and references the GitHub release page, suggesting releases are tracked but the file list doesn't show active development branches or open issues.
🚀Get running
git clone https://github.com/crazycodeboy/react-native-splash-screen.git
cd react-native-splash-screen
npm install
cd examples
npm install
npm run android # or npm run ios
Daily commands:
After npm install in the project root or examples: react-native run-android or react-native run-ios. The examples/App.js demonstrates calling SplashScreen.hide() after app initialization.
🗺️Map of the codebase
- android/src/main/java/org/devio/rn/splashscreen/SplashScreenModule.java: Bridges JS to native Android code; defines the public show() and hide() methods and exports them to React
- android/src/main/java/org/devio/rn/splashscreen/SplashScreen.java: Core Android implementation; manages the native Activity/View lifecycle for displaying and removing the splash screen overlay
- android/src/main/java/org/devio/rn/splashscreen/SplashScreenReactPackage.java: Registers the native module with React Native's module registry; required for linking the library to the app
- android/src/main/res/values/styles.xml: Defines the launch theme (SplashScreen_Fullscreen) that controls initial splash screen appearance on Android
- examples/App.js: Runnable example demonstrating the full integration pattern: importing SplashScreen, calling hide() after async setup
- examples/android/app/src/main/java/com/examples/MainActivity.java: Shows how to initialize SplashScreen in the Activity's onCreate before React is loaded
🛠️How to make changes
For Android changes: edit android/src/main/java/org/devio/rn/splashscreen/SplashScreen.java (logic) and android/src/main/res/values/styles.xml (styling). For iOS changes: work with native Objective-C files (not listed but mirrored in structure). To add features: modify SplashScreenModule.java to expose new methods, then call them from JS. Test by running examples/App.js on both platforms.
🪤Traps & gotchas
Android Manifest must include the SplashScreenReactPackage in MainApplication.java's getPackages() method (manual linking step). iOS requires manual LaunchScreen.storyboard setup—just having the native code isn't enough; the launch screen must reference the app's splash image. The library assumes the splash screen image and theme exist in app resources; missing these causes crashes or blank screens. React Native 0.60+ uses autolinking, but older projects need manual android/settings.gradle and MainApplication.java modifications shown in README but not in file structure.
💡Concepts to learn
- React Native Native Modules — This library is built entirely on the native module bridge pattern; understanding how SplashScreenModule.java connects to JavaScript via NativeModules is essential to modify or extend it
- Android Activity Lifecycle — The splash screen must be shown before React initialization and removed after JavaScript loads; this requires deep knowledge of Activity onCreate/onResume timing in MainActivity.java
- Android Theme and Style Inheritance — The library uses android:theme attributes in AndroidManifest.xml and custom styles in styles.xml; the SplashScreen_Fullscreen theme must extend AppTheme correctly to avoid layout conflicts
- iOS LaunchScreen vs Splash Screen — iOS distinguishes between the system LaunchScreen.storyboard (shown instantly by the OS) and a programmatically controlled splash overlay; contributors must understand when each is appropriate
- Bridge Communication and Async Initialization — The hide() call must be timed correctly relative to app readiness (after data loads); developers need to understand Promise/callback semantics when calling native code from JavaScript
🔗Related repos
facebook/react-native— The core framework this library extends; understanding React Native's native module system and Activity/View lifecycle is required to contributecrazycodeboy/RNStudyNotes— The author's companion repository with detailed Chinese docs on React Native startup splash screen mechanics and solutionscrazycodeboy/flutter_splash_screen— The same author's Flutter equivalent library, useful for understanding cross-platform splash screen patterns
🪄PR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Add TypeScript type definitions for the native module API
The repo lacks TypeScript definitions (.d.ts files) for the SplashScreen native module. This is critical for TypeScript users and improves IDE autocomplete. The JavaScript API exposed by SplashScreen.java and SplashScreenModule.java should have corresponding type definitions.
- [ ] Create index.d.ts at the root with type definitions for SplashScreen.show(), SplashScreen.hide(), and any configuration options
- [ ] Add proper JSDoc comments in the native modules (SplashScreenModule.java, SplashScreen.java) to document exported methods
- [ ] Update package.json to include 'typings' field pointing to index.d.ts
- [ ] Add example usage in README.md showing TypeScript import patterns
Add GitHub Actions CI workflow for Android builds and testing
The repo has no CI/CD configuration visible. Adding a GitHub Actions workflow to build the Android library, run ProGuard, and test against multiple Android SDK versions would catch regressions early. This is especially important given the minSdkVersion=16 support claim.
- [ ] Create .github/workflows/android-ci.yml that builds android/build.gradle with Gradle
- [ ] Include matrix testing for compileSdkVersion values (26, 28, 29, 30+) to verify compatibility
- [ ] Run ProGuard rules validation (android/proguard-rules.pro) as part of the build
- [ ] Add lint checks for AndroidManifest.xml and resource files in android/src/main/res/
- [ ] Add build status badge to README.md
Add unit/integration tests for SplashScreenModule and SplashScreen Java classes
The android/src/main/java files have no corresponding test coverage. Adding Robolectric or Espresso tests would ensure the native module correctly handles show/hide lifecycle, configuration options, and edge cases (like calling hide before show).
- [ ] Create android/src/test/java/org/devio/rn/splashscreen/SplashScreenModuleTest.java with Robolectric tests
- [ ] Test SplashScreenModule.show() method with various configuration parameters
- [ ] Test SplashScreenModule.hide() method behavior and timing
- [ ] Add edge case tests: hide() called before show(), multiple show/hide calls
- [ ] Update android/build.gradle to include testImplementation 'org.robolectric:robolectric:X.X.X'
- [ ] Add test execution step to the CI workflow (from PR #2)
🌿Good first issues
- Add unit tests for SplashScreenModule.java and SplashScreen.java covering show(), hide(), and edge cases like calling hide() twice or before show(). Currently no test files are visible in android/src.
- Expand the iOS LaunchScreen tutorial (add-LaunchScreen-tutorial-for-ios.md) with step-by-step Xcode screenshots and common troubleshooting (splash image not showing, wrong dimensions). The Android setup has style.xml but iOS docs are minimal.
- Create a TypeScript definition file (index.d.ts) at the root to provide type hints for JavaScript consumers—currently the library exposes show() and hide() but has no type safety for TypeScript projects.
⭐Top contributors
Click to expand
Top contributors
- @crazycodeboy — 54 commits
- @ishigamii — 3 commits
- @xiongcaichang — 3 commits
- [@Nguyen Duc Binh](https://github.com/Nguyen Duc Binh) — 3 commits
- [@Artur Chrusciel](https://github.com/Artur Chrusciel) — 3 commits
📝Recent commits
Click to expand
Recent commits
b471976— Full screen adaptation. (crazycodeboy)6af465d— Merge pull request #498 from Fetten/patch-1 (crazycodeboy)9958cae— Merge pull request #516 from puti94/master (crazycodeboy)1dc09f4— Merge pull request #536 from pluralcom/min-sdk-version-fix (crazycodeboy)d199bba— Merge pull request #537 from crazycodeboy/dependabot/npm_and_yarn/examples/react-native-0.62.3 (crazycodeboy)b62b947— Bump react-native from 0.62.1 to 0.62.3 in /examples (dependabot[bot])3bc7466— fix min sdk version conflicts (volodymytymets)6ec2ac3— remove application node (puti94)0bbf031— fix: Xcode 12 compatibility (Fetten)d4e860d— [feat] 更新文档和教程 (crazycodeboy)
🔒Security observations
The codebase has significant security concerns primarily related to outdated Android SDK configurations and deprecated dependencies. The use of Android SDK version 26 (from 2017) does not meet current security standards or Google Play Store requirements. The deprecated com.android.support library should be migrated to AndroidX. An unspecified version for react-native dependency introduces unpredictability. The minSdkVersion of 16 is obsolete and should be increased. These issues should be prioritized for remediation to meet modern security and compliance standards. The project lacks hardcoded secrets or injection vulnerabilities in the visible file structure, but the infrastructure/dependency configuration is weak.
- High · Outdated Android SDK and Build Tools —
android/build.gradle. The project uses very outdated default Android SDK versions (compileSdkVersion=26, buildToolsVersion=26.0.2, targetSdkVersion=26). Android 26 was released in 2017 and is missing modern security patches and features. This exposes the application to known vulnerabilities and does not meet current Google Play Store requirements (minimum targetSdkVersion is now 33+). Fix: Update to current Android SDK versions: compileSdkVersion 33 or higher, buildToolsVersion 33.0.0 or higher, targetSdkVersion 33 or higher. Use supportLibVersion 28.0.0 or migrate to AndroidX (androidx). - High · Outdated Support Library —
android/build.gradle. The default support library version is 26.1.0 (released 2017). The com.android.support library is deprecated and no longer receives security updates. Google requires migration to AndroidX. Fix: Migrate from com.android.support to AndroidX (androidx.appcompat:appcompat). Use current versions like androidx.appcompat:appcompat:1.6.x or higher. - High · Unspecified Dependency Version - React Native —
android/build.gradle. The react-native dependency uses '+' version specifier ("com.facebook.react:react-native:+"), which means it will always pull the latest version. This can introduce breaking changes and potential security vulnerabilities without explicit testing and validation. Fix: Specify an exact version or version range for react-native dependency, e.g., 'com.facebook.react:react-native:0.71.0' or use a tighter range like '0.71.x'. - Medium · Low minSdkVersion —
android/build.gradle. The default minSdkVersion is set to 16 (Android 4.1, released 2012). This is extremely outdated and no longer supported. Supporting such old versions increases the attack surface and prevents use of modern security features. Fix: Increase minSdkVersion to at least 21 (Android 5.0). Consider 24 or higher to cover 99%+ of active devices and enable modern security features. - Medium · ProGuard Obfuscation Not Enabled —
android/build.gradle. The release build type has minifyEnabled set to false, meaning code is not obfuscated. While this is a native library, disabling minification reduces code protection and makes reverse engineering easier. Fix: Enable minifyEnabled true for release builds and configure appropriate ProGuard rules to protect the library code from reverse engineering. - Low · Deprecated Test Dependency —
android/build.gradle. JUnit 4.12 is used for testing, which is from 2014. While not a direct security risk, it's outdated and should be updated to benefit from bug fixes and improvements. Fix: Update to junit:junit:4.13.2 or higher.
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.