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 with toHandmadeMap() (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 by NmLocalizationService; in widget tests load them first: setUpAll(() => NmVpnL10n.load(const Locale('en'))).
  • The 0.x AI widgets moved from nativemind_widgets/network.dart are 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.

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 with nativemind_core (theme, NmConfigs).