nativemind_vpn
VPN client widgets made by hand by Gleb Sosnin and Wishyut (VPNclient-app, 2025, without AI), carried over with
their code as it was (PROVENANCE.md), plus the VPN editions as data, country flags and app marks. Part
of the NativeMind framework; depends only on nativemind_core and nativemind_icons_fugue (no copilot, no
flutter_llama — fine for every edition, GOST included).
Install
dependencies:
nativemind_vpn: ^1.2.0
import 'package:nativemind_vpn/nativemind_vpn.dart';
final edition = NmVpnEditions.configs.current(); // --dart-define=NM_EDITION=net.vpnclient.orange
MaterialApp(
theme: nmLightTheme, darkTheme: nmDarkTheme, // Gleb Sosnin's color schemes
localizationsDelegates: const [NmVpnL10n.delegate, NmNetwork.delegate],
home: Scaffold(
body: Column(children: [
NmStatBar(download: vpn.down, upload: vpn.up, ping: vpn.ping),
NmMainBtn(status: vpn.status, timeText: vpn.time, onToggle: vpn.toggle, gradient: edition.main),
NmLocationWidget(selectedServer: server.toHandmadeMap(context, isActive: true)),
]),
bottomNavigationBar: NmNavBar(onItemTapped: openTab, gradient: edition.main, slots: const [2, 3, 4]),
),
);
- Rows of Gleb's lists are
Map<String, dynamic>; build them from the models withtoHandmadeMap()(NmServersList(servers: …),NmAppsList(apps: [nmAllAppsHandmadeMap(context), …])). - The widgets get data and callbacks; state, storage and the VPN core stay in the app.
- Strings are Wishyut's JSON files (
assets/lang/, en / ru / th / zh) read at run time byNmLocalizationService; in widget tests load them first:setUpAll(() => NmVpnL10n.load(const Locale('en'))). - The 0.x AI widgets moved from
nativemind_widgets/network.dartare deprecated in favour of the handmade ones (NmConnectButton→NmMainBtn, …): doc/migration-1.0.md, also for 1.1 / 1.2.
Handmade authors
55 % of lib/ is their code (1 550 of 2 806 lines; the rest are adapters by Claude Code and the 0.x library code);
every handmade class, function and method carries its author line. 55 values were replaced by Figma values
(figma-fix blocks keep both).
| Author | Role | In this package |
|---|---|---|
| Gleb Sosnin | front-end developer → team lead → deputy CTO of the RU branch; UI and architecture of VPNclient-app | NmMainBtn, NmStatBar, NmLocationWidget, NmServersList / NmServerListItem, NmAppsList / NmAppListItem, NmSearchDialog, NmNavBar, design tokens, tab icons, CustomIcons font |
| Wishyut | front-end developer and team lead of the TH branch; localization and the settings screen | NmActionButton, NmResetSettingsDialog, NmSettingInfoCard, NmSupportServiceCard, NmSnackbarUtils, NmUrlLauncherUtils, NmCustomString, the string files |
| Alexander Kuptsov | UI/UX + design, Figma «VPN Client» Pro / Ad / Simple / Mini | the figma-fix values, edition gradients (Blue, Pink, Green, Orange) |
«Without AI» for Gleb Sosnin and Wishyut is confirmed by the CTO, Anton Dodonov. The dark theme was completed from the
light Figma tokens (NativeMind DS) with fixed by lines.
Links
- pub.dev: nativemind_vpn · publisher framework.nativemind.net
- Source: gitlab.com/nativemind/widgets.nativemind.net,
flutter/nativemind_vpn· used by VPNclient-app (vpn.nativemind.net) - CHANGELOG.md · doc/migration-1.0.md · PROVENANCE.md · NOTICE
License
NativeMindNONC (see LICENSE), as the whole NativeMind framework. App marks in assets/svg/apps/ are trademarks of
their owners (see NOTICE).
Libraries
- nativemind_vpn
- VPN client widgets made by hand (Gleb Sosnin, Wishyut; VPNclient-app 2025), the VPN editions as data, country
flags and app marks, and the earlier library widgets moved from
nativemind_widgets/network.dart(the ones the handmade widgets replace are deprecated). Use it withnativemind_core(theme, NmConfigs).