Your Digital Privacy Companion π
Developed by Windscribe Limited - Because your privacy matters
Features β’ Building β’ Architecture β’ Contributing β’ License
Windscribe VPN is a top-notch VPN application that offers comprehensive privacy and security features for Android devices. Whether you're browsing on your phone, tablet, or Android TV, Windscribe has you covered with military-grade encryption and blazing-fast servers worldwide.
- SSO Login - One-click authentication
- Captcha Support - Bot protection that actually works
- Email Verification - Get free data when you confirm your email
- Account Management - Full control at your fingertips
- OpenVPN UDP - Fast and efficient
- OpenVPN TCP - Reliable and stable
- IKEv2 - Lightning-fast with StrongSwan implementation
- Stealth Protocol - OpenVPN TCP with a cloak of invisibility
- WSTunnel - OpenVPN over WebSocket for maximum stealth
- WireGuard - The new kid on the block, and it's fast! β‘
- Per-Network Configuration - Different protocols for different networks
- Network Auto-Detection - Seamless switching (requires location permissions)
- Split Tunneling - Choose which apps use the VPN
- App Decoy Traffic - Throw off surveillance with fake traffic
- Custom Configurations - Import your own WireGuard/OpenVPN configs
- R.O.B.E.R.T - DNS filtering with customizable toggles
- Static IP Addresses - Available with pro plans
- Custom sounds for connections
- Custom wallpapers
- Custom names for server locations
- Location favorites
- Newsfeed with promos and news
- Real-time IP address display
- Connection status monitoring
- Traffic statistics
Before you dive in, make sure you have these tools ready:
β Android Studio (Latest stable version)
β Android SDK (API 21+)
β Android NDK (for native code compilation)
β CMake (for building native modules)
β SWIG (for generating JNI bindings)
β Git (obviously!)# Clone the repository
git clone https://github.com/Windscribe/Android-App.git
cd androidapp
# Build debug version
./gradlew assembleDebug
# Or open in Android Studio and hit Run! π―# Debug Builds
./gradlew assembleDebug # Build debug APK
./gradlew :mobile:assembleGoogleDebug # Mobile app only
./gradlew :tv:assembleGoogleDebug # TV app only
# Release Builds
./gradlew assembleRelease # Build release APK
./gradlew bundleGoogleRelease # Google Play AAB
./gradlew bundleFdroidRelease # F-Droid AAB
# Testing
./gradlew test # Unit tests
./gradlew connectedAndroidTest # Instrumented tests
# Code Quality
./gradlew ktlintCheck # Check Kotlin style
./gradlew ktlintFormat # Auto-format Kotlin
./gradlew dependencyCheckAnalyze # Security analysis
# Cleaning
./gradlew clean # Fresh start!# Build and install
./gradlew :mobile:assembleGoogleDebug
$ANDROID_HOME/platform-tools/adb install -r mobile/build/outputs/apk/google/debug/mobile-google-debug.apk
# Launch the app
$ANDROID_HOME/platform-tools/adb shell am start -n com.windscribe.vpn/com.windscribe.mobile.ui.AppStartActivity# Build and install
./gradlew :tv:assembleGoogleDebug
$ANDROID_HOME/platform-tools/adb install -r tv/build/outputs/apk/google/debug/tv-google-debug.apk
# Launch the app
$ANDROID_HOME/platform-tools/adb shell am start -n com.windscribe.vpn/com.windscribe.tv.splash.SplashActivityandroidapp/
βββ π¦ base/ # Core functionality hub
β βββ api/ # API communication
β βββ backend/ # VPN protocol handlers
β βββ localdatabase/ # Room database
β βββ repository/ # Data layer
β βββ services/ # Android services
βββ π± mobile/ # Phone/tablet UI (Jetpack Compose)
βββ πΊ tv/ # Android TV UI (XML layouts)
βββ π Protocol Modules
β βββ openvpn/ # OpenVPN implementation
β βββ strongswan/ # IKEv2/IPSec
β βββ wgtunnel/ # WireGuard, WSTunnel, Stunnel & ControlD (All Go code compiled to single lib)
βββ π wsnet/ # Networking library
βββ π§ͺ test/ # Shared test utilities
| Layer | Technology |
|---|---|
| Language | Kotlin (primary), Java (legacy) |
| UI | Jetpack Compose (Mobile), XML (TV) |
| Async | Coroutines + Kotlin Flows |
| DI | Dagger 2 |
| Database | Room |
| Networking | wsnet (custom library) |
| Background Tasks | WorkManager |
We follow MVP (Model-View-Presenter) with a twist:
UI Layer (Activity/Fragment)
β
Presenter (Business Logic)
β
Repository (Data Management)
β
Data Sources (API/Database)
App β ApiCallManager β wsnet β API Endpoints
β
Response
β
Repository
β
ViewModel
β
UI
- β Google Play Billing
- β In-App Review API
- β Firebase Cloud Messaging
- β Full feature set
- β No proprietary Google dependencies
- β No payment processing
- β No push notifications
- β 100% open source friendly
Prebuilt binaries are included, but if you're feeling adventurous:
- Follow the official StrongSwan Android build guide
- Replace contents in
./strongswan/libs - Test thoroughly before committing! π§ͺ
We use ktlint with default rules:
# Check your code
./gradlew ktlintCheck
# Auto-fix issues
./gradlew ktlintFormatFollowing grandcentrix-AndroidCodeStyle
- β Use Kotlin for all new code
- β Prefer coroutines over callbacks
- β Use Kotlin flows for reactive streams
- β Follow MVP pattern
- β Write meaningful commit messages
- β Test your changes!
We β€οΈ contributions! Here's how to get started:
- Code Style is Sacred
- Run
ktlintFormatbefore committing - Follow existing patterns
- Keep it clean and readable
- Kotlin First, Always
- We're migrating from Java to Kotlin
- New code MUST be in Kotlin
- Use coroutines and flows
-
Respect the Module Hierarchy
Feature Modules β base β UI ModulesNO CIRCULAR DEPENDENCIES! π«
-
Test Your Changes
- Write unit tests for business logic
- Add instrumented tests for UI
- Manual testing is also important!
# 1. Create a feature branch
git checkout -b feature/awesome-new-feature
# 2. Make your changes
# ... code code code ...
# 3. Format and lint
./gradlew ktlintFormat
# 4. Run tests
./gradlew test
# 5. Commit with meaningful message
git commit -m "feat: add awesome new feature"
# 6. Push and create PR
git push origin feature/awesome-new-feature- Update
basemodule for core functionality - Modify
mobile/tvUI as needed - Add appropriate tests
- Update database schema if required
- Mobile: Update Compose components
- TV: Update XML layouts with data binding
- Use existing design patterns
- Update
wsnetintegration (no direct Retrofit!) - Add data models
- Update Room entities if needed
- Base Module: 65 Java files (mostly data models)
- Mobile Module: 5 Java files (billing interfaces)
- TV Module: 0 Java files (100% Kotlin! π)
- Total Kotlin Files: Majority of codebase
- Protocols Supported: 6
- Countries Supported: Global coverage
| Module | Purpose | Primary Language |
|---|---|---|
| base | Core logic | Kotlin + Java |
| mobile | Phone/Tablet UI | Kotlin (Compose) |
| tv | Android TV UI | Kotlin |
| openvpn | Protocol impl | Native C + Kotlin |
| strongswan | IKEv2 impl | Native + Kotlin |
| wgtunnel | WireGuard, WSTunnel, Stunnel & ControlD | Go β Kotlin |
Format: [major].[minor].[build]
Example: 3.72.123
- 3 = Major version
- 72 = Minor version
- 123 = Build number
Build fails with NDK errors?
# Verify NDK installation
echo $ANDROID_NDK_HOME
# Clean and rebuild
./gradlew clean
./gradlew assembleDebugApp crashes on VPN connection?
# Check logs
adb logcat -s "vpn" -v time
# Look for protocol-specific logs
adb logcat | grep -i wireguardDatabase migration issues?
# Clear app data and reinstall
adb uninstall com.windscribe.vpn
./gradlew :mobile:assembleGoogleDebug
adb install -r mobile/build/outputs/apk/google/debug/mobile-google-debug.apk# All tests
./gradlew test
# Specific module
./gradlew :base:test
# Instrumented tests (requires emulator/device)
./gradlew connectedAndroidTest
# Test with coverage
./gradlew testDebugUnitTestCoverage- Unit tests go in
src/test/ - Instrumented tests in
src/androidTest/ - Use MockK for mocking
- Follow AAA pattern (Arrange, Act, Assert)
New to the codebase? Start here:
- π Read
CLAUDE.mdfor detailed architecture - π Explore
base/api/to understand networking - π¨ Check
mobile/for Compose UI examples - π Review protocol modules for VPN logic
- π§ͺ Read existing tests to understand patterns
- π¬ Check existing issues
- π§ Reach out to the team
- π Read the documentation
- π Search the codebase for examples
Copyright (c) 2021 Windscribe Limited
All rights reserved. This project is proprietary software developed by Windscribe Limited.
Built with β€οΈ by the Windscribe team
Special thanks to:
- The Android Open Source Project
- StrongSwan developers
- WireGuard team
- All our contributors!