Speedtest+ is an unofficial Android and iOS test build for personal demonstrations and UI testing. It adds local result controls, profiles, themes, consistent saved results, and user-confirmed app updates.
It is not affiliated with or endorsed by Ookla.
The original Speedtest+ core, configuration validation, result finalization, theme-code support, API contracts, schemas, tests, and integration documentation are available in the public Speedtest+ source repository.
The repository intentionally excludes APK binaries, signing material, credentials, private infrastructure configuration, and Ookla's proprietary application code.
- Android 7.0 or newer
- 64-bit ARM (
arm64-v8a) phone or tablet - Android 15/16 compatible, including 16 KB memory-page devices
The original test engine does not include 32-bit ARM or x86 native libraries, so those devices are not supported by this build.
- Open the combined Android 1.8.12 + iOS 0.1.25 release
- Download SpeedtestPlus.apk (Android 1.8.12 stable)
- Download SpeedtestPlus.ipa (iOS 0.1.25 unsigned)
- Browse the Speedtest+ source code
- Features and usage
- Releases and updates
- Security and privacy
- Android 1.8.12 security and privacy audit
The Android 1.8.9 animation/server/diagnostics fixes are clearly labelled debug-signed QA builds. They are for clean-install testing only, do not replace the stable signed APK, and are not advertised through the stable OTA manifest: Android 1.8.9 Wi-Fi race-fix QA release.
- Install
SpeedtestPlus.apkand complete the normal onboarding. - Open the provider drawer on the Speed screen.
- Tap the info button or long-press the provider row to open Speedtest+ Controls.
- Enter only the values you want to customize, then tap APPLY before GO.
Blank fields keep the measured value. Equal speed minimum and maximum values create an exact result. Different bounds create a varied result inside the range.
Use DISABLE ALL to return new tests to normal measured values. Saved profiles and the selected theme are retained.
- Custom download, upload, ping, jitter, and packet-loss values
- Custom ISP, server provider, and server location
- Three named profiles
- Ten persistent dark themes
- Stable one-value-per-test speed overrides on the fixed 1k gauge
- Full GO-to-Connecting and dial-opening animation
- Stable real 720p H.264 Video testing on Android 7-16
- One-tap privacy-safe diagnostics copy action for support reports
- Consent-based AI Bug Doctor with optional screenshot analysis, editable reports, and untested draft-fix suggestions for human review
- No banner or completed-result native ads
- Matching local values across the test screen, saved results, history, comparison cards, sharing, and CSV
- Provider-aware feedback questions
- Silent signed update checks that prompt only for a newer verified build
Custom values change the app's customized presentation and saved-result/history representation, including account-history storage where enabled. The underlying official test traffic and official remote report remain separate measured data.
Do not present customized values as independently measured network performance. Use them only for personal testing, UI development, or clearly identified demonstrations.
The app checks a small public manifest quietly in the background when the main screen resumes, with a one-hour throttle. It shows nothing when the installed build is current or a background check cannot complete. When a newer build exists, it shows the update prompt, verifies the download, and opens Android's standard update screen.
Android still requires user confirmation. The existing app does not need to be uninstalled, and local settings are preserved.
The docs repository is the canonical public release page. Final APK/IPA
artifacts, release notes, checksums, download links, and ota/manifest.json
updates are published here. The source repository contains code and CI only.
New release APKs and IPAs are published as GitHub Release assets rather than
committed to Git history. Signing secrets and credentials are never committed
to Git history.
Android is the only in-place OTA path: it downloads a verified APK and opens Android's standard install confirmation. The iOS update notice opens the unsigned IPA download only; users must use their own legitimate sideloading and signing method to install it.
If a user explicitly enables anonymous statistics, the app sends one
installation_reported event after a successful submission and stores only a
local Boolean marker to avoid sending it again for that installation. The
event contains no installation, account, advertising, Android, or hardware ID.
The badge above shows the same thresholded rolling 90-day aggregate as the
project website. Values below 25 are shown only as <25. It is an opted-in
installation-report count, not a unique-person or lifetime-download count.