Production-ready Android VPN application with multi-protocol support - No ads, privacy first, APK < 15MB
AeroVPN is a lightweight, feature-rich VPN client for Android that supports multiple tunneling protocols including WireGuard, V2Ray (VMess/VLess/Trojan/Shadowsocks), SSH, and more. Built with modern Android technologies like Jetpack Compose and optimized for minimal size without compromising functionality.
- Features
- Screenshots
- Prerequisites
- Build Instructions
- Installation
- Usage Guide
- Protocol Support
- Configuration Examples
- Troubleshooting
- FAQ
- Contributing
- License
- Multi-Protocol Support: WireGuard, V2Ray (VMess, VLess, Trojan, Shadowsocks), SSH, and custom UDP tunnels
- No Ads: Completely ad-free experience with no tracking or telemetry
- Lightweight: Optimized APK size under 15MB with full functionality
- Material 3 Design: Modern, beautiful UI with dark theme support
- Split Tunneling: Choose which apps use VPN connection
- Kill Switch: Automatically blocks internet if VPN disconnects
- Auto-Reconnect: Re-establishes connection when network changes
- IP Hunter: Check your public IP address and location
- Payload Generator: Create custom HTTP/TLS payloads for tunneling
- DNS Checker: Test and optimize DNS servers
- Host Checker: Verify host connectivity and SSL certificates
- Slow DNS Detector: Test DNS tunnel performance
- TCP Optimizer: Configure TCP no-delay settings
- App Filter: Manage split tunneling permissions
- Ping Tool: Test server latency
- Config Export/Import: Backup and restore configurations
- Connection Share: Share VPN via hotspot or USB tethering
- No logs policy
- No user accounts required
- Local-only configuration storage
- Encrypted configuration export
- No analytics or tracking
Note: Screenshots section - Add your app screenshots here
βββββββββββββββββββββββββββββββββββ
β HOME SCREEN MOCKUP β
β β
β [ Large Connect Button ] β
β β
β Server: Singapore #1 β
β Protocol: WireGuard β
β Ping: 45ms β β
β β
β Status: Disconnected β
βββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββ
β SERVER LIST SCREEN MOCKUP β
β β
β πΈπ¬ Singapore #1 [β
] 45ms β
β π―π΅ Tokyo #2 [β] 62ms β
β πΊπΈ New York #3 [ ] 180msβ
β π¬π§ London #4 [ ] 150msβ
β π¦πΊ Sydney #5 [ ] 120msβ
β β
β [+ Add Server] [Search...] β
βββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββ
β TOOLS SCREEN MOCKUP β
β β
β [IP Hunter] [Payload Gen] β
β [DNS Checker] [Host Checker] β
β [Slow DNS] [TCP No Delay] β
β [App Filter] [Ping Test] β
β [Export/Import][Share Connect] β
βββββββββββββββββββββββββββββββββββ
Placeholder for actual screenshots:
screenshots/home_screen.png- Main connection screenscreenshots/server_list.png- Server selection interfacescreenshots/tools_menu.png- Advanced tools gridscreenshots/settings.png- App settingsscreenshots/connecting.png- Connection in progress
Before building AeroVPN, ensure you have the following installed:
- Android Studio: Hedgehog (2023.1.1) or newer
- Download: https://developer.android.com/studio
- JDK: Version 17 or higher
- Verify:
java -version
- Verify:
- Android SDK: API Level 34 (Android 14)
- Installed automatically via Android Studio
- Git: For version control
- Download: https://git-scm.com
- Operating System: Windows 10/11, macOS 11+, or Linux (64-bit)
- RAM: 8 GB minimum (16 GB recommended)
- Disk Space: 10 GB free space
- Internet: For downloading dependencies
- Android Device: Physical device with Android 7.0+ for testing
- Android Emulator: For testing without physical device
- ADB: Android Debug Bridge for device communication
Follow these steps to build AeroVPN from source:
# Clone using HTTPS
git clone https://github.com/0xgetz/AeroVPN.git
# Or clone using SSH
git clone git@github.com:0xgetz/AeroVPN.git
# Navigate to project directory
cd AeroVPN- Launch Android Studio
- Select File β Open
- Browse to the cloned
AeroVPNdirectory - Click OK to open the project
- Wait for Gradle sync to complete (may take a few minutes)
AeroVPN supports multiple build variants:
| Variant | Description | Minify | Debuggable |
|---|---|---|---|
debug |
Development build | No | Yes |
release |
Production build | Yes | No |
To select a build variant:
- Go to Build β Select Build Variant
- Choose
debugorreleasefrom the dropdown
- Go to Build β Build Bundle(s) / APK(s) β Build APK(s)
- Wait for build to complete
- Click locate in the popup to find the APK
# Navigate to project root
cd AeroVPN
# Make Gradle wrapper executable (Linux/macOS)
chmod +x gradlew
# Build debug APK
./gradlew assembleDebug
# Windows: gradlew.bat assembleDebug
# Build release APK (requires signing)
./gradlew assembleRelease
# Build all variants
./gradlew assembleAfter successful build, APKs are located at:
AeroVPN/app/build/outputs/apk/
βββ debug/
β βββ app-debug.apk (~25 MB)
βββ release/
βββ app-release.apk (~12 MB)
βββ app-release-unsigned.apk (requires signing)
To create a signed release APK for distribution:
- Build β Generate Signed Bundle / APK
- Select APK
- Create new keystore or select existing one
- Fill in key information
- Select
releasebuild variant - Click Finish
Create keystore.properties in project root:
storePassword=your_store_password
keyPassword=your_key_password
keyAlias=your_key_alias
storeFile=/path/to/your/keystore.jksThen build:
./gradlew assembleRelease -Pkeystore.properties-
Enable Unknown Sources on your Android device:
- Go to Settings β Security β Unknown Sources (enable)
- Or Settings β Apps β Special access β Install unknown apps
-
Transfer APK to your device:
- USB cable transfer
- Email attachment
- Cloud storage download
- ADB push:
adb install app-debug.apk
-
Install APK:
- Open file manager on device
- Navigate to APK location
- Tap the APK file
- Tap Install
- Wait for installation to complete
- Tap Open to launch
- Connect Android device via USB (enable USB debugging)
- In Android Studio, click Run (green play button)
- Select your device from the list
- App will install and launch automatically
# Install debug APK
adb install app/build/outputs/apk/debug/app-debug.apk
# Install release APK
adb install app/build/outputs/apk/release/app-release.apk
# Install and replace existing
adb install -r app/build/outputs/apk/release/app-release.apk
# Install to specific device (if multiple connected)
adb -s DEVICE_ID install app-debug.apk| Issue | Solution |
|---|---|
| "App not installed" | Uninstall existing version first, check storage space |
| "Blocked by Play Protect" | Tap "Install anyway" or temporarily disable Play Protect |
| "Parse error" | Ensure APK is not corrupted, download again |
| "Incompatible with your device" | Check Android version (requires 7.0+) |
- Open AeroVPN from your app drawer
- Grant VPN permission when prompted (required for all VPN apps)
- Grant notification permission (for connection status)
- You'll see the main home screen with a large Connect button
-
Go to Servers tab (bottom navigation)
-
Tap [+ Add Server] button
-
Fill in server details:
- Name: Friendly name (e.g., "Singapore Premium")
- Protocol: Choose from WireGuard, V2Ray, SSH, etc.
- Hostname: Server address (e.g.,
sg.example.com) - Port: Server port (e.g.,
51820for WireGuard) - Credentials: Username/password or keys based on protocol
-
Tap Save to add server
-
Obtain configuration file from your provider (
.conf,.json, or link) -
Go to Config tab
-
Tap Import Config
-
Select from:
- File: Browse to config file location
- Clipboard: Paste config text
- QR Code: Scan QR code (for some protocols)
- Link: Paste subscription URL
-
Tap Import to add
- On Home screen, tap server card to select
- Tap large Connect button
- Wait for connection (status changes to Connected)
- VPN icon appears in status bar
- Internet traffic now routes through VPN
- Auto-Connect: Enable in Settings to connect on app launch
- Last Server: App remembers last used server
- Favorite Servers: Mark frequently used servers as favorites (β )
Access tools from Tools tab or floating action button:
- Shows your current public IP address
- Displays location, ISP, and VPN status
- Refresh button to update
- Copy IP to clipboard
- Generate custom HTTP payloads for SSH tunneling
- Configure method (GET/POST)
- Add custom headers
- Set random intervals
- Save and apply to SSH configs
- Test connectivity to DNS servers (Google, Cloudflare, etc.)
- Measure response time
- Identify fastest DNS
- Set custom DNS servers
- Verify server host accessibility
- Test port connectivity
- Check SSL certificate validity
- View certificate details
- Test DNS tunnel performance
- Measure DNS resolution time
- Detect DNS-based restrictions
- Optimize DNS settings
- Toggle TCP_NODELAY socket option
- Reduce latency for real-time applications
- Enable for gaming, disable for streaming
- Select which apps bypass VPN
- Exclude bandwidth-heavy apps
- Force specific apps through VPN
- System apps hidden by default
- Test latency to servers
- Continuous ping mode
- Packet loss statistics
- Historical ping graph
- Export: Backup all configurations to encrypted file
- Import: Restore from backup file
- Share: Send config via messengers securely
- Share VPN connection via WiFi hotspot
- USB tethering support
- Bluetooth tethering (if supported)
- Configure sharing settings
Access via Settings tab:
- Auto-connect on startup: Connect to last server automatically
- Show notification: Display persistent VPN status notification
- Dark theme: Force dark mode or system default
- Language: App language selection
- Reconnect on network change: Auto-reconnect when switching networks
- Kill switch: Block internet when VPN disconnects
- Exclude private networks: Bypass VPN for local network devices
- MTU size: Configure Maximum Transmission Unit
Each protocol has dedicated settings:
- WireGuard: Keepalive interval, peer configuration
- V2Ray: Transport type, encryption, mux settings
- SSH: Connection timeout, compression, SSH version
- Log level: Verbose, Info, Warning, Error
- Export logs: Share debug information
- Clear cache: Remove temporary files
- Reset settings: Restore all settings to default
- About: Version info, licenses, privacy policy
AeroVPN supports multiple VPN and tunneling protocols:
Overview: Modern, high-performance VPN protocol using state-of-the-art cryptography.
Features:
- Fast connection speeds
- Low battery consumption
- Simple configuration
- Perfect forward secrecy
- No connection logging
Best For: General VPN use, streaming, browsing
Configuration Requirements:
- Private key
- Server public key
- Server endpoint (IP:port)
- Allowed IPs (usually
0.0.0.0/0) - Pre-shared key (optional)
Ports: Typically 51820 (UDP)
Overview: Advanced protocol suite supporting multiple transport methods and encryption.
Supported Protocols:
- VMess: Original V2Ray protocol with AEAD encryption
- VLess: Lightweight, faster than VMess
- Trojan: TLS-based, highly stealthy
- Shadowsocks: Simple SOCKS5 proxy with encryption
Features:
- Multiple transport options (TCP, mKCP, WebSocket, HTTP/2)
- TLS encryption support
- Domain fronting capability
- Multipath support
- Traffic obfuscation
Best For: Bypassing restrictions, high-security needs
Ports: Varies (commonly 443, 8443, 8080)
Overview: Secure Shell tunnel with optional HTTP proxy and SSL wrapping.
Features:
- Standard SSH authentication
- HTTP proxy support (for corporate networks)
- SSL/TLS wrapping (stunnel)
- WebSocket support
- Compression options
- Port forwarding
Best For: Corporate networks, restricted environments
Authentication:
- Password-based
- Public key (RSA, ECDSA, Ed25519)
- Certificate-based
Ports: Typically 22 (can be any port)
Overview: Lightweight SOCKS5 proxy with encryption, designed for circumvention.
Encryption Methods:
- AES-128-GCM, AES-256-GCM
- CHACHA20-IETF-POLY1305
- XCHACHA20-IETF-POLY1305
Features:
- Simple configuration
- Low overhead
- Plugin support (v2ray-plugin, obfs-local)
- UDP relay support
Best For: Simple proxy needs, low-resource devices
Ports: Typically 8388 or custom
Overview: User-defined UDP tunneling for specialized use cases.
Features:
- Custom packet format
- Configurable endpoints
- Encryption options
- Keepalive settings
Best For: Custom implementations, gaming, VoIP
Ports: User-defined
[Interface]
PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
Address = 10.0.0.2/24
DNS = 1.1.1.1, 8.8.8.8
[Peer]
PublicKey = xTIBA5rboUvnH4htodjb6nd69Qvj86m7TczkggSB3eM=
Endpoint = 192.168.1.100:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25- Save config as
.conffile or copy to clipboard - Open AeroVPN β Config β Import Config
- Select File or Clipboard
- Paste or select the configuration
- Tap Import
- Name the configuration (e.g., "Home WireGuard")
- Tap Connect
{
"inbounds": [{
"port": 10808,
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": true,
"userLevel": 8
},
"tag": "socks"
}],
"outbounds": [{
"tag": "proxy",
"protocol": "vmess",
"settings": {
"vnext": [{
"address": "v2ray.example.com",
"port": 443,
"users": [{
"id": "b831381d-6324-4d53-ad4f-8cda48b30811",
"alterId": 0,
"email": "user@example.com",
"security": "auto"
}]
}]
},
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"allowInsecure": false,
"serverName": "v2ray.example.com"
},
"wsSettings": {
"path": "/ray",
"headers": {
"Host": "v2ray.example.com"
}
}
},
"mux": {
"enabled": true,
"concurrency": 8
}
}],
"routing": {
"domainStrategy": "AsIs"
}
}vmess://eyJhZGQiOiJ2MnJheS5leGFtcGxlLmNvbSIsImFpZCI6IjAiLCJ
ob3N0IjoidjJyYXkuZXhhbXBsZS5jb20iLCJpZCI6ImI4MzEzODFkLT
YzMjQtNGQ1My1hZDRmLThjZGE0OGIzMDgxMSIsIm5ldCI6IndzIiwi
cGF0aCI6Ii9yYXkiLCJwb3J0IjoiNDQzIiwicHMiOiJFeGFtcGxlIF
ZNU2VzIiwidGxzIjoidGxzIiwidHlwZSI6Im5vbmUiLCJ2IjoiMiJ9
Host: ssh.example.com
Port: 22
Username: myuser
Password: *********** # Not saved in config
Protocol: SSH
# Advanced settings:
Compression: true
Timeout: 30s
SSH Version: 2
Proxy: none
SSL Wrapping: falseHost: ssh.example.com
Port: 22
Username: myuser
Protocol: SSH
HTTP Proxy:
Enabled: true
Host: proxy.corporate.com
Port: 8080
Username: proxyuser
Password: ***********
SSL Wrapping: true
SSL Host: secure.example.com
SSL Port: 443Host: ssh.example.com
Port: 443
Username: myuser
Protocol: SSH
Payload:
Method: GET
Request: |
GET / HTTP/1.1[crlf]
Host: www.google.com[crlf]
User-Agent: [ua][crlf]
X-Online-Host: www.google.com[crlf]
X-Forward-For: www.google.com[crlf][crlf]
Interval: 60{
"server": "ss.example.com",
"server_port": 8388,
"password": "mysecretpassword",
"method": "chacha20-ietf-poly1305",
"plugin": "",
"remarks": "Example SS Server"
}{
"server": "ss.example.com",
"server_port": 443,
"password": "mysecretpassword",
"method": "chacha20-ietf-poly1305",
"plugin": "v2ray-plugin",
"plugin_opts": "server=ss.example.com;tls;host=cdn.example.com;path=/websocket"
}ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTpteXNlY3JldHBhc3N3b3Jk
@ss.example.com:8388/?plugin=v2ray-plugin%3Bserver%3Dss.example.com%3Btls
%3Bhost%3Dcdn.example.com#ExampleSS
{
"server": "trojan.example.com",
"server_port": 443,
"password": "your_password_here",
"ssl": {
"sni": "trojan.example.com",
"allow_insecure": false,
"verify": true
},
"transport": {
"type": "tcp"
}
}trojan://your_password_here@trojan.example.com:443?sni=trojan.example.com&allow_insecure=false#TrojanServer
Possible Causes:
- Incorrect server address or port
- Firewall blocking connection
- Server is offline
- Wrong credentials
Solutions:
- Verify server address and port
- Use Host Checker tool to test connectivity
- Try alternative server
- Check credentials are correct
- Restart router/firewall
- Contact server administrator
Possible Causes:
- Unstable internet connection
- Server overload
- Keepalive interval too long
- Network switching
Solutions:
- Enable Reconnect on network change
- Reduce Keepalive interval (WireGuard: try 15-20s)
- Use Ping Tool to check server stability
- Switch to closer server
- Enable Kill switch to prevent data leaks
Possible Causes:
- Server overload
- Long distance to server
- Protocol inefficiency
- Device performance
Solutions:
- Switch to closer server
- Change protocol (try WireGuard for speed)
- Use Ping Tool to find fastest server
- Enable TCP No Delay for SSH
- Reduce encryption complexity
- Close background apps consuming bandwidth
Check:
- Private and public keys are correct
- Server endpoint is reachable
- Allowed IPs includes
0.0.0.0/0 - Firewall allows UDP on configured port
- MTU setting is appropriate (try 1280-1420)
Solution:
# Try these MTU values if connection fails
MTU = 1280 # Most conservative
MTU = 1420 # Standard for WireGuard
MTU = 1500 # Maximum (may fragment)Check:
- UUID is correct (no extra spaces)
- Host header matches SNI
- WebSocket path is correct
- TLS certificate is valid
- Transport settings match server
Solution:
- Validate JSON config syntax
- Test with Host Checker
- Try
allowInsecure: truefor self-signed certs (not recommended) - Verify WebSocket path starts with
/ - Check server supports requested transport
Check:
- SSH server is running on target port
- SSH version compatibility (2.0 recommended)
- Proxy settings are correct
- Compression enabled for slow connections
Solution:
- Increase timeout to 60s
- Enable compression
- Use SSH version 2 only
- Simplify payload (remove if not needed)
- Try without HTTP proxy first
Solutions:
- Clear app cache: Settings β Apps β AeroVPN β Storage β Clear Cache
- Reinstall app
- Check Android version (requires 7.0+)
- Disable battery optimization for app
- Check available storage space
- Report crash logs via Export Logs
Solutions:
- Grant VPN permission: Settings β Apps β AeroVPN β Permissions
- Enable Show notification in app settings
- Check notification permission is granted
- Reboot device
- Reconnect to VPN
Solutions:
- Use WireGuard protocol (most efficient)
- Increase keepalive interval
- Disable unused features
- Exclude battery-heavy apps via App Filter
- Enable battery optimization except for app itself
Solutions:
- Verify config format matches protocol
- Check for encoding issues (UTF-8)
- Remove extra whitespace/formatting
- Try manual entry
- Update app to latest version
- Contact config provider for updated format
| Error Message | Meaning | Solution |
|---|---|---|
| "Permission denied" | VPN permission not granted | Grant permission in system settings |
| "Server unreachable" | Cannot connect to server | Check address, port, firewall |
| "Authentication failed" | Wrong credentials | Verify username/password/keys |
| "Invalid configuration" | Config format error | Check JSON/INI syntax |
| "Connection timed out" | No response from server | Try different server, check network |
| "TUN device busy" | Another VPN active | Disconnect other VPN apps |
| "Certificate invalid" | SSL/TLS cert problem | Use correct SNI, check cert expiry |
Q: Is AeroVPN completely free? A: Yes, AeroVPN is 100% free and open-source. There are no subscriptions, premium features, or hidden costs.
Q: Does AeroVPN keep logs? A: No. AeroVPN does not collect, store, or transmit any user activity logs, connection logs, or metadata. All configuration is stored locally on your device.
Q: Is AeroVPN safe to use? A: Yes. AeroVPN uses industry-standard encryption protocols, has no tracking or ads, and is open-source (source code is publicly auditable). However, always use trusted VPN servers.
Q: Do I need to create an account? A: No account is required. AeroVPN works completely offline and locally. You manage your own server configurations.
Q: Does AeroVPN work on all Android devices? A: AeroVPN requires Android 7.0 (API 24) or higher. It is compatible with phones and tablets from most manufacturers.
Q: What is the minimum APK size? A: With full R8 optimization, the release APK is typically under 15MB. The exact size depends on included protocols and features.
Q: Can I use AeroVPN on rooted devices? A: Yes, AeroVPN works on both rooted and non-rooted devices. Root access is not required for any functionality.
Q: Does AeroVPN support IPv6? A: Yes. Configure IPv6 addresses in your server configuration. WireGuard and V2Ray both support IPv6 routing.
Q: Can I run AeroVPN alongside other VPN apps? A: No. Android allows only one active VPN connection at a time. You must disconnect other VPNs before using AeroVPN.
Q: Why does the notification stay on? A: Android requires a persistent notification while VPN is active. This is a system requirement, not optional. AeroVPN minimizes the notification to reduce distraction.
Q: Does AeroVPN support split tunneling? A: Yes. Use the App Filter tool to select which apps bypass the VPN tunnel. This is protocol-independent.
Q: Which protocol is fastest? A: WireGuard is generally the fastest protocol with lowest latency and best throughput. V2Ray with mKCP can match it in some conditions.
Q: Will using AeroVPN drain my battery? A: All VPN apps increase battery usage. WireGuard has the lowest impact (5-10% additional drain). SSH and V2Ray consume more (10-20%) depending on encryption.
Q: Why is my speed slower with VPN? A: VPN adds encryption overhead and routing distance. Expect 10-30% speed reduction normally. Use WireGuard and nearby servers to minimize impact.
Q: Can I use AeroVPN for gaming? A: Yes, but choose servers close to game servers. WireGuard protocol has lowest latency. Enable TCP No Delay for SSH connections.
Q: Is my data encrypted? A: Yes. All traffic is encrypted using the selected protocol's encryption (WireGuard uses ChaCha20, V2Ray uses AES-256-GCM, etc.).
Q: What encryption does AeroVPN use? A: Encryption depends on protocol:
- WireGuard: ChaCha20-Poly1305
- V2Ray: AES-256-GCM, ChaCha20-Poly1305
- SSH: AES-256-CTR, ChaCha20-Poly1305
- Shadowsocks: Configurable (recommended: ChaCha20-IETF-Poly1305)
Q: Does AeroVPN have a kill switch? A: Yes. Enable Kill Switch in Settings to block all internet traffic if VPN disconnects unexpectedly.
Q: Can the government track my usage? A: With proper protocol selection (WireGuard, V2Ray with TLS), your traffic appears encrypted. However, sophisticated actors may detect VPN usage patterns. No VPN is 100% undetectable.
Q: Are exported configs encrypted? A: Yes. Exported configuration files are encrypted using AES-256-GCM. Keep backups secure and never share them.
Contributions are welcome! Here's how you can help:
- Report Bugs: Found a bug? Open an issue on GitHub
- Suggest Features: Have an idea? Create a feature request
- Improve Documentation: Fix typos, add examples, improve clarity
- Submit Code: Fix bugs, add features, improve performance
- Translate: Help localize AeroVPN to your language
- Test Builds: Test pre-release versions and provide feedback
-
Fork the repository
git clone https://github.com/YOUR_USERNAME/AeroVPN.git cd AeroVPN -
Create a branch
git checkout -b feature/your-feature-name
-
Make your changes
- Follow Kotlin style guide
- Add tests for new features
- Update documentation
-
Commit your changes
git commit -m "Add: concise description of changes" -
Push to your fork
git push origin feature/your-feature-name
-
Open a Pull Request
- Describe your changes
- Link to related issues
- Wait for review
- Follow Kotlin coding conventions
- Use meaningful variable and function names
- Add comments for complex logic
- Keep functions small and focused
- Use MVVM (Model-View-ViewModel) pattern
- Separate UI from business logic
- Use dependency injection (Hilt)
- Write unit tests for ViewModels
Format: [TYPE]: Brief description
Types:
feat: New featurefix: Bug fixdocs: Documentation changesstyle: Code style changes (formatting)refactor: Code refactoringperf: Performance improvementstest: Adding or updating testschore: Build/config changes
Examples:
feat: Add TCP No Delay toggle in settings
fix: Resolve crash when importing invalid JSON config
docs: Update README with VLess configuration example
refactor: Extract protocol handler into separate class
- Ensure code compiles and tests pass
- Update README if behavior changes
- Add/update unit tests
- Request review from maintainers
- Address review feedback
- Merge after approval
When creating an issue, include:
Bug Reports:
- Steps to reproduce
- Expected behavior
- Actual behavior
- Device model and Android version
- AeroVPN version
- Screenshots/videos if applicable
- Logs (Settings β Export Logs)
Feature Requests:
- Clear description
- Use case / motivation
- Suggested implementation (optional)
- Examples from other apps (optional)
Before submitting:
- Debug build works
- Release build compiles
- No new linting errors
- Unit tests pass
- App tested on physical device
- No memory leaks (check with Profiler)
- Battery impact is reasonable
- Be respectful and constructive
- Help others in issues/discussions
- Follow code of conduct
- No spam or self-promotion
- Credit original authors
AeroVPN is released under the MIT License.
MIT License
Copyright (c) 2026 AeroVPN Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
β You can:
- Use AeroVPN for personal or commercial purposes
- Modify the source code
- Distribute copies
- Use in proprietary software
- Sublicense or sell
β You cannot:
- Hold authors liable for damages
- Use contributors' names for endorsement without permission
π You must:
- Include copyright notice
- Include license text
- State significant changes made
Full License: https://opensource.org/licenses/MIT
- Documentation: You're reading it! π
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Email: Support inquiries (check repository for contact)
- Android VPN API: https://developer.android.com/reference/android/net/VpnService
- WireGuard Docs: https://www.wireguard.com
- V2Ray Guide: https://www.v2ray.com
- Kotlin Lang: https://kotlinlang.org
- Jetpack Compose: https://developer.android.com/jetpack/compose
Developed with β€οΈ for privacy and freedom
Made in Android with Kotlin & Jetpack Compose
Version: 1.0.0
Last Updated: April 2026
Repository: https://github.com/0xgetz/AeroVPN