Mobile and web client for exploring Shodan data from your own API key.
Built with Expo + React Native, this app lets you search hosts, inspect full device details, browse community queries, view results on a map, and save hosts/searches locally.
- API key authentication (manual entry or QR code scanning)
- Host search with examples, pagination, and screenshot-only mode
- Full device detail pages (banners, metadata, ports, screenshots)
- Community query explorer (top-voted and latest modes)
- Interactive map view of current search results
- Saved hosts and saved searches (persisted locally)
- Profile screen with plan and API usage information
- Expo SDK 54 / React Native 0.81 / React 19
- Expo Router (file-based routing)
- Zustand (state management)
- Axios (Shodan API client)
expo-secure-store(API key storage)react-native-maps(native map) + Leaflet (react-leaflet/ WebView map)
- Node.js 20+
- npm 10+
- Expo CLI / EAS CLI (via
npxis fine) - For Android local builds:
- Java 17 (Java 21 fallback supported by
scripts/eas-android-local.sh) - Android SDK installed
- Java 17 (Java 21 fallback supported by
npm ci
npm run startThen run on your target platform:
npm run android
npm run ios
npm run webYou need a Shodan API key to use the app:
- Manual login: paste key on the auth screen
- QR login: scan a QR containing one of:
- Raw key string
- JSON (
apiKey,api_key,shodan_api_key,key, ortoken) - URL query param with the same keys
The API key is stored securely with expo-secure-store.
app.json contains:
"android": {
"config": {
"googleMaps": {
"apiKey": "YOUR_GOOGLE_MAPS_API_KEY"
}
}
}Replace with a valid key for production Android map usage.
npm run start: start Expo dev servernpm run android: run Android target from Exponpm run ios: run iOS target from Exponpm run web: run web target from Exponpm run eas:android:local: local EAS Android build (defaultproduction)npm run eas:android:local:apk: local APK build (previewprofile)npm run eas:android:local:aab: local AAB build (productionprofile)npm run eas:android:remote: remote Android production buildnpm run eas:android:submit: submit latest Android build to Play Console
Workflow: .github/workflows/android-playstore-release.yml
- Trigger: pushing any Git tag
- Builds Android production artifact using EAS
- Submits latest build to Google Play
Required repository secrets:
EXPO_TOKENGOOGLE_SERVICE_ACCOUNT_JSON
app/ Expo Router routes (auth, tabs, device pages)
src/api/ Shodan API client, types, error parsing
src/stores/ Zustand stores (auth/search/saved/theme)
src/components/ UI and feature components
src/screens/map/ Platform-specific map implementations
src/utils/ Storage, formatting, coordinates, haptics
scripts/ Build helper scripts
.github/workflows/ CI/CD workflows
- This app is an unofficial client and uses your own Shodan account/API access.
- Respect Shodan’s terms of service and applicable laws when querying infrastructure data.