A fast, modern Android VPN client built with Jetpack Compose and Kotlin, featuring high-performance DNS-over-QUIC tunneling powered by Slipstream.
- Modern UI: Built entirely with Jetpack Compose and Material 3 design
- DNS-over-QUIC: Secure DNS tunneling using the QUIC protocol
- DNS Server Scanning: Automatically discover and test compatible DNS servers
- Multiple Profiles: Create and manage multiple server configurations
- Quick Settings Tile: Toggle VPN connection directly from the notification shade
- Auto-connect on Boot: Optionally reconnect VPN when device starts
- Dark Mode: Full support for system-wide dark theme
To use this client, you need a compatible server. Please set up your server using the socks mode of the following deployment script:
- Android 7.0 (API 24) or higher
- Android Studio Hedgehog (2023.1.1) or later
- JDK 17
- Rust toolchain (for building the native library)
- Android NDK 29
-
Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
-
Add Android targets
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
-
Set up OpenSSL for Android
OpenSSL will be automatically downloaded when you build for the first time. You can also set it up manually:
./gradlew setupOpenSsl
This will download pre-built OpenSSL libraries or build from source if the download fails. OpenSSL files will be installed to
~/android-openssl/android-ssl/.To verify your OpenSSL setup:
./gradlew verifyOpenSsl
-
Clone the repository
git clone https://github.com/obscuraio/SlipNet.git cd SlipNet -
Initialize submodules
git submodule update --init --recursive
-
Build the project
./gradlew assembleDebug
Or open the project in Android Studio and build from there.
app/
├── src/main/
│ ├── java/app/slipnet/
│ │ ├── data/ # Data layer (repositories, database, native bridge)
│ │ │ ├── local/ # Room database and DataStore
│ │ │ ├── mapper/ # Entity mappers
│ │ │ ├── native/ # JNI bridge to Rust
│ │ │ └── repository/ # Repository implementations
│ │ ├── di/ # Hilt dependency injection modules
│ │ ├── domain/ # Domain layer (models, use cases)
│ │ │ ├── model/ # Domain models
│ │ │ ├── repository/ # Repository interfaces
│ │ │ └── usecase/ # Business logic use cases
│ │ ├── presentation/ # UI layer (Compose screens)
│ │ │ ├── common/ # Shared UI components
│ │ │ ├── home/ # Home screen
│ │ │ ├── navigation/ # Navigation setup
│ │ │ ├── profiles/ # Profile management screens
│ │ │ ├── settings/ # Settings screen
│ │ │ └── theme/ # Material theme configuration
│ │ ├── service/ # Android services
│ │ │ ├── SlipNetVpnService.kt
│ │ │ ├── QuickSettingsTile.kt
│ │ │ └── BootReceiver.kt
│ │ └── tunnel/ # VPN tunnel implementation
│ └── rust/ # Rust native library
│ └── slipstream-rust/ # QUIC/DNS tunneling implementation
├── build.gradle.kts
└── proguard-rules.pro
SlipNet follows Clean Architecture principles with three main layers:
- Presentation Layer: Jetpack Compose UI with ViewModels
- Domain Layer: Business logic and use cases
- Data Layer: Repositories, Room database, and native Rust bridge
- UI: Jetpack Compose, Material 3
- Architecture: MVVM, Clean Architecture
- DI: Hilt
- Database: Room
- Preferences: DataStore
- Async: Kotlin Coroutines & Flow
- Native: Rust via JNI (QUIC protocol implementation)
Each server profile contains:
- Name: Display name for the profile
- Domain: Server domain for DNS tunneling
- Resolvers: List of DNS resolver configurations
- Congestion Control: QUIC congestion control algorithm (cubic, reno, bbr)
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- slipstream-rust - Rust QUIC tunneling library
- Stream-Gate - DNS tunnel scanning method