[project] name = "vpnapp" version = "0.1.0" description = "Private Android/Desktop VPN and proxy client with a small subscription backend." readme = "README.md" requires-python = ">=3.12,<3.14" dependencies = [ "flet>=0.86.0", "flet-webview>=0.86.5", "pydantic>=2.11.0", "qrcode>=8.2", "vpn-native-bridge", ] [dependency-groups] dev = [ "pytest>=8.4.0", "pytest-asyncio>=1.1.0", "ruff>=0.12.0", ] [tool.uv] default-groups = ["dev"] [tool.uv.sources] vpn-native-bridge = { path = "native/android/flet_vpn_bridge" } [tool.flet] org = "su.snw" product = "VPN App" company = "SNW" copyright = "Copyright (C) 2026 SNW" platforms = ["android", "linux", "windows"] [tool.flet.app] path = "." module = "main" exclude = [ ".git", ".venv", "backend", "build", "docs", "native", "scripts", "tests", ] [tool.flet.android] min_sdk_version = 26 target_sdk_version = 35 [tool.flet.dev_packages] vpn-native-bridge = "./native/android/flet_vpn_bridge" [tool.flet.android.permission] "android.permission.INTERNET" = true "android.permission.ACCESS_NETWORK_STATE" = true "android.permission.FOREGROUND_SERVICE" = true "android.permission.FOREGROUND_SERVICE_SPECIAL_USE" = true "android.permission.POST_NOTIFICATIONS" = true "android.permission.NEARBY_WIFI_DEVICES" = true "android.permission.ACCESS_FINE_LOCATION" = true [tool.pytest.ini_options] pythonpath = ["."] asyncio_mode = "auto" testpaths = ["tests"] [tool.ruff] line-length = 100 target-version = "py312" [tool.ruff.lint] select = ["E", "F", "I", "UP"] ignore = ["E501"]