A modern Android app built with Jetpack Compose that performs real internet speed tests (no fake floating indicators) with a beautiful, data‑rich UI.
- 🚀 Real Speed Testing: Time‑bounded download and upload using real HTTP transfers
- 📊 Comprehensive Metrics: Download, upload, ping, jitter, and packet loss
- 🎨 Modern UI: Compose with enhanced cards, charts, dark theme, and animations
- 🔴 Live Readings: Instant Mbps updates during the test (sparkline + gauge)
- 📶 Network Validation: Detects connectivity and network type (WiFi/Mobile/Ethernet)
- 🔐 Privacy & Ads Settings: In‑app privacy policy, data details, ad preferences (DataStore)
- 🧰 Resilient: Clear errors, fallbacks, and robust handling
- ✅ Network Check: Verifies internet connectivity and detects network type
- 🛰️ Ping Test: 3 HEAD requests to multiple hosts (httpbin, Google, Cloudflare); average reported
- ⬇️ Download (Timed): Parallel streams continuously read for ~4.5s from large files (100MB); instant windows every ~200–500ms
- ⬆️ Upload (Timed): Streams random data for ~2.5s to upload endpoints; instant windows every ~200ms
- 📈 Results: Final Mbps = total bytes / time; plus jitter, packet loss, min/avg/max from live samples
The app uses reliable public endpoints:
- ⬇️ Download (large files): Cloudflare, Hetzner, ThinkBroadband, OVH
- ⬆️ Upload: Cloudflare
__up
(fallback: httpbin.org/post) - 🛰️ Ping: httpbin.org, google.com, cloudflare.com
- Download Speed: How fast you can download data (Mbps)
- Upload Speed: How fast you can upload data (Mbps)
- Ping: Round‑trip time to test servers (ms)
- Jitter: Variation in ping times (ms)
- Packet Loss: Percentage of data lost during transmission
- MVVM Pattern: Uses ViewModel for state management
- Coroutines: Asynchronous speed testing operations
- StateFlow: Reactive UI state updates
- OkHttp: Low‑level HTTP client for speed testing
- DataStore: Persist user preferences (theme, privacy, ads)
SpeedTestService
: Core speed testing logicSpeedTestViewModel
: State management and business logicSpeedTestScreen
: UI components and user interactionSpeedTestUiState
: Data class for UI statePrefs
: DataStore wrapper for theme, privacy, and ad preferences
- Jetpack Compose
- OkHttp
- ViewModel
- Coroutines
- Launch the app
- Tap "Start" to begin the test
- Watch live readings (gauge, sparkline, instant Mbps)
- View results (download, upload, ping, jitter, packet loss)
- Tap "Run again" to retest
- Adjust preferences in Settings (theme, privacy policy, ad options)
Home (Gauge) | Live Sparkline | Results Cards |
---|---|---|
![]() |
![]() |
![]() |
Settings | Privacy | Status |
---|---|---|
![]() |
![]() |
![]() |
- Android 6.0 (API level 23) or higher
- Internet connection
- Network permissions
INTERNET
: Required for speed testingACCESS_NETWORK_STATE
: Required for network availability checks
- Clone the repository
- Open in Android Studio
- Sync Gradle files
- Build and run on device or emulator
Unlike floating speed indicators that show fake or estimated speeds, this app:
- Measures actual network performance through real data transfers
- Provides accurate metrics for network troubleshooting
- Helps diagnose connection issues with detailed measurements
- Gives reliable results for comparing different networks or ISPs
- Server selection and regional affinity
- Historical test results and charts
- 5G/NR‑specific hints and radio metrics
- Export/share results
- Advanced configuration (duration, streams, endpoints)
- Speed looks constant (e.g., 18.6 Mbps): We use large files and time‑bounded reads with multiple streams. If values are still flat, try switching networks, disabling VPNs, or adjusting parallel streams in code.
- Upload fails: The app falls back from Cloudflare to httpbin. Check network restrictions or captive portals.
- Ping is high: Some networks proxy HEAD requests; try again on a different network.
Feel free to submit issues, feature requests, or pull requests to improve the app.
This project is open source and available under the MIT License.
A modern Android app built with Jetpack Compose that performs actual internet speed tests instead of showing fake floating speed indicators.
- Real Speed Testing: Time-bounded download and upload using real HTTP transfers
- Comprehensive Metrics: Download, upload, ping, jitter, and packet loss
- Modern UI: Jetpack Compose with enhanced cards, charts, and dark mode
- Live Readings: Instant Mbps updates during the test (sparkline + gauge)
- Network Validation: Verifies connectivity and network type (WiFi/Mobile/Ethernet)
- Privacy & Ads Settings: In-app privacy policy, data details, and ad preferences (DataStore)
- Error Handling: Clear messages for connectivity or server errors
- Network Check: Verifies internet connectivity and detects network type
- Ping Test: 3 HEAD requests to multiple hosts (httpbin, Google, Cloudflare); average reported
- Download Test (Timed): Parallel HTTP streams continuously read data for ~4.5s from large files (100MB); instant speed windows every ~200–500ms
- Upload Test (Timed): Streams random data for ~2.5s to upload endpoints; instant speed reported on 200ms windows
- Results: Final Mbps computed from total bytes/time; jitter and packet loss estimated; min/avg/max from live samples
The app uses reliable public endpoints:
- Download (large files): Cloudflare, Hetzner, ThinkBroadband, OVH
- Upload: Cloudflare
__up
(fallback: httpbin.org/post) - Ping: httpbin.org, google.com, cloudflare.com
- Download Speed: How fast you can download data (Mbps)
- Upload Speed: How fast you can upload data (Mbps)
- Ping: Round-trip time to test servers (ms)
- Jitter: Variation in ping times (ms)
- Packet Loss: Percentage of data packets lost during transmission
- MVVM Pattern: Uses ViewModel for state management
- Coroutines: Asynchronous speed testing operations
- StateFlow: Reactive UI state updates
- OkHttp: Low-level HTTP client for speed testing
SpeedTestService
: Core speed testing logicSpeedTestViewModel
: State management and business logicSpeedTestScreen
: UI components and user interactionSpeedTestUiState
: Data class for UI state
- Jetpack Compose: Modern UI toolkit
- OkHttp: HTTP client for network operations
- ViewModel: Lifecycle-aware state management
- Coroutines: Asynchronous programming
- Launch the app
- Tap "Start" to begin the test
- Watch live readings (gauge, sparkline, instant Mbps)
- View results (download, upload, ping, jitter, packet loss)
- Tap "Run again" to retest
- Adjust preferences in Settings (theme, privacy policy, ad options)
- Android 6.0 (API level 23) or higher
- Internet connection
- Network permissions
INTERNET
: Required for speed testingACCESS_NETWORK_STATE
: Required for network availability checks
- Clone the repository
- Open in Android Studio
- Sync Gradle files
- Build and run on device or emulator
Unlike floating speed indicators that show fake or estimated speeds, this app:
- Measures actual network performance through real data transfers
- Provides accurate metrics for network troubleshooting
- Helps diagnose connection issues with detailed measurements
- Gives reliable results for comparing different networks or ISPs
- Server selection and regional affinity
- Historical test results and charts
- 5G/NR-specific hints and radio metrics
- Export/share results
- Advanced configuration (duration, streams, endpoints)
- Speed looks constant (e.g., 18.6 Mbps): We use large files and time-bounded reads with multiple streams. If values are still flat, try switching networks, disabling VPNs, or adjusting parallel streams in code.
- Upload fails: The app falls back from Cloudflare to httpbin. Check network restrictions or captive portals.
- Ping is high: Some networks proxy HEAD requests; try again on a different network.
Feel free to submit issues, feature requests, or pull requests to improve the app.
This project is open source and available under the MIT License.