Skip to content

๐ŸŒŽ Access to freedom in the internet world only with one switch!

License

Notifications You must be signed in to change notification settings

erfansn/NsmaVPN

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Nsma VPN banner

Nsma VPN

Access to freedom in the internet world only with one switch! Tap and wait until you find a proper server of hundreds of servers provided by VPN Gate, without worrying about government censorship.

It is enough to sign in with a Gmail account that is subscribed to the VPN Gate Daily mirror site service, the app will do the rest and wait for its boss for a brief hint!

This VPN uses the implementation of SSTP protocol in the Open SSTP Client with slight changes.

๐Ÿ” Privacy Policy

You can read about it here.

๐Ÿ’ก Features

  • Easy to use only two steps, sign in then tap, and finally only one tap!
  • There's no server for collecting and processing data, all stuff remains locally for better privacy.
  • Turn on VPN, without launching the app by defining a Quick Tile Settings in the notification drawer.
  • Allows you to split the tunnel for apps you don't want to use with the VPN traffic.
  • Supports two languages English and Persian.
  • Optimized for all types of screen sizes.

๐ŸŽจ UI Design

The app's design system is based on Material 3, and inspired by designs for VPN apps by Emmanuel Edokpa and Mohammad Reza Farahzad, and by adding my own creativity, it is optimized for both dark and light modes.

๐Ÿ“ท Previews

Screenshots

๐Ÿซ What I learned

  1. How to write a Gradle task to sync the Detekt configs between CLI and GUI interfaces.
  2. How to pipeline a basic CI/CD for releasing a version to the app's repository page by creating a Git tag.
  3. How to write a VpnService and use Bound Service in practice and real-world use cases.
  4. How to ping a VPN server by the correct way.
  5. How to use Protocol Buffer as a serializer mechanism for DataStore.
  6. How to use the Google Sign-In mechanism for authentication and authorization.
  7. How to benchmark Jetpack Compose element for better performance.
  8. How to write Visual Test for Jetpack Compose element animation.
  9. How to web scraping with CSS selectors.
  10. How to define a route as Conditional Navigation in Compose.

๐Ÿ—๏ธ Architecture

Architecture scheme

Undoubtedly, based on the recommended architecture of the official Android site

๐Ÿ“š Tech Stack

๐Ÿ› ๏ธ How To Build

Just follow the steps of this link to get the client id and if you have created it for the debug key, replace it in this line: https://github.com/ErfanSn/NsmaVPN/blob/78382f8896de6d4950dc95314a5834b5113f9491/app/build.gradle.kts#L68 otherwise: https://github.com/ErfanSn/NsmaVPN/blob/78382f8896de6d4950dc95314a5834b5113f9491/app/build.gradle.kts#L77 And finally sync then build the project, that's it.

๐Ÿ”ฎ Future Plans

  • Migrate the project to KMP technology, especially for Windows Desktop platform support.

๐Ÿค Contributing

We welcome your contribution with open arms. Please refer to CONTRIBUTING.md for instructions on how to contribute.

๐Ÿ“œ License

Nsma VPN is distributed under the terms of the Apache License (Version 2.0). See the license for more information.