Showing preview only (3,139K chars total). Download the full file or copy to clipboard to get everything.
Repository: hiddify/hiddify-app
Branch: main
Commit: 54bc7eebe871
Files: 610
Total size: 2.9 MB
Directory structure:
gitextract_h090yf1s/
├── .gitchangelog.rc
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yaml
│ │ ├── config.yml
│ │ └── feature_request.yaml
│ ├── auto_translator.py
│ ├── change_version.sh
│ ├── dependabot.yml
│ ├── release_message.md
│ ├── sync_translate.sh
│ └── workflows/
│ ├── add_signed_microsft.yml
│ ├── build.yml
│ ├── ci.yml
│ ├── release.yml
│ ├── stale.yml
│ └── winget.yml
├── .gitignore
├── .gitmodules
├── .metadata
├── .prettierrc
├── .release_notes.tpl
├── .stignore
├── .vscode/
│ ├── extensions.json
│ ├── launch.json
│ └── settings.json
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Dockerfile
├── HISTORY.md
├── LICENSE.md
├── Makefile
├── README.md
├── README_br.md
├── README_cn.md
├── README_fa.md
├── README_ja.md
├── README_ru.md
├── analysis_options.yaml
├── android/
│ ├── .gitignore
│ ├── .stignore
│ ├── app/
│ │ ├── build.gradle
│ │ ├── libs/
│ │ │ └── .gitkeep
│ │ └── src/
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── aidl/
│ │ │ │ └── com/
│ │ │ │ └── hiddify/
│ │ │ │ └── hiddify/
│ │ │ │ ├── IService.aidl
│ │ │ │ └── IServiceCallback.aidl
│ │ │ ├── kotlin/
│ │ │ │ └── com/
│ │ │ │ └── hiddify/
│ │ │ │ └── hiddify/
│ │ │ │ ├── ActiveGroupsChannel.kt
│ │ │ │ ├── Application.kt
│ │ │ │ ├── EventHandler.kt
│ │ │ │ ├── GroupsChannel.kt
│ │ │ │ ├── LogHandler.kt
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── MethodHandler.kt
│ │ │ │ ├── PlatformSettingsHandler.kt
│ │ │ │ ├── Settings.kt
│ │ │ │ ├── ShortcutActivity.kt
│ │ │ │ ├── StatsChannel.kt
│ │ │ │ ├── bg/
│ │ │ │ │ ├── AppChangeReceiver.kt
│ │ │ │ │ ├── BootReceiver.kt
│ │ │ │ │ ├── BoxService.kt
│ │ │ │ │ ├── Bugs.kt
│ │ │ │ │ ├── DefaultNetworkListener.kt
│ │ │ │ │ ├── DefaultNetworkMonitor.kt
│ │ │ │ │ ├── LocalResolver.kt
│ │ │ │ │ ├── PlatformInterfaceWrapper.kt
│ │ │ │ │ ├── ProxyService.kt
│ │ │ │ │ ├── ServiceBinder.kt
│ │ │ │ │ ├── ServiceConnection.kt
│ │ │ │ │ ├── ServiceNotification.kt
│ │ │ │ │ ├── TileService.kt
│ │ │ │ │ └── VPNService.kt
│ │ │ │ ├── constant/
│ │ │ │ │ ├── Action.kt
│ │ │ │ │ ├── Alert.kt
│ │ │ │ │ ├── PerAppProxyMode.kt
│ │ │ │ │ ├── ServiceMode.kt
│ │ │ │ │ ├── SettingsKey.kt
│ │ │ │ │ ├── Status.kt
│ │ │ │ │ └── bugs.kt
│ │ │ │ ├── ktx/
│ │ │ │ │ ├── Continuations.kt
│ │ │ │ │ └── Wrappers.kt
│ │ │ │ └── utils/
│ │ │ │ ├── CommandClient.kt
│ │ │ │ ├── GrpcProvider.kt
│ │ │ │ └── OutboundMapper.kt
│ │ │ ├── protos/
│ │ │ │ ├── extension/
│ │ │ │ │ ├── extension.proto
│ │ │ │ │ └── extension_service.proto
│ │ │ │ └── v2/
│ │ │ │ ├── config/
│ │ │ │ │ └── route_rule.proto
│ │ │ │ ├── hcommon/
│ │ │ │ │ └── common.proto
│ │ │ │ ├── hcore/
│ │ │ │ │ ├── hcore.proto
│ │ │ │ │ ├── hcore_service.proto
│ │ │ │ │ └── tunnelservice/
│ │ │ │ │ ├── tunnel.proto
│ │ │ │ │ └── tunnel_service.proto
│ │ │ │ ├── hello/
│ │ │ │ │ ├── hello.proto
│ │ │ │ │ └── hello_service.proto
│ │ │ │ ├── hiddifyoptions/
│ │ │ │ │ └── hiddify_options.proto
│ │ │ │ └── profile/
│ │ │ │ ├── profile.proto
│ │ │ │ └── profile_service.proto
│ │ │ └── res/
│ │ │ ├── drawable/
│ │ │ │ ├── android12splash.xml
│ │ │ │ ├── ic_banner_foreground.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── ic_launcher_foreground.xml
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-v21/
│ │ │ │ └── launch_background.xml
│ │ │ ├── mipmap-anydpi-v26/
│ │ │ │ ├── ic_banner.xml
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ ├── values/
│ │ │ │ ├── colors.xml
│ │ │ │ ├── ic_banner_background.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ ├── values-night/
│ │ │ │ └── styles.xml
│ │ │ ├── values-night-v31/
│ │ │ │ └── styles.xml
│ │ │ ├── values-v31/
│ │ │ │ └── styles.xml
│ │ │ └── xml/
│ │ │ ├── network_security_config.xml
│ │ │ └── shortcuts.xml
│ │ └── profile/
│ │ └── AndroidManifest.xml
│ ├── build.gradle
│ ├── gradle/
│ │ └── wrapper/
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ └── settings.gradle
├── appcast.xml
├── assets/
│ ├── core/
│ │ └── .gitkeep
│ ├── fonts/
│ │ └── emoji_source.txt
│ ├── images/
│ │ └── convert_icon.sh
│ └── translations/
│ ├── ar.i18n.json
│ ├── en.i18n.json
│ ├── es.i18n.json
│ ├── fa.i18n.json
│ ├── fr.i18n.json
│ ├── id.i18n.json
│ ├── pt-BR.i18n.json
│ ├── ru.i18n.json
│ ├── tr.i18n.json
│ ├── zh-CN.i18n.json
│ └── zh-TW.i18n.json
├── build.yaml
├── dependencies.properties
├── devtools_options.yaml
├── ios/
│ ├── .gitignore
│ ├── .stignore
│ ├── Base.xcconfig
│ ├── Flutter/
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ └── Release.xcconfig
│ ├── Frameworks/
│ │ └── .gitkeep
│ ├── HiddifyPacketTunnel/
│ │ ├── HiddifyPacketTunnel.entitlements
│ │ ├── Info.plist
│ │ ├── Logger.swift
│ │ ├── PacketTunnelProvider.swift
│ │ ├── PrivacyInfo.xcprivacy
│ │ ├── SingBox/
│ │ │ ├── Extension+RunBlocking.swift
│ │ │ ├── ExtensionPlatformInterface.swift
│ │ │ ├── ExtensionProvider.swift
│ │ │ └── SingBox.swift
│ │ └── TrafficReader.swift
│ ├── Local Packages/
│ │ └── Package.swift
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── LaunchBackground.imageset/
│ │ │ │ └── Contents.json
│ │ │ └── LaunchImage.imageset/
│ │ │ ├── Contents.json
│ │ │ └── README.md
│ │ ├── Base.lproj/
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Extensions/
│ │ │ └── Bundle+Properties.swift
│ │ ├── Handlers/
│ │ │ ├── ActiveGroupsEventHandler.swift
│ │ │ ├── AlertsEventHandler.swift
│ │ │ ├── FileMethodHandler.swift
│ │ │ ├── GroupsEventHandler.swift
│ │ │ ├── LogsEventHandler.swift
│ │ │ ├── MethodHandler.swift
│ │ │ ├── PlatformMethodHandler.swift
│ │ │ ├── StatsEventHandler.swift
│ │ │ └── StatusEventHandler.swift
│ │ ├── Info.plist
│ │ ├── PrivacyInfo.xcprivacy
│ │ ├── Runner-Bridging-Header.h
│ │ ├── Runner.entitlements
│ │ └── VPN/
│ │ ├── Helpers/
│ │ │ └── Stored.swift
│ │ ├── VPNConfig.swift
│ │ └── VPNManager.swift
│ ├── Runner.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ ├── HiddifyPacketTunnel.xcscheme
│ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
│ ├── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── Shared/
│ │ ├── CommandClient.swift
│ │ ├── FilePath.swift
│ │ └── Outbound.swift
│ ├── exportOptions.plist
│ └── packaging/
│ └── ios/
│ └── make_config.yaml
├── lib/
│ ├── bootstrap.dart
│ ├── core/
│ │ ├── analytics/
│ │ │ ├── analytics_controller.dart
│ │ │ ├── analytics_filter.dart
│ │ │ └── analytics_logger.dart
│ │ ├── app_info/
│ │ │ └── app_info_provider.dart
│ │ ├── db/
│ │ │ ├── converters/
│ │ │ │ └── duration_converter.dart
│ │ │ ├── db.dart
│ │ │ ├── db.steps.dart
│ │ │ ├── provider/
│ │ │ │ └── db_providers.dart
│ │ │ └── schemas/
│ │ │ └── db/
│ │ │ ├── drift_schema_v1.json
│ │ │ ├── drift_schema_v2.json
│ │ │ ├── drift_schema_v3.json
│ │ │ ├── drift_schema_v4.json
│ │ │ └── drift_schema_v5.json
│ │ ├── directories/
│ │ │ └── directories_provider.dart
│ │ ├── haptic/
│ │ │ └── haptic_service.dart
│ │ ├── http_client/
│ │ │ ├── dio_http_client.dart
│ │ │ └── http_client_provider.dart
│ │ ├── localization/
│ │ │ ├── locale_extensions.dart
│ │ │ ├── locale_preferences.dart
│ │ │ └── translations.dart
│ │ ├── logger/
│ │ │ ├── custom_logger.dart
│ │ │ ├── logger.dart
│ │ │ └── logger_controller.dart
│ │ ├── model/
│ │ │ ├── app_info_entity.dart
│ │ │ ├── constants.dart
│ │ │ ├── directories.dart
│ │ │ ├── environment.dart
│ │ │ ├── failures.dart
│ │ │ ├── optional_range.dart
│ │ │ └── region.dart
│ │ ├── notification/
│ │ │ └── in_app_notification_controller.dart
│ │ ├── preferences/
│ │ │ ├── actions_at_closing.dart
│ │ │ ├── general_preferences.dart
│ │ │ ├── preferences_migration.dart
│ │ │ └── preferences_provider.dart
│ │ ├── router/
│ │ │ ├── adaptive_layout/
│ │ │ │ ├── my_adaptive_layout.dart
│ │ │ │ └── shell_route_action.dart
│ │ │ ├── bottom_sheets/
│ │ │ │ ├── bottom_sheets_notifier.dart
│ │ │ │ └── widgets/
│ │ │ │ ├── auto_apps_selection_modal.dart
│ │ │ │ └── quick_settings_modal.dart
│ │ │ ├── deep_linking/
│ │ │ │ ├── my_app_links.dart
│ │ │ │ └── url_protocol/
│ │ │ │ ├── README_url_protocol.md
│ │ │ │ ├── api.dart
│ │ │ │ ├── protocol.dart
│ │ │ │ ├── web_url_protocol.dart
│ │ │ │ └── windows_protocol.dart
│ │ │ ├── dialog/
│ │ │ │ ├── dialog_notifier.dart
│ │ │ │ └── widgets/
│ │ │ │ ├── action_at_closing_dialog.dart
│ │ │ │ ├── confirmation_dialog.dart
│ │ │ │ ├── custom_alert_dialog.dart
│ │ │ │ ├── experimental_feature_notice.dart
│ │ │ │ ├── free_profile_consent_dialog.dart
│ │ │ │ ├── new_version_dialog.dart
│ │ │ │ ├── no_active_profile_dialog.dart
│ │ │ │ ├── ok_dialog.dart
│ │ │ │ ├── proxy_info_dialog.dart
│ │ │ │ ├── save_dialog.dart
│ │ │ │ ├── setting_checkbox_dialog.dart
│ │ │ │ ├── setting_input_dialog.dart
│ │ │ │ ├── setting_picker_dialog.dart
│ │ │ │ ├── setting_radio_dialog.dart
│ │ │ │ ├── setting_slider_dialog.dart
│ │ │ │ ├── setting_text_dialog.dart
│ │ │ │ ├── sort_profiles_dialog.dart
│ │ │ │ ├── unknown_domains_warning_dialog.dart
│ │ │ │ ├── warp_license_dialog.dart
│ │ │ │ └── window_closing_dialog.dart
│ │ │ └── go_router/
│ │ │ ├── go_router_notifier.dart
│ │ │ ├── helper/
│ │ │ │ ├── active_breakpoint_notifier.dart
│ │ │ │ ├── custom_transition.dart
│ │ │ │ └── popup_count_notifier.dart
│ │ │ ├── refresh_listenable.dart
│ │ │ └── routing_config_notifier.dart
│ │ ├── theme/
│ │ │ ├── app_theme.dart
│ │ │ ├── app_theme_mode.dart
│ │ │ ├── theme_extensions.dart
│ │ │ └── theme_preferences.dart
│ │ ├── utils/
│ │ │ ├── exception_handler.dart
│ │ │ ├── ffi_utils.dart
│ │ │ ├── ip_utils.dart
│ │ │ ├── json_converters.dart
│ │ │ ├── laststeam.dart
│ │ │ ├── preferences_utils.dart
│ │ │ └── throttler.dart
│ │ └── widget/
│ │ ├── adaptive_icon.dart
│ │ ├── adaptive_menu.dart
│ │ ├── animated_text.dart
│ │ ├── animated_visibility.dart
│ │ ├── shimmer_skeleton.dart
│ │ ├── skeleton_widget.dart
│ │ ├── spaced_list_widget.dart
│ │ └── tip_card.dart
│ ├── features/
│ │ ├── about/
│ │ │ └── widget/
│ │ │ └── about_page.dart
│ │ ├── app/
│ │ │ └── widget/
│ │ │ └── app.dart
│ │ ├── app_update/
│ │ │ ├── data/
│ │ │ │ ├── app_update_data_providers.dart
│ │ │ │ ├── app_update_repository.dart
│ │ │ │ └── github_release_parser.dart
│ │ │ ├── model/
│ │ │ │ ├── app_update_failure.dart
│ │ │ │ └── remote_version_entity.dart
│ │ │ └── notifier/
│ │ │ ├── app_update_notifier.dart
│ │ │ └── app_update_state.dart
│ │ ├── auto_start/
│ │ │ └── notifier/
│ │ │ └── auto_start_notifier.dart
│ │ ├── common/
│ │ │ ├── custom_text_scroll.dart
│ │ │ ├── general_pref_tiles.dart
│ │ │ ├── qr_code_dialog.dart
│ │ │ └── qr_code_scanner_screen.dart
│ │ ├── connection/
│ │ │ ├── data/
│ │ │ │ ├── connection_data_providers.dart
│ │ │ │ └── connection_repository.dart
│ │ │ ├── model/
│ │ │ │ ├── connection_failure.dart
│ │ │ │ └── connection_status.dart
│ │ │ ├── notifier/
│ │ │ │ └── connection_notifier.dart
│ │ │ └── widget/
│ │ │ └── connection_wrapper.dart
│ │ ├── deep_link/
│ │ │ └── notifier/
│ │ │ └── deep_link_notifier.dart
│ │ ├── home/
│ │ │ └── widget/
│ │ │ ├── connection_button.dart
│ │ │ ├── empty_profiles_home_body.dart
│ │ │ ├── home_page.dart
│ │ │ ├── new_con_button.dart
│ │ │ └── new_connection_button.dart
│ │ ├── intro/
│ │ │ └── widget/
│ │ │ └── intro_page.dart
│ │ ├── log/
│ │ │ ├── data/
│ │ │ │ ├── log_data_providers.dart
│ │ │ │ ├── log_parser.dart
│ │ │ │ ├── log_path_resolver.dart
│ │ │ │ └── log_repository.dart
│ │ │ ├── model/
│ │ │ │ ├── log_entity.dart
│ │ │ │ ├── log_failure.dart
│ │ │ │ └── log_level.dart
│ │ │ └── overview/
│ │ │ ├── logs_overview_notifier.dart
│ │ │ ├── logs_overview_state.dart
│ │ │ └── logs_page.dart
│ │ ├── per_app_proxy/
│ │ │ ├── data/
│ │ │ │ ├── app_proxy_data_source.dart
│ │ │ │ ├── auto_selection_repository.dart
│ │ │ │ ├── auto_selection_repository_provider.dart
│ │ │ │ └── selected_data_provider.dart
│ │ │ ├── model/
│ │ │ │ ├── app_package_info.dart
│ │ │ │ ├── per_app_proxy_backup.dart
│ │ │ │ ├── per_app_proxy_mode.dart
│ │ │ │ └── pkg_flag.dart
│ │ │ └── overview/
│ │ │ ├── per_app_proxy_loading_notifier.dart
│ │ │ ├── per_app_proxy_notifier.dart
│ │ │ ├── per_app_proxy_page.dart
│ │ │ └── per_app_proxy_service_notifier.dart
│ │ ├── platform_specific/
│ │ │ └── android_quick_settings_tile.dart
│ │ ├── profile/
│ │ │ ├── add/
│ │ │ │ ├── add_profile_modal.dart
│ │ │ │ ├── model/
│ │ │ │ │ └── free_profiles_model.dart
│ │ │ │ └── widgets/
│ │ │ │ ├── fix_btn.dart
│ │ │ │ ├── fix_btns.dart
│ │ │ │ ├── free_btn.dart
│ │ │ │ ├── free_btns.dart
│ │ │ │ ├── loading.dart
│ │ │ │ ├── nav_bar.dart
│ │ │ │ └── widgets.dart
│ │ │ ├── data/
│ │ │ │ ├── profile_data_mapper.dart
│ │ │ │ ├── profile_data_providers.dart
│ │ │ │ ├── profile_data_source.dart
│ │ │ │ ├── profile_parser.dart
│ │ │ │ ├── profile_path_resolver.dart
│ │ │ │ └── profile_repository.dart
│ │ │ ├── details/
│ │ │ │ ├── json_editor.dart
│ │ │ │ ├── profile_details_notifier.dart
│ │ │ │ ├── profile_details_page.dart
│ │ │ │ └── profile_details_state.dart
│ │ │ ├── model/
│ │ │ │ ├── profile_entity.dart
│ │ │ │ ├── profile_failure.dart
│ │ │ │ └── profile_sort_enum.dart
│ │ │ ├── notifier/
│ │ │ │ ├── active_profile_notifier.dart
│ │ │ │ ├── profile_notifier.dart
│ │ │ │ └── profiles_update_notifier.dart
│ │ │ ├── overview/
│ │ │ │ ├── profiles_modal.dart
│ │ │ │ ├── profiles_notifier.dart
│ │ │ │ └── profiles_page.dart
│ │ │ └── widget/
│ │ │ ├── profile_tile.dart
│ │ │ └── profile_tile_main.dart
│ │ ├── proxy/
│ │ │ ├── active/
│ │ │ │ ├── active_proxy_card.dart
│ │ │ │ ├── active_proxy_delay_indicator.dart
│ │ │ │ ├── active_proxy_footer_old.dart
│ │ │ │ ├── active_proxy_notifier.dart
│ │ │ │ └── ip_widget.dart
│ │ │ ├── data/
│ │ │ │ ├── proxy_data_providers.dart
│ │ │ │ └── proxy_repository.dart
│ │ │ ├── model/
│ │ │ │ ├── ip_info_entity.dart
│ │ │ │ ├── proxy_entity.dart
│ │ │ │ └── proxy_failure.dart
│ │ │ ├── overview/
│ │ │ │ ├── proxies_overview_notifier.dart
│ │ │ │ └── proxies_overview_page.dart
│ │ │ └── widget/
│ │ │ └── proxy_tile.dart
│ │ ├── route_rules/
│ │ │ ├── notifier/
│ │ │ │ ├── android_apps_notifier.dart
│ │ │ │ ├── generic_list_notifier.dart
│ │ │ │ ├── rule_notifier.dart
│ │ │ │ └── rules_notifier.dart
│ │ │ ├── overview/
│ │ │ │ ├── android_apps_page.dart
│ │ │ │ ├── generic_list_page.dart
│ │ │ │ ├── rule_page.dart
│ │ │ │ └── rules_page.dart
│ │ │ └── widget/
│ │ │ ├── rule_tile.dart
│ │ │ ├── setting_checkbox.dart
│ │ │ ├── setting_detail_chips.dart
│ │ │ ├── setting_divider.dart
│ │ │ ├── setting_generic_list.dart
│ │ │ ├── setting_radio.dart
│ │ │ └── setting_text.dart
│ │ ├── settings/
│ │ │ ├── data/
│ │ │ │ ├── battery_optimization_repository.dart
│ │ │ │ ├── config_option_data_providers.dart
│ │ │ │ └── config_option_repository.dart
│ │ │ ├── model/
│ │ │ │ ├── config_option_failure.dart
│ │ │ │ └── settings_failure.dart
│ │ │ ├── notifier/
│ │ │ │ ├── battery_optimization/
│ │ │ │ │ └── battery_optimizations_notifier.dart
│ │ │ │ ├── config_option/
│ │ │ │ │ └── config_option_notifier.dart
│ │ │ │ ├── reset_tunnel/
│ │ │ │ │ └── reset_tunnel_notifier.dart
│ │ │ │ └── warp_option/
│ │ │ │ └── warp_option_notifier.dart
│ │ │ ├── overview/
│ │ │ │ ├── sections/
│ │ │ │ │ ├── dns_options_page.dart
│ │ │ │ │ ├── general_page.dart
│ │ │ │ │ ├── inbound_options_page.dart
│ │ │ │ │ ├── route_options_page.dart
│ │ │ │ │ ├── tls_tricks_page.dart
│ │ │ │ │ └── warp_options_page.dart
│ │ │ │ └── settings_page.dart
│ │ │ └── widget/
│ │ │ ├── autocomplete_field.dart
│ │ │ └── preference_tile.dart
│ │ ├── shortcut/
│ │ │ └── shortcut_wrapper.dart
│ │ ├── stats/
│ │ │ ├── data/
│ │ │ │ ├── stats_data_providers.dart
│ │ │ │ └── stats_repository.dart
│ │ │ ├── model/
│ │ │ │ ├── stats_entity.dart
│ │ │ │ └── stats_failure.dart
│ │ │ ├── notifier/
│ │ │ │ └── stats_notifier.dart
│ │ │ └── widget/
│ │ │ ├── connection_stats_card.dart
│ │ │ ├── side_bar_stats_overview.dart
│ │ │ └── stats_card.dart
│ │ ├── system_tray/
│ │ │ ├── notifier/
│ │ │ │ └── system_tray_notifier.dart
│ │ │ └── widget/
│ │ │ └── system_tray_wrapper.dart
│ │ └── window/
│ │ ├── notifier/
│ │ │ └── window_notifier.dart
│ │ └── widget/
│ │ └── window_wrapper.dart
│ ├── gen/
│ │ └── hiddify_core_generated_bindings.dart
│ ├── hiddifycore/
│ │ ├── core_interface/
│ │ │ ├── core_interface.dart
│ │ │ ├── core_interface_desktop.dart
│ │ │ ├── core_interface_mobile.dart
│ │ │ ├── core_interface_wrapper.dart
│ │ │ ├── core_interface_wrapper_stub.dart
│ │ │ └── mtls_channel_cred.dart
│ │ ├── generated/
│ │ │ ├── extension/
│ │ │ │ ├── extension.pb.dart
│ │ │ │ ├── extension.pbenum.dart
│ │ │ │ ├── extension.pbjson.dart
│ │ │ │ ├── extension_service.pb.dart
│ │ │ │ ├── extension_service.pbenum.dart
│ │ │ │ ├── extension_service.pbgrpc.dart
│ │ │ │ └── extension_service.pbjson.dart
│ │ │ ├── google/
│ │ │ │ └── protobuf/
│ │ │ │ ├── timestamp.pb.dart
│ │ │ │ ├── timestamp.pbenum.dart
│ │ │ │ └── timestamp.pbjson.dart
│ │ │ └── v2/
│ │ │ ├── common/
│ │ │ │ ├── common.pb.dart
│ │ │ │ ├── common.pbenum.dart
│ │ │ │ └── common.pbjson.dart
│ │ │ ├── config/
│ │ │ │ ├── route_rule.pb.dart
│ │ │ │ ├── route_rule.pbenum.dart
│ │ │ │ └── route_rule.pbjson.dart
│ │ │ ├── hcommon/
│ │ │ │ ├── common.pb.dart
│ │ │ │ ├── common.pbenum.dart
│ │ │ │ └── common.pbjson.dart
│ │ │ ├── hcore/
│ │ │ │ ├── hcore.pb.dart
│ │ │ │ ├── hcore.pbenum.dart
│ │ │ │ ├── hcore.pbjson.dart
│ │ │ │ ├── hcore_service.pb.dart
│ │ │ │ ├── hcore_service.pbenum.dart
│ │ │ │ ├── hcore_service.pbgrpc.dart
│ │ │ │ ├── hcore_service.pbjson.dart
│ │ │ │ └── tunnelservice/
│ │ │ │ ├── tunnel.pb.dart
│ │ │ │ ├── tunnel.pbenum.dart
│ │ │ │ ├── tunnel.pbjson.dart
│ │ │ │ ├── tunnel_service.pb.dart
│ │ │ │ ├── tunnel_service.pbenum.dart
│ │ │ │ ├── tunnel_service.pbgrpc.dart
│ │ │ │ └── tunnel_service.pbjson.dart
│ │ │ ├── hello/
│ │ │ │ ├── hello.pb.dart
│ │ │ │ ├── hello.pbenum.dart
│ │ │ │ ├── hello.pbjson.dart
│ │ │ │ ├── hello_service.pb.dart
│ │ │ │ ├── hello_service.pbenum.dart
│ │ │ │ ├── hello_service.pbgrpc.dart
│ │ │ │ └── hello_service.pbjson.dart
│ │ │ ├── hiddifyoptions/
│ │ │ │ ├── hiddify_options.pb.dart
│ │ │ │ ├── hiddify_options.pbenum.dart
│ │ │ │ └── hiddify_options.pbjson.dart
│ │ │ └── profile/
│ │ │ ├── profile.pb.dart
│ │ │ ├── profile.pbenum.dart
│ │ │ ├── profile.pbjson.dart
│ │ │ ├── profile_service.pb.dart
│ │ │ ├── profile_service.pbenum.dart
│ │ │ ├── profile_service.pbgrpc.dart
│ │ │ └── profile_service.pbjson.dart
│ │ ├── hiddify_core_service.dart
│ │ ├── hiddify_core_service_provider.dart
│ │ └── init_signal.dart
│ ├── main.dart
│ ├── main_prod.dart
│ ├── riverpod_observer.dart
│ ├── singbox/
│ │ └── model/
│ │ ├── core_status.dart
│ │ ├── singbox_config_enum.dart
│ │ ├── singbox_config_option.dart
│ │ ├── singbox_outbound.dart
│ │ ├── singbox_proxy_type.dart
│ │ ├── singbox_rule.dart
│ │ ├── singbox_stats.dart
│ │ └── warp_account.dart
│ └── utils/
│ ├── alerts.dart
│ ├── async_mutation.dart
│ ├── bottom_sheet_page.dart
│ ├── callback_debouncer.dart
│ ├── custom_loggers.dart
│ ├── custom_text_form_field.dart
│ ├── date_time_formatter.dart
│ ├── link_parsers.dart
│ ├── mutation_state.dart
│ ├── number_formatters.dart
│ ├── placeholders.dart
│ ├── platform_utils.dart
│ ├── riverpod_utils.dart
│ ├── sentry_riverpod_observer.dart
│ ├── sentry_utils.dart
│ ├── text_utils.dart
│ ├── uri_utils.dart
│ ├── utils.dart
│ └── validators.dart
├── linux/
│ ├── .gitignore
│ ├── .stignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ ├── main.cc
│ ├── my_application.cc
│ ├── my_application.h
│ └── packaging/
│ ├── app.hiddify.com.appdata.xml
│ ├── appimage/
│ │ ├── AppRun
│ │ └── make_config.yaml
│ ├── deb/
│ │ └── make_config.yaml
│ └── rpm/
│ └── make_config.yaml
├── linux_deps.list
├── macos/
│ ├── .gitignore
│ ├── .stignore
│ ├── Flutter/
│ │ ├── Flutter-Debug.xcconfig
│ │ ├── Flutter-Release.xcconfig
│ │ └── GeneratedPluginRegistrant.swift
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ └── AppIcon.appiconset/
│ │ │ └── Contents.json
│ │ ├── Base.lproj/
│ │ │ └── MainMenu.xib
│ │ ├── Configs/
│ │ │ ├── AppInfo.xcconfig
│ │ │ ├── Debug.xcconfig
│ │ │ ├── Release.xcconfig
│ │ │ └── Warnings.xcconfig
│ │ ├── DebugProfile.entitlements
│ │ ├── Info.plist
│ │ ├── MainFlutterWindow.swift
│ │ └── Release.entitlements
│ ├── Runner.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── swiftpm/
│ │ │ └── Package.resolved
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── swiftpm/
│ │ └── Package.resolved
│ ├── RunnerTests/
│ │ └── RunnerTests.swift
│ └── packaging/
│ ├── dmg/
│ │ └── make_config.yaml
│ └── pkg/
│ └── make_config.yaml
├── project.inlang/
│ ├── project_id
│ └── settings.json
├── pubspec.yaml
├── scripts/
│ └── package_windows.ps1
├── snap/
│ └── gui/
│ └── app_icon.desktop
├── test/
│ ├── core/
│ │ └── utils/
│ │ └── ip_utils_test.dart
│ ├── drift/
│ │ └── db/
│ │ ├── generated/
│ │ │ ├── schema.dart
│ │ │ ├── schema_v1.dart
│ │ │ ├── schema_v2.dart
│ │ │ ├── schema_v3.dart
│ │ │ ├── schema_v4.dart
│ │ │ └── schema_v5.dart
│ │ └── migration_test.dart
│ └── features/
│ └── profile/
│ └── data/
│ └── profile_parser_test.dart
├── test.configs/
│ ├── README.md
│ ├── ainita
│ ├── dnstt/
│ │ ├── dnstt_raw_config.json
│ │ └── readme.md
│ ├── fragment
│ ├── free_configs
│ ├── mahsa
│ ├── super_fragment
│ ├── warp
│ └── warp2
├── web/
│ ├── drift_worker.js
│ ├── index.html
│ ├── manifest.json
│ └── sqlite3.wasm
└── windows/
├── .gitignore
├── .stignore
├── CMakeLists.txt
├── flutter/
│ ├── CMakeLists.txt
│ ├── generated_plugin_registrant.cc
│ ├── generated_plugin_registrant.h
│ └── generated_plugins.cmake
├── packaging/
│ ├── exe/
│ │ ├── inno_setup.sas
│ │ └── make_config.yaml
│ └── msix/
│ └── make_config.yaml
└── runner/
├── CMakeLists.txt
├── Runner.rc
├── flutter_window.cpp
├── flutter_window.h
├── main.cpp
├── resource.h
├── runner.exe.manifest
├── utils.cpp
├── utils.h
├── win32_window.cpp
└── win32_window.h
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitchangelog.rc
================================================
#output_engine = mustache("markdown")
output_engine = mustache(".release_notes.tpl")
tag_filter_regexp = r'^v?[0-9]+\.[0-9]+(\.[0-9]+)?$'
ignore_regexps = [
r'@minor', r'!minor',
r'@cosmetic', r'!cosmetic',
r'@refactor', r'!refactor',
r'@wip', r'!wip',
r'^([cC]hg|[fF]ix|[nN]ew)\s*:\s*[p|P]kg:',
r'^([cC]hg|[fF]ix|[nN]ew)\s*:\s*[d|D]ev:',
r'^(.{3,3}\s*:)?\s*[fF]irst commit.?\s*$',
r'^$', ## ignore commits with empty messages
r'release: *',
]
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yaml
================================================
---
name: Bug Report
description: Report a bug encountered while using Hiddify
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
## Only English
For access to our user forums, please join [our Telegram group](https://t.me/hiddify_board).
Please make sure to provide a descriptive, deterministic, and reproducible report. It saves time for both the developers and users who are looking for solutions. Providing as much information as possible, including screenshots and logs, is highly appreciated. This will help us to better understand the issue and respond more effectively.
Please DO NOT use this template to ask questions. You can join [our Telegram group](https://t.me/hiddify_board) or [our Website](https://hiddify.com/app) to ask questions. This template is strictly for reporting bugs.
- type: checkboxes
id: confirm-search
attributes:
label: Search first
description: Please search [existing issues](https://github.com/hiddify/hiddify-app/issues) before reporting.
options:
- label: I searched and no similar issues were found
required: true
- type: dropdown
id: platform
attributes:
label: Platform/OS
description: What platform are you seeing the problem on?
multiple: true
options:
- Android
- Windows
- macOS
- Linux
- Android TV
- iOS
- HiddifyCli (Core)
validations:
required: true
- type: input
id: os
attributes:
label: "OS version"
description: "Please provide the operating system version. (Example: Windows 10)"
validations:
required: true
- type: input
id: version
attributes:
label: Hiddify Version
description: "What version of Hiddify are you using?"
validations:
required: true
- type: textarea
id: problem
attributes:
label: What Happened?
description: |
Please provide as much info as possible. Not doing so may result in your bug not being addressed in a timely manner.
validations:
required: true
- type: textarea
id: reproduce
attributes:
label: Minimal Reproducible Example (MRE)
description: |
Please tell us the steps to reproduce the bug. A [Minimal Reproducible Example (MRE)](https://stackoverflow.com/help/minimal-reproducible-example) is needed.
placeholder: |
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected Behavior
description: |
Please tell us what's the behavior you expect.
validations:
required: false
- type: textarea
id: additional
attributes:
label: Additional Context
description: |
If applicable, add screenshots, screen recordings or additional context to help explain your problem.
validations:
required: false
- type: textarea
id: configs
attributes:
label: Application Config Options
description: Please copy and paste Application config.
validations:
required: false
- type: textarea
id: logs
attributes:
label: Relevant log output
description: Please copy and paste any relevant log output. This will be automatically formatted into code.
validations:
required: false
- type: checkboxes
id: ask-pr
attributes:
label: Are you willing to submit a PR? If you know how to fix the bug.
description: |
If you are not familiar with programming, you can skip this step.
If you are a developer and know how to fix the bug, you can submit a PR to fix it.
Your contributions are greatly appreciated and play a vital role in helping to improve the project!
options:
- label: I'm willing to submit a PR (Thank you!)
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: Questions & Help
url: https://t.me/hiddify_board
about: Ask a question about Hiddify
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yaml
================================================
name: Feature Request
description: Request a new feature
title: '[FR] '
body:
- type: markdown
attributes:
value: |
# Only English
- type: textarea
attributes:
label: Feature description
description: Please provide a clear and concise description of what you want to happen and what problem will this solve.
validations:
required: true
================================================
FILE: .github/auto_translator.py
================================================
import i18n
import json
from deep_translator import GoogleTranslator
import sys
import os
def get_path(lang):
base_dir = os.path.abspath('../assets/translations')
lang_file = f'strings_{lang}.i18n.json'
path = os.path.join(base_dir, lang_file)
if path.startswith(base_dir):
return path
else:
raise ValueError('Invalid language file path')
def read_translate(lang):
pat = get_path(lang)
if not os.path.isfile(pat):
return {}
with open(pat) as f:
return json.load(f)
def recursive_translate(src, dst, translator):
for sk, sv in src.items():
if type(sv) == str:
if sk not in dst or not dst[sk]:
dst[sk] = translator.translate(sv)
print(sk, sv, dst[sk])
if not dst[sk]:
del dst[sk]
else:
if sk not in dst:
dst[sk] = {}
recursive_translate(sv, dst[sk], translator)
if __name__ == "__main__":
src = sys.argv[1]
dst = sys.argv[2]
src_pofile = read_translate(src)
dst_pofile = read_translate(dst)
translator = GoogleTranslator(source=src, target=dst if dst != 'zh' else "zh-CN")
recursive_translate(src_pofile, dst_pofile, translator)
with open(os.path.abspath(get_path(dst)), 'w') as df:
json.dump(dst_pofile, df, ensure_ascii=False, indent=4)
================================================
FILE: .github/change_version.sh
================================================
#! /bin/bash
SED() { [[ "$OSTYPE" == "darwin"* ]] && sed -i '' "$@" || sed -i "$@"; }
echo "previous version was $(git describe --tags $(git rev-list --tags --max-count=1))"
echo "WARNING: This operation will creates version tag and push to github"
if [ "$(curl -o /dev/null -I -s -w "%{http_code}" https://github.com/hiddify/hiddify-core/releases/download/v${CORE_VERSION}/hiddify-core-linux-amd64.tar.gz)" = "404" ]; then
echo "Core v${CORE_VERSION} not Found";
exit 3;
fi
cversion_string=$(grep -e "^version:" pubspec.yaml | cut -d: -f2-)
cstr_version=`echo "${cversion_string}" | sed -E -n 's/ *([0-9]+\.[0-9]+\.[0-9]+).*/\1/p'`
[ "$cversion_string" == "" ] && { echo "getting old version error"; exit 1 ; }
cbuild_number=`echo "${cversion_string}" | sed -E -n 's/.*\+([0-9]+)$/\1/p'`
echo "Current Version Name:${cstr_version} Build Number:${cbuild_number}"
read -p "new Version? (provide the next x.y.z semver) : " TAG
echo $TAG
[[ "$TAG" =~ ^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}(\.dev)?$ ]] || { echo "Incorrect tag. e.g., 1.2.3 or 1.2.3.dev"; exit 1; }
IFS="." read -r -a VERSION_ARRAY <<< "$TAG"
VERSION_STR="${VERSION_ARRAY[0]}.${VERSION_ARRAY[1]}.${VERSION_ARRAY[2]}"
BUILD_NUMBER=$(( ${VERSION_ARRAY[0]} * 10000 + ${VERSION_ARRAY[1]} * 100 + ${VERSION_ARRAY[2]} ))
echo "version: ${VERSION_STR}+${BUILD_NUMBER}"
echo "====$cbuild_number"
SED "s/^version: .*/version: ${VERSION_STR}\+${BUILD_NUMBER}/g" pubspec.yaml
SED "s/^msix_version: .*/msix_version: ${VERSION_ARRAY[0]}.${VERSION_ARRAY[1]}.${VERSION_ARRAY[2]}.0/g" windows/packaging/msix/make_config.yaml
SED "s|CURRENT_PROJECT_VERSION = ${cbuild_number}|CURRENT_PROJECT_VERSION = ${BUILD_NUMBER}|g" ios/Runner.xcodeproj/project.pbxproj
SED "s/MARKETING_VERSION = ${cstr_version}/MARKETING_VERSION = ${VERSION_STR}/g" ios/Runner.xcodeproj/project.pbxproj
git tag ${TAG} > /dev/null
gitchangelog > HISTORY.md || { git tag -d ${TAG}; echo "Please run pip install gitchangelog pystache mustache markdown"; exit 2; }
git tag -d ${TAG} > /dev/null
git add hiddify-core dependencies.properties ios/Runner.xcodeproj/project.pbxproj pubspec.yaml windows/packaging/msix/make_config.yaml HISTORY.md
git commit -m "release: version ${TAG}"
echo "creating git tag : v${TAG}"
git push
git tag v${TAG}
git push -u origin HEAD --tags
echo "Github Actions will detect the new tag and release the new version."
================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "gitsubmodule" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "daily"
open-pull-requests-limit: 5
================================================
FILE: .github/release_message.md
================================================
<div align=center>
[](https://img.shields.io/github/downloads/hiddify/hiddify-next/RELEASE_TAG/)
</div>
**Download based on your OS:**
<div dir="rtl">
**بر اساس سیستم عامل خود دانلود کنید:**
</div>
<div align=left>
<table>
<thead align=left>
<tr>
<th>OS</th>
<th>Download</th>
</tr>
</thead>
<tbody align=left>
<tr>
<td>Android</td><td>
<a href="https://github.com/hiddify/hiddify-app/releases/download/RELEASE_TAG/Hiddify-Android-universal.apk"><img src="https://img.shields.io/badge/APK-Universal-044d29.svg?logo=android"></a><br>
<a href="https://github.com/hiddify/hiddify-app/releases/download/RELEASE_TAG/Hiddify-Android-arm64.apk"><img src="https://img.shields.io/badge/APK-ARMv8-168039.svg?logo=android"></a><br>
<a href="https://github.com/hiddify/hiddify-app/releases/download/RELEASE_TAG/Hiddify-Android-arm7.apk"><img src="https://img.shields.io/badge/APK-ARMv7-45bf55.svg?logo=android"></a><br>
<a href="https://github.com/hiddify/hiddify-app/releases/download/RELEASE_TAG/Hiddify-Android-x86_64.apk"><img src="https://img.shields.io/badge/APK-x64-96ed89.svg?logo=android"></a>
</td>
</tr>
<tr>
<td>Windows</td><td>
<a href="https://github.com/hiddify/hiddify-app/releases/download/RELEASE_TAG/Hiddify-Windows-Setup-x64.Msix"><img src="https://img.shields.io/badge/OfficialSetup-x64-0078d7.svg?logo=windows"></a><br>
<a href="https://github.com/hiddify/hiddify-app/releases/download/RELEASE_TAG/Hiddify-Windows-Setup-x64.exe"><img src="https://img.shields.io/badge/Setup-x64-2d7d9a.svg?logo=windows"></a><br>
<a href="https://github.com/hiddify/hiddify-app/releases/download/RELEASE_TAG/Hiddify-Windows-Portable-x64.zip"><img src="https://img.shields.io/badge/Portable-x64-67b7d1.svg?logo=windows"></a>
</td>
</tr>
<tr>
<td>macOS (v10.15+)</td>
<td><a href="https://github.com/hiddify/hiddify-app/releases/download/RELEASE_TAG/Hiddify-MacOS.dmg"><img src="https://img.shields.io/badge/DMG-Universal-ea005e.svg?logo=apple"></a><br>
<a href="https://github.com/hiddify/hiddify-app/releases/download/RELEASE_TAG/Hiddify-MacOS-Installer.pkg"><img src="https://img.shields.io/badge/PKG-Universal-bc544b.svg?logo=apple" /></a></a></td>
</tr>
<tr>
<td>Linux</td>
<td><a href="https://github.com/hiddify/hiddify-app/releases/download/RELEASE_TAG/Hiddify-Linux-x64.AppImage"><img src="https://img.shields.io/badge/AppImage-x64-f84e29.svg?logo=linux"> </a><br>
<a href="https://github.com/hiddify/hiddify-app/releases/download/RELEASE_TAG/Hiddify-Debian-x64.deb"><img src="https://img.shields.io/badge/DebPackage-x64-FF9966.svg?logo=debian"> </a><br>
<a href="https://github.com/hiddify/hiddify-app/releases/download/RELEASE_TAG/Hiddify-rpm-x64.rpm"><img src="https://img.shields.io/badge/RpmPackage-x64-F1B42F.svg?logo=redhat"> </a></td>
</tr>
</tbody>
</table>
</div>
<div dir="ltr">
**List of all changes:** [ChangeLog](https://github.com/hiddify/hiddify-app/blob/main/HISTORY.md)
</div>
================================================
FILE: .github/sync_translate.sh
================================================
# key="FRu3eopQWgsvWmnycBXxv2eWpbUwGOu2"
# wget -O ../assets/translations/strings_en.i18n.json "https://localise.biz/api/export/locale/en-US.json?index=id&format=i18next4&key=$key"
# wget -O ../assets/translations/strings_fa.i18n.json "https://localise.biz/api/export/locale/fa.json?index=id&format=i18next4&key=$key"
# wget -O ../assets/translations/strings_zh.i18n.json "https://localise.biz/api/export/locale/zh.json?index=id&format=i18next4&key=$key"
# # # wget -O ../assets/translations/strings_pt.i18n.json "https://localise.biz/api/export/locale/pt.json?index=id&format=i18next4&key=$key"
# wget -O ../assets/translations/strings_ru.i18n.json "https://localise.biz/api/export/locale/ru.json?index=id&format=i18next4&key=$key"
pip install polib deep-translator python-i18n
# python3 auto_translator.py fa en
python3 auto_translator.py en fa
python3 auto_translator.py en zh-CN
# python3 auto_translator.py en pt
python3 auto_translator.py en ru
python3 auto_translator.py en tr
python3 auto_translator.py en es
function update_localise(){
lang=$1
pat="../assets/translations/strings_${lang}.i18n.json"
# if [[ $lang == 'en' ]];then
# pat="../assets/translations/strings.i18n.json"
# fi
# curl -X POST "https://localise.biz/api/import/json?locale=$lang&key=$LOCALIZ_KEY" \
curl "https://localise.biz/api/import/json?format=i18next4&delete-absent=false&ignore-existing=false&locale=$lang&flag-new=Provisional&key=$LOCALIZ_KEY" \
-H 'Accept: application/json' \
--data-binary @$pat
}
# update_localise en
# update_localise fa
# update_localise zh
# # # # update_localise pt
# update_localise ru
================================================
FILE: .github/workflows/add_signed_microsft.yml
================================================
name: Upload store MSIX to release
permissions:
contents: write
on:
release:
types: [released] # Run the action when a GitHub release is published
# schedule:
# - cron: '0 */6 * * *' # Run the action every 6 hours
workflow_dispatch: # Manually run the action
jobs:
upload-store-msix-to-release:
runs-on: ubuntu-latest
steps:
- name: Upload store MSIX to release
uses: hiddify/Upload-Microsoft-Store-MSIX-Package-to-GitHub-Release@develop
with:
store-id: 9pdfnl3qv2s5
token: ${{ secrets.GITHUB_TOKEN }}
asset-name-pattern: Hiddify-Windows-Setup-x64 # Optional
================================================
FILE: .github/workflows/build.yml
================================================
name: Build
on:
workflow_call:
inputs:
upload-artifact:
type: boolean
default: true
tag-name:
type: string
default: "draft"
channel:
type: string
default: "dev"
env:
IS_GITHUB_ACTIONS: 1
CHANNEL: "${{ inputs.channel }}"
FLUTTER_VERSION: '3.38.5'
NDK_VERSION: r28c
UPLOAD_ARTIFACT: "${{ inputs.upload-artifact }}"
TAG_NAME: "${{ inputs.tag-name }}"
TARGET_NAME_gz: "Hiddify-Linux-x64-AppImage.tar"
TARGET_NAME_AppImage: "Hiddify-Linux-x64-AppImage"
TARGET_NAME_deb: "Hiddify-Debian-x64"
# TARGET_NAME_rpm: "Hiddify-rpm-x64"
TARGET_NAME_apk: "Hiddify-Android"
TARGET_NAME_aab: "Hiddify-Android"
TARGET_NAME_exe: "Hiddify-Windows-Setup-x64"
TARGET_NAME_msix: "Hiddify-Windows-x64"
TARGET_NAME_zip: "Hiddify-Windows-Portable-x64"
TARGET_NAME_dmg: "Hiddify-MacOS"
TARGET_NAME_pkg: "Hiddify-MacOS-Installer"
TARGET_NAME_ipa: "Hiddify-iOS"
jobs:
test:
outputs:
draftBuildCode: ${{ steps.draftBuildCode.outputs.datetime }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2.21.0 #issue with 2.13
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
channel: 'stable'
cache: true
- name: Prepare
run: make linux-amd64-prepare
- name: Test
run: flutter test
- name: make draftBuildCode
id: draftBuildCode
run: echo "::set-output name=datetime::$(date +'%d.%H.%M')"
build:
needs: test
permissions: write-all
continue-on-error: true
strategy:
fail-fast: false
matrix:
include:
- platform: android-apk
os: ubuntu-latest
targets: apk
- platform: android-aab
os: ubuntu-latest
targets: aab
- platform: windows
os: windows-latest
aarch: amd64
targets: exe,msix,zip
- platform: linux
os: ubuntu-22.04
aarch: amd64
targets: deb,gz,AppImage
# - platform: linux-amd64
# os: ubuntu-22.04
# aarch: amd64
# targets: deb,gz
# - platform: linux-arm64
# os: ubuntu-24.04-arm
# aarch: arm64
# targets: deb,gz
# - platform: linux-amd64-musl
# os: ubuntu-22.04
# aarch: amd64
# targets: deb,gz
# - platform: linux-arm64-musl
# os: ubuntu-24.04-arm
# aarch: arm64
# targets: deb,gz
- platform: macos
os: macos-15
aarch: universal
targets: dmg,pkg
# - platform: ios
# os: macos-15
# aarch: universal
# filename: hiddify-ios
# targets: ipa
runs-on: ${{ matrix.os }}
steps:
- name: checkout
uses: actions/checkout@v6
- name: Import Apple Codesign Certificates
if: ${{ inputs.upload-artifact && startsWith(matrix.os,'macos') }}
uses: apple-actions/import-codesign-certs@v6
with:
p12-file-base64: "${{ secrets.APPLE_CERTIFICATE_P12 }}"
p12-password: "${{ secrets.APPLE_CERTIFICATE_P12_PASSWORD }}"
- name: Import Apple Mobile Provisioning Profile
if: ${{ inputs.upload-artifact && startsWith(matrix.os,'macos') }}
run: |
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
echo "${{secrets.APPLE_MOBILE_PROVISIONING_PROFILES_TARGZ_BASE64}}"|base64 --decode | tar xz -C ~/Library/MobileDevice/Provisioning\ Profiles
ls ~/Library/MobileDevice/Provisioning\ Profiles
security unlock-keychain -p "" signing_temp.keychain
security find-identity -v -p codesigning
# ls ~/Library/MobileDevice/Provisioning\ Profiles
# echo "${{secrets.NEW_APPLE_MOBILE_PROVISIONING_PROFILES_TARXZ_BASE64}}"|base64 --decode | tar xJ -C ~/Library/MobileDevice/Provisioning\ Profiles
# # echo "${{secrets.NEW_APPLE_MOBILE_PROVISIONING_PROFILES_TARGZ_BASE64_2}}"|base64 --decode | tar xz -C ~/Library/MobileDevice/Provisioning\ Profiles
# - name: Setup Flutter for arm64
# if: ${{ startsWith(matrix.platform,'linux-arm64') }}
# uses: hurelhuyag/flutter-arm64-action@HEAD
# with:
# channel: 'stable'
# flutter-version: ${{ env.FLUTTER_VERSION }}
- name: Setup Flutter
uses: subosito/flutter-action@v2.21.0 #issue with 2.13
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
# flutter-version-file: pubspec.yaml
channel: 'stable'
cache: true
- name: Clean up disk space
if: startsWith(matrix.platform,'android')
run: |
df -h
sudo rm -rf /usr/share/dotnet
df -h
sudo rm -rf /opt/ghc
df -h
sudo rm -rf /opt/hostedtoolcache/CodeQL
df -h
rm -rf ~/.gradle/caches
df -h
sudo apt-get autoremove -y
df -h
sudo apt-get clean
df -h
tree
- name: Setup Java
if: startsWith(matrix.platform,'android')
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 17
# - name: Setup NDK
# if: startsWith(matrix.platform,'android')
# uses: nttld/setup-ndk@v1
# id: setup-ndk
# with:
# ndk-version: ${{ env.NDK_VERSION }}
# add-to-path: true
# link-to-sdk: true
- name: Setup Android SDK
uses: android-actions/setup-android@v3
if: startsWith(matrix.platform,'android')
# - name: Cache Android SDK
# uses: actions/cache@v5
# if: startsWith(matrix.platform,'android')
# with:
# path: |
# /usr/local/lib/android/sdk
# key: android-sdk-${{ runner.os }}-${{ env.NDK_VERSION }}
# restore-keys: |
# android-sdk-${{ runner.os }}-
- name: Cache Gradle
uses: actions/cache@v5
if: startsWith(matrix.platform,'android')
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
gradle-${{ runner.os }}-
- name: Setup dependencies
run: |
make ${{ matrix.platform }}-install-deps
echo "$HOME/.pub-cache/bin" >> $GITHUB_PATH
- name: Setup Android Signing Properties
if: ${{ inputs.upload-artifact && startsWith(matrix.platform,'android') }}
run: |
echo "${{ secrets.ANDROID_SIGNING_KEY }}" | base64 --decode > android/key.jks
echo "storeFile=$(pwd)/android/key.jks" > android/key.properties
echo "storePassword=${{ secrets.ANDROID_SIGNING_STORE_PASSWORD }}" >> android/key.properties
echo "keyPassword=${{ secrets.ANDROID_SIGNING_KEY_PASSWORD }}" >> android/key.properties
echo "keyAlias=${{ secrets.ANDROID_SIGNING_KEY_ALIAS }}" >> android/key.properties
- name: Setup Windows Signing Properties
if: ${{ inputs.upload-artifact && startsWith(matrix.platform,'windows') }}
run: |
[IO.File]::WriteAllBytes("windows\sign.pfx", [Convert]::FromBase64String("${{ secrets.WINDOWS_SIGNING_KEY }}"))
(Get-Content "windows\packaging\msix\make_config.yaml") -replace '^certificate_password:.*$', 'certificate_password: ${{ secrets.WINDOWS_SIGNING_PASSWORD }}' | Set-Content "windows\packaging\msix\make_config.yaml"
# - name: Temporary disable Permission Handler for windows due to its issue in permission
# if: ${{ startsWith(matrix.platform,'windows') }}
# run: |
# (Get-Content -Path "pubspec.yaml") -notmatch "permission_handler" | Set-Content -Path "pubspec.yaml"
# (Get-Content -Path "lib\features\profile\add\add_profile_modal.dart") -notmatch "qr_code_scanner_screen" | Set-Content -Path "lib\features\profile\add\add_profile_modal.dart"
# (Get-Content -Path lib\features\profile\add\add_profile_modal.dart) -replace 'await QRCodeScannerScreen\(\).open\(context\);', 'null;' | Set-Content -Path lib\features\profile\add\add_profile_modal.dart
# Remove-Item -Path "lib\features\common\qr_code_scanner_screen.dart"
- name: Prepare for ${{ matrix.platform }}
run: |
make ${{ matrix.platform }}-prepare
- name: Build ${{ matrix.platform }}
env:
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
run: |
make ${{ matrix.platform }}-release
- name: Code Sign
if: ${{ inputs.upload-artifact && startsWith(matrix.platform,'windows') }}
uses: hiddify/signtool-code-sign-sha256@main
with:
certificate: '${{ secrets.WINDOWS_SIGNING_KEY }}'
cert-password: '${{ secrets.WINDOWS_SIGNING_PASSWORD }}'
cert-sha1: '${{ secrets.WINDOWS_SIGNING_SHA1 }}'
folder: 'dist'
timestamp-server: 'http://timestamp.digicert.com'
recursive: true
description: 'Hiddify'
- name: Copy to out Windows
if: matrix.platform == 'windows'
shell: pwsh
run: |
Get-ChildItem -Path dist -Recurse | Select-Object FullName
New-Item -ItemType Directory -Path "out" -Force | Out-Null
$targets = "${{ matrix.targets }}".Split(',')
foreach ($ext in $targets) {
$ext = $ext.Trim()
$key = "TARGET_NAME_$ext"
$targetName = (Get-Item "env:$key").Value
$files = Get-ChildItem -Path dist -Recurse -Filter "*.$ext"
foreach ($file in $files) {
$destination = Join-Path -Path "out" -ChildPath "$targetName.$ext"
Move-Item -Path $file.FullName -Destination $destination -Force
}
}
Get-ChildItem -Path out
- name: Upload Debug Symbols
if: ${{ inputs.upload-artifact && inputs.tag-name != 'draft' }}
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
SENTRY_DIST: ${{ matrix.platform == 'android-aab' && 'google-play' || 'general' }}
run: |
dart pub global activate sentry_dart_plugin
dart run sentry_dart_plugin
- name: Copy to out Android APK
if: matrix.platform == 'android-apk'
run: |
mkdir out
ls -R ./build/app/outputs
cp ./build/app/outputs/flutter-apk/*arm64-v8a*.apk out/${TARGET_NAME_apk}-arm64.apk || echo "no arm64 apk"
cp ./build/app/outputs/flutter-apk/*armeabi-v7a*.apk out/${TARGET_NAME_apk}-arm7.apk || echo "no arm7 apk"
cp ./build/app/outputs/flutter-apk/*x86_64*.apk out/${TARGET_NAME_apk}-x86_64.apk || echo "no x64 apk"
cp ./build/app/outputs/flutter-apk/app-release.apk out/${TARGET_NAME_apk}-universal.apk || echo "no universal apk"
- name: Copy to out Android AAB
if: matrix.platform == 'android-aab'
run: |
mkdir out
ls -R ./build/app/outputs
cp ./build/app/outputs/bundle/release/app-release.aab out/hiddify-android-market.aab || echo "no aab"
- name: Copy to out unix
if: startsWith(matrix.platform,'linux') || matrix.platform == 'macos' || matrix.platform == 'ios'
run: |
ls -R dist/
mkdir out
mkdir tmp_out
for EXT in $(echo ${{ matrix.targets }} | tr ',' '\n'); do
KEY=TARGET_NAME_${EXT}
FILENAME=${!KEY}
echo "For $EXT ($KEY) filename is ${FILENAME}"
mv dist/*/*.$EXT tmp_out/${FILENAME}.$EXT
ls tmp_out
[[ "$EXT" != "gz" ]] && chmod +x tmp_out/${FILENAME}.$EXT || echo "Skipping chmod for gz"
if [ "${{matrix.platform}}" == "linux" ];then
cp ./.github/help/linux/* tmp_out/
else
cp ./.github/help/mac-windows/* tmp_out/
fi
if [[ "${{matrix.platform}}" == 'ios' ]];then
echo mv tmp_out/${FILENAME}.$EXT out/
mv tmp_out/${FILENAME}.$EXT out/
else
cd tmp_out
# 7z a ${FILENAME}.zip ./
# mv ${FILENAME}.zip ../out/
# [[ $EXT == 'AppImage' ]]&& mv ${FILENAME}.$EXT ../out/ # added for appimage link
mv ${FILENAME}.$EXT ../out/
cd ..
fi
done
- name: Upload Artifact
if: env.UPLOAD_ARTIFACT == 'true'
uses: actions/upload-artifact@v6
with:
name: ${{matrix.platform}}
path: ./out
retention-days: 1
- name: Clean up keychain and provisioning profile
if: ${{ always() && startsWith(matrix.os,'macos')}}
run: |
security delete-keychain $RUNNER_TEMP/app-signing.keychain-db ||echo ok
rm ~/Library/MobileDevice/Provisioning\ Profiles/*.mobileprovision ||echo ok
update-draft:
permissions: write-all
if: ${{ inputs.upload-artifact }}
needs: [build]
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v6
with:
# by default, it uses a depth of 1
# this fetches all history so that we can read each commit
fetch-depth: 0
- name: Download Artifact
uses: actions/download-artifact@v7
with:
merge-multiple: true
pattern: "*"
path: ./out/
- name: Display Files Structure
run: ls -R
working-directory: ./out
- name: Delete Current Release Assets
uses: 8Mi-Tech/delete-release-assets-action@main
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
tag: 'draft'
deleteOnlyFromDrafts: false
- name: prepare_release_message
continue-on-error: true
run: |
set +e
sed 's|RELEASE_TAG|${{ env.TAG_NAME }}|g' ./.github/release_message.md > release.md
pip install gitchangelog pystache mustache markdown
prelease=$(curl --silent "https://api.github.com/repos/hiddify/hiddify-app/releases/latest" | grep -Po '"tag_name": "\K([^"]*)')
echo -e "\n\n<details markdown=1><summary>All changes from $current to the latest commit:</summary>\n\n">>release.md
gitchangelog "${prelease}.." >> release.md 2>&1 || echo "Error in gitchangelog"
echo -e "\n\n</details>">>release.md
- name: Create or Update Draft Release
uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
files: ./out/*
name: 'draft'
tag_name: 'draft'
body_path: './release.md'
prerelease: true
- name: Create or Update Draft Release
uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: ${{ secrets.TOKEN_FOR_HIDDIFY_APP_REPO }}
GITHUB_REPOSITORY: hiddify/hiddify-app
with:
files: ./out/*
name: 'draft'
tag_name: 'draft'
body_path: './release.md'
target_commitish: '530bf77839a74d4f13847ba244a20734ac7ab119'
prerelease: true
repository: hiddify/hiddify-app
upload-release:
permissions: write-all
if: ${{ inputs.upload-artifact && inputs.tag-name != 'draft' }}
needs: [build]
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v6
- name: Download Artifact
uses: actions/download-artifact@v7
with:
merge-multiple: true
pattern: "*"
path: ./out/
- name: Display Files Structure
run: |
ls -R ./out
ls -R ./.github/
ls -R ./.git/
mv out/hiddify-android-market.aab hiddify-android-market.aab
- name: prepare_release_message
run: |
sed 's|RELEASE_TAG|${{ env.TAG_NAME }}|g' ./.github/release_message.md >> release.md
- name: Upload Release
uses: softprops/action-gh-release@v2
if: ${{ success() }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
# prerelease: ${{ env.CHANNEL == 'dev' }}
prerelease: true
tag_name: ${{ env.TAG_NAME }}
body_path: './release.md'
files: ./out/*
- name: Create service_account.json
run: echo '${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }}' > service_account.json
- name: Deploy to Google Play Internal Testers
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJson: service_account.json
packageName: app.hiddify.com
releaseName: ${{ env.TAG_NAME }}
releaseFiles: ./hiddify-android-market.aab
track: 'beta'
upload-to-testflight:
needs: [build]
if: ${{ inputs.upload-artifact && inputs.tag-name != 'draft' }}
#if: ${{ inputs.upload-artifact }}
runs-on: macOS-latest
timeout-minutes: 30
steps:
- name: Download Artifact
uses: actions/download-artifact@v7
with:
merge-multiple: true
pattern: "*ios*"
path: ./out/
- uses: Apple-Actions/import-codesign-certs@v6
with:
p12-file-base64: ${{ secrets.APPLE_UPLOAD_CERTIFICATE_P12 }}
p12-password: ${{ secrets.APPLE_CERTIFICATE_P12_PASSWORD }}
- uses: Apple-Actions/download-provisioning-profiles@v1
with:
bundle-id: app.hiddify.com
issuer-id: ${{ secrets.APPSTORE_ISSUER_ID }}
api-key-id: ${{ secrets.APPSTORE_API_KEY_ID }}
api-private-key: ${{ secrets.APPSTORE_API_PRIVATE_KEY }}
- uses: Apple-Actions/download-provisioning-profiles@v1
with:
bundle-id: app.hiddify.com.SingBoxPacketTunnel
issuer-id: ${{ secrets.APPSTORE_ISSUER_ID }}
api-key-id: ${{ secrets.APPSTORE_API_KEY_ID }}
api-private-key: ${{ secrets.APPSTORE_API_PRIVATE_KEY }}
- name: Import Apple Mobile Provisioning Profile
run: |
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
echo "${{secrets.APPLE_DIST_PROVISIONING_PROFILES_TARGZ_BASE64}}"|base64 --decode | tar xz -C ~/Library/MobileDevice/Provisioning\ Profiles
#echo "${{secrets.NEW_APPLE_STORE_PROVISIONING_PROFILES_TARXZ_BASE64}}"|base64 --decode | tar xJ -C ~/Library/MobileDevice/Provisioning\ Profiles
- uses: Apple-Actions/upload-testflight-build@v4
with:
app-path: 'out/Hiddify-iOS.ipa'
issuer-id: ${{ secrets.APPSTORE_ISSUER_ID }}
api-key-id: ${{ secrets.APPSTORE_API_KEY_ID }}
api-private-key: ${{ secrets.APPSTORE_API_PRIVATE_KEY }}
================================================
FILE: .github/workflows/ci.yml
================================================
name: CI
on:
pull_request:
paths-ignore:
- '**.md'
- 'docs/**'
- 'test.configs/**'
- '.vscode/'
- 'appcast.xml'
push:
branches:
- main
- dev
- android-fix-action-bug
- new-design-v2
paths-ignore:
- '**.md'
- 'docs/**'
- '.vscode/'
- 'appcast.xml'
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
run:
uses: ./.github/workflows/build.yml
secrets: inherit
permissions: write-all
if: "${{!contains(github.event.head_commit.message, 'release: version')}}"
with:
upload-artifact: ${{ github.event_name == 'push' }}
================================================
FILE: .github/workflows/release.yml
================================================
name: Release
on:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+'
- 'v[0-9]+.[0-9]+.[0-9]+.*'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build-release:
uses: ./.github/workflows/build.yml
secrets: inherit
permissions: write-all
with:
upload-artifact: true
tag-name: "${{ github.ref_name }}"
channel: "${{ github.ref_type == 'tag' && endsWith(github.ref_name, 'dev') && 'dev' || github.ref_type != 'tag' && 'dev' || 'prod' }}"
================================================
FILE: .github/workflows/stale.yml
================================================
name: Mark stale issues and pull requests
on:
schedule:
- cron: "30 8 * * *"
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v10
with:
# stale-issue-message: 'With the release of v4.0.0 (pre-release), most reported issues have been fixed. We’re closing all current issues to start fresh.If you’re still experiencing the problem, please open a new issue and let us know.'
days-before-stale: 30
days-before-close: 10
operations-per-run: 60
================================================
FILE: .github/workflows/winget.yml
================================================
name: Publish to WinGet
on:
release:
types: [released]
env:
IDENTIFIER: ${{ endsWith(github.event.release.tag_name, 'dev') && 'Hiddify.Next.Beta' || 'Hiddify.Next' }}
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: vedantmgoyal9/winget-releaser@2
with:
identifier: ${{ env.IDENTIFIER }}
version: ${{ github.event.release.tag_name }}
token: ${{ secrets.WINGET_TOKEN }}
================================================
FILE: .gitignore
================================================
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.sentry-native
.DS_Store
.atom/
.build/
.buildlog/
.history
.svn/
.swiftpm/
migrate_working_dir/
.github/help
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
/build/
# generated files
**/*.g.dart
**/*.freezed.dart
**/*.mapper.dart
**/*.gen.dart
**/*.dll
**/*.dylib
**/*.xcframework
/dist/
/dist_docker/
/assets/core/*
!/assets/core/.gitkeep
# Symbolication related
app.*.symbols
# Obfuscation related
app.*.map.json
# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release
/data
.cxx
# Windows Self-Signed for msix
windows/sign.pfx
windows/sign.cer
================================================
FILE: .gitmodules
================================================
[submodule "hiddify-core"]
path = hiddify-core
url = ssh://git@github.com/hiddify/hiddify-core
branch = v3
================================================
FILE: .metadata
================================================
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
version:
revision: "ef1af02aead6fe2414f3aafa5a61087b610e1332"
channel: "stable"
project_type: app
# Tracks metadata for the flutter migrate command
migration:
platforms:
- platform: root
create_revision: ef1af02aead6fe2414f3aafa5a61087b610e1332
base_revision: ef1af02aead6fe2414f3aafa5a61087b610e1332
- platform: android
create_revision: ef1af02aead6fe2414f3aafa5a61087b610e1332
base_revision: ef1af02aead6fe2414f3aafa5a61087b610e1332
- platform: ios
create_revision: ef1af02aead6fe2414f3aafa5a61087b610e1332
base_revision: ef1af02aead6fe2414f3aafa5a61087b610e1332
- platform: linux
create_revision: ef1af02aead6fe2414f3aafa5a61087b610e1332
base_revision: ef1af02aead6fe2414f3aafa5a61087b610e1332
- platform: macos
create_revision: ef1af02aead6fe2414f3aafa5a61087b610e1332
base_revision: ef1af02aead6fe2414f3aafa5a61087b610e1332
- platform: windows
create_revision: ef1af02aead6fe2414f3aafa5a61087b610e1332
base_revision: ef1af02aead6fe2414f3aafa5a61087b610e1332
# User provided section
# List of Local paths (relative to this file) that should be
# ignored by the migrate tool.
#
# Files that are not part of the templates will be ignored by default.
unmanaged_files:
- 'lib/main.dart'
- 'ios/Runner.xcodeproj/project.pbxproj'
================================================
FILE: .prettierrc
================================================
{
"overrides": [
{
"files": ".github/**",
"options": {
"singleQuote": true
}
}
]
}
================================================
FILE: .release_notes.tpl
================================================
{{#general_title}}
# {{{title}}}
{{/general_title}}
{{#versions}}
## {{{label}}}
{{#sections}}
#### {{{label}}}
{{#commits}}
* {{{subject}}}
{{#body}}
_{{{body}}}_
{{/body}}
{{/commits}}
{{/sections}}
{{/versions}}
================================================
FILE: .stignore
================================================
#include /.stignore
#include /android/.stignore
#include /ios/.stignore
#include /linux/.stignore
#include /windows/.stignore
#include /macos/.stignore
.git
.DS_Store
.idea
.dart_tool
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache
.pub
build
*.log
*.iml
*.ipr
*.iws
**/ios/Flutter/.last_build_id
/android/app/debug
/android/app/profile
/android/app/release
================================================
FILE: .vscode/extensions.json
================================================
{
"recommendations": [
"dart-code.dart-code",
"dart-code.flutter",
"github.vscode-github-actions",
"golang.go",
"redhat.vscode-yaml",
"codeium.codeium",
"kangping.protobuf"
]
}
================================================
FILE: .vscode/launch.json
================================================
{
"version": "0.2.0",
"configurations": [
{
"name": "go Package",
"type": "go",
"request": "launch",
"mode": "auto",
"cwd": "./hiddify-core",
"program": "./hiddify-core/cmd/main",
// "args": ["build","-c","a.txt","-d","b.txt","--full-config"] ,
// "args": ["temp"] ,
// "args":["profile","https://raw.githubusercontent.com/hiddify/hiddify-next/refs/heads/main/test.configs/warp"],
"args": [
"run",
"-c",
"https://raw.githubusercontent.com/hiddify/hiddify-next/refs/heads/main/test.configs/warp"
],
"buildFlags": "-tags with_clash_api,with_gvisor,with_quic,with_wireguard,with_grpc,with_ech,with_utls,with_reality_server"
},
{
"name": "Hiddify Dev",
"request": "launch",
"type": "dart",
"flutterMode": "debug",
"program": "lib/main.dart",
// "args": ["-d","192.168.1.35:36463"]
},
{
"name": "Hiddify Dev Windows Portable",
"request": "launch",
"type": "dart",
"flutterMode": "debug",
"program": "lib/main.dart",
"args": [
"-d",
"windows",
"--dart-define=portable=true"
]
},
{
"name": "Hiddify Dev Release",
"request": "launch",
"type": "dart",
"flutterMode": "release",
"program": "lib/main.dart",
},
{
"name": "Hiddify Dev Profile",
"request": "launch",
"type": "dart",
"flutterMode": "profile",
"program": "lib/main.dart",
},
{
"name": "Hiddify Prod",
"request": "launch",
"type": "dart",
"flutterMode": "release",
"program": "lib/main_prod.dart",
},
{
"name": "Attach: Design for iPad",
"request": "attach",
"type": "dart",
"program": "lib/main.dart",
"args": [
"--app-id",
"app.hiddify.com"
],
"deviceId": "mac-designed-for-ipad",
}
]
}
================================================
FILE: .vscode/settings.json
================================================
{
"[dart]": {
"editor.defaultFormatter": "Dart-Code.dart-code",
"editor.formatOnSave": true,
"editor.formatOnType": true,
"editor.tabSize": 2,
"editor.detectIndentation": false,
"editor.selectionHighlight": false,
"editor.suggest.snippetsPreventQuickSuggestions": false,
"editor.suggestSelection": "first",
"editor.tabCompletion": "onlySnippets",
"editor.wordBasedSuggestions": "off"
},
"html.format.wrapLineLength": 250
}
================================================
FILE: CHANGELOG.md
================================================
# Changelog
## [0.16.0.dev] - 2024-2-18
### New Features and Improvements
- Changed App name to **Hiddify**
- Changed App icon
- Added Mux (**Experimental**)
- Added Cloudflare WARP (**Experimental**)
- Added connection info
- when connected, name of the active node, speed and IP address are shown on home page
- delay indicator below connection button shows active node's ping
- Added VPN Service (Windows & Linux) (**Experimental**)
- VPN Service circumvents need for administrator permission while using TUN
- Changed in-app icons (using [Fluent UI System Icons](https://github.com/microsoft/fluentui-system-icons))
- Redesigned navigation flow, separating config options
- Added haptic feedback
- Added detailed subscription info in profile edit page
- Added Chinese Taiwan language. [PR#410](https://github.com/hiddify/hiddify-next/pull/410) by [junlin03](https://github.com/junlin03) and [PR#491](https://github.com/hiddify/hiddify-next/pull/491) by [kouhe3](https://github.com/kouhe3)
- Added Japanese Readme. [PR#371](https://github.com/hiddify/hiddify-next/pull/371) by [Ikko Eltociear Ashimine](https://github.com/eltociear)
### Bug Fixes
- Fixed TLS Tricks bugs
- Fixed logs on iOS. [PR#414](https://github.com/hiddify/hiddify-next/pull/414) by [Amir Mohammadi](https://github.com/amirsaam) and [PR#416](https://github.com/hiddify/hiddify-next/pull/416) by [Ebrahim Tahernejad](https://github.com/EbrahimTahernejad)
- Fixed Android service mode
- Fixed UI inconsistencies
- Fixed Readme download URL. [PR#482](https://github.com/hiddify/hiddify-next/pull/482) by [Ali Afsharzadeh](https://github.com/guoard)
## [0.14.1.dev] - 2024-1-19
### New Features and Improvements
- Redesigned profile options on mobile
- Improved configuration parser
- Added export config json in iOS
- Added iOS URL scheme. [PR#343](https://github.com/hiddify/hiddify-next/pull/343) by [Amir Mohammadi](https://github.com/amirsaam)
- Added option to reset VPN profile on iOS
### Bug Fixes
- Fixed TLS Tricks causing app crash
- Fixed connection status on iOS app relaunch
- Fixed iOS connection stats
- Fixed infinite subscription traffic
- Fixed infinite subscription expiry. [PR#334](https://github.com/hiddify/hiddify-next/pull/334) by [Pavel Volkov](https://github.com/pvolkov)
## [0.14.0.dev] - 2024-1-14
### New Features and Improvements
- Published initial iOS beta version on TestFlight
- Thanks to contributions from [GFWFighter](https://github.com/GFWFighter) and [Amir Mohammadi](https://github.com/amirsaam)
- iOS version is still in heavy development phase and there are known bugs
- Added Spanish language. [PR#314](https://github.com/hiddify/hiddify-next/pull/314) by [AvatarStark](https://github.com/AvatarStark)
- Changed Routing Assets page layout, separating assets by type
- Improved descriptions for some of the options in settings page
### Bug Fixes
- Fixed Deep links on Windows
- Fixed minor UI bugs
- Fixed subscription profiles with infinite traffic
## [0.13.6] - 2024-1-7
- First stable 0.13.x release. check changes from 0.13.0.dev to 0.13.5.dev for more details.
## [0.13.5.dev] - 2024-1-6
### New Features and Improvements
- Updated sing-box to version 1.7.8
- Improved TLS Fragmentation. [PR#12](https://github.com/hiddify/hiddify-sing-box/pull/12) by [Kyōchikutō | キョウチクトウ](https://github.com/kyochikuto)
- Improved v2ray config parser
- Added cancel button on new profile modal
- Changed default Connection Test URL
### Bug Fixes
- Fixed Android service mode
- Fixed QR code scanner not scanning deep links
## [0.13.4.dev] - 2024-1-4
### New Features and Improvements
- Added update all subscriptions
- Force update all subscription profiles regardless of their interval
- Added basic authorization support
- Changed app http client, improving experience when fetching profiles, geo assets etc.
### Bug Fixes
- Fixed profile auto update service
- Fixed localization mistakes in Chinese. [PR#288](https://github.com/hiddify/hiddify-next/pull/288) by [wldjdjsks](https://github.com/huajizhige)
## [0.13.3.dev] - 2024-1-2
### New Features and Improvements
- Added Bypass LAN option (Experimental)
- Added Connection from LAN option (Experimental)
- Added DNS Routing option
- Changed outbound options section to TLS Tricks
### Bug Fixes
- Fixed profile edit bug where you were unable to change existing profile's URL
- Fixed localization mistakes in Chinese. [PR#287](https://github.com/hiddify/hiddify-next/pull/287) by [Wu Jiahao](https://github.com/wujiahao15)
## [0.13.2.dev] - 2023-12-31
### Bug Fixes
- Fixed db migration bug
## [0.13.1.dev] - 2023-12-31
### New Features and Improvements
- Added experimental feature flag in settings
- Added notice dialog when connecting with experimental features
### Bug Fixes
- Fixed multiple instance launch on windows
- Removed auto connect on desktop which caused bugs on auto launch etc.
- Fixed inlang localization setup
## [0.13.0.dev] - 2023-12-29
### New Features and Improvements
- Added desktop shortcuts
- Add profile from clipboard by pressing `CTRL+V` (`CMD+V` on macOS)
- Close App window by pressing `CTRL+W` (`CMD+W` on macOS)
- Quit App by pressing `CTRL+Q` (`CMD+Q` on macOS)
- Open settings page by pressing `CMD+,` on macOS
- Added Android high refresh rate screen support
### Bug Fixes
- Fixed silent start bug where screen would blink
- Refactored Window management and system tray, fixing minor bugs
- Fixed windows portable release again!
## [0.12.3] - 2023-12-28
### New Features and Improvements
- Added version number in window title on desktop
- Added Afghanistan (af) region with default bypass rules
### Bug Fixes
- Fixed modal bug where config options were unmodifiable. [PR#267](https://github.com/hiddify/hiddify-next/pull/267) by [在7楼](https://github.com/RayWangQvQ)
- Fixed windows portable release
## [0.12.2] - 2023-12-23
### New Features and Improvements
- Updated Sing-box to Version 1.7.6
### Bug Fixes
- Fixed app log file not including stacktrace
- Fixed initialization process failing for non-essential dependencies
- Fixed analytics preferences requiring app restart
## [0.12.1] - 2023-12-21
### Bug Fixes
- Fixed Android service mode
- Fixed [preferences initialization error on Windows and Linux](https://github.com/flutter/flutter/issues/89211)
- Fixed incorrect privacy policy URL
- Bumped Android compile and target SDK version (34)
## [0.12.0] - 2023-12-20
### New Features and Improvements
- Added TLS Tricks (experimental)
- Including TLS fragments and Mixed SNI case. This feature might effect performance and battery life
- Added dynamic notification on Android
- Active profile name and transfer speed are now shown in notification
- Added basic D-pad support for Android TV
- Added soffchen to recommended geo assets
- Added option to reset Config Options
- Improved text input field's accessibility and traversal
### Bug Fixes
- Refactored significant portions of the app
- Fixed incorrect profile parsing when missing headers
- Fixed geo assets bug where assets were deactivated
- Changed default memory limit option on desktop, fixing out of memory bug on macOS
- Fixed macOS icon
- Fixed system tray behavior
- Fixed incorrect casing of locale names
- Updated sing-box to version 1.7.0
- Fixed Chinese typography bug (thanks to [betaxab](https://github.com/betaxab))
- Fixed localization mistakes in Russian. [PR#189](https://github.com/hiddify/hiddify-next/pull/189) by [jomertix](https://github.com/jomertix)
## [0.11.1] - 2023-11-19
### Bug Fixes
- Fixed Android manifest bug.
## [0.11.0] - 2023-11-19
### New Features and Improvements
- Changed Responsive UI Behavior
- Now app is responsive on all platforms with appropriate routing setup.
- Added Simplified Service Modes
- Choose between VPN(Tun), System Proxy and Proxy only modes. (System Proxy available on desktop)
- Added Share Functionality
- Share configuration as json(export to clipboard) or share subscription link as QR code.
- Redesigned System Tray on Desktop
- Options have been simplified and a new mode selector and navigation options are added.
- Added Privilege Checks for VPN(TUN) on Desktop
- Added Auto Connect on Start
- On desktop, app will try to connect to the last used profile on startup. (if last session was not explicitly disconnected by the user)
- Added AppCast Update Checker
- Checking for new versions of the app will use a more reliable approach on all platforms.
- Added Geo Asset Settings
- Update geo assets and use recommended providers
- Added **winget** Release
- Now you're able to install and update Hiddify on Windows using [winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/).
- Added Turkish Translations. [PR#173](https://github.com/hiddify/hiddify-next/pull/173) by [Hasan Karlı](https://github.com/hasankarli)
- Changed in-app Toasts
- Updated Core Sing-box Version to 1.7.0
- Improved Network Reliability While Adding/Updating Subscriptions
- Improved QR Code Scanner
### Bug Fixes
- Removed **execute config as is** option which caused crashes and confusion for users.
- Fixed android service revoke and restart.
- Fixed github release update checker.
- Fixed translator script. [PR#108](https://github.com/hiddify/hiddify-next/pull/108) by [Hirad Rasoolinejad](https://github.com/Hiiirad)
- Fixed localization mistakes in Chinese. [PR#113](https://github.com/hiddify/hiddify-next/pull/113) and [PR#123](https://github.com/hiddify/hiddify-next/pull/123) by [Nyar233](https://github.com/Nyar233)
- Fixed localization mistakes in Chinese Readme. [PR#137](https://github.com/hiddify/hiddify-next/pull/137) by [wldjdjsks](https://github.com/huajizhige)
- Fixed localization mistakes in Chinese. [PR#138](https://github.com/hiddify/hiddify-next/pull/138) and [PR#165](https://github.com/hiddify/hiddify-next/pull/165) by [wldjdjsks](https://github.com/huajizhige)
- Fixed localization mistakes in Russian. [PR#155](https://github.com/hiddify/hiddify-next/pull/155), [PR#162](https://github.com/hiddify/hiddify-next/pull/162) and [PR#169](https://github.com/hiddify/hiddify-next/pull/169) by [solokot](https://github.com/solokot)
- Fixed linux build libs command. [PR#161](https://github.com/hiddify/hiddify-next/pull/161) by [Aloxaf](https://github.com/Aloxaf)
- Fixed localization mistakes in Russian. [PR#164](https://github.com/hiddify/hiddify-next/pull/164) and [PR#168](https://github.com/hiddify/hiddify-next/pull/168) by [jomertix](https://github.com/jomertix)
- Fixed localization mistakes in Chinese. [PR#179](https://github.com/hiddify/hiddify-next/pull/179) by [betaxab](https://github.com/betaxab)
- Fixed localization mistakes in Chinese Readme. [PR#172](https://github.com/hiddify/hiddify-next/pull/172) by [Locas](https://github.com/Locas56227)
## [0.10.0] - 2023-10-27
### New Features and Improvements
- Added Basic region-based routing rules
- Based on your selected region (Iran, China or Russia), local ip and domains are bypassed.
- Redesigned Logs page
- Now you're able to pause stream and clear logs. Also logs are delivered more consistently, with less resource consumption.
- Added tag of selected outbound of selectors to proxies page
- Selected outbound tag of selectors like URLTests are now shown in other selectors as well.
- Added color to delay number in proxies page
- Memory limit option
- Limit sing-box core memory usage.
- Revamped theme preferences settings
- Added initial iOS implementation. [PR#98](https://github.com/hiddify/hiddify-next/pull/98) by [GFWFighter](https://github.com/GFWFighter)
- Added Russian region
- Added Terms and Conditions and Privacy policy to about page
### Bug Fixes
- Removed reconnection on auto profile updates
- Fixed filtering logs by level
- Fixed localization mistakes in Russian. [PR#95](https://github.com/hiddify/hiddify-next/pull/95) by [solokot](https://github.com/solokot)
- Fixed localization mistakes in Russian. [PR#74](https://github.com/hiddify/hiddify-next/pull/74) by [Elshad Guseynov](https://github.com/lifeindarkside)
[0.16.0.dev]: https://github.com/hiddify/hiddify-next/releases/tag/v0.16.0.dev
[0.14.1.dev]: https://github.com/hiddify/hiddify-next/releases/tag/v0.14.1.dev
[0.14.0.dev]: https://github.com/hiddify/hiddify-next/releases/tag/v0.14.0.dev
[0.13.6]: https://github.com/hiddify/hiddify-next/releases/tag/v0.13.6
[0.13.5.dev]: https://github.com/hiddify/hiddify-next/releases/tag/v0.13.5.dev
[0.13.4.dev]: https://github.com/hiddify/hiddify-next/releases/tag/v0.13.4.dev
[0.13.3.dev]: https://github.com/hiddify/hiddify-next/releases/tag/v0.13.3.dev
[0.13.2.dev]: https://github.com/hiddify/hiddify-next/releases/tag/v0.13.2.dev
[0.13.1.dev]: https://github.com/hiddify/hiddify-next/releases/tag/v0.13.1.dev
[0.13.0.dev]: https://github.com/hiddify/hiddify-next/releases/tag/v0.13.0.dev
[0.12.3]: https://github.com/hiddify/hiddify-next/releases/tag/v0.12.3
[0.12.2]: https://github.com/hiddify/hiddify-next/releases/tag/v0.12.2
[0.12.1]: https://github.com/hiddify/hiddify-next/releases/tag/v0.12.1
[0.12.0]: https://github.com/hiddify/hiddify-next/releases/tag/v0.12.0
[0.11.1]: https://github.com/hiddify/hiddify-next/releases/tag/v0.11.1
[0.11.0]: https://github.com/hiddify/hiddify-next/releases/tag/v0.11.0
[0.10.0]: https://github.com/hiddify/hiddify-next/releases/tag/v0.10.0
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
https://t.me/hiddify.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
Every contribution to HiddifyApp is welcome, whether it is reporting a bug, submitting a fix, proposing new features, or just asking a question. To make contributing to HiddifyApp as easy as possible, you will find more details for the development flow in this documentation. [Basic tutorial on how to contribute to HiddifyApp](https://hiddify.com/app/How-to-contribute-to-this-project/)
Please note, we have a [Code of Conduct](https://github.com/hiddify/hiddify-app/blob/main/CODE_OF_CONDUCT.md), please follow it in all your interactions with the project.
- [Feedback, Issues and Questions](#feedback-issues-and-questions)
- [Adding new Features](#adding-new-features)
- [Development](#development)
- [Working with the Go Code](#working-with-the-go-code)
- [Working with the Flutter Code](#working-with-the-flutter-code)
- [Setting up the Environment](#setting-up-the-environment)
- [Run Release Build on a Device](#run-release-build-on-a-device)
- [Release](#release)
- [Collaboration and Contact Information](#collaboration-and-contact-information)
## Feedback, Issues and Questions
If you encounter any issue, or you have an idea to improve, please:
- Search through [existing open and closed GitHub Issues](https://github.com/hiddify/hiddify-app/issues) for the answer first. If you find a relevant topic, please comment on the issue.
- If none of the issues are relevant, please add a new [issue](https://github.com/hiddify/hiddify-app/issues/new/choose) following the templates and provide as much relevant information as possible.
## Adding new Features
When contributing a complex change to the Hiddify repository, please discuss the change you wish to make within a GitHub issue with the owners of this repository before making the change.
## Development
### Adding Feature / Fix bug in Core:
Please follow our [Go Core Development repository](https://github.com/hiddify/hiddify-next-core/main/CONTRIBUTING.m).
### Working with the Flutter Code
Hiddify uses [Flutter](https://flutter.dev), make sure that you have the correct version installed before starting development. You can use the following commands to check your installed version:
```shell
$ flutter --version
# example response
Flutter 3.13.4 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 367f9ea16b (4 weeks ago) • 2023-09-12 23:27:53 -0500
Engine • revision 9064459a8b
Tools • Dart 3.1.2 • DevTools 2.25.0
```
We recommend using [Visual Studio Code](https://docs.flutter.dev/development/tools/vs-code) extensions for development.
#### Setting up the Environment
We have extensive use of code generation in the form of [freezed](https://github.com/rrousselGit/freezed), [riverpod](https://github.com/rrousselGit/riverpod), etc. So it's generate these before running the code. Execute the following make commands in order:
Assuming you have not built the `hiddify-core` and want to use [existing releases](https://github.com/hiddify/hiddify-next-core/releases), you should run the following command (based on your target platform):
- `make windows-prepare`
- `make linux-prepare`
- `make macos-prepare`
- `make ios-prepare`
- `make android-prepare`
##### build the `hiddify-core` from source (Optional)
If you want to build the `hiddify-core` from source after `make prepare`, use:
- `make build-windows-libs`
- `make build-linux-libs`
- `make build-macos-libs`
- `make build-ios-libs`
- `make build-android-libs`
#### Run Release Build on a Device
To run the release build on a device for testing, we have to get the Device ID first by running the following command:
```shell
$ flutter devices
# example response
3 connected devices:
2211143G (mobile) • 35492ae2 • android-arm64 • Android 13 (API 33)
Windows (desktop) • windows • windows-x64 • Microsoft Windows [Version 10.0.22000.2482]
Chrome (web) • chrome • web-javascript • Google Chrome 117.0.5938.149
```
Then we can use one of the listed devices and execute the following command to build and run the app on this device:
```shell
flutter run
# or
flutter run --device-id=35492ae2
```
## Release
We use [flutter_distributor](https://github.com/leanflutter/flutter_distributor) for packaging. [GitHub action](https://github.com/hiddify/hiddify-app/blob/main/.github/workflows/build.yml) is triggered on every release tag and will create a new GitHub release.
After setting up the environment, use the following make commands to build the release version:
- `make windows-release`
- `make linux-release`
- `make macos-release`
- `make android-release`
- `make ios-release`
## Collaboration and Contact Information
We need your collaboration in order to develop this project. If you have experience in these areas, please do not hesitate to contact us.
- Flutter Developing
- Swift Developing
- Go Developing
<div align=center>
</br>
[](mailto:contribute@hiddify.com)
[](https://telegram.dog/hiddify)
[](https://telegram.dog/hiddify_board)
[](https://www.youtube.com/@hiddify)
[](https://twitter.com/intent/follow?screen_name=hiddify_com)
</div>
================================================
FILE: Dockerfile
================================================
# ==============================================================
# ⚠️ USAGE: TRIGGERED BY MAKEFILE
# This file is executed via the 'linux-release-docker' command.
# ==============================================================
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
COPY linux_deps.list /tmp/linux_deps.list
RUN apt-get update && \
DEPS=$(cat /tmp/linux_deps.list | tr -d '\r' | sed 's/#.*//g' | xargs) && \
\
apt-get install -y --no-install-recommends $DEPS && \
\
rm -rf /var/lib/apt/lists/* && \
echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
RUN wget -O /usr/local/bin/appimagetool "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" && \
chmod +x /usr/local/bin/appimagetool
RUN mkdir -p /root/develop && \
git clone https://github.com/flutter/flutter.git -b stable /root/develop/flutter
ENV PATH="/root/develop/flutter/bin:/root/.pub-cache/bin:${PATH}"
RUN git config --global --add safe.directory /root/develop/flutter && \
flutter config --no-analytics && \
dart pub global activate fastforge
ENV APPIMAGE_EXTRACT_AND_RUN=1
WORKDIR /app
================================================
FILE: HISTORY.md
================================================
# Changelog
## 4.1.2 (2026-03-05)
#### New
* Add doc for dnstt.
## v4.1.0 (2026-03-05)
#### New
* Add dnstt.
* Add dnstt.
#### Fix
* Test.
* Set ir flag to shir.
* Update linux-appimage-release to copy instead of move Hiddify.AppImage.
* Update linux-prepare target to use linux-amd64-libs.
* Delete bundled libstdc++ for Arch Linux compatibility in AppImage build.
* Resolve shared_preferences conflict between portable and exe formats on Windows.
* Remove timezone_to_country package.
_This package caused a black screen and prevented the app from running on the Windows (old) platform._
* Install fastforge and update PATH for Windows build.
* Disable mux and remove geo-related logic.
#### Other
* Merge pull request #1995 from veto9292/main.
_black screen and running issue on Windows | shared_preferences conflict between portable and exe on Windows | AppImage running on arch etc… | linux build in ci | add .AppImage release next to the tar | replace ir shir flag | add background for dmg format_
* Feat: replate dmg background image and & improve size and position.
* Test ci.
* Feat: removing country flag from regions text.
* Feat: add raw AppImage support for linux.
* Feat: implement region detection based on timezone and locale.
* Update README_ru.md.
* Update README_cn.md.
* Update README_ja.md.
* Update README_br.md.
* Update README_fa.md.
* Update README.md.
* Centralize the star image.
_Added donation support section with links and details._
* Update README_ru.md.
* Update README_cn.md.
* Update star history chart in README_ja.md.
* Update README_br.md.
* Fix star history image.
* Update README_ru.md.
* Update README_cn.md.
* Update donation link in README_cn.md.
* Update README_ja.md.
* Update README_br.md.
* Fix donation link and star history chart source.
_Updated the donation link and corrected the star history chart image source._
* Update README.md.
* Update qrcode reader lib to support 16kb page.
* Refactor: update project configuration and clean up unused code.
* Merge pull request #1929 from ChabanovX/add-column-exists-check.
_Add column exists check_
* Add test in migration that column check works properly.
* Add column checks on 4to5 migration.
* Rename column check for more explicit one.
* Add `column_check` method inside db.
* Merge pull request #1986 from salmanmkc/upgrade-github-actions-node24-general.
_Upgrade GitHub Actions to latest versions_
* Merge branch 'main' into upgrade-github-actions-node24-general.
* Merge pull request #1985 from salmanmkc/upgrade-github-actions-node24.
_Upgrade GitHub Actions for Node 24 compatibility_
* Upgrade GitHub Actions for Node 24 compatibility.
* Merge pull request #1959 from Enqvy/main.
_added tls fragmenting packet option_
* Added manual build (dont meant to be merged)
* Feat: add manual Windows build workflow.
* Added tls fragmenting packet option.
* Merge pull request #1978 from veto9292/sync-slang.
_balancer-strategy | remove-mux-geo | sync-slang_
* Feat: update DNS translations for multiple languages.
* Feat: add "enableFakeDns" translation for multiple languages.
* Feat: add "redirectPort" translations for multiple languages.
* Feat: add "directPort" translation to ar.
* Feat: implement balancer strategy configuration and UI integration.
* Feat: add balancer strategy translations for multiple languages.
* Upgrade GitHub Actions to latest versions.
## v4.0.5 (2026-02-20)
#### Other
* Better support for events.
## v4.0.4 (2026-02-19)
#### New
* Add endpoint to json editor,
* Add more inbounds(TPROXY, REDIRECT DIRECT) disable pause on desktop.
* Add ios limits and fix workflow.
* Better connection management.
* Add up/down and active profile in android notification.
* Add HiddifyRPC in android.
* Add extra security mode.
* Add fragment button.
* Add remote config support.
* Add better platform management.
* Update the ios interface.
* Add some more checks.
* Add real active tag.
* Upgrade flutter and libs.
* Add quick setting, organize settings, fix reconnect bug, remove profile tab in mobile, use hiddifynextx forfetch profile in xray mode, update flutter.
* Refactor configs to better visualisation.
* Update ci.
* Upgrade dependencies.
* Redesign core interface.
* Add detailed ipinfo.
* Redisgn ip panel.
* Add auto start for mac.
* Add support for auto start in macos.
* Add org flag.
#### Changes
* Remove platform widget.
* Disable HTTP subscribe link as they create great issue.
* Some refactor.
#### Fix
* Issue in profile editor, better error display.
* Issues.
* Update build matrix to include Android and Windows targets.
* Version issue.
* Update step name for Flutter setup in build workflow.
* Correct syntax for conditional in Flutter setup for arm64.
* Update Flutter setup condition for non-linux-arm64 platforms.
* Bug.
* Prepare.
* Remove unused variables for zip file path in windows release process.
* Update app icon type to use stock icon for consistency.
* Update AppImage build command to disable appstream and correct file move.
* Downgrade `sentry_flutter` to remove jni dependency (avoids forced JDK installation)
* Update AppImage post-processing steps and improve Docker volume mounts.
* Update build targets for Android to include AAB format and fix windows-install-deps.
* Sticky notif.
* Update macOS version from 13 to 15 in build workflow.
* Replace flutter_distributor with fastforge for macOS and iOS packaging.
* Improve sh compatibility.
* Change variable assignment from := to = for consistency in Makefile.
* Update sed command definition for Windows compatibility.
* Workflow.
* Workflow.
* Persistent data after uninstalling Windows EXE.
* Issue in ios and imrpove stablity.
* Android bug.
* Notification AND VPN MODE in android.
* Font json editor.
* Ios.
* Per app proxy.
* Tile service.
* Windows build issue.
* Typo.
* Bugs and improvement.
* Select tag bug.
* Makefile path issue in Windows OS.
* Linux installation.
* Ios build.
* Bug.
* Interface change and warp crash.
* Quicktile bug and update to singbox 10.3.
* Bug?
* Macos.
* Macos build.
* Emoji in profile and proxies.
* No commit message.
* Ios.
* Ios interface.
* Name changing.
* Typos for ios.
#### Other
* Merge branch 'new-design-v2'
* Fix arm build.
* Refactor: update InboundOptions fields and translations for direct and redirect ports.
* Add naive.
* Fix.
* Update.
* Merge pull request #36 from veto9292/new-design-v2.
_CI_
* Feat: add supported MIME types for app links on Linux AppImage.
* Refactor: rename macOS and iOS install dependencies targets and update activation command.
* Speedup ci.
* Merge.
* Feat: enhance logging in Makefile with color-coded output.
* Feat: add post-processing for Windows portable zip release.
* Fix CI: "copy to out" for "windows"
* Fix CI: Copy to out Windows.
* Fix CI: skipping chmod for tar.
* Fix CI: NDK version.
* Fix CI: linux AppImage build.
* Fix CI: linxu AppImage build.
* If: REQUIRED_VER in Makefile.
* Update: hiddify-core.diff.
* Generate: proto files.
* Add protoc_plugin activation to linux-install-deps.
* Fix CI "Build platform"
* Fix CI "Setup dependencies"
* Fix connection change issue and more and more optimisation.
* Update psiphon add new dns manager, fix ios ipv6 issue.
* Add proxy usage bytes, psiphon and more and more.
* New balancer approach.
* Better proxy,fix ios.
* New add amnezia, wiregaurd raw config, wiregaurd noise.
* Add inner proxy link, add debounce.
* Revert makefile.
* Fixes and improvements.
* Update ios.
* Better android vpn service start and fix bugs.
* Update android codes to latest singbox.
* Update macos.
* Update fultter.
* Merge.
* Merge pull request #34 from veto9292/small-fix/fastforge-apk-release.
_fastforge migration (android, windows, linux) | storage and path | format codebase | upgrade flutter | flutter discontinued package | dart style | restore window state on Desktops | fastforge release-apk (small fix)_
* Merge remote-tracking branch 'h/new-design-v2' into small-fix/fastforge-apk-release.
* Remove forgotten test parameter.
* Implement window state persistence and position validation - Added `saveWindowState` to persist window size, position, and maximized state. - Added `initWindowState` to restore window bounds with safety checks. - Implemented `checkWindowVisibility` to prevent off-screen startup in multi-monitor setups.
* Calling saveWindowState in onWindow (Resized, Moved, Maximize, Unmaximize) methods.
* Add window (position, size, maximize) preferences to general_preferences.
* Relocate 'window silent start' logic to window_notifier.dart.
* Installing 'screen_retriever' package.
* Format .dart files.
* Fix dart formatter width.
* Replace flutter_markdown with flutter_markdown_plus and update version in pubspec.yaml; adjust pubspec.lock accordingly.
* Upgrade Flutter and SDK versions; update NDK and Kotlin plugin versions; refresh package dependencies in pubspec.lock.
* Added 'Hiddify Dev Windows Portable' config to launch.json for easier testing and development of the Windows Portable version.
* Migrate release builds to fastforge and overhaul Linux/Docker systems.
_This major update migrates all release pipelines (except macOS/iOS) to fastforge and completely overhauls the Linux build process.
### Migration to fastforge
- Migrated all release commands to fastforge for consistency and better management.
- Replaced legacy build scripts with fastforge commands for Windows, Linux, and Android.
- Android APK/AAB builds now utilize fastforge instead of raw commands.
### Linux Build Refactor
- Introduced `linux-release-docker` command.
- Updated `linux-release-appimage` with new post-build scripts.
- Implemented `Linux Install Deps` script:
- Automatically prepares the environment (Ubuntu/WSL).
- Clones Flutter SDK from GitHub (stable branch) instead of downloading the archive.
- Checks out the specific Flutter version defined in `pubspec.yaml` using `Linux Flutter Sync`.
- Installs required dependencies from `linux_deps.list`.
- Rewrote AppImage packaging:
- Manually constructs the AppImage directory structure.
- Injects a custom `AppRun` script.
- Implements a self-contained portable data structure:
- Creates `hiddify.appimage.home` directory alongside the AppImage.
- Stores configuration and user data within this directory to keep the system clean.
### Dockerized Build System
- Added `linux-release-docker` for building Linux artifacts without a local Linux environment.
- Caches Flutter SDK and Pub packages via Docker volumes to speed up subsequent builds.
- Outputs artifacts to `dist_docker` directory on the host machine.
### Windows Improvements
- Updated `windows-release-zip` to include the `portable` environment variable for portable builds.
### Other Changes
- Added `linux_deps.list` to centralize dependency management.
- Added `linux-flutter-sync` to `linux-prepare` command.
- Introduced `LINUX_DEPS` variable to extract package list from `linux_deps.list`.
- Introduced `REQUIRED_VER` variable to extract Flutter version from `pubspec.yaml`.
- Added `linux-flutter-sync` command to ensure the installed Flutter version matches `pubspec.yaml`._
* - Update getDatabaseDirectory to support portable mode based on the `` env var. - Create 'hiddify_portable_data' in the app directory if running in portable mode. - Add 'checkDirectoryAccess' to verify read/write permissions for the portable data folder. - Fallback to the default system path if write access to the portable directory is denied.
* - Add environment variable to identify the Windows portable version - This variable is set during the 'windows-release-zip' build process.
* On Linux, left-clicking the tray icon opens the context menu instead of triggering `onTrayIconMouseDown`. Added a "Dashboard" menu item as a workaround to allow users to open the app window.
* - Ignore MSIX self-signed keys to prevent accidental commit of secrets - Add dist_docker directory (Docker build output) to ignored paths.
* - Enable Linux artifact building without requiring a local Linux environment (e.g., WSL or native Ubuntu) - Designed to be executed via the 'linux-release-docker' command in the Makefile.
* Add some comments.
* Pin Flutter SDK version and register new icon asset - Explicitly define Flutter SDK version in pubspec.yaml for consistency. - Note: This version is critical as it is parsed by Makefile and Dockerfile to setup the build environment. - Add 'ic_launcher_border.png' to the assets list.
* Created a dedicated list file for Linux dependencies and integrated it into both Dockerfile and Makefile.
* Switched to C++17 to ensure better compatibility with modern libraries and potential future dependencies.
* Add some comments.
* Update AppImage configuration in make_config.yaml - Remove app_run_file parameter (AppRun is now injected post-build) - Fix icon path - Update AppRun: Add install_integration to setup icons and create local .desktop entry with correct Exec path - Ensure index.theme creation if missing.
* Update deb configuration in make_config.yaml - Add comments for supported_mime_type parameter - Add user data cleanup script to postuninstall_scripts - Update postinstall_scripts to set StartupWMClass to app.hiddify.com and remove conflicting hiddify.desktop from .local.
* We decided to remove RPM packaging for the following reasons: - Flutter officially supports Debian-based systems only. - Persistent issues with dependency linking. - High maintenance overhead (requires Fedora environment setup). - Successful builds do not guarantee runtime stability on Red Hat-based systems.
* Update MSIX config in make_config.yaml - Complete the list of supported languages - Add commented-out parameters for self-signed certificate.
* Update exe configuration in make_config.yaml - Update publisher_url from hiddify-next to hiddify-app - Fix app_icon.ico path - Complete list of setup locales - Remove redundant 'executable_name' and 'output_base_file_name' parameters.
* Synchronizing main_prod.dart with main.dart.
* Removing "distribute_options.yaml" because we are using "fastforge package" command and "distribute_options.yaml" is realated to "fastforge release" command.
* Fixing riverpod issue with adding "agreed" parameter to recurcise method (applyConfigOption) and using this paramter instead of reading provider state in next call.
* Small fix/ using _prefs instead of ref.read.
* "not important" formating text for better understaning changes in next commits.
* Renaming db name and import path.
* Removing "DbV1" provider and renamign "DbV2" to "Db"
* Renaming "db_v2" to "db" and using this "db" as main database by adding onUpgrade and increasing "schemaVersion" to 5 and fixing directory issue by adding "native" parameter to "driftDatabase" method.
* Generation new steps.dart for new database.
* Removing migration helper for copying data from "db_v1" to "db_v2"
* "not important" formating text for better understaning changes in next commit.
* Updating "test\drift". auto generated with drift_dev.
* Moving "db_v1" schemas to "schemas\db" and generation "schema_v5"
* Removing "db_v2" and rename "db_v1" to "db"
* Merge branch 'new-design-v2' into remove/geo-assets.
* Update release files.
* Improve notification AND VPN MODE in android.
* Merge pull request #30 from veto9292/remove/geo-assets.
_Remove/geo assets_
* Removing "get-geo-assets" target from "Makefile"
* Removing "MissingGeoAssets" from "ConnectionFailure"
* Moving "GeoAssetType" to "db_v1"
* Removing translations related to "geo-assets"
* Removing lib\features\geo_asset.
* Merge pull request #29 from veto9292/fix/reported-issues-v1.
_Fix/reported issues v1_
* Update/test file. auto generated with drift_dev.
* Update/ using DbV2 instead of AppDatabase.
* Comment geo asset data 'mapper | source'
* New/ run db migration from v1 to v2 in bootstrap.
* New/ db migration helper from v1 to v2.
* Improve/ renaming. add dbV2 provider.
* New/creating db_v2 that equals db_v1 v5 schema. downgrade db_v1 to v4 schema. merging tables logics with db logics.
* Update/schemas move db schema to new location and regenerate db_v1 schema_v4.
* Update/build.yaml add 'db v2' path to drift_dev. changing drift_dev path (schema_dir, db_v1).
* Fix/ with the new version of go_router, there is no need to add a navigatorKey to StatefulShellBranch to preserve its state.
* Small fix/warnings "unnecessary_underscores"
* Fix/ fixing prevent closing branch issue... removing "back_button_interceptor" and "prevent_closing_branch.dart"... upgrading go_router to 16.2.4 and using "PopScope" instead of "back_button_interceptor" package.
* Small fix/ add: Warp, Fragment, and Padding icons in Settings option. Change the icon for the 'Padding-Size' option.
* Update macos.
* Merge pull request #28 from veto9292/chore/upgrade-flutter-version.
_Chore/upgrade flutter version_
* Resolve dependency conflicts for Flutter upgrade.
_Upgraded development dependencies to support the Flutter SDK migration
from version 3.32.5 to 3.35.4 and resolve version solving failures._
* Merge pull request #27 from veto9292/feature/i18n-refactor.
_Feature/i18n refactor_
* Small fix/ update pages.profiles.updateSub to updateSubscriptions. "Update connection profiles" => "Update subscriptions"
* Refactor(localization): Sync codebase with new i18n structure.
_This commit adapts the application's source code to the newly restructured and renamed translation files. It ensures all UI text is correctly referenced and improves how feedback messages are handled.
- Updated all translation keys throughout the source code to align with the new nested structure.
- Added and corrected translations for user-facing toasts to provide appropriate success and failure feedback (e.g., for import/export actions).
- Implemented logic to display newly added translations where they were previously missing._
* Refactor(i18n): Restructure and clean up localization files.
_- Restructured keys into a feature-based nested format for better maintainability.
- Renamed files from strings_[locale] to [locale].i18n.json to fix tooling warnings.
- Removed the unused Sorani Kurdish (ckb) locale._
* New/ auto generated by "dart run slang configure"
* Upgrade/ slang(4.4.0 to 4.5.1) slang_flutter(4.4.0 to 4.8.0)
* Update workflow.
* Merge branch 'new-design-v2' of ssh://github.com/hiddify/hiddify-next-ios into new-design-v2.
* Merge pull request #26 from veto9292/fix/reported-issues.
_Fix/reported issues_
* Small fix/ profile_parser_test file was updated based on the changes in 'ProfileParser'
* Update/ Improved UI/UX and aligned it with the manual section of the 'Add Profile' modal.
* Update/ using loadingState instead of (save, update, delete & isBusy). ProfileDetailsPage is now used only for editing. The profile_details_notifier was completely rewritten, and the logic for applying and saving changes has been greatly simplified.
* Update/ using Material icons instead of FluentIcons.
* Update/ UI improvment.
* Delete profile_local_override.dart.
* Small fix/ using Material Icons instead of Cupertino Icons.
* Update, fix/ fixed 'Free' profiles not updating and made minor changes to align with AddProfileNotifier.addManual.
* Update, fix/ using Material icons instead of FluentIcons. Fixed the bottom sheet not closing when showing profileDetails.
* Update/ rename method and use url to upsert.
* Update/ rename methods.
* Small fix.
* Update/ moved part of the deleteProfile logic to ProfileDataSource. replaced the abortConnection method with toggleConnection.
* Update/ updated AddProfileNotifier methods. added a Tile for isAutoUpdateDisable and to display the auto-update status. made minor changes to the Add button logic.
* Update/ prevented error display on HTTP request cancellation. removed commented-out code. separated profile addition methods (addClipboard, addManual). rewrote the add method based on profileRepository changes and removed the renaming logic. canceled the request when AddProfileNotifier is disposed.
* Update/ added profileParser and removed httpClient from the profileRepository's input parameters, adding profileParser as the new input parameter.
* Update/ removed the local-override logic that was previously added to watchActiveProfile for preserving userOverride. added renaming logic to the insert operation; if a name is duplicated, random numbers are appended to the end (using getByName) so the user can differentiate. added logic to check for a profile's existence before editing. to manage the active profile during deletion, the isActive parameter is received. If the profile being deleted is active, another profile is selected as active after its removal.
* Update/ passing the profile object to connect and reconnect.
* Update/ parameters of the connect and reconnect methods were changed for simplicity. Commented-out code was removed. applyConfigOption was rewritten to align with the profileOverride changes.
* Refactor/ deleted methods include (getByName, addByUrl, updateContent, addByContent, updateSubscription, add, patch, fetch). upsertRemote: Handles both creation and updating of remote profiles from a single entry point. It checks for an existing profile via URL to prevent duplicates. addLocal: Allows for creating profiles directly from local string content. offlineUpdate: Enables offline modifications by re-parsing the profile with new content while preserving existing headers. validateConfig: The logic has been updated to correctly handle and apply configuration overrides, which were previously ignored. removed the 'http_client' dependency from the repository. This responsibility has been moved to the 'profile_parser' to better separate concerns. a previously public field has been made private. the 'setActive' and 'deleteById' methods have been formally defined in the abstract interface.
* Refactor/ converts the static 'ProfileParser' into a service class with access to Riverpod's 'ref'. adds 'addRemote', 'addLocal', 'updateRemote', and 'offlineUpdate' methods using 'fpdart'. moves profile download logic from 'profile_repository' to 'ProfileParser' and rewrites it with 'fpdart'. adds error handling for user-cancelled downloads. reads 'useXrayCoreWhenPossible' directly from 'ref' instead of passing all settings. changes the 'parse' method's input to 'ProfileEntity', simplifying the return logic with 'profile.map'. updates the name parser hierarchy to use the link protocol as a fallback. adds logic to disable profile auto-updates via user override.
* Remove/ move 'protocol' method from 'link_parsers' to 'profile_parser'
* Update/ removed 'toEntry' and 'subInfoPatch' methods from 'ProfileEntity'. added 'toInsertEntry' and 'toUpdateEntry' methods and replaced 'map' with 'switch'. added 'userOverride' and 'populatedHeaders' to the 'toEntity' method and renamed 'testUrl' to 'profileOverride'.
* Update/ renamed 'testUrl' to 'profileOverride'. added a default value of 'Duration.zero' to 'updateInterval'. add/ added 'userOverride' and 'populatedHeaders' to the remote and local models. added a 'UserOverride' model with a version structure to ensure backward compatibility in the future. added isAutoUpdateDisable with default(false) to 'userOverride'
* Update/ changes to 'ConfigOptionRepository' class: made 'getConfigOptions' private. renamed method 'getFullSingboxConfigOption' to 'fullOptions'. added method 'fullOptionsOverrided', which applies 'profileOverride' to the 'config options' before they're sent. improved error handling with 'fpdart'.
* Update/ add 'ConfigOptionFailure' to 'ProfileFailure.invalidConfig' parameters to easily convert 'ConfigOptionFailure' to 'ProfileFailure'. add 'cancelByUser' for when an HTTP request is cancelled by the user(this helps to distinguish the error and prevent its display)
* Update/ add 'ConfigOptionFailure' to 'ConnectionFailure.invalidConfigOption' parameters to easily convert 'ConfigOptionFailure' to 'ConnectionFailure'
* Update/ schema_v5 test file(auto generated by drift_dev)
* Delete/ old drift test files.
* Update/ adding columns(userOverride, populatedHeaders) to profile table in db. renaming test_url column to profileOverride. app_database.steps.dart & drift_schema_v5.json is auto generated by drift_dev.
* Update/ en, fa translations. add(general.auto, profile.add.disableAutoUpdate, failure.profiles.canceledByUser). update(profile.detailsForm.updateInterval).
* Update/ supporting deselected state for Per-app porxy apps in UI.
* Update/ bump target/compileSdk to 36; align AGP/Kotlin.
* Fix/ deprecated warning.
* New/ apps auto selection modal. features: auto update, reset to default, changing update interval, enable or disable auto-selection, perform now.
* Update/ using db for managing state. moving and removing providers. adding shareOnGithub to notifier. removing installed apps notifier provider.
* Update/ notifying user and disabling auto-selection after a region change.
* New/ activating and managing the per-app proxy auto-selection service.
* New/ managing loading for asynchronous operations.
* New/ this service is initialized in app.dart and is responsible for auto-update functionality for auto-selection feature. It is also in charge of updating the active list in prefs.
* Update/ new sort logic with 4 priority. using hooks for getting and managing installed apps. auto sort feature. adding scroll to top feature. adding loading for share to all. adding FAB for auto selection modal.
* Fix/ AppProxyMode not found error.
* New/ AppProxyDao is for interacting with the AppProxyEntries table.
* Update/ change return types from List to Set. removing share method from repository. renaming methods. using AppProxyMode instead of PerAppProxyMode.
* New/ appProxyDataSourceProvider.
* New/remove/ adding AppPackageInfo as a replacement for InstalledPackageInfo to store installed apps.
* New/ per_app_proxy_backup model is used for import & export.
* New/ adding AppProxyMode alongside PerAppProxyMode; the difference is the lack of an off state.
* New/ PkgFlag, managing bit-flags for selected apps in per-app-proxy.
* Update/ import UI and logic for add_profile_modal.dart.
* New/update/ moving per_app_proxy_include_list & per_app_proxy_exclude_list to Preferences. adding auto_apps_selection_update_interval & auto_apps_selection_last_update. renaming autoSelectionAppsRegion to autoAppsSelectionRegion.
* New/ drift migration test files (generated by drift_dev)
* Add/update/fix/remove/ adding AppProxyEntries to db tables, fixing AppDatabase constructor, adding from4To5 and increasing schemaVersion to 5, generating drit_schema_v5 with drift_dev, removing database_connection.dart.
* New/ app_database.steps.dart generated by drift_dev.
* Move file/ moving drift schema from schemas\ to schemas\app_database.
* New/ adding AppProxyEntries to db tables.
* Fix/ adding translationsProvider to bootstrap.
* Update/ en, fa translations new: autoSelection(performNow, resetToDefault) network.share(alreadyInAuto) update: network(clearSelection) autoSelection(dialogTitle, msg, success, regionNotFound) network.share(emptyList)
* Update/ adding database and schema dir to drift_dev in build.yaml.
* New/ drift migration test files (generated by drift_dev)
* Adding method to RuleEnum for getting index of key.
* Updating en, fa translations. Using " instead of ( for autoSelection.dialogTitle. Adding positiveBtnTxt to per-app proxy share dialog.
* Improving error management and preventing possible crash for auto_selection_repository.
* Changing text "Share" to "Share To All" in per-app proxy.
* Displaying a notification dialog before sharing selected apps.
* Updation en, fa translations Adding title, dialogTitle, msg to settings.network.share.
* Merge branch 'fix/reported-issues' of https://github.com/veto9292/hiddify-next-ios into fix/reported-issues.
* Suggesting auto selection apps when changing region.
* Improving naming and logic in 'per_app_proxy_page.dart' and adding auto selection, share, import/export to the menu, sorting selected items, using menu for mode selection, setting 'hideSystemApps' with a chip.
* Improving naming and logic in 'per_app_proxy_notifier.dart' and adding methods (share, clearSelection, autoSelection, export clipboard/file, import clipboard/file).
* Add auto selection data provider and repository To get the list of proxy/bypass applications from GitHub and share the selected list as an issue.
* Removing per_app_proxy_data_providers & per_app_proxy_repository Instead, the `installed_apps` package is used.
* Using MenuAnchor instead of PopupMenuButton in settings_page.
* Updating en & fa translations adding (import, export, share) to general adding (autoSelection, share, import, export) to setting.network.
* Adding 'auto_selection_apps_region' to 'general_preferences.dart'
* Changing the order of buttons in ConfirmationDialog.
* Renaming 'okText' to 'positiveBtnTxt' for confirmation dialog.
* Merge pull request #25 from veto9292/fix/reported-issues.
_Fix/reported issues_
* Merge branch 'new-design-v2' into fix/reported-issues.
* Better log page, upgrade to flutter 3.32.4.
* Merge branch 'new-design-v2' of ssh://github.com/hiddify/hiddify-next-ios into new-design-v2.
* Merge pull request #24 from veto9292/fix/reported-issues.
_Fix/reported issues_
* Merge.
* Merge branch 'new-design-v2' of ssh://github.com/hiddify/hiddify-next-ios into new-design-v2.
* Merge branch 'new-design-v2' of ssh://github.com/hiddify/hiddify-next-ios into new-design-v2.
* Update flutter.
* Fixing setSkipTaskbar in macOS and renaming WindowNotifier methods.
* Updating window_manager & tray_manager packages.
* Remove experimental feature references from settings pages and related files.
* Renaming 'inbound_options.dart' to 'inbound_options_page.dart'
* Using 'profileDataSourceProvider' instead of 'profileRepositoryProvider' in 'active_profile_notifier.dart' to prevent redundant builds.
* Removing 'distinct()' from 'profile_repository.dart' and adding it to 'profile_data_source.dart' to prevent emitting extra events.
* Removing 'async' from 'SingConfigOption' and using watch instead of read.
* Removing extra file.
* Preventing redundant builds in 'routing_config_notifier.dart' when the last profile is deleted and 'Breakpoint' is 'isMobile'.
* Fixing SideBarStatsOverview issue.
* Removing 'flutter_adaptive_scaffold' and using Flutter SDK. Updating logic related to 'Breakpoint'.
* Using 'Breakpoint' instead of Breakpoints in 'flutter_adaptive_scaffold' method.
* Using 'Breakpoint' instead of Breakpoints in 'flutter_adaptive_scaffold' method.
* Removing 'branchNavKey' and using new 'Breakpoint' logic instead of 'isSmallActive'.
* Updating 'ActiveBreakpointNotifier' update logic.
* Renaming 'is_small_active' to 'active_breakpoint_notifier'. Adding 'Breakpoint' class for storing breakpoint and helper methods for detecting the active breakpoint. Changing 'ActiveBreakpointNotifier' output to 'Breakpoint' and adding a provider named 'isMobileBreakpoint'.
* Commenting out 'PopupCountNotifier'.
* Using 'rootNavKey' instead of 'branchNavKey'.
* Using 'rootNavKey' instead of 'branchNavKey' and commenting out 'PopupCountNotifier' methods.
* Removing flutter_adaptive_scaffold from pubspec.
* Updating Flutter to 3.32.5 and upgrading pub. Updating intl to 0.20.2. Solving pub get issue by adding humanizer version 3.0.1 instead of getting from GitHub.
* Organizing per app proxy page.
* Fix import and use read instead of watch.
* Unifying the status bar and system navigation bar color with the scaffold color.
* Fixing profile disappearance (when the profile being updated is selected as the active profile)
* Improving popup hiding nav bar animation(temporary)
* Fixing Segmented Button UI in Quick Setting Modal.
* Fixing routing config rebuilding when deleting profile.
* Fixing bottom sheet overlapping with keyboard.
* Fix warp secure lable for connection button.
* Improve warp generation toast, merge warp loading logic in warp_option_notifier.dart.
* Improve out animation for bottom sheet when popup is showing.
* Fix toast direction, removing context from "in_app_notification_controller", add dismissAll() to _show.
* Removing toast handler from "profiles_modal" and "profiles_page", move toast handler for success or failure profiles update to "profiles_update_notifier"
* Preventing redundant builds by removing duplicate events from the stream and using "hasAnyProfileProvider" in routing_config_notifier.dart.
* Adding ToastificationWrapper for showing toast without context.
* Renaming and organizing files and classes related to "Profiles"
* Merge pull request #23 from veto9292/fix/reported-issues.
_Fix/reported issues_
* Move popup_count_notifier from dialog_notifier to dedicated file.
* Rename riverpod_listenable to refresh_listenable.
* Remove disabled parameter from SideBarStatsOverview.
* Removing unnecessary files.
* Remove CustomAlertDialog from alerts.dart (move it to the dialog/widgets)
* Using dialog notifier, using new global key.
* Fix bottom sheet typo, rename root nav key.
* Merge config options with settings feature.
* Rewriting all items in settings, adding icons, organizing folder structure and files.
* Rename settings_repository to battery_optimization_repository.
* Fix imports.
* Fix imports.
* Fix imports.
* Move WarpLicenseDialog.dart to dialog\widgets, fixing import warning dialog_notifier.dart.
* Move quick settings modal to botto_sheets\widgets, fixing import warning in bottom_sheets_notifier.dart.
* Show toast instead of dialog for warp success generation.
* Fix platform_settings_notifier async issue, applying name changes, manage loading state, rewriting platform_settings_tiles and fixing loading.
* Rename settings_repository to battery_optimization_repository rename settings_data_providers to battery optimization_provider move files.
* Using dialog notifier, moving SettingTextDialog to dialog/widgets.
* Using dialog notifier moving SettingsRadioDialog to dialog/widgets.
* Using dialog notifier, moving setting_checkbox to dialog/widgets.
* Using dialog notifier.
* Using dialog notifier.
* Using dialog notifier.
* Moving proxy-info dialog to the dialog notifier, using goNamed.
* Fix bottom sheet typo, using goNamed, using dialog notifier.
* Using dialog notifier, add ref to _launchUrlWithCheck method.
* Renaming ProfilesOverviewPage to ProfilesPage, fix bottom sheet typo, use context.goNamed, removing autoImplyLeading "becase routing is fixed"
* Using dialog notifier.
* Using dialog notifier.
* Fix imports.
* Fix ref and imports.
* Using dialog notifier.
* Using dialog notifier.
* Set return type for dialog.
* Renaming LogsOverviewPage to LogsPage, use AppBar instead NestedScrollView.
* Add const to constructor, romoving SafeArea to solve UI issue, preventing operations during loading.
* Commenting unused widget, fix bottom sheet typo.
* Remove showAddProfile and url parameter from HomePage this logic is moved to the redirect in routing-config-notifier.
* Using dialog notififer, remove showExperimentalNotice "moved to dialog notifier"
* Using dialog notifier, move showExperimenNotice logic to dialog-notifier.
* Fix import.
* Using dialog notifier, changing icons, dynamic icon for theme mode.
* Fix imports, using dialog notifier.
* Fix imports, set return type for showing dialog.
* Fix imports.
* Move new_version_dialog.dart to lib\core\router\dialog\widgets.
* Fix ref warning.
* Move about_page.dart to lib\features\about\widget.
* PreventClosingApp in routing_config_notifier.dart is used for preventing the branch from closing. It transfers the user to Home route after preventing the closing.
* Is_small_active.dart IsSmallActive is true when the breakpoint is in the small range, and false otherwise. app.dart Updating the router provider. Assigning a value to IsSmallActive. useEffect has been used for improving performance.
* CustomTransition is used for adding animation to pages in routing_config_notifier.dart. The purpose of creating this class is to prevent boilerplate code.
* RoutingConfigNotifier returns a RoutingConfig which is used for updating rConfig in GoRouterNotifier. The structure of routes is defined in RoutingConfigNotifier. The redirect method is defined in RoutingConfigNotifier. By listening to other providers, a new list of routes can be returned dynamically.
* An instance of RefreshListenable is passed to refreshListenable in GoRouterNotifier. If the notifyListeners method is called, the anonymous redirect function in RoutingConfig is executed. By using ref, a specific provider is listened to, and if it changes, the provider's value is stored globally in a variable, and notifyListeners is called.
* GoRouterNotifier creates the GoRouter instance that is passed to MaterialApp.router. It holds a RoutingConfig within itself, which gets its value updated by listening to RoutingConfigNotifier. With changes to RoutingConfig, the app's routes will change dynamically.
* Move dialogs from project to lib\core\router\dialog\widgets fix navigation logic for dialogs add translations.
* Adding the _show method for managing the number of popups, reducing boilerplate code, and managing context move all dialog to this notifier explicitly specifying a return type.
* Fix typo(buttom to bottom), adding the _show method for managing the number of popups, reducing boilerplate code, and managing context.
* Fix import, fix Ref warning, remove "error dialog", changing context that are used for displaying toast.
* Fix warning/ Ref, import, async.
* My_adaptive_layout.dart is a shell for the main navigator which is used inside StatefulShellRoute in go_router shell_route_action.dart, which stores information related to each action in my_adaptive_layout.dart.
* Move my_app_links.dart to lib\core\router\deep_linking.
* Remove/ app_router.dart, router.dart, routes.dart.
* New/ move url_protocol to lib\core\router\deep_linking\url_protocol.
* Update/ translations(en, fa) general.save general.close unknownDomains.title unknownDomains.youAreAboutToVisit unknownDomains.thisWebsiteIsNotInOurTrustedList.
* Add/ back_button_interceptor package to pubspec, update AndroidManifest (platform-specific setting)
* Update go_router and flutter_adaptive_scaffold packages, remove go_router_builder package.
* New/ show "qr dialog" for "allow connection from LAN"
* Improve/ add comment for network_info_plus package.
* Add/ network_info_plus package.
* Small fix/ profile tile radius issue.
* New/ merge warp license aggrement, seprate warp options logic, move license agreement to connection button and connection repo and more...
* New/ add missing warp license to connection_failure.
* Small fix/ warnings & rename testUrl to override.
* Improve/ add showWarpLicense & showWarpConfig dialog to dialog_notifier.
* Add translations/ failure.warp.missingLicense & missingLicenseMsg.
* Small fix/ rename testUrl to override.
* Fix/ warp license agreeement focus, rename intro page const.
* Improve/ focus logic for intro page.
* Fix/ adding a timer for syncing status with changes outside the app.
* Small fix/ add gap to app bar actions.
* Small fix/ add gap to app bar action.
* Fix/ fix warnings, fix focus issue, removing extra code related to focus management.
* Small fix/ settings_inpu_dialog warnings.
* Fix slider focus for settings_inpu_dialog.dart SettingsSliderDialog.
* Small fix/ add-profile slider focus.
* Fix/ prevent scope switch while overlay is displayed.
* Remove/ add_manual_profile_modal.dart.
* Fix/ focus issue for adaptive-scaffold, add keyboard const, fix adaptive_root_scaffold warnings.
* Small fix/ connection button focus color.
* Small fix/ improve home_page logic and ui.
* Fix/rewrite intro_page & fix rich text focus, remove _dynamicRootKey, add intro const.
* Small fix/ hide adaptive scaffold from intro, fix warnings for routes.dart.
* Fix/ merge add profile with manual modal(logic & ui), fix cancel for manual.
* Small fix/ config_options_page(async await)
* Small fix/ warning(use StringBuffer instead of String)
* Small fix/ import warning.
* Small fix/ log message.
* Package update/ launch_at_startup.
* Small fix/ fix waring for config_options_page.
* Merge pull request #22 from veto9292/fix/reported-issues.
_Fix/reported issues_
* Small fix/ update profile_parser_test.
* Small fix/ free profile typo.
* Merge pull request #21 from veto9292/fix/reported-issues.
_Fix/reported issues_
* Small fix/ neededFeatures(warp to warp_over_proxies)
* Fix/ free profile typo.
* New/ overriding profile name and options locally and remotely(profile, fragment, name)
* Update.
* Update core.
* Update flutter.
* Update pipeline.
* Change default connection test url to apple.
* Merge branch 'new-design-v2' of https://github.com/hiddify/hiddify-next-ios into new-design-v2.
* Merge pull request #20 from veto9292/fix/reported-issues.
_Fix/reported issues_
* Small fix/ prefer_const_constructors.
* Small fix/ prefer_final_locals.
* Small fix/ remove commented imports.
* Small fix/ remove unused_import.
* Fix/ UI blocking during connection.
* Feature/ support for enable-warp in profile headers.
* Improve/ sync tray begavior in macOS with other Desktops.
* Improve/ add support for custom scheme in flutter.
* Setup/ add schemes for Windows.
* Setup/ add schemes for Linux.
* Setup/ add schemes for macOS.
* Setup/ add schemes for iOS.
* Setup/ add schemes for Android.
* Feature/ ability to delete active profile.
* Improve/ show sort profile dialog.
* Small fix/ format source code, fix warning.
* Small fix/ 'no active profile' dialog boxConstraints.
* Moving interrupt handling in proxy reception to core.
* Update to fultter 3.29.3.
* Add profilename in start.
* Merge branch 'new-design-v2' of https://github.com/hiddify/hiddify-next-ios into new-design-v2.
* Merge pull request #19 from veto9292/fix/reported-issues.
_Fix/reported issues_
* Small fix/ tray manager logic, bootstrap import.
* Fix tray_manager, logic rewrite.
* Fix proxy_overview_page performance issue, improve UI.
* Hide back button for profiles_overview_page.
* Improve ux and logic for add_profile_modal by showing region specific message (translation changed)
* Custom scheme setup for registration in Windows OS (unpackaged app)
* Setup app_links for flutter, merge app_links with go_router.
* Setup app_links package for Linux.
* Setup app_links package for macOS.
* Setup app_links package for Windows OS.
* Improve performance.
* Add upload to app-draft.
* Improve windows luncher.
* Merge branch 'new-design-v2' of https://github.com/hiddify/hiddify-next-ios into new-design-v2.
* Merge pull request #18 from veto9292/fix/reported-issues.
_Fix/reported issues_
* Create custom_text_scroll, fix ButtonSegment over flow.
* Fix loading height for add_profile_modal.
* Justification is not possible, remove WrapAlignment.spaceBetween.
* Remove percent_indicator_premium, fix profile_tile RemainingTrafficIndicator.
* Fix per_app_proxy performance issue.
* Remove protocol_handler from Windows and macOS.
* Fix macos.
* Merge branch 'new-design-v2' of https://github.com/hiddify/hiddify-next-ios into new-design-v2.
* Merge pull request #17 from veto9292/fix/reported-issues2.
_Fix/reported issues2_
* Fix deep link query-parameter.
* Fix go router refreshListenable.
* Handle deep link with go router.
* Remove protocol_handler, deep_link_notifier.
* Fix bottom sheets padding.
* Fix per app proxy error.
* Edit routes location.
* Fix canChangeOption.
* Fix ChoicePreferenceWidget enable (Enable WARP/Detour Mode)
* Hide auto generated back button for settings page.
* Return to home page from settings page when back button pressed.
* Improve ux, preventing back when user intent to work with slider.
* Preventing delete selected profile.
* Update deoebdebcies.
* Merge pull request #15 from veto9292/fix/reported-issues.
_fix reported issues and add en, fa translations_
* Fix reported issues and add en, fa translations.
* Improve android stability.
* Upgrade flutter to 3.29.1.
* Update ios macos.
* Merge pull request #14 from veto9292/fix/proto-and-sentry.
_Fix/proto and sentry_
* Remove protoc_builder.
* Add .sentry-native to .gitignore.
* Delete .sentry-native folder.
* Fix route_rule.pb.dart import.
* Merge pull request #13 from veto9292/feature/route-rule.
_Feature/route rule_
* Route rule(not complete)
* Add route rule regex validators.
* Add riverpod_observer for better debugging.
* Config-option file import/export.
* Custom okText for confirmationDialog and fix content constraints.
* Add package to pubspec.yaml(file_picker, installed_apps, recase)
* Fix android.
* Move proto to core.
* Merge pull request #12 from veto9292/fix/add-profile.
_empty region in free config mean all, fix grid crossAxisCount for single item_
* Empty region mean all, fix grid crossAxisCount for single item.
* Merge pull request #11 from veto9292/update/add-profile.
_update/add_profile_modal_
* Update/add_profile_modal add/free profiles to add_profile_modal remove/http package from pubspec.yaml.
* Merge pull request #8 from veto9292/fix/makefile.
_fix: makefile path issue in Windows OS_
* Merge pull request #10 from veto9292/feature/route-rule.
_add: proto packages & route_rule.proto file_
* Add: proto packages & route_rule.proto file.
* Fix windows compile.
* Improve ios and windows.
* Disallow delete active profile.
* Better connection management, add bounce and show connection error.
* Make easier access for quick setuo.
* Refactor config options.
* Update pods.
* Update sentry.
* Update.
* Update sqlite3 dependency.
* Update flutter.
* Handle profile size.
* Support correctly ios.
* Update android libs.
* Update packages.
* Show error incase of fail.
* Upgrade flutter.
* Some refactor.
* Refactor router.
* Refactor: routes.
* Update.
* Merge branch 'ios' into new-design-v2.
* Update dialog to platform dialog.
* Merge remote-tracking branch 'origin/main' into ios.
* Update.
* Update.
* Merge branch 'fix-latest' into new-design.
* Update packages and fix web issues.
* V3.
* New UI design.
* Merge remote-tracking branch 'origin/main' into ios-pv.
* Add make with love in intro.
* Improve ios UI and integrate it with os.
* Update.
* Update ios.
* Remove 'needed_features' from free_configs.
* Update free_configs.
* Update cron schedule and add operations limit.
* Modify stale.yml for cron schedule and messages.
_Updated the stale issue workflow to change the cron schedule and modify the stale issue message and timing._
* Update warp configuration with new server entries.
* Update profile title in warp configuration.
* Add new warp configurations and psiphon links.
* Update title in free_configs for Warp profile.
* Remove unused configurations for Insta-Youtube and Ainita.
_Removed several configurations related to Insta-Youtube and Ainita.net, including their titles, sublinks, tags, and consent messages._
* Change region from '-' to 'k' in free_configs.
_Updated region values from '-' to 'k' for two configurations._
* Add Mahsa profile configuration file.
* Add Mahsa configuration profile to free_configs.
* Update free_configs.
* Update warp configuration with new detour format.
* Update free_configs.
* Update free_configs.
* Create ainita.
* Update free_configs.
* Chore: update translations with Fink 🐦
* Update super_fragment.
* Update super_fragment.
* Update super_fragment.
* Update super_fragment.
* Rename super_fragment.json to super_fragment.
* Update super_fragment.json.
* Create super_fragment.json.
* Update free_configs.
* Update free_configs.
* Create free_configs.
* Update fragment.
* Update fragment.
* Update fragment.
* Create fragment.
* Update bug_report.yaml.
* Update bug_report.yaml.
* Update bug_report.yaml.
* Update bug_report.yaml.
* Update bug_report.yaml.
* Update bug_report.yaml.
* Update bug_report.yaml.
* Update bug_report.yaml.
* Update bug_report.yaml.
* Update bug_report.yaml.
* Update README_ru.md.
* Update README_cn.md.
* Update README_br.md.
* Update README_ja.md.
* Update README_br.md.
* Update README.md.
* Update README_fa.md.
* Update README_ru.md.
* Update README_ja.md.
* Update README_fa.md.
* Update README_cn.md.
* Update README_br.md.
* Update README.md.
* Merge pull request #1475 from simonkimi/main.
_Profile Tile InkWell Overflow Fix_
* Fix profile_tile clipBehavior.
* Update README.md.
* Merge pull request #1464 from kekomenos/patch-1.
_Update README.md_
* Update README.md.
_<!-- Copy-paste in your Readme.md file -->
<a href="https://next.ossinsight.io/widgets/official/analyze-repo-stars-history?repo_id=643504282" target="_blank" style="display: block" align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://next.ossinsight.io/widgets/official/analyze-repo-stars-history/thumbnail.png?repo_id=643504282&image_size=auto&color_scheme=dark" width="721" height="auto">
<img alt="Star History of hiddify/hiddify-app" src="https://next.ossinsight.io/widgets/official/analyze-repo-stars-history/thumbnail.png?repo_id=643504282&image_size=auto&color_scheme=light" width="721" height="auto">
</picture>
</a>
<!-- Made with [OSS Insight](https://ossinsight.io/) -->_
* Update README.md.
* Create README.md.
* Update README_ru.md.
* Update README_cn.md.
* Update README_ja.md.
* Update README_br.md.
* Update README_fa.md.
* Update README.md.
* Update README_br.md.
* Update README_ja.md.
* Update README_ru.md.
* Update README_cn.md.
* Update README_fa.md.
* Update README_fa.md.
* Update README.md.
* Update README.md.
* Merge pull request #1438 from proninyaroslav/linux-fix-silent.
_[Linux] Fix minimize to tray (silent start) option_
* [Linux] Fix minimize to tray if the option is enabled.
* Update LICENSE.md.
* Update CONTRIBUTING.md.
* Update README.md.
* Merge pull request #1403 from ldm0206/main.
_Update translations zh-CN_
* Chore: update translations with Fink 🐦
## v2.5.7 (2024-10-03)
#### Other
* Merge pull request #1382 from TheLastFlame/main.
_Remembering window closing action_
* Feat: add action options for closing the application.
* Chore: update .gitignore to exclude /data directory.
* Refactor: replace HookConsumerWidget with ConsumerWidget and add ThemeModePrefTile.
## v2.5.6 (2024-10-02)
#### Fix
* Version bug.
* Version bug.
## v2.5.5 (2024-09-29)
#### Other
* Merge pull request #1368 from tarzst/main.
_Update RU translations_
* Chore: update translations with Fink 🐦
## v2.5.2 (2024-09-29)
#### Fix
* Typo.
## v2.5.1 (2024-09-29)
#### Fix
* Exception.
* Version.
## v2.5.0 (2024-09-28)
#### Other
* Merge pull request #1335 from laperuz92/patch-1.
_Update russian translations_
* Update russian translations.
* Merge pull request #1328 from yxiZo/main.
_Update translations_
* Chore: update translations with Fink 🐦
* Merge pull request #1322 from andythesilly/main.
_set edgeToEdge ui mode_
* Chore: update translations with Fink 🐦
* Set edgeToEdge ui mode.
## v2.3.1 (2024-09-07)
#### Fix
* Android.
#### Other
* Merge branch 'main' of https://github.com/hiddify/hiddify-next.
* Change name to hiddifypackettunnel.
* Fix android build issue.
## v2.3.0 (2024-09-02)
#### New
* Add brazil region.
#### Fix
* Black screenn when press back button.
#### Other
* Hide back icon when no back.
* Merge pull request #1277 from sillydillydiddy/main.
_Update translations_
* Chore: update translations with Fink 🐦
* Merge pull request #1282 from vedantmgoyal9/patch-1.
_Update winget-releaser to latest_
* Update winget.yml.
* Update winget.yml.
* Update winget-releaser to latest.
* Merge pull request #1278 from tensionc/main.
_fix: Black screenn when press back button_
* Merge remote-tracking branch 'origin/main'
* Update warp.
* Update warp.
* Revert: Keep button, add judgment.
## v2.2.0 (2024-08-21)
#### New
* Add several values for dns and url test in auto complete mode.
* Add use xray core option.
#### Changes
* Default tun mode to gvisor.
#### Fix
* Bug.
* Some hard coded items.
* Apple bug.
* Bug of back button in rtl flutter 3.24.
* Naming of links containing &&detour.
#### Other
* Better auto complete.
* Remove hindi.
* Update flutter to 3.24.
* Merge pull request #1217 from lexxfin/main.
_chore: update translations with Fink 🐦_
* Chore: update translations with Fink 🐦
* Merge pull request #1210 from bLueriVerLHR/main.
_Fix typo in stats_repository.dart_
* Fix typo in stats_repository.dart.
* Chore: update translations with Fink 🐦
* Include app configs before validaing proxies.
* Chore: update translations with Fink 🐦
* Change default warp mode to m4.
## v2.1.5 (2024-08-05)
#### Fix
* Vpn service issue.
#### Other
* Revert android changes.
* Fix warp generation.
* Try fix vpn.
* Check macos.
* Disable mac.
* Revert changes to android vpn service.
* Better tryicons.
## v2.1.4 (2024-08-05)
#### New
* Add exit dialog when press close button.
* Colorized tray icon.
#### Fix
* Some bugs.
* Bugs in tray icon.
* Fr trnalsation.
* Translate bug.
* Single instance flutter in linux?
#### Other
* Less retry for ipinfo.
* Add french lang.
* Test icon linux?
* Connection button by proxy status indicator, change connected to connecting when timeout.
* Formated export in json editor.
* Merge pull request #1174 from Hannisiddiqui/main.
_Wanted to add hindi language for indian users_
* Inlang/manage: add languageTag hi.
* Inlang/manage: install module.
* Chore: update translations with Fink 🐦
* Chore: update translations with Fink 🐦
* Chore: update translations with Fink 🐦
* Chore: update translations with Fink 🐦
* Chore: update translations with Fink 🐦
* Update warp.
* Update release_message.md.
## v2.1.1 (2024-08-02)
#### New
* Add turkey region.
#### Other
* Add change log.
## v2.1.0 (2024-08-02)
#### New
* Add invalid config label.
#### Fix
* Error migrating from v3 to v4 database.
* Url test issues, avoid multiple test, and change outbound on test.
* Loop in android.
#### Other
* Merge pull request #1162 from soyangelromero/main.
_Update translations EN - ES_
* Chore: update translations with Fink 🐦
* Merge pull request #1154 from MR-TZ-dev/main.
_fix: error migrating from v3 to v4 database._
* Better get requests.
* Fix; font.
## v2.0.4 (2024-07-31)
#### New
* Add rich config editor.
## v2.0.3 (2024-07-30)
#### Fix
* Bug.
## v2.0.2 (2024-07-30)
#### Other
* Better editor.
## v2.0.1 (2024-07-30)
#### Fix
* Ios build issue.
* Ios bug.
* Some bugs in configs and fix core bugs.
* Editor text mode bug.
#### Other
* Update.
* Better json editor.
* Test.
* Use latest macos for build ios.
* Test ios.
## v2.0.0 (2024-07-30)
#### New
* Add json editor and editing configs <3.
* Add custom url-test for each repository.
#### Fix
* Link validator.
* Provis?
* Ios.
#### Other
* Update warp.
* Fix?
* Ios?
* Fix ios?
* Fix bug.
## v1.9.1 (2024-07-28)
#### New
* Add auto build for ios.
* Add xray type.
#### Fix
* Add warp issue.
#### Other
* Revert to sdk 34.
* Enable resolve-destination and ipv6 by default.
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Merge pull request #1108 from SonzaiEkkusu/main.
_Update Translations for Region Indonesia (id)_
* Update Translations for Region Indonesia (id)
* Reset direct dns when region change.
* Update sdk to 35.
* Better xray support.
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Merge pull request #1106 from amirsaam/main.
_General iOS Maintain_
* General iOS Maintain.
## v1.9.0 (2024-07-25)
#### New
* Add10000 to all ports for prevenging permission error. add warp from github repository except for china.
#### Fix
* Fixed problem not launching on Ubuntu 24.04 LTS.
#### Other
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Merge pull request #1084 from MR-TZ-dev/fix/linuxLaunchFix.
_fix: fixed problem not launching on Ubuntu 24.04 LTS._
* Merge pull request #1092 from Metozak/main.
_Update translations_
* Chore: update translations with Fink 🐦
* Merge pull request #1097 from SonzaiEkkusu/main.
_Add Indonesia region_
* Add Indonesia region.
* Add core to 1.9.0.
* Upgrade flutter.
* Merge pull request #1073 from keyang556/main.
_Update translations_
* Chore: update translations with Fink 🐦
* Update warp.
* Update warp2.
* Update warp2.
## v1.7.0 (2024-07-17)
#### New
* Add more warp modes, handle both ipv4 and ipv6 in wireguard, add customizable size and more.
#### Other
* Update warp2.
* Create warp2.
* Update warp.
## v1.6.3 (2024-07-14)
#### Other
* Make pre-release by default.
## v1.6.2 (2024-07-14)
#### Fix
* Qrcode issue and update qrcode lib.
* Scanner.
#### Other
* Renew warp configs on adding.
## v1.6.1 (2024-07-14)
#### New
* Add knocker parameters.
#### Fix
* Release issue.
* Qrcode issue.
#### Other
* Android.
* Upgrade flutter.
* Update flutter and make connection more smooth.
* Show info dialog when reconnecting.
* Merge pull request #1050 from itispey/dev-test.
_Reconnect automatically after changing service-mode_
* Reconnect automatically after changing service-mode.
* Merge pull request #1053 from maxyxyd/main.
_Update translations_
* Chore: update translations with Fink 🐦
* Chore: update translations with Fink 🐦
* Chore: update translations with Fink 🐦
* Chore: update translations with Fink 🐦
* Merge pull request #1043 from nidghogg/main.
_Fixed camera permission handling for QR_
* Merge branch 'main' of https://github.com/nidghogg/hiddify-next.
* Fixed Camera permission handling for QR.
## v1.5.0 (2024-07-09)
#### Fix
* Test bug for geoassets.
* Remove geoassets.
#### Other
* Fix intro page buug.
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Merge pull request #1004 from Kianmehrgit/main.
_Update translations_
* Chore: update translations with Fink 🐦
* Merge pull request #993 from fodhelper/fix-urltest-fails.
_Fix URLTest Fails_
* Update config_option_repository.dart.
* Merge pull request #966 from SoranTabesh/main.
_Update translations_
* Chore: update translations with Fink 🐦
* Merge pull request #965 from SoranTabesh/patch-1.
_Update locale_extensions.dart_
* Update locale_extensions.dart.
* Merge pull request #988 from Amirali-Amirifar/fix-changelog-update-years.
_Fix CHANGELOG year_
* Fix CHANGELOG year.
_see diff._
* Merge pull request #934 from amirsaam/main.
_General iOS Maintaining_
* General iOS Maintaining.
* Refactor.
* Add basic routing options, auto update routing assets,use ruleset, remove geo assets.
## v1.4.0 (2024-06-02)
#### Fix
* Naming bug.
* Bug.
* Bug.
* Ios.
* Lang.
* Bug.
* Make dark tray icon windows-only.
#### Other
* Merge pull request #817 from felixhaeberle/main.
_Update translations_
* Merge branch 'main' into main.
* Chore: update translations with Fink 🐦
* Chore: update translations with Fink 🐦
* Merge pull request #811 from amirsaam/main.
_New Bundle + Pods + PrivacyAPIs_
* Privacy Targets.
* Privacy Declaration.
* New Bundle + Pods.
* Merge branch 'android-fix-action-bug'
* Downgrade flutter.
* Master.
* Downgrade to 3.22.0.
* Upgrade flutter.
* Update to flutter 3.21.
* Update.
* Downgrade flutter.
* Temporary disbale apk build.
* Update.
* Update.
* Test.
* Update.
* Update.
* Upgrade gradle version.
* Tmp test.
* Add more log.
* Update flutter action.
* Add debug and ios.
* Fix lang update.
* Merge pull request #778 from Pikman/main.
_Update translations_
* Merge branch 'main' into main.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Merge pull request #894 from xmha97/main.
_Capitalize the installation folder_
* Update make_config.yaml.
* Merge pull request #902 from MrIbrahem/main.
_Update ar translations_
* Chore: update translations with Fink 🐦
* Merge pull request #4 from MrIbrahem/patch-1.
_Patch 1_
* Update strings_ar.i18n.json.
* Update strings_ar.i18n.json.
* Update strings_ar.i18n.json.
* Update strings_ar.i18n.json.
* Update make_config.yaml.
* Update settings.json.
* Update locale_extensions.dart.
* Merge pull request #3 from MrIbrahem/patch-1.
_Update strings_ar.i18n.json_
* Update strings_ar.i18n.json.
* Update strings_ar.i18n.json.
* Merge pull request #2 from MrIbrahem/patch-1.
_Create strings_ar.i18n.json_
* Create strings_ar.i18n.json.
* Merge pull request #814 from keyang556/main.
_Update Traditional Chinese translations_
* Chore: update translations with Fink 🐦
* Chore: update translations with Fink 🐦
* Chore: update translations with Fink 🐦
* Add warp config, update to flutter 1.22.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Merge pull request #770 from alkstsgv/main.
_Update translations_
* Fink 🐦: update translations.
* Test.
* Merge pull request #751 from sky96111/main.
_fix: make auto dark tray icon windows-only_
* Merge pull request #737 from SoranTabesh/main.
_Update translations_
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Rename strings_ckb-KU.i18n.json to strings_ckb-KUR.i18n.json.
* Update settings.json.
* Fink 🐦: update translations.
* Update README_br.md.
* Update README_ja.md.
* Update README_ru.md.
* Update README_cn.md.
* Update README_fa.md.
* Update README.md.
* Update core.
* Merge pull request #726 from HSSkyBoy/main.
_inlang: update zh-TW transition_
* Update zh-TW transition.
* Merge pull request #705 from iamgiko/main.
_Update translations_
* Fink 🐦: update translations.
* Fink 🐦: update translations.
* Update LICENSE.md.
* Update LICENSE.md.
* Update README_ru.md.
* Update README_ja.md.
* Update README_cn.md.
* Update README_ja.md.
* Update README_br.md.
* Update README_fa.md.
* Update README.md.
* Merge pull request #698 from betaxab/p1.
_inlang: update translations_
* Inlang: update translations.
## v1.1.1 (2024-03-20)
#### New
* Add tproxy.
#### Fix
* Gvisor.
* Issue.
#### Other
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Merge pull request #696 from HSSkyBoy/main.
_Update translations (zh_TW and zh_CN)_
* 更新 strings_zh-TW.i18n.json.
* 更新 strings_zh-TW.i18n.json.
* Update strings_zh-TW.i18n.json.
* 更新 strings_zh-TW.i18n.json.
* Change APP name.
* 更新 strings_zh-TW.i18n.json.
* 更新 strings_zh-CN.i18n.json.
* Bump version.
* Merge pull request #692 from sky96111/main.
_Update translations_
* Fink 🐦: update translations.
* Merge pull request #686 from sky96111/main.
_feat: Use dark tray icon in light theme_
* Feat: dark tray icon in light theme.
* Merge pull request #690 from imshahab/m3-dynamic-theme.
_Implement Material 3 dynamic theming_
* Implement Material 3 dynamic theming.
* Merge pull request #685 from Nyar233/main.
_Update translations_
* Fink 🐦: update translations.
* Merge pull request #682 from alirezafarvardin/main.
_Update translation (Persian)_
* Merge branch 'main' into main.
* Update bug_report.yaml.
* Update bug_report.yaml.
* Update bug_report.yaml.
* Update bug_report.yaml.
* Update bug_report.yaml.
* Update bug_report.yaml.
* Fink 🐦: update translations.
* Fink 🐦: update translations.
## v1.0.0 (2024-03-18)
#### New
* Add review.
#### Fix
* Isssue with singbox 1.8.9.
* Ios.
* Implementation.
* Test, update to singbox 1.8.9.
* Bug in warp config.
#### Other
* Update release_message.md.
* Update README.md.
* Update README_br.md.
* Update README_ja.md.
* Update README_cn.md.
* Update README_ru.md.
* Update README_ru.md.
* Update README_fa.md.
* Update README_ru.md.
* Update README_ru.md.
* Update README_cn.md.
* Update README_ja.md.
* Update README_br.md.
* Update README.md.
* Update release_message.md.
* Update README.md.
* Fix postServiceClose implementation.
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Fink 🐦: update translations.
* Remove mux.
* Merge branch 'pr/alikhabazian/668-1'
* Resolve qr code permssion issue.
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Merge pull request #668 from alikhabazian/newyear.
_add image field to ConnectionButton_
* Add useImage feild for change image in every newyear and increase quality.
* Add image field to ConnectionButton.
* Update.
* Merge pull request #653 from alirezafarvardin/main.
_Update translations_
* Inlang/manage: add languageTag zh-TW.
* Inlang/manage: add languageTag zh-CN.
* Inlang/manage: add languageTag tr.
* Inlang/manage: add languageTag ru.
* Inlang/manage: add languageTag pt-BR.
* Inlang/manage: add languageTag id.
* Inlang/manage: add languageTag es.
* Inlang/manage: remove languageTag es.
* Inlang/manage: add languageTag es.
* Inlang/manage: remove languageTag zh-CN.
* Inlang/manage: remove languageTag id.
* Inlang/manage: remove languageTag ru.
* Inlang/manage: remove languageTag tr.
* Inlang/manage: remove languageTag es.
* Inlang/manage: remove languageTag zh-TW.
* Inlang/manage: remove languageTag pt-BR.
* Merge branch 'hiddify:main' into main.
* Fink 🐦: update translations.
* Test flight only release.
* Add core grpc server.
## v0.17.12 (2024-03-14)
#### New
* Refactor testflight.
* Add installation dependencies for apple.
* Add ios build process.
* Add Indonesian language.
* Add hiddifycli and resolve all false positve from anti virus, auto exit during installation.
* Add support for flag emoji in proxy names.
* Add version draft.
* Auto replace signed exec.
* Update to singboc 1.8.7.
* Enable tunnel service again, add signing, msix, more log less info.
* Add ipwho.is.
* Use timezone for location detector.
* Add warp fake packet delay, add warp detour, add new ipinfo api.
#### Fix
* Apple release.
* Bug.
* No commit message.
* Release to ios.
* Ios publishing.
* Var.
* Var.
* Vaiable issue.
* Potential fix to issue in some windows?
* Msix package.
* Signing.
* Version.
* Pub get issue?
* Build.
* Flag.
* Ip flag.
* Bug in versioned draft.
* Invalid version string for draft.
* Action bugs.
* Signing.
* Signing.
* Cert?
* Generate Warp Config on iOS.
_+ pod install new packages_
* Msix issue.
* Appimage fixed. issue: #513.
* Name.
* Intro page bug and fakepacket delay bug.
* Exception reporting on failing in getting ip.
* Exception when there is no active profile.
* Ip info.
* Build bug.
* Translation bug, disable signing for pull req.
* Bug in change interface listener.
* Update download paths in release page.
* Logo, add name for hiddify warp sub.
#### Other
* Update.
* Update.
* Update.
* Update.
* Update.
* Disable: permission handler for windows.
* Disable redundent action run for release.
* Merge pull request #647 from hiddify/ios.
_Ios_
* Upload versioned.
* Update.
* Update.
* Update ios release.
* Upload to appstore in macos.
* Test testflight upload.
* Fix name issue.
* Update.
* Update.
* Update.
* Add provisioning profiles.
* Add SingBoxPacketTunnel.
* Update.
* Update.
* Add prereq of ios.
* Allow ci build from all branches.
* Revert changes for test.
* Test disabling system tray.
* A test for possible bug in some windows.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Update signing.
* Downgrade flutter action.
* Merge pull request #621 from hei-hilman/main.
_add new translation (Indonesian)_
* Add indonesian translation.
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Fix qr code scanner.
* Change translation keys.
* Change experimental feature notice.
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Change sidebar stats.
* Add emoji font for flags.
* Use software rendering for windows. may resolve white screen?
* Update README_br.md.
* Update README_ja.md.
* Update README_ru.md.
* Update README_cn.md.
* Refactor config options.
* Merge branch 'be1c1bb580ec039044e8057ae1469153008cdb4d'
* Add reconnect and animations to connection button.
* Add quick settings.
* Update release_message.md.
* Bump Flutter (v3.19) and dependencies.
* Remove redundant logs.
* Change db initialization.
* Remove draft version.
* Make it universal for all os.
* Add versioned draft.
* Simple debug to bug of some windows.
* Update README_fa.md.
* Update README.md.
* Update README.md.
* Update README.md.
* Update README.md.
* Update README.md.
* Update README.md.
* Add Config options import.
* Disable signing.
* Add hide icon from dock on mac.
* Add reconnect alert for config options.
* Refactor preferences.
* Merge pull request #585 from amirsaam/main.
* Update msix.
* Merge pull request #577 from Aryangh1379/Hiddify-develop.
* Merge pull request #572 from Aryangh1379/Hiddify-develop.
_Hiddify develop_
* Forgot to remove -x from !#/bin/bash :)
* Add AppRun parameters - provided a help menu.
* Temporary disable windows service.
* Update README.md.
* Update README_ru.md.
* Update README_cn.md.
* Update README_cn.md.
* Update README_cn.md.
* Update README_ru.md.
* Update README_ru.md.
* Update README_ja.md.
* Update README_fa.md.
* Update README_br.md.
* Merge pull request #532 from mascenaa/main.
_Add README in Portuguese_
* Adding a README in Portuguese.
* Merge pull request #556 from Aryangh1379/Hiddify-develop.
_AppRun file error fixed. AppImage now is usable_
* AppRun file error fixed. AppImage now is usable.
* Merge pull request #549 from pierrot-p/main.
_[PT-BR] inlang: Added missing translations_
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Merge pull request #546 from nya-main/main.
_update translations(CN)_
* Manually repair an entry.
* Inlang: update translations.
* Merge pull request #547 from amirsaam/main.
_macOS AppIcon_
* MacOS AppIcon.
* Add timezone based region detection.
* Url test is only valid for group not a single proxy.
* Potentioal fix for crash in some windows.
* Bump libcore.
* Excluding aab from building draft.
* Remove aab draft build.
* Change warp options.
* Fix Portuguese locale.
* Add build test.
* Update dependencies.
* Change ip error.
* Remove extra warp configs.
* Update README_ru.md.
* Merge pull request #509 from nevazno00/patch-1.
_Update README_ru.md_
* Update README_ru.md.
* Merge pull request #527 from mascenaa/main.
_Add a PT-BR Translate file._
* Add a PT-BR Translate file.
* Merge pull request #508 from kouhe3/zh-cn-i18n-patch-2.
_strings_zh-CN.i18n.json_
* Merge branch 'main' into zh-cn-i18n-patch-2.
* Merge pull request #523 from nya-main/main.
_Update translations_
* Merge branch 'main' into main.
* Merge pull request #528 from KintaMiao/main.
_Update translations_
* Inlang: update translations.
* Inlang: update translations.
* Fix build.
* Add more haptic feedback.
* Zh-cn translate.
* Detailed subscription info.
* Add detailed subscription info.
* Fix test.
* Add ci test.
* Add warp config generator.
* Update changelog.
* Change ip refresh.
* Add auto ip check option.
* Change ip error refresh button.
* Change mapping.
* Fix issue in installing packages in ubuntu.
* Fix connection on desktop.
* Change interval mapping.
* Fix chinese locale.
* Add haptic feedback.
* Format zh-CN.i18n.json And remove duplicate.
* Merge pull request #410 from junlin03/main.
_更新繁體中文翻譯_
* Merge branch 'main' into main.
* Merge pull request #482 from guoard/fix/downlaod_path.
_fix: update download paths in release page_
* Merge pull request #481 from amirsaam/main.
_Bugs in config_option_entity.dart_
* Update config_option_entity.dart.
* Bugs in config_option_entity.dart.
* Change mapping and bug fixes.
* Change icons.
* Improve ping indicator.
* Change service mode choices.
* Fix ip widget directionality.
* Merge branch 'main' into main.
* Inlang: update translations.
## v0.15.8 (2024-02-14)
#### New
* Update icon.
* Add seperated VPN service mode.
* Add some example of new warp configs.
* Update active profile and its ping,
* Change app icon to stable.
* Add unavailble mark, fix: windows release bug.
#### Changes
* Change name to Hiddify.
#### Fix
* Appimage tunnel service bug.
#### Other
* Change ip obscure.
* Improve accessibility.
* Change service error handling.
* Fix connection info.
* Fix widget build conflict.
* Revert build image for appimage to 22.04.
* Update README_cn.md.
* Update README.md.
* Update README.md.
* Update README_ja.md.
* Update README_fa.md.
* Update README_ru.md.
* Update README_ru.md.
* Update README_cn.md.
* Update README_cn.md.
* Update README_ja.md.
* Update README_fa.md.
* Update README.md.
* Merge pull request #454 from amirsaam/main.
_Update iOS Icons_
* AppIcon Update.
* Update iOS Icons.
* Add proxy http adapter.
* Fix android service mode.
* Merge pull request #453 from amirsaam/main.
_Update Makefile_
* Update Makefile.
* Change routing setup.
* Fix connection info ui.
* Make ip private for both footer and sidebar.
* Make ip anonymous.
* Add syncthing ignore files.
* Add desktop active proxy info.
* Add active proxy delay indicator.
* Fix commands.
* Change translation fallback strategy.
* Update CONTRIBUTING.md.
* Merge pull request #439 from amirsaam/main.
_Fix iOS Logger_
* Fix iOS Logger.
## v0.15.6 (2024-02-09)
#### New
* Add macos pkg file and remove zip wrapper.
* Add custom AppRun: need forked distributor.
* Add intro based on user lang and region.
* Hide hidden nodes.
* Move running admin service to core.
* Display go errors.
* Add tunnel service for windows and linux.
* Show groups always on top.
* Change update time when selected.
* Make activated profile always in top.
* Add postfix to name if it is not unique.
* Add link parser and allow custom configs to be imported.
#### Changes
* Use our flutter distrobutor version and downgrade windows version (possible fix of build error)
#### Fix
* Unix copy bug.
* Build linux.
* Dynamic varible in github action.
* Windows?
* Windows build?
* Typo.
* Windows build.
* Appimage build and add make req for linux.
* Service location bug in linux.
* Update of protocol handler.
* Bug in logging go erros.
* Check core before release.
#### Other
* Refactor build.
* Add debug build for windows.
* Rerun windows without cache.
* Add ios connection info.
* Fix ui inconsistency.
* Fix local build commands.
* Fix android bugs.
* Add connection info footer.
* Add ip info fetcher.
* Merge pull request #416 from EbrahimTahernejad/patch-1.
_Make logger global_
* Use shared instance of logs to log.
* Added shared instance for LogsEventHandler.
* Merge pull request #414 from amirsaam/main.
_Log for iOS by @ Akuma_
* Log for iOS by @ Akuma.
* Add ios command client.
* Change make flags.
* Change the name of tunnel service to HiddifyService.
* Make makefile cross platform.
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Add cloudflare warp options.
* Temporary disable app image build.
* Change again to ubuntu 22.04.
* Update ci.yml.
* Disable tunnel service for mac.
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Remove unnecessary dependencies.
* Fix mobile routing behavior.
* Bump java version.
* Update dependencies.
* Fix intro page margin.
* Send panic to sentry.
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Merge pull request #371 from eltociear/add_ja-readme.
_Add Japanese README_
* Add Japanese README.
* Merge pull request #389 from leic4u/patch-1.
_Update README_cn.md_
* Update README_cn.md.
* Update README.md.
* Add mux to experiments && update translations.
## v0.15.4 (2024-01-26)
#### Fix
* Fragment bug.
## v0.15.3 (2024-01-26)
#### New
* Add warp option (experimental)
#### Fix
* Typo.
#### Other
* Bump to singbox 1.8.4, and fix bugs.
* Refactor makefile.
* Update Hiddify Packages.
* Update README_ru.md.
* Update README_cn.md.
* Update README_fa.md.
* Update README.md.
* Update README_fa.md.
* Update to core 0.12.1, singbox 1.8.2.
* Update build.yml.
* Make 1.1.1.1 as default dns server.
* Speed up ping.
* Update libcore.
## v0.14.20 (2024-01-21)
#### Other
* Update feature_request.yaml.
* Update bug_report.yaml.
## v0.14.11 (2024-01-20)
#### New
* Add deb and rpm build.
#### Fix
* Versioning issue in ios singbox platform extension.
* Release bug.
* Release bug.
* Build linux.
* Stats bug in iOS.
* Some bugs in ios.
#### Other
* Merge pull request #351 from amirsaam/main.
_use universal bundleid from base.xconfig_
* Use universal bundleid from base.xconfig.
* Merge pull request #350 from amirsaam/main.
_ios log handler base functionality_
* Log handler base functionality.
_+ fix makefile ios-temp-prepare upgrading pub
+ remove tvOS from libcore local spm
+_
* Add mux options.
* Add mux.
* Update release_message.md.
* Update build.yml.
* Update changelog.
* Update readme.
* Fix ios stats.
* Add reset tunnel option on ios.
* Update build.yml.
* Fix release.
* Fix release.
* FIX: RELEASE BUG.
* Fix release bug in macos.
* Update build.yml.
* Update build.yml.
* Update build.yml.
* Update dependencies.
* Fix not releasing linux packages.
* Merge pull request #347 from amirsaam/main.
_fix connection bug after bundle update_
* Fix connection bug after bundle update.
* Merge pull request #345 from amirsaam/main.
_update to latest itunes connect_
* Update to latest itunes connect.
* Revert changes for swift package.
* Merge pull request #344 from amirsaam/main.
_switch to local spm to load libcore_
* Merge branch 'main' of https://github.com/amirsaam/hiddify-next.
* Merge branch 'hiddify:main' into main.
* Remove tvOS in singbox target.
* Remove tvOS, previously added apple vision for ipad.
* Handle xcode crash.
* Switch to local spm.
* Fix make ios.
* Bumpcore version to v0.11.
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Merge pull request #343 from amirsaam/main.
_url scheme + target dependency + general update_
* Merge branch 'hiddify:main' into main.
* Add url scheme.
* Update Package.resolved.
* Target dependancy + pod update, package resolve.
* Remove hiddify://import/ from export option.
* Merge pull request #342 from amirsaam/main.
_getting libcore from spm, adding landscape mode_
* Merge branch 'main' of https://github.com/amirsaam/hiddify-next.
* Delete pubspec.lock.
* Revert some changers.
_This reverts some of commit dde7c2419a12e0f36976f4c0ff8e66d882ec62ac._
* Update pod, getting libcore from spm, adding landscape mode.
* Change profile options modal.
* Fix infinite sub expire date (#334)
_* Fix infinite sub expire date
* fix expire
* fix build
* refactor
* make it better readable
* Fix infinite sub
* Add test for infinite sub
---------_
* Fix fragment bugs.
* Merge pull request #340 from amirsaam/main.
_fix ui not showing connected after relaunch_
* Fix ui not showing connected after relaunch.
* Merge pull request #338 from amirsaam/main.
_add push notification entitlement_
* Merge branch 'main' of https://github.com/amirsaam/hiddify-next.
* Add config export on ios.
* Fix ios connection status on app restart.
* Add push notification entitlement.
* Fix attempt.
* Fix.
* Fix ci again.
* Fix ci tag matching.
* Fix ci.
* Change logger to print in console.
* Change routing assets order.
* Change options description.
* Fix ci tag pattern.
* Fix ci.
* Change workflows.
* Add missing es translations.
* Inlang: update translations.
* Fix infinite sub traffic.
* Fix bugs.
* Fix modal text alignment.
* Merge pull request #329 from amirsaam/newMain.
_revert landscape mode_
* Revert landscape mode.
* Merge pull request #328 from amirsaam/main.
_remove unnecessary force unwrap, libcore linking add landscape mode_
* Remove unnecessary force unwrap, libcore linking add landscape mode,
* Change ios method error handling.
* Fix bugs.
* Remove custom_lint.
* Add vscode launch config macos designed for ipad.
* Fix ios flutter plugins.
* Fix ios core name.
* Merge pull request #323 from amirsaam/main.
_better fix for vpn connecting_
* Better fix for vpn connecting.
* Merge pull request #321 from amirsaam/main.
_match exportOptions identifiers with project_
* Fixing not connecting to vpn.
* Match exportOptions identifiers with project.
* Merge pull request #319 from amirsaam/main.
_fix vpn profile not being created + changing run to release_
* Fix vpn profile not being created + changing run to release.
* Merge pull request #318 from amirsaam/main.
_ios fix?_
* Ios fix?
* Fix build.
* Fix windows deep link.
* Merge pull request #316 from amirsaam/main.
_Update pubspec.lock_
* Update pubspec.lock.
* Merge pull request #315 from amirsaam/main.
_add back cupertino_http_
* Add back cupertino_http.
* Update.
* Merge branch 'main' of https://github.com/hiddify/hiddify-next.
* Update appcast.
## v0.13.6 (2024-01-07)
#### Other
* Fix build.
* Merge branch 'main' of https://github.com/hiddify/hiddify-next.
* Fix qr scanner links.
* Update changelog.
* Update core (sing-box v1.7.8)
* Update dependencies.
* Remove unused dependencies.
* Refactor service wrappers.
* Update.
* Update ios.
* Change default connection test url.
* Fix android service mode switch.
* Add profile fetch cancel.
* Add update all subscriptions.
* Fix profile update service.
* Inlang: update translations.
* Change app http client.
* Inlang: update translations.
* Fix bugs.
* Add experimental flag to new config options.
* Add connection from lan option.
* Add dns routing option.
* Add bypass lan option.
* Fix profile edit with new url.
* Change tls tricks settings section name.
* Fix db migration bug.
* Bump version.
* Fix minor bugs.
* Remove desktop auto connect.
* Add experimental feature notice.
* Update README.md.
* Update README.md.
* Fix multi instance on windows.
* Inlang: update translations.
* Inlang: update translations.
* Update README_cn.md.
* Update README_cn.md.
_Some proxy software such as clash do not have official Chinese names and use English by default._
* Add experimental flag in settings ui.
* Fix inlang setup.
* Remove robocopy.
* Fix build.
* Fix windows portable again.
* Update changelog.
* Add android high refresh rate support.
* Refactor desktop window management and tray.
* Fix macOS restore from dock.
* Add desktop shortcuts.
## v0.12.3 (2023-12-28)
#### Changes
* Fix inconsistent channel naming.
#### Fix
* Set codec for stream handlers.
* Ios launch bug.
#### Other
* Add Afghanistan region.
* Fix packaging bug.
* Fix windows packaging.
* Fix bugs.
* Change minimum macos version in docs.
* Add version to desktop window.
* [fix]: SettingsPickerDialog pop exception.
* Update ios.
* Ios: add /platform event channel.
* Feat: Added stats stream for ios.
* Feat: Added stats stream for ios.
* Update ios.
* Update ios.
* Update ios.
* Merge branch 'main' of https://github.com/hiddify/hiddify-next.
* Ios update.
## v0.12.2 (2023-12-23)
#### Other
* Remove native http client (temporarily)
* Update dependencies.
* Update core (sing-box v1.7.6)
* Fix bugs.
* Update core (sing-box v1.7.5)
* Change initialization and logging.
## v0.12.1 (2023-12-21)
#### Other
* Fix preferences initialization error.
* Bump android sdk version.
* Fix android service mode.
* Change privacy policy url.
* Update appcast.
## v0.12.0 (2023-12-20)
#### New
* Add support for hysteria and wg.
* Add user-agent like clash sing-box for better compatibility.
* Send all releases to beta by default.
#### Fix
* Bug in windows portable.
* Linux parse.
#### Other
* Add hiddify/iimport schema.
* Fix chinese inlang url.
* Update README_ru.md.
* Update README_cn.md.
* Update README.md.
* Update README.md.
* Update README_ru.md.
* Update README_cn.md.
* Update README.md.
* Update README_fa.md.
* Update README_fa.md.
* Update README_fa.md.
* Update README.md.
* Update changelog.
* Change memory limit on desktop.
* Remove locale name provider.
* Fix service mode.
* Add android dynamic notification.
* Add android stats channel.
* Fix translation generator.
* Add config option reset.
* Add missing routing asset warning.
* Fix text input traversal.
* Add basic d-pad support.
* Fix tray initialization bug.
* Update LICENSE.md.
* Update LICENSE.md.
* Update LICENSE.md.
* Update README_fa.md.
* Update README_fa.md.
* Update README_cn.md.
* Update README_ru.md.
* Update README.md.
* Add preferences migration.
* Fix tray behavior.
* Fix intro routing bug.
* Fix macos build.
* Fix macos name.
* Fix macos icon.
* Update README.md.
* Update README.md.
* Update README.md.
* Update ios.
* Update ios.
* Update ios.
* Merge branch 'main' of https://github.com/hiddify/hiddify-next.
* Fix build.
* Change entrypoint.
* Add TLS trick config options.
* Update ios.
* Update platform interface.
* Merge branch 'main' of https://github.com/hiddify/hiddify-next.
* Update dev-i.yml.
* Update dev-i.yml.
* Update pubspec.yaml.
* Create dev-i.yml.
* Update changelog.
* Update dependencies.
* Update core (singbox v1.7)
* Fix status mapper.
* Refactor.
* Refactor logs.
* Remove unused clash api.
* Update core (singbox 1.7.0-rc.2)
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Refactor router.
* Refactor profiles.
* Update changelog.
* Fix chinese typography bug.
* Add soffchen geo assets.
* Refactor geo assets.
* Update dependencies.
* Bump ci sdk version.
* Bump sdk version.
* Update README.md.
* Update README_fa.md.
* Update README_cn.md.
* Update README_ru.md.
* Update README_ru.md.
* Update README.md.
* Update README.md.
* Update release_message.md.
* Update appcast.
* Merge pull request #189 from jomertix/main.
_Update ru strings_
* Nothing changed strings_tr.i18n.json.
* Nothing changed strings_fa.i18n.json.
* Inlang: update translations.
* Inlang: update translations.
* Update.
## v0.11.1 (2023-11-19)
#### Other
* Fix android manifest.
* Fix documentation.
* Update release_message.md.
## v0.11.0 (2023-11-19)
#### New
* Add ic_launcher for android tv.
* Publish dev release to seperate channel.
* Add winget.
* Add prepare to make file.
#### Fix
* Build-linux-libs.
* Build.
* Naming issue.
* Winget release.
* Action version.
* Winget publish.
* Build error.
* No commit message.
* Build.
* Bug.
* Build.
* Distutils.
* No commit message.
#### Other
* Change default direct dns.
* Revert "new: add ic_launcher for android tv"
_This reverts commit 49bb62c8289d0885a762e01b7f0785690a7d3af7._
* Change ir region rules.
* Merge pull request #179 from betaxab/main.
_Update translations_
* Inlang: update translations.
* Add recommended geo assets.
* Add error handling for geo assets.
* Fix build.
* Add geo assets settings.
* Fix bug in strings_tr.i18n.json.
* Merge pull request #173 from hasankarli/main.
_Update Turkish translations_
* Inlang: update translations.
* Merge pull request #169 from solokot/main.
_Update Russian translation_
* Merge branch 'main' into main.
* Merge pull request #168 from jomertix/main.
_inlang: update translations_
* Inlang: update translations.
* Merge pull request #172 from Locas56227/main.
_Fix and improve Chinese README_
* Fix and improve Chinese README.
* Update build.yml.
* Update appcast.
* Add navigation to system tray.
* Update Russian translation.
_and partially revert ugly inlang changes_
* Change http adapter.
* Add independent dns cache option.
* Fix bottom navigation bar accessibility.
* Update README_ru.md.
* Update README_cn.md.
* Update README_fa.md.
* Update README.md.
* Update release_message.md.
* Update README_ru.md.
* Update README_cn.md.
* Update README_fa.md.
* Update README.md.
* Merge pull request #165 from huajizhige/main.
_Improve translation_
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Update appcast.
* Fix release command.
* Add subscription qr code share.
* Improve qr code scanner ux.
* Fix code typo.
* Ci: ignore appcast.
* Merge pull request #164 from jomertix/main.
_Update ru string_
* Update strings_ru.i18n.json.
_Fix translation_
* Update strings_ru.i18n.json.
_Fix translate_
* Merge pull request #162 from solokot/main.
_Update strings_ru_
* Update strings_ru.
_Fix google translate_
* Merge pull request #161 from Aloxaf/Aloxaf-patch-1.
_fix: build-linux-libs_
* Add sub link share.
* Fix bootstrap bug.
* Add proxy tag dialog.
* Add export config to clipboard.
* Add geoassessts to makefile prepare.
* Merge pull request #155 from solokot/main.
_Update strings_ru_
* Update strings_ru.
* Add service mode and strict route.
* Add basic privilege check.
* Fix ui bugs.
* Remove unnecessary preferences.
* Fix config preferences.
* Update changelog.
* Update core to v0.8.0.
* Fix manual update checker.
* Fix logs page scroll.
* Fix android service restart.
* Fix android service revoke.
* Change toast.
* Fix linting and cleanup.
* Remove execute config as is.
* Update dependencies.
* Update README_cn.md.
* Update README_cn.md.
* Update README_ru.md.
* Update README_cn.md.
* Update README_fa.md.
* Update README.md.
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Merge pull request #138 from huajizhige/main.
_inlang: update translations_
* Inlang: update translations.
* Update.
* Fix.
* Fix.
* Test.
* Merge pull request #137 from huajizhige/patch-1.
_Update README_cn.md_
* Update README_cn.md.
_Improve translation_
* Update README_cn.md.
* Update README_cn.md.
* Update README_ru.md.
* Update README_cn.md.
* Update README_ru.md.
* Update README_fa.md.
* Update README.md.
* Update README.md.
* Fix.
* Update.
* Fix.
* Fix build.
* Add distutils.
* Improve Android TV.
* Update.
* Add.
* Fix appcast url.
* Add appcast.
* Add auto connect on start.
* Merge pull request #123 from Nyar233/main.
_Update translations_
* Inlang: update translations.
* Update release_message.md.
* Update release_message.md.
* Merge pull request #115 from solokot/main.
_Update Russian: fix google translate_
* Update Russian: fix google translate.
* Merge pull request #113 from Nyar233/main.
_inlang: update translations_
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Inlang: update translations.
* Change system tray options.
* Add core mode.
* Add sidebar stats for large screens.
* Update dependencies.
* Change router for different screen size.
* Merge pull request #108 from Hiiirad/patch-1.
_Update auto_translator.py to fix the Path Traversal Vulnerability_
* Update auto_translator.py to fix the Path Traversal Vulnerability.
## v0.10.0 (2023-10-27)
#### New
* Add ios core library to the project.
#### Fix
* Ipa.
#### Other
* Remove reconnect on auto profile update.
* Update changelog.
* Add selected tag for selector outbounds.
* Add core debug flag.
* Add url test delay color.
* Change info logs.
* Delete .github/help/linux/آموزش هیدیفاینکست فارسی لینوکس.desktop.
* Delete .github/help/mac-windows/آموزش هیدیفاینکست فارسی.url.
* Update dependencies.
* Change pre release update checking off.
* Add terms and privacy to about page.
* Add memory limit option.
* Change directory management.
* Comment ios.
* Change app id.
* Merge pull request #98 from GFWFighter/main.
_Initial iOS version_
* Merge pull request #1 from GFWFighter/ios.
_iOS_
* Merge branch 'main' into ios.
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Merge pull request #95 from solokot/main.
_Update Russian_
* Update Russian.
_Mainly fix google translate of new worlds_
* Change logging.
* Change changelog workflow.
* Add russia region.
* Change theme prefs.
* Merge pull request #90 from solokot/main.
_Russian translation: fix some mistakes_
* Russian translation: fix some mistakes.
* Update README.md.
* Update README.md.
* Update README.md.
* Update README.md.
* Update README.md.
* Add rules.
* Update LICENSE.md.
* Inlang: update translations.
* Merge pull request #85 from leic4u/main.
_Update README_cn.md_
* Update README_cn.md.
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Add inlang translations.
* Add inlang project and remove localize.
* Merge pull request #82 from Iam54r1n4/main.
_add inlang translator_
* Update: fr_FR.json.
* Add: french language.
* Add: inlang translation files(incomplete)
* Add: setup inlang translation.
* Merge pull request #74 from lifeindarkside/patch-1.
_Update strings_ru.i18n.json_
* Update strings_ru.i18n.json.
_Update some wrong interpretation_
* Update README_ru.md.
* Update README_cn.md.
* Update README.md.
* First working version.
* Underlying VPN Logic.
* Initialize Packet Tunnel + Config.
* Update Tutorial_For_HiddifyNext_Linux.desktop.
* Update Tutorial_For_HiddifyNext.url.
* Update آموزش هیدیفاینکست فارسی.url.
* Update آموزش هیدیفاینکست فارسی لینوکس.desktop.
* Update README_fa.md.
* Update README_fa.md.
* Update README_ru.md.
* Update README_cn.md.
## v0.9.2 (2023-10-15)
#### Other
* Fix ndk setup.
* Fix android arm bug.
## v0.9.1 (2023-10-15)
#### Other
* Update README_cn.md.
* Update README.md.
* Update README_fa.md.
* Update README.md.
* Update README.md.
* Update README_ru.md.
* Update README_cn.md.
* Update README_fa.md.
* Update README.md.
* Delete docs/file.
* Google play badge.
* Delete docs/google-play-badge1.png.
* Upload google play badge.
* Create file.
* Delete docs/google-play-badge.png.
* Fix ci.
* Change ndk setup.
* Update dependencies.
* Update README_ru.md.
* Update README_cn.md.
* Update README_ru.md.
* Update README_ru.md.
* Change desktop error handling.
* Fix android bugs.
* Update README.md.
* Update README_cn.md.
* Update README_ru.md.
* Update README_ru.md.
* Update README_cn.md.
* Update README_fa.md.
* Update README.md.
* Delete Russian_Flag.png.
* Add Russian flag.
* Delete docs/file.
* Create README_ru.md.
* Delete REAMME_ru.md.
* Create REAMME_ru.md.
* Update README_cn.md.
* Update README_fa.md.
* Update README_fa.md.
* Update README.md.
* Update README_cn.md.
* Update README_cn.md.
* Update README_fa.md.
* Update README.md.
* Update README.md.
* Update file.
* Uplaod a badge for google play.
* Delete google-play-badge.png.
* Add files via upload.
* Create file.
* Delete docs/google-play-badge.png.
* Delete google-play-badge.png.
* Add files via upload.
* Update README_fa.md.
* Update README.md.
* Update README.md.
* Create Chinese README_cn.md.
## v0.8.12 (2023-10-13)
#### Fix
* Typo.
* Bug.
* Release names.
#### Other
* Update readme.
* Update core.
* Update README_fa.md.
* Update README_fa.md.
* Update README.md.
* Merge pull request #56 from solokot/main.
_Improvement of Russian translation_
* Improvement of Russian translation.
_Basically a replacement for machine automatic translation_
* Update README.md.
* Update README_fa.md.
* Update README_fa.md.
* Update README.md.
* Update README_fa.md.
* Update README.md.
* Update README.md.
* Update README_fa.md.
* Update README_fa.md.
* Update README_fa.md.
* Update README.md.
* Update README_fa.md.
* Update README.md.
* Update README_fa.md.
* Update README_fa.md.
* Update README.md.
* Update README_fa.md.
* Update README_fa.md.
* Update README.md.
* Update README.md.
* Update README_fa.md.
* Update README.md.
* Update README.md.
* Update README_fa.md.
* Update README_fa.md.
* Update README_fa.md.
* Fix bugs.
* Change android signing.
* Update README.md.
* Update readme.
* Update contribution guide.
* Update README_fa.md.
* Update README.md.
* Update README_fa.md.
* Update README_fa.md.
* Update release_message.md.
* Update README.md.
* Update README_fa.md.
* Update README_fa.md.
* Update README.md.
* Update README_fa.md.
* Update release template.
## v0.8.11 (2023-10-08)
#### Changes
* Remove auto release message.
## v0.8.10 (2023-10-08)
#### Fix
* Release changelog.
## v0.8.9 (2023-10-08)
#### Fix
* Missing libs.
## v0.8.8 (2023-10-08)
#### Fix
* Release bug.
## v0.8.7 (2023-10-08)
#### Fix
* Release message.
## v0.8.6 (2023-10-08)
#### Fix
* Windows build.
* Build issue.
#### Other
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Update release_message.md.
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Update release_message.md.
* Update README.md.
* Update README_fa.md.
* Delete docs/note.
* Add files via upload.
* Create note.
* Update contribute.md.
* Update README.md.
* Delete assets/images/google-play-badge.png.
* Update README_fa.md.
* Update README.md.
* Update release_message.md.
* Update release_message.md.
* Update release_message.md.
* Fix build.
## v0.8.5 (2023-10-07)
#### Fix
* Bug.
## v0.8.4 (2023-10-07)
#### Fix
* Translate.
## v0.8.3 (2023-10-07)
#### Other
* Add release message and help.
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Fix bugs.
* Update release_message.md.
* Update release_message.md.
* Update README_fa.md.
* Update README.md.
* Update release_message.md.
* Update release_message.md.
* Create release_message.md.
* Add google play badge to assets.
* Update README.md.
* Update README_fa.md.
* Update README_fa.md.
* Update README.md.
* Update README.md.
* Create contribute.md.
* Update README_fa.md.
* Update README.md.
* Update README_fa.md.
* Update README_fa.md.
* Update README.md.
* Update README.md.
* Update README_fa.md.
* Add feature request template.
* Fix issue template.
* Add issue template.
## v0.8.2 (2023-10-07)
#### Fix
* Hysteria2 and some links.
#### Other
* Update README_fa.md.
* Update README_fa.md.
* Update README_fa.md.
* Update README.md.
* Update README.md.
* Update README.md.
* Update README.md.
* Update README.md.
* Update README.md.
* Update README.md.
* Update README.md.
* Update README.md.
* Update README.md.
* Update README.md.
* Update README.md.
* Create README_fa.md.
* Update README.md.
* Update README.md.
* Update README.md.
_Add some features to the readme_
* Add debug export to clipboard.
## v0.8.1 (2023-10-06)
#### New
* Add chinese lang.
#### Fix
* Chinese translation.
#### Other
* Update core 0.5.1.
* Fix floating number sub info header.
* Add russian.
* Add google play descriptions.
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
## v0.8.0 (2023-10-05)
#### New
* Add russian lang.
#### Other
* Add proxy tag sanitization.
* Fix bugs.
* Add ignore app update version.
* Add new protocols to link parser.
* Auto update translations on release.
* Update translation.
* Remove param in ru translation.
## v0.7.2 (2023-10-04)
#### Other
* Fix bugs.
## v0.7.1 (2023-10-03)
#### Other
* Fix log and analytics bugs.
## v0.7.0 (2023-10-03)
#### New
* Add support of some exception panel with zero usage.
#### Other
* Fix translation bug.
* Improve error handling and presentation.
* Add retry for network ops.
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Add local profile.
* Add auto translator.
* Add auto translate.
## v0.6.0 (2023-09-30)
#### Other
* Fix minor bugs.
* Add scheduled profile update.
* Update dependencies.
* Refactor profile details page.
## v0.5.11 (2023-09-22)
#### Other
* Fix android bundle abi.
* Bump core version.
## v0.5.10 (2023-09-22)
#### Other
* Fix minor bugs.
* Fix profile update bug.
## v0.5.9 (2023-09-22)
#### Other
* Add build number.
## v0.5.8 (2023-09-22)
#### New
* Add crashlytics.
* Add support for base64 sublink for header from content.
* Add profile headers from comments in response! good for hosting in github and show information.
* Automated version release.
* Send release versions only to play market add pre-release version.
#### Changes
* Change invalid dns 235.5.5.5 to 8.8.8.8.
#### Fix
* Improve routing accessibility and logs.
* Minor bugs.
* Prefs persistence.
* Crashlytics.
* App update url.
* Small profiles.
* Makefile vars.
* Adaptive icon.
* Pre-release.
* Typo in adaptive icon.
* If .dev is exist in the version do not show update needed.
* Keep the link as it is. fix the issue with &
* Dependency issue.
* Remove extra print.
* Bug in get headers from body.
* Bug ini ci to google play.
* Tag version issue.
* Ci bug.
* Remove comments.
* Bug.
#### Other
* Fix ci.
* Fix false-positive error reports.
* Change build setup.
* Fix minor bugs.
* Refactor app update.
* Fix sentry dart plugin upload.
* Fix ci debug symbols upload.
* Add sentry provider observer.
* Ci: add sentry debug info upload.
* Update dependencies and general fixes.
* Chore: bump agp version.
* Ci: fix env.
* Ci: add dsn env.
* Feat: add region and terms to intro.
* Update ci.yml.
* Build: add sentry dsn.
* Feat: add intro screen.
* Feat: add sentry.
* Ci: bump macos version.
* Feat: update profile when adding preexisting url.
* Publish draft even with error.
* Update version of core.
* Merge branch 'main' of hiddify-github:hiddify/hiddify-next.
* Add firebase.
* Update translation.
* Refactor: version presentation.
* Perf: improve header parser.
* Feat: remove check for updates in market releases.
* Better manage the market release.
* Update.
* Merge branch 'main' of https://github.com/hiddify/hiddify-next.
* Improve accessability.
* Fix per-app proxy selection.
* Add android per-app proxy.
* Add basic flavors.
* Update Makefile.
* Update ci.yml.
* Update ci.yml.
* Update Makefile.
* Update ci.yml.
* Update ci.yml.
* Update README.md.
* Add accessability semantics.
* Add support for fragment in the url.
## v0.1.0 (2023-09-11)
#### New
* Add signing to android.
* Add android universal build also.
* Add change in network entitlements.
* Change logo icon to next.
* Add cache for speed up build process.
* Add windows portable version.
* Add libclash.
* Add as draft release.
* Make better ci and building applications.
#### Changes
* Change windows logo.
* Change macos build to flutter_distributor.
* Remove x86 builds since flutter does not support.
* Add x64 to the name.
* Update makefile.
#### Fix
* Space bugs in some panels.
* Aab.
* Aab build.
* Universal sign.
* KeystoreProperties.
* Name issue.
* Revert package name change.
* Name.
* Geosite download.
* Windows portable bug.
* Change name bug.
* Setup exe files.
* Libclash.so.
* Linux AppImage.
* Error.
* Category in linux.
* Add fuse for linux.
* Icon.
* Linux logo.
* Android.
* Makefile error.
#### Other
* Release v0.1.0.
* Fix ci build.
* Update ci.
* Add core version.
* Fix barrel file.
* Change proxies lifecycle.
* Add service restart.
* Remove notification service.
* Change android notification permission.
* Add android service restart.
* Change mark new profile active.
* Handle unlimited.
* Update upload download link stats.
* Update Translations.
* Remove // TODO add content disposition parsing.
* Add content-disposition for profile title.
* Update README.md.
* Add hysteria2.
* Fix android build connection.
* Add android connection shortcut.
* Add desktop autostart.
* Add android boot receiver.
* Add android proxy service.
* Add android battery optimizations settings.
* Change sharedpreferences to unify with android.
* Add vclibs.
* Update dependencies.
* Add submodule.
* Fix translation code gen.
* Change prefs.
* Change default config options.
* Remove string casing.
* Update ci.yml.
* Remove caching.
* Change core prefs to use code generation.
* Fix custom lint.
* Fix general issues.
* Remove vclibs.
* Update README.md.
* Fix blank screen.
* Add proxies sort.
* Refactor preferences.
* Update dependencies.
* Add more config options to settings.
* Add tun implementation option.
* Add android power manager.
* Add android quick tile.
* Fix macos dependencies.
* Fix mac build.
* Fix build.
* Change system tray icon.
* Fix riverpod code generation.
* Remove unnecessary config options.
* Add accessability semantics.
* Update dependencies.
* Add config options.
* Add pref utilities.
* Add stats overview.
* Update Translations.
* Fix android outbounds view.
* Remove unnecessary options.
* Change proxies flow.
* Add android command client support.
* Update README.md.
* Add status command receiver.
* Add hiddify deeplink.
* Add macos deeplink support.
* Add singbox deeplink.
* Change error prompts.
* Fix url parser.
* Remove unnecessary prefs.
* Update dependencies.
* Make AppImage zipped for preserving permission in linux.
* Add user agent.
* Fix uri launch.
* Update ci flutter version.
* Fix macos silent start.
* Change proxies page.
* Fix desktop connection error msg.
* Add button tooltips.
* Fix logging.
* Create dependabot.yml.
* Create CODE_OF_CONDUCT.md.
* Fix aab.
* Add aab file.
* Change windows-portable name to HiddifyNext-portable.
* Add debug mode.
* Add misc settings ui.
* Remote unnecessary logs.
* Add misc preferences.
* Add directory options.
* Fix linux build.
* Merge branch 'main' of https://github.com/hiddify/hiddify-next.
* Fix android builds.
* Fix android splash screen.
* Update icons.
* Fix windows executable build.
* Remove unnecessary build steps.
* Remove build number from appbar.
* Update readme.
* Change desktop directories.
* Remove desktop notifications.
* Force same version code for all platforms.
* Add more logs.
* Add log timestamp.
* Update icons.
* Remove drawer branding.
* Add download section in readme.
* Fix name of universal apk.
* Fix order.
* Update readme.
* Update logging.
* Update geo assets url.
* Change linux directories.
* Update icon.
* Update icon.
* Update logo for all platforms.
* Revert name in macos.
* Temporary disable app sandbox.
* Change name.
* Update Release.entitlements to fix binding issue.
* Merge pull request #5 from evstegneych/main.
_add macos option_
* Add macos option.
* Update ci flutter version.
* Update kotlin version.
* Update other dependencies.
* Update dependencies.
* Update flutter version.
* Update LICENSE.md.
* Add build option for ios but not tested.
* Return: build for all.
* Fix build for macos.
* Fix ci.
* Migrate to singbox.
* Fix routing.
* Fix connection button text casing.
* Add update checking.
* Add separate page for clash overrides.
* Add version number to appbar.
* Add more icons.
* Add sort limited profiles last.
* Fix profile sort icon.
* Fix profile traffic ratio.
* Add profiles sort option.
* Refactor profile addition flow.
* Add extra profile metadata.
* Fix linux deep link service.
* Refactor profile tile.
* Add locale based font.
* Fix linux startup.
* Update dependencies.
* Add about page.
* Fix linux notifications.
* Build all.
* Hard coding.
* Add png.
* Update ci.yml.
* Update ci.yml.
* Update ci.yml.
* Update ci.yml.
* Update ci.yml.
* Update ci.yml.
* Update ci.yml.
* Update ci.yml.
* Update Makefile.
* Update ci.yml.
* Update Makefile.
* Update ci.yml.
* Update ci.yml.
* Update Makefile.
* Update ci.yml.
* Update Makefile.
* Fix makefile.
* Fix actions.
* Fix actions.
* Fix actions.
* Update build setup.
* Merge branch 'main' of https://github.com/hiddify/hiddify-next.
* Create LICENSE.md.
* Add core submodule.
* Remove core libs.
* Update Makefile.
* Update Makefile.
* Remove c install.
* Update make.
* Merge branch 'main' of https://github.com/hiddify/hiddify-next.
* Add Persian font.
* Update dependencies.
* Update to libclash.
* Add cache.
* Add: new action.
* Add write permission.
* Fix.
* Modify.
* Fix.
* Update.
* Fix android build.
* Fix code gen bug.
* Update ci.yml.
* Update ci.yml.
* Fix CI.
* Fix CI.
* Merge branch 'main' of https://github.com/hiddify/hiddify-next.
* Update ci.yml.
* Update ci.yml.
* Fix CI.
* Update ci.yml.
* Update ci.yml.
* Add CI.
* Add silent start for desktop.
* Update readme.
* Add headless mode to desktop.
* Update dependencies.
* Add distribution setup for windows.
* Add Farsi(fa) language.
* Merge branch 'main' of https://github.com/hiddify/hiddify-next.
* Initial commit.
* Initial.
================================================
FILE: LICENSE.md
================================================
# Hiddify Extended GNU General Public License v3
The Hiddify project is licensed under GPL v3, with the following additional conditions in accordance with GPL v3 Section 7. Failure to comply with these terms may result in requests to app stores to remove or restrict access to your app.
# Additional Conditions to GPL v3:
1. **Source Code Availability:** If you use any part of this code, you must publish your source code on GitHub as a fork of the Hiddify repository and keep it up-to-date with any published app releases. Your repository should be shown as a fork of https://github.com/hiddify/hiddify-app .
2. **Automated Release:** All releases must be made using GitHub Actions.
3. **Attribution:** You must give appropriate credit to Hiddify and https://github.com/hiddify/hiddify-app, link to the original license, and document any changes you have made in Readme.
4. **No Malware:** Adding any malware to the app is strictly prohibited.
5. **Naming and Interface Restrictions:** You are not allowed to publish the app on any app store (e.g., AppStore, Google Play, F-Droid, Microsoft) with a name or user interface that closely resembles Hiddify (e.g., names like Hiddify, Hidy*, Hiddy*, *Ify or similar UI are prohibited).
6. **NonCommercial Use Only:** You may not use this material for commercial purposes, including selling and advertising, without prior written consent.
7. **ShareAlike Requirement:** If you remix, transform, or build upon the material, you must distribute your contributions under this same license as an open-source fork of https://github.com/hiddify/hiddify-app .
GNU General Public License
==========================
_Version 3, 29 June 2007_
_Copyright © 2007 Free Software Foundation, Inc. <<http://fsf.org/>>_
Everyone is permitted to copy and distribute verbatim copies of this license
document, but changing it is not allowed.
## Preamble
The GNU General Public License is a free, copyleft license for software and other
kinds of works.
The licenses for most software and other practical works are designed to take away
your freedom to share and change the works. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change all versions of a
program--to make sure it remains free software for all its users. We, the Free
Software Foundation, use the GNU General Public License for most of our software; it
applies also to any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not price. Our General
Public Licenses are designed to make sure that you have the freedom to distribute
copies of free software (and charge for them if you wish), that you receive source
code or can get it if you want it, that you can change the software or use pieces of
it in new free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you these rights or
asking you to surrender the rights. Therefore, you have certain responsibilities if
you distribute copies of the software, or if you modify it: responsibilities to
respect the freedom of others.
For example, if you distribute copies of such a program, whether gratis or for a fee,
you must pass on to the recipients the same freedoms that you received. You must make
sure that they, too, receive or can get the source code. And you must show them these
terms so they know their rights.
Developers that use the GNU GPL protect your rights with two steps: **(1)** assert
copyright on the software, and **(2)** offer you this License giving you legal permission
to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains that there is
no warranty for this free software. For both users' and authors' sake, the GPL
requires that modified versions be marked as changed, so that their problems will not
be attributed erroneously to authors of previous versions.
Some devices are designed to deny users access to install or run modified versions of
the software inside them, although the manufacturer can do so. This is fundamentally
incompatible with the aim of protecting users' freedom to change the software. The
systematic pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we have designed
this version of the GPL to prohibit the practice for those products. If such problems
arise substantially in other domains, we stand ready to extend this provision to
those domains in future versions of the GPL, as needed to protect the freedom of
users.
Finally, every program is threatened constantly by software patents. States should
not allow patents to restrict development and use of software on general-purpose
computers, but in those that do, we wish to avoid the special danger that patents
applied to a free program could make it effectively proprietary. To prevent this, the
GPL assures that patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and modification follow.
## TERMS AND CONDITIONS
### 0. Definitions
“This License” refers to version 3 of the GNU General Public License.
“Copyright” also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
“The Program” refers to any copyrightable work licensed under this
License. Each licensee is addressed as “you”. “Licensees” and
“recipients” may be individuals or organizations.
To “modify” a work means to copy from or adapt all or part of the work in
a fashion requiring copyright permission, other than the making of an exact copy. The
resulting work is called a “modified version” of the earlier work or a
work “based on” the earlier work.
A “covered work” means either the unmodified Program or a work based on
the Program.
To “propagate” a work means to do anything with it that, without
permission, would make you directly or secondarily liable for infringement under
applicable copyright law, except executing it on a computer or modifying a private
copy. Propagation includes copying, distribution (with or without modification),
making available to the public, and in some countries other activities as well.
To “convey” a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through a computer
network, with no transfer of a copy, is not conveying.
An interactive user interface displays “Appropriate Legal Notices” to the
extent that it includes a convenient and prominently visible feature that **(1)**
displays an appropriate copyright notice, and **(2)** tells the user that there is no
warranty for the work (except to the extent that warranties are provided), that
licensees may convey the work under this License, and how to view a copy of this
License. If the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
### 1. Source Code
The “source code” for a work means the preferred form of the work for
making modifications to it. “Object code” means any non-source form of a
work.
A “Standard Interface” means an interface that either is an official
standard defined by a recognized standards body, or, in the case of interfaces
specified for a particular programming language, one that is widely used among
developers working in that language.
The “System Libraries” of an executable work include anything, other than
the work as a whole, that **(a)** is included in the normal form of packaging a Major
Component, but which is not part of that Major Component, and **(b)** serves only to
enable use of the work with that Major Component, or to implement a Standard
Interface for which an implementation is available to the public in source code form.
A “Major Component”, in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system (if any) on which
the executable work runs, or a compiler used to produce the work, or an object code
interpreter used to run it.
The “Corresponding Source” for a work in object code form means all the
source code needed to generate, install, and (for an executable work) run the object
code and to modify the work, including scripts to control those activities. However,
it does not include the work's System Libraries, or general-purpose tools or
generally available free programs which are used unmodified in performing those
activities but which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for the work, and
the source code for shared libraries and dynamically linked subprograms that the work
is specifically designed to require, such as by intimate data communication or
control flow between those subprograms and other parts of the work.
The Corresponding Source need not include anything that users can regenerate
automatically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same work.
### 2. Basic Permissions
All rights granted under this License are granted for the term of copyright on the
Program, and are irrevocable provided the stated conditions are met. This License
explicitly affirms your unlimited permission to run the unmodified Program. The
output from running a covered work is covered by this License only if the output,
given its content, constitutes a covered work. This License acknowledges your rights
of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey, without
conditions so long as your license otherwise remains in force. You may convey covered
works to others for the sole purpose of having them make modifications exclusively
for you, or provide you with facilities for running those works, provided that you
comply with the terms of this License in conveying all material for which you do not
control copyright. Those thus making or running the covered works for you must do so
exclusively on your behalf, under your direction and control, on terms that prohibit
them from making any copies of your copyrighted material outside their relationship
with you.
Conveying under any other circumstances is permitted solely under the conditions
stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
### 3. Protecting Users' Legal Rights From Anti-Circumvention Law
No covered work shall be deemed part of an effective technological measure under any
applicable law fulfilling obligations under article 11 of the WIPO copyright treaty
adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention
of such measures.
When you convey a covered work, you waive any legal power to forbid circumvention of
technological measures to the extent such circumvention is effected by exercising
rights under this License with respect to the covered work, and y
gitextract_h090yf1s/
├── .gitchangelog.rc
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yaml
│ │ ├── config.yml
│ │ └── feature_request.yaml
│ ├── auto_translator.py
│ ├── change_version.sh
│ ├── dependabot.yml
│ ├── release_message.md
│ ├── sync_translate.sh
│ └── workflows/
│ ├── add_signed_microsft.yml
│ ├── build.yml
│ ├── ci.yml
│ ├── release.yml
│ ├── stale.yml
│ └── winget.yml
├── .gitignore
├── .gitmodules
├── .metadata
├── .prettierrc
├── .release_notes.tpl
├── .stignore
├── .vscode/
│ ├── extensions.json
│ ├── launch.json
│ └── settings.json
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Dockerfile
├── HISTORY.md
├── LICENSE.md
├── Makefile
├── README.md
├── README_br.md
├── README_cn.md
├── README_fa.md
├── README_ja.md
├── README_ru.md
├── analysis_options.yaml
├── android/
│ ├── .gitignore
│ ├── .stignore
│ ├── app/
│ │ ├── build.gradle
│ │ ├── libs/
│ │ │ └── .gitkeep
│ │ └── src/
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── aidl/
│ │ │ │ └── com/
│ │ │ │ └── hiddify/
│ │ │ │ └── hiddify/
│ │ │ │ ├── IService.aidl
│ │ │ │ └── IServiceCallback.aidl
│ │ │ ├── kotlin/
│ │ │ │ └── com/
│ │ │ │ └── hiddify/
│ │ │ │ └── hiddify/
│ │ │ │ ├── ActiveGroupsChannel.kt
│ │ │ │ ├── Application.kt
│ │ │ │ ├── EventHandler.kt
│ │ │ │ ├── GroupsChannel.kt
│ │ │ │ ├── LogHandler.kt
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── MethodHandler.kt
│ │ │ │ ├── PlatformSettingsHandler.kt
│ │ │ │ ├── Settings.kt
│ │ │ │ ├── ShortcutActivity.kt
│ │ │ │ ├── StatsChannel.kt
│ │ │ │ ├── bg/
│ │ │ │ │ ├── AppChangeReceiver.kt
│ │ │ │ │ ├── BootReceiver.kt
│ │ │ │ │ ├── BoxService.kt
│ │ │ │ │ ├── Bugs.kt
│ │ │ │ │ ├── DefaultNetworkListener.kt
│ │ │ │ │ ├── DefaultNetworkMonitor.kt
│ │ │ │ │ ├── LocalResolver.kt
│ │ │ │ │ ├── PlatformInterfaceWrapper.kt
│ │ │ │ │ ├── ProxyService.kt
│ │ │ │ │ ├── ServiceBinder.kt
│ │ │ │ │ ├── ServiceConnection.kt
│ │ │ │ │ ├── ServiceNotification.kt
│ │ │ │ │ ├── TileService.kt
│ │ │ │ │ └── VPNService.kt
│ │ │ │ ├── constant/
│ │ │ │ │ ├── Action.kt
│ │ │ │ │ ├── Alert.kt
│ │ │ │ │ ├── PerAppProxyMode.kt
│ │ │ │ │ ├── ServiceMode.kt
│ │ │ │ │ ├── SettingsKey.kt
│ │ │ │ │ ├── Status.kt
│ │ │ │ │ └── bugs.kt
│ │ │ │ ├── ktx/
│ │ │ │ │ ├── Continuations.kt
│ │ │ │ │ └── Wrappers.kt
│ │ │ │ └── utils/
│ │ │ │ ├── CommandClient.kt
│ │ │ │ ├── GrpcProvider.kt
│ │ │ │ └── OutboundMapper.kt
│ │ │ ├── protos/
│ │ │ │ ├── extension/
│ │ │ │ │ ├── extension.proto
│ │ │ │ │ └── extension_service.proto
│ │ │ │ └── v2/
│ │ │ │ ├── config/
│ │ │ │ │ └── route_rule.proto
│ │ │ │ ├── hcommon/
│ │ │ │ │ └── common.proto
│ │ │ │ ├── hcore/
│ │ │ │ │ ├── hcore.proto
│ │ │ │ │ ├── hcore_service.proto
│ │ │ │ │ └── tunnelservice/
│ │ │ │ │ ├── tunnel.proto
│ │ │ │ │ └── tunnel_service.proto
│ │ │ │ ├── hello/
│ │ │ │ │ ├── hello.proto
│ │ │ │ │ └── hello_service.proto
│ │ │ │ ├── hiddifyoptions/
│ │ │ │ │ └── hiddify_options.proto
│ │ │ │ └── profile/
│ │ │ │ ├── profile.proto
│ │ │ │ └── profile_service.proto
│ │ │ └── res/
│ │ │ ├── drawable/
│ │ │ │ ├── android12splash.xml
│ │ │ │ ├── ic_banner_foreground.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── ic_launcher_foreground.xml
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-v21/
│ │ │ │ └── launch_background.xml
│ │ │ ├── mipmap-anydpi-v26/
│ │ │ │ ├── ic_banner.xml
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ ├── values/
│ │ │ │ ├── colors.xml
│ │ │ │ ├── ic_banner_background.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ ├── values-night/
│ │ │ │ └── styles.xml
│ │ │ ├── values-night-v31/
│ │ │ │ └── styles.xml
│ │ │ ├── values-v31/
│ │ │ │ └── styles.xml
│ │ │ └── xml/
│ │ │ ├── network_security_config.xml
│ │ │ └── shortcuts.xml
│ │ └── profile/
│ │ └── AndroidManifest.xml
│ ├── build.gradle
│ ├── gradle/
│ │ └── wrapper/
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ └── settings.gradle
├── appcast.xml
├── assets/
│ ├── core/
│ │ └── .gitkeep
│ ├── fonts/
│ │ └── emoji_source.txt
│ ├── images/
│ │ └── convert_icon.sh
│ └── translations/
│ ├── ar.i18n.json
│ ├── en.i18n.json
│ ├── es.i18n.json
│ ├── fa.i18n.json
│ ├── fr.i18n.json
│ ├── id.i18n.json
│ ├── pt-BR.i18n.json
│ ├── ru.i18n.json
│ ├── tr.i18n.json
│ ├── zh-CN.i18n.json
│ └── zh-TW.i18n.json
├── build.yaml
├── dependencies.properties
├── devtools_options.yaml
├── ios/
│ ├── .gitignore
│ ├── .stignore
│ ├── Base.xcconfig
│ ├── Flutter/
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ └── Release.xcconfig
│ ├── Frameworks/
│ │ └── .gitkeep
│ ├── HiddifyPacketTunnel/
│ │ ├── HiddifyPacketTunnel.entitlements
│ │ ├── Info.plist
│ │ ├── Logger.swift
│ │ ├── PacketTunnelProvider.swift
│ │ ├── PrivacyInfo.xcprivacy
│ │ ├── SingBox/
│ │ │ ├── Extension+RunBlocking.swift
│ │ │ ├── ExtensionPlatformInterface.swift
│ │ │ ├── ExtensionProvider.swift
│ │ │ └── SingBox.swift
│ │ └── TrafficReader.swift
│ ├── Local Packages/
│ │ └── Package.swift
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── LaunchBackground.imageset/
│ │ │ │ └── Contents.json
│ │ │ └── LaunchImage.imageset/
│ │ │ ├── Contents.json
│ │ │ └── README.md
│ │ ├── Base.lproj/
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Extensions/
│ │ │ └── Bundle+Properties.swift
│ │ ├── Handlers/
│ │ │ ├── ActiveGroupsEventHandler.swift
│ │ │ ├── AlertsEventHandler.swift
│ │ │ ├── FileMethodHandler.swift
│ │ │ ├── GroupsEventHandler.swift
│ │ │ ├── LogsEventHandler.swift
│ │ │ ├── MethodHandler.swift
│ │ │ ├── PlatformMethodHandler.swift
│ │ │ ├── StatsEventHandler.swift
│ │ │ └── StatusEventHandler.swift
│ │ ├── Info.plist
│ │ ├── PrivacyInfo.xcprivacy
│ │ ├── Runner-Bridging-Header.h
│ │ ├── Runner.entitlements
│ │ └── VPN/
│ │ ├── Helpers/
│ │ │ └── Stored.swift
│ │ ├── VPNConfig.swift
│ │ └── VPNManager.swift
│ ├── Runner.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ ├── HiddifyPacketTunnel.xcscheme
│ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
│ ├── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── Shared/
│ │ ├── CommandClient.swift
│ │ ├── FilePath.swift
│ │ └── Outbound.swift
│ ├── exportOptions.plist
│ └── packaging/
│ └── ios/
│ └── make_config.yaml
├── lib/
│ ├── bootstrap.dart
│ ├── core/
│ │ ├── analytics/
│ │ │ ├── analytics_controller.dart
│ │ │ ├── analytics_filter.dart
│ │ │ └── analytics_logger.dart
│ │ ├── app_info/
│ │ │ └── app_info_provider.dart
│ │ ├── db/
│ │ │ ├── converters/
│ │ │ │ └── duration_converter.dart
│ │ │ ├── db.dart
│ │ │ ├── db.steps.dart
│ │ │ ├── provider/
│ │ │ │ └── db_providers.dart
│ │ │ └── schemas/
│ │ │ └── db/
│ │ │ ├── drift_schema_v1.json
│ │ │ ├── drift_schema_v2.json
│ │ │ ├── drift_schema_v3.json
│ │ │ ├── drift_schema_v4.json
│ │ │ └── drift_schema_v5.json
│ │ ├── directories/
│ │ │ └── directories_provider.dart
│ │ ├── haptic/
│ │ │ └── haptic_service.dart
│ │ ├── http_client/
│ │ │ ├── dio_http_client.dart
│ │ │ └── http_client_provider.dart
│ │ ├── localization/
│ │ │ ├── locale_extensions.dart
│ │ │ ├── locale_preferences.dart
│ │ │ └── translations.dart
│ │ ├── logger/
│ │ │ ├── custom_logger.dart
│ │ │ ├── logger.dart
│ │ │ └── logger_controller.dart
│ │ ├── model/
│ │ │ ├── app_info_entity.dart
│ │ │ ├── constants.dart
│ │ │ ├── directories.dart
│ │ │ ├── environment.dart
│ │ │ ├── failures.dart
│ │ │ ├── optional_range.dart
│ │ │ └── region.dart
│ │ ├── notification/
│ │ │ └── in_app_notification_controller.dart
│ │ ├── preferences/
│ │ │ ├── actions_at_closing.dart
│ │ │ ├── general_preferences.dart
│ │ │ ├── preferences_migration.dart
│ │ │ └── preferences_provider.dart
│ │ ├── router/
│ │ │ ├── adaptive_layout/
│ │ │ │ ├── my_adaptive_layout.dart
│ │ │ │ └── shell_route_action.dart
│ │ │ ├── bottom_sheets/
│ │ │ │ ├── bottom_sheets_notifier.dart
│ │ │ │ └── widgets/
│ │ │ │ ├── auto_apps_selection_modal.dart
│ │ │ │ └── quick_settings_modal.dart
│ │ │ ├── deep_linking/
│ │ │ │ ├── my_app_links.dart
│ │ │ │ └── url_protocol/
│ │ │ │ ├── README_url_protocol.md
│ │ │ │ ├── api.dart
│ │ │ │ ├── protocol.dart
│ │ │ │ ├── web_url_protocol.dart
│ │ │ │ └── windows_protocol.dart
│ │ │ ├── dialog/
│ │ │ │ ├── dialog_notifier.dart
│ │ │ │ └── widgets/
│ │ │ │ ├── action_at_closing_dialog.dart
│ │ │ │ ├── confirmation_dialog.dart
│ │ │ │ ├── custom_alert_dialog.dart
│ │ │ │ ├── experimental_feature_notice.dart
│ │ │ │ ├── free_profile_consent_dialog.dart
│ │ │ │ ├── new_version_dialog.dart
│ │ │ │ ├── no_active_profile_dialog.dart
│ │ │ │ ├── ok_dialog.dart
│ │ │ │ ├── proxy_info_dialog.dart
│ │ │ │ ├── save_dialog.dart
│ │ │ │ ├── setting_checkbox_dialog.dart
│ │ │ │ ├── setting_input_dialog.dart
│ │ │ │ ├── setting_picker_dialog.dart
│ │ │ │ ├── setting_radio_dialog.dart
│ │ │ │ ├── setting_slider_dialog.dart
│ │ │ │ ├── setting_text_dialog.dart
│ │ │ │ ├── sort_profiles_dialog.dart
│ │ │ │ ├── unknown_domains_warning_dialog.dart
│ │ │ │ ├── warp_license_dialog.dart
│ │ │ │ └── window_closing_dialog.dart
│ │ │ └── go_router/
│ │ │ ├── go_router_notifier.dart
│ │ │ ├── helper/
│ │ │ │ ├── active_breakpoint_notifier.dart
│ │ │ │ ├── custom_transition.dart
│ │ │ │ └── popup_count_notifier.dart
│ │ │ ├── refresh_listenable.dart
│ │ │ └── routing_config_notifier.dart
│ │ ├── theme/
│ │ │ ├── app_theme.dart
│ │ │ ├── app_theme_mode.dart
│ │ │ ├── theme_extensions.dart
│ │ │ └── theme_preferences.dart
│ │ ├── utils/
│ │ │ ├── exception_handler.dart
│ │ │ ├── ffi_utils.dart
│ │ │ ├── ip_utils.dart
│ │ │ ├── json_converters.dart
│ │ │ ├── laststeam.dart
│ │ │ ├── preferences_utils.dart
│ │ │ └── throttler.dart
│ │ └── widget/
│ │ ├── adaptive_icon.dart
│ │ ├── adaptive_menu.dart
│ │ ├── animated_text.dart
│ │ ├── animated_visibility.dart
│ │ ├── shimmer_skeleton.dart
│ │ ├── skeleton_widget.dart
│ │ ├── spaced_list_widget.dart
│ │ └── tip_card.dart
│ ├── features/
│ │ ├── about/
│ │ │ └── widget/
│ │ │ └── about_page.dart
│ │ ├── app/
│ │ │ └── widget/
│ │ │ └── app.dart
│ │ ├── app_update/
│ │ │ ├── data/
│ │ │ │ ├── app_update_data_providers.dart
│ │ │ │ ├── app_update_repository.dart
│ │ │ │ └── github_release_parser.dart
│ │ │ ├── model/
│ │ │ │ ├── app_update_failure.dart
│ │ │ │ └── remote_version_entity.dart
│ │ │ └── notifier/
│ │ │ ├── app_update_notifier.dart
│ │ │ └── app_update_state.dart
│ │ ├── auto_start/
│ │ │ └── notifier/
│ │ │ └── auto_start_notifier.dart
│ │ ├── common/
│ │ │ ├── custom_text_scroll.dart
│ │ │ ├── general_pref_tiles.dart
│ │ │ ├── qr_code_dialog.dart
│ │ │ └── qr_code_scanner_screen.dart
│ │ ├── connection/
│ │ │ ├── data/
│ │ │ │ ├── connection_data_providers.dart
│ │ │ │ └── connection_repository.dart
│ │ │ ├── model/
│ │ │ │ ├── connection_failure.dart
│ │ │ │ └── connection_status.dart
│ │ │ ├── notifier/
│ │ │ │ └── connection_notifier.dart
│ │ │ └── widget/
│ │ │ └── connection_wrapper.dart
│ │ ├── deep_link/
│ │ │ └── notifier/
│ │ │ └── deep_link_notifier.dart
│ │ ├── home/
│ │ │ └── widget/
│ │ │ ├── connection_button.dart
│ │ │ ├── empty_profiles_home_body.dart
│ │ │ ├── home_page.dart
│ │ │ ├── new_con_button.dart
│ │ │ └── new_connection_button.dart
│ │ ├── intro/
│ │ │ └── widget/
│ │ │ └── intro_page.dart
│ │ ├── log/
│ │ │ ├── data/
│ │ │ │ ├── log_data_providers.dart
│ │ │ │ ├── log_parser.dart
│ │ │ │ ├── log_path_resolver.dart
│ │ │ │ └── log_repository.dart
│ │ │ ├── model/
│ │ │ │ ├── log_entity.dart
│ │ │ │ ├── log_failure.dart
│ │ │ │ └── log_level.dart
│ │ │ └── overview/
│ │ │ ├── logs_overview_notifier.dart
│ │ │ ├── logs_overview_state.dart
│ │ │ └── logs_page.dart
│ │ ├── per_app_proxy/
│ │ │ ├── data/
│ │ │ │ ├── app_proxy_data_source.dart
│ │ │ │ ├── auto_selection_repository.dart
│ │ │ │ ├── auto_selection_repository_provider.dart
│ │ │ │ └── selected_data_provider.dart
│ │ │ ├── model/
│ │ │ │ ├── app_package_info.dart
│ │ │ │ ├── per_app_proxy_backup.dart
│ │ │ │ ├── per_app_proxy_mode.dart
│ │ │ │ └── pkg_flag.dart
│ │ │ └── overview/
│ │ │ ├── per_app_proxy_loading_notifier.dart
│ │ │ ├── per_app_proxy_notifier.dart
│ │ │ ├── per_app_proxy_page.dart
│ │ │ └── per_app_proxy_service_notifier.dart
│ │ ├── platform_specific/
│ │ │ └── android_quick_settings_tile.dart
│ │ ├── profile/
│ │ │ ├── add/
│ │ │ │ ├── add_profile_modal.dart
│ │ │ │ ├── model/
│ │ │ │ │ └── free_profiles_model.dart
│ │ │ │ └── widgets/
│ │ │ │ ├── fix_btn.dart
│ │ │ │ ├── fix_btns.dart
│ │ │ │ ├── free_btn.dart
│ │ │ │ ├── free_btns.dart
│ │ │ │ ├── loading.dart
│ │ │ │ ├── nav_bar.dart
│ │ │ │ └── widgets.dart
│ │ │ ├── data/
│ │ │ │ ├── profile_data_mapper.dart
│ │ │ │ ├── profile_data_providers.dart
│ │ │ │ ├── profile_data_source.dart
│ │ │ │ ├── profile_parser.dart
│ │ │ │ ├── profile_path_resolver.dart
│ │ │ │ └── profile_repository.dart
│ │ │ ├── details/
│ │ │ │ ├── json_editor.dart
│ │ │ │ ├── profile_details_notifier.dart
│ │ │ │ ├── profile_details_page.dart
│ │ │ │ └── profile_details_state.dart
│ │ │ ├── model/
│ │ │ │ ├── profile_entity.dart
│ │ │ │ ├── profile_failure.dart
│ │ │ │ └── profile_sort_enum.dart
│ │ │ ├── notifier/
│ │ │ │ ├── active_profile_notifier.dart
│ │ │ │ ├── profile_notifier.dart
│ │ │ │ └── profiles_update_notifier.dart
│ │ │ ├── overview/
│ │ │ │ ├── profiles_modal.dart
│ │ │ │ ├── profiles_notifier.dart
│ │ │ │ └── profiles_page.dart
│ │ │ └── widget/
│ │ │ ├── profile_tile.dart
│ │ │ └── profile_tile_main.dart
│ │ ├── proxy/
│ │ │ ├── active/
│ │ │ │ ├── active_proxy_card.dart
│ │ │ │ ├── active_proxy_delay_indicator.dart
│ │ │ │ ├── active_proxy_footer_old.dart
│ │ │ │ ├── active_proxy_notifier.dart
│ │ │ │ └── ip_widget.dart
│ │ │ ├── data/
│ │ │ │ ├── proxy_data_providers.dart
│ │ │ │ └── proxy_repository.dart
│ │ │ ├── model/
│ │ │ │ ├── ip_info_entity.dart
│ │ │ │ ├── proxy_entity.dart
│ │ │ │ └── proxy_failure.dart
│ │ │ ├── overview/
│ │ │ │ ├── proxies_overview_notifier.dart
│ │ │ │ └── proxies_overview_page.dart
│ │ │ └── widget/
│ │ │ └── proxy_tile.dart
│ │ ├── route_rules/
│ │ │ ├── notifier/
│ │ │ │ ├── android_apps_notifier.dart
│ │ │ │ ├── generic_list_notifier.dart
│ │ │ │ ├── rule_notifier.dart
│ │ │ │ └── rules_notifier.dart
│ │ │ ├── overview/
│ │ │ │ ├── android_apps_page.dart
│ │ │ │ ├── generic_list_page.dart
│ │ │ │ ├── rule_page.dart
│ │ │ │ └── rules_page.dart
│ │ │ └── widget/
│ │ │ ├── rule_tile.dart
│ │ │ ├── setting_checkbox.dart
│ │ │ ├── setting_detail_chips.dart
│ │ │ ├── setting_divider.dart
│ │ │ ├── setting_generic_list.dart
│ │ │ ├── setting_radio.dart
│ │ │ └── setting_text.dart
│ │ ├── settings/
│ │ │ ├── data/
│ │ │ │ ├── battery_optimization_repository.dart
│ │ │ │ ├── config_option_data_providers.dart
│ │ │ │ └── config_option_repository.dart
│ │ │ ├── model/
│ │ │ │ ├── config_option_failure.dart
│ │ │ │ └── settings_failure.dart
│ │ │ ├── notifier/
│ │ │ │ ├── battery_optimization/
│ │ │ │ │ └── battery_optimizations_notifier.dart
│ │ │ │ ├── config_option/
│ │ │ │ │ └── config_option_notifier.dart
│ │ │ │ ├── reset_tunnel/
│ │ │ │ │ └── reset_tunnel_notifier.dart
│ │ │ │ └── warp_option/
│ │ │ │ └── warp_option_notifier.dart
│ │ │ ├── overview/
│ │ │ │ ├── sections/
│ │ │ │ │ ├── dns_options_page.dart
│ │ │ │ │ ├── general_page.dart
│ │ │ │ │ ├── inbound_options_page.dart
│ │ │ │ │ ├── route_options_page.dart
│ │ │ │ │ ├── tls_tricks_page.dart
│ │ │ │ │ └── warp_options_page.dart
│ │ │ │ └── settings_page.dart
│ │ │ └── widget/
│ │ │ ├── autocomplete_field.dart
│ │ │ └── preference_tile.dart
│ │ ├── shortcut/
│ │ │ └── shortcut_wrapper.dart
│ │ ├── stats/
│ │ │ ├── data/
│ │ │ │ ├── stats_data_providers.dart
│ │ │ │ └── stats_repository.dart
│ │ │ ├── model/
│ │ │ │ ├── stats_entity.dart
│ │ │ │ └── stats_failure.dart
│ │ │ ├── notifier/
│ │ │ │ └── stats_notifier.dart
│ │ │ └── widget/
│ │ │ ├── connection_stats_card.dart
│ │ │ ├── side_bar_stats_overview.dart
│ │ │ └── stats_card.dart
│ │ ├── system_tray/
│ │ │ ├── notifier/
│ │ │ │ └── system_tray_notifier.dart
│ │ │ └── widget/
│ │ │ └── system_tray_wrapper.dart
│ │ └── window/
│ │ ├── notifier/
│ │ │ └── window_notifier.dart
│ │ └── widget/
│ │ └── window_wrapper.dart
│ ├── gen/
│ │ └── hiddify_core_generated_bindings.dart
│ ├── hiddifycore/
│ │ ├── core_interface/
│ │ │ ├── core_interface.dart
│ │ │ ├── core_interface_desktop.dart
│ │ │ ├── core_interface_mobile.dart
│ │ │ ├── core_interface_wrapper.dart
│ │ │ ├── core_interface_wrapper_stub.dart
│ │ │ └── mtls_channel_cred.dart
│ │ ├── generated/
│ │ │ ├── extension/
│ │ │ │ ├── extension.pb.dart
│ │ │ │ ├── extension.pbenum.dart
│ │ │ │ ├── extension.pbjson.dart
│ │ │ │ ├── extension_service.pb.dart
│ │ │ │ ├── extension_service.pbenum.dart
│ │ │ │ ├── extension_service.pbgrpc.dart
│ │ │ │ └── extension_service.pbjson.dart
│ │ │ ├── google/
│ │ │ │ └── protobuf/
│ │ │ │ ├── timestamp.pb.dart
│ │ │ │ ├── timestamp.pbenum.dart
│ │ │ │ └── timestamp.pbjson.dart
│ │ │ └── v2/
│ │ │ ├── common/
│ │ │ │ ├── common.pb.dart
│ │ │ │ ├── common.pbenum.dart
│ │ │ │ └── common.pbjson.dart
│ │ │ ├── config/
│ │ │ │ ├── route_rule.pb.dart
│ │ │ │ ├── route_rule.pbenum.dart
│ │ │ │ └── route_rule.pbjson.dart
│ │ │ ├── hcommon/
│ │ │ │ ├── common.pb.dart
│ │ │ │ ├── common.pbenum.dart
│ │ │ │ └── common.pbjson.dart
│ │ │ ├── hcore/
│ │ │ │ ├── hcore.pb.dart
│ │ │ │ ├── hcore.pbenum.dart
│ │ │ │ ├── hcore.pbjson.dart
│ │ │ │ ├── hcore_service.pb.dart
│ │ │ │ ├── hcore_service.pbenum.dart
│ │ │ │ ├── hcore_service.pbgrpc.dart
│ │ │ │ ├── hcore_service.pbjson.dart
│ │ │ │ └── tunnelservice/
│ │ │ │ ├── tunnel.pb.dart
│ │ │ │ ├── tunnel.pbenum.dart
│ │ │ │ ├── tunnel.pbjson.dart
│ │ │ │ ├── tunnel_service.pb.dart
│ │ │ │ ├── tunnel_service.pbenum.dart
│ │ │ │ ├── tunnel_service.pbgrpc.dart
│ │ │ │ └── tunnel_service.pbjson.dart
│ │ │ ├── hello/
│ │ │ │ ├── hello.pb.dart
│ │ │ │ ├── hello.pbenum.dart
│ │ │ │ ├── hello.pbjson.dart
│ │ │ │ ├── hello_service.pb.dart
│ │ │ │ ├── hello_service.pbenum.dart
│ │ │ │ ├── hello_service.pbgrpc.dart
│ │ │ │ └── hello_service.pbjson.dart
│ │ │ ├── hiddifyoptions/
│ │ │ │ ├── hiddify_options.pb.dart
│ │ │ │ ├── hiddify_options.pbenum.dart
│ │ │ │ └── hiddify_options.pbjson.dart
│ │ │ └── profile/
│ │ │ ├── profile.pb.dart
│ │ │ ├── profile.pbenum.dart
│ │ │ ├── profile.pbjson.dart
│ │ │ ├── profile_service.pb.dart
│ │ │ ├── profile_service.pbenum.dart
│ │ │ ├── profile_service.pbgrpc.dart
│ │ │ └── profile_service.pbjson.dart
│ │ ├── hiddify_core_service.dart
│ │ ├── hiddify_core_service_provider.dart
│ │ └── init_signal.dart
│ ├── main.dart
│ ├── main_prod.dart
│ ├── riverpod_observer.dart
│ ├── singbox/
│ │ └── model/
│ │ ├── core_status.dart
│ │ ├── singbox_config_enum.dart
│ │ ├── singbox_config_option.dart
│ │ ├── singbox_outbound.dart
│ │ ├── singbox_proxy_type.dart
│ │ ├── singbox_rule.dart
│ │ ├── singbox_stats.dart
│ │ └── warp_account.dart
│ └── utils/
│ ├── alerts.dart
│ ├── async_mutation.dart
│ ├── bottom_sheet_page.dart
│ ├── callback_debouncer.dart
│ ├── custom_loggers.dart
│ ├── custom_text_form_field.dart
│ ├── date_time_formatter.dart
│ ├── link_parsers.dart
│ ├── mutation_state.dart
│ ├── number_formatters.dart
│ ├── placeholders.dart
│ ├── platform_utils.dart
│ ├── riverpod_utils.dart
│ ├── sentry_riverpod_observer.dart
│ ├── sentry_utils.dart
│ ├── text_utils.dart
│ ├── uri_utils.dart
│ ├── utils.dart
│ └── validators.dart
├── linux/
│ ├── .gitignore
│ ├── .stignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ ├── main.cc
│ ├── my_application.cc
│ ├── my_application.h
│ └── packaging/
│ ├── app.hiddify.com.appdata.xml
│ ├── appimage/
│ │ ├── AppRun
│ │ └── make_config.yaml
│ ├── deb/
│ │ └── make_config.yaml
│ └── rpm/
│ └── make_config.yaml
├── linux_deps.list
├── macos/
│ ├── .gitignore
│ ├── .stignore
│ ├── Flutter/
│ │ ├── Flutter-Debug.xcconfig
│ │ ├── Flutter-Release.xcconfig
│ │ └── GeneratedPluginRegistrant.swift
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ └── AppIcon.appiconset/
│ │ │ └── Contents.json
│ │ ├── Base.lproj/
│ │ │ └── MainMenu.xib
│ │ ├── Configs/
│ │ │ ├── AppInfo.xcconfig
│ │ │ ├── Debug.xcconfig
│ │ │ ├── Release.xcconfig
│ │ │ └── Warnings.xcconfig
│ │ ├── DebugProfile.entitlements
│ │ ├── Info.plist
│ │ ├── MainFlutterWindow.swift
│ │ └── Release.entitlements
│ ├── Runner.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── swiftpm/
│ │ │ └── Package.resolved
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── swiftpm/
│ │ └── Package.resolved
│ ├── RunnerTests/
│ │ └── RunnerTests.swift
│ └── packaging/
│ ├── dmg/
│ │ └── make_config.yaml
│ └── pkg/
│ └── make_config.yaml
├── project.inlang/
│ ├── project_id
│ └── settings.json
├── pubspec.yaml
├── scripts/
│ └── package_windows.ps1
├── snap/
│ └── gui/
│ └── app_icon.desktop
├── test/
│ ├── core/
│ │ └── utils/
│ │ └── ip_utils_test.dart
│ ├── drift/
│ │ └── db/
│ │ ├── generated/
│ │ │ ├── schema.dart
│ │ │ ├── schema_v1.dart
│ │ │ ├── schema_v2.dart
│ │ │ ├── schema_v3.dart
│ │ │ ├── schema_v4.dart
│ │ │ └── schema_v5.dart
│ │ └── migration_test.dart
│ └── features/
│ └── profile/
│ └── data/
│ └── profile_parser_test.dart
├── test.configs/
│ ├── README.md
│ ├── ainita
│ ├── dnstt/
│ │ ├── dnstt_raw_config.json
│ │ └── readme.md
│ ├── fragment
│ ├── free_configs
│ ├── mahsa
│ ├── super_fragment
│ ├── warp
│ └── warp2
├── web/
│ ├── drift_worker.js
│ ├── index.html
│ ├── manifest.json
│ └── sqlite3.wasm
└── windows/
├── .gitignore
├── .stignore
├── CMakeLists.txt
├── flutter/
│ ├── CMakeLists.txt
│ ├── generated_plugin_registrant.cc
│ ├── generated_plugin_registrant.h
│ └── generated_plugins.cmake
├── packaging/
│ ├── exe/
│ │ ├── inno_setup.sas
│ │ └── make_config.yaml
│ └── msix/
│ └── make_config.yaml
└── runner/
├── CMakeLists.txt
├── Runner.rc
├── flutter_window.cpp
├── flutter_window.h
├── main.cpp
├── resource.h
├── runner.exe.manifest
├── utils.cpp
├── utils.h
├── win32_window.cpp
└── win32_window.h
Showing preview only (349K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (4886 symbols across 300 files)
FILE: .github/auto_translator.py
function get_path (line 8) | def get_path(lang):
function read_translate (line 18) | def read_translate(lang):
function recursive_translate (line 26) | def recursive_translate(src, dst, translator):
FILE: lib/bootstrap.dart
function lazyBootstrap (line 32) | Future<void> lazyBootstrap(WidgetsBinding widgetsBinding, Environment env)
function _init (line 127) | Future<T> _init<T>(String name, Future<T> Function() initializer, {int? ...
function func (line 130) | Future<T> func()
function _safeInit (line 143) | Future<T?> _safeInit<T>(String name, Future<T> Function() initializer, {...
FILE: lib/core/analytics/analytics_controller.dart
class AnalyticsController (line 19) | @Riverpod(keepAlive: true)
method build (line 22) | Future<bool> build()
method enableAnalytics (line 28) | Future<void> enableAnalytics()
method disableAnalytics (line 63) | Future<void> disableAnalytics()
FILE: lib/core/analytics/analytics_filter.dart
function sentryBeforeSend (line 8) | FutureOr<SentryEvent?> sentryBeforeSend(SentryEvent event, Hint hint)
function canSendEvent (line 15) | bool canSendEvent(dynamic throwable)
function canLogEvent (line 28) | bool canLogEvent(dynamic throwable)
FILE: lib/core/analytics/analytics_logger.dart
class SentryLoggyIntegration (line 6) | class SentryLoggyIntegration extends LoggyPrinter implements Integration...
method call (line 17) | void call(Hub hub, SentryOptions options)
method close (line 23) | Future<void> close()
method _shouldLog (line 25) | bool _shouldLog(LogLevel logLevel, LogLevel minLevel)
method onLog (line 33) | Future<void> onLog(LogRecord record)
function toBreadcrumb (line 51) | Breadcrumb toBreadcrumb()
function toEvent (line 68) | SentryEvent toEvent()
function toSentryLevel (line 85) | SentryLevel? toSentryLevel()
FILE: lib/core/app_info/app_info_provider.dart
function environment (line 12) | Environment environment(EnvironmentRef ref)
class AppInfo (line 14) | @Riverpod(keepAlive: true)
method build (line 17) | Future<AppInfoEntity> build()
FILE: lib/core/db/converters/duration_converter.dart
class DurationTypeConverter (line 3) | class DurationTypeConverter extends TypeConverter<Duration, int> {
method fromSql (line 5) | Duration fromSql(int fromDb)
method toSql (line 10) | int toSql(Duration value)
FILE: lib/core/db/db.dart
class Db (line 12) | @DriftDatabase(tables: [ProfileEntries, AppProxyEntries])
method _openConnection (line 19) | QueryExecutor _openConnection()
method _columnExists (line 83) | Future<bool> _columnExists(String table, String column)
class ProfileEntries (line 89) | @DataClassName('ProfileEntry')
class AppProxyEntries (line 112) | @DataClassName('AppProxyEntry')
FILE: lib/core/db/db.steps.dart
class Schema2 (line 7) | final class Schema2 extends i0.VersionedSchema {
class Shape0 (line 38) | class Shape0 extends i0.VersionedTable {
function _column_0 (line 68) | i1.GeneratedColumn<String> _column_0(String aliasedName)
function _column_1 (line 75) | i1.GeneratedColumn<String> _column_1(String aliasedName)
function _column_2 (line 82) | i1.GeneratedColumn<bool> _column_2(String aliasedName)
function _column_3 (line 92) | i1.GeneratedColumn<String> _column_3(String aliasedName)
function _column_4 (line 100) | i1.GeneratedColumn<String> _column_4(String aliasedName)
function _column_5 (line 107) | i1.GeneratedColumn<DateTime> _column_5(String aliasedName)
function _column_6 (line 114) | i1.GeneratedColumn<int> _column_6(String aliasedName)
function _column_7 (line 121) | i1.GeneratedColumn<int> _column_7(String aliasedName)
function _column_8 (line 128) | i1.GeneratedColumn<int> _column_8(String aliasedName)
function _column_9 (line 135) | i1.GeneratedColumn<int> _column_9(String aliasedName)
function _column_10 (line 142) | i1.GeneratedColumn<DateTime> _column_10(String aliasedName)
function _column_11 (line 149) | i1.GeneratedColumn<String> _column_11(String aliasedName)
function _column_12 (line 156) | i1.GeneratedColumn<String> _column_12(String aliasedName)
class Schema3 (line 164) | final class Schema3 extends i0.VersionedSchema {
class Shape1 (line 217) | class Shape1 extends i0.VersionedTable {
function _column_13 (line 235) | i1.GeneratedColumn<String> _column_13(String aliasedName)
function _column_14 (line 243) | i1.GeneratedColumn<String> _column_14(String aliasedName)
function _column_15 (line 250) | i1.GeneratedColumn<DateTime> _column_15(String aliasedName)
class Schema4 (line 258) | final class Schema4 extends i0.VersionedSchema {
class Shape2 (line 312) | class Shape2 extends i0.VersionedTable {
function _column_16 (line 344) | i1.GeneratedColumn<String> _column_16(String aliasedName)
class Schema5 (line 352) | final class Schema5 extends i0.VersionedSchema {
class Shape3 (line 400) | class Shape3 extends i0.VersionedTable {
function _column_17 (line 436) | i1.GeneratedColumn<String> _column_17(String aliasedName)
function _column_18 (line 443) | i1.GeneratedColumn<String> _column_18(String aliasedName)
function _column_19 (line 450) | i1.GeneratedColumn<String> _column_19(String aliasedName)
class Shape4 (line 458) | class Shape4 extends i0.VersionedTable {
function _column_20 (line 468) | i1.GeneratedColumn<String> _column_20(String aliasedName)
function _column_21 (line 475) | i1.GeneratedColumn<String> _column_21(String aliasedName)
function _column_22 (line 482) | i1.GeneratedColumn<int> _column_22(String aliasedName)
function migrationSteps (line 490) | i0.MigrationStepWithVersion migrationSteps({
function stepByStep (line 524) | i1.OnUpgrade stepByStep({
FILE: lib/core/db/provider/db_providers.dart
function db (line 8) | Db db(Ref ref)
FILE: lib/core/directories/directories_provider.dart
class AppDirectories (line 15) | @Riverpod(keepAlive: true)
method build (line 20) | Future<Directories> build()
method getDatabaseDirectory (line 55) | Future<Directory> getDatabaseDirectory()
method getPortableDirectory (line 72) | Directory getPortableDirectory()
method checkDirectoryAccess (line 77) | Future<bool> checkDirectoryAccess(Directory dir)
FILE: lib/core/haptic/haptic_service.dart
class HapticService (line 8) | @Riverpod(keepAlive: true)
method build (line 11) | bool build()
method updatePreference (line 18) | Future<void> updatePreference(bool value)
method lightImpact (line 23) | Future<void> lightImpact()
method mediumImpact (line 29) | Future<void> mediumImpact()
method heavyImpact (line 35) | Future<void> heavyImpact()
FILE: lib/core/http_client/dio_http_client.dart
class DioHttpClient (line 10) | class DioHttpClient with InfraLogger {
method isPortOpen (line 69) | Future<bool> isPortOpen(String host, int port, {Duration timeout = con...
method setProxyPort (line 81) | void setProxyPort(int port)
method get (line 86) | Future<Response<T>> get<T>(
method download (line 107) | Future<Response> download(
method _options (line 129) | Options _options(String url, {String? userAgent, ({String username, St...
FILE: lib/core/http_client/http_client_provider.dart
function httpClient (line 11) | DioHttpClient httpClient(Ref ref)
FILE: lib/core/localization/locale_preferences.dart
class LocalePreferences (line 8) | @Riverpod(keepAlive: true)
method build (line 11) | AppLocale build()
method changeLocale (line 26) | Future<void> changeLocale(AppLocale value)
FILE: lib/core/localization/translations.dart
function translations (line 11) | Future<Translations> translations(Ref ref)
FILE: lib/core/logger/custom_logger.dart
class ConsolePrinter (line 7) | class ConsolePrinter extends LoggyPrinter {
method onLog (line 20) | void onLog(LogRecord record)
method levelColor (line 41) | AnsiColor? levelColor(LogLevel level)
class FileLogPrinter (line 46) | class FileLogPrinter extends LoggyPrinter {
method onLog (line 55) | void onLog(LogRecord record)
method dispose (line 66) | void dispose()
FILE: lib/core/logger/logger.dart
class Logger (line 4) | class Logger {
method logFlutterError (line 8) | void logFlutterError(FlutterErrorDetails details)
method logPlatformDispatcherError (line 18) | bool logPlatformDispatcherError(Object error, StackTrace stackTrace)
FILE: lib/core/logger/logger_controller.dart
class LoggerController (line 8) | class LoggerController extends LoggyPrinter with InfraLogger {
method preInit (line 18) | void preInit()
method init (line 22) | void init(String appLogPath)
method postInit (line 27) | Future<void> postInit(bool debugMode)
method addPrinter (line 36) | void addPrinter(String name, LoggyPrinter printer)
method removePrinter (line 41) | void removePrinter(String name)
method onLog (line 51) | void onLog(LogRecord record)
FILE: lib/core/model/app_info_entity.dart
class AppInfoEntity (line 6) | @freezed
method format (line 25) | String format()
FILE: lib/core/model/constants.dart
class Constants (line 4) | abstract class Constants {
class AddProfileModalConst (line 20) | abstract class AddProfileModalConst {
class AlertDialogConst (line 31) | abstract class AlertDialogConst {
class BottomSheetConst (line 37) | abstract class BottomSheetConst {
class ProfileTileConst (line 43) | abstract class ProfileTileConst {
method startBorderRadius (line 48) | BorderRadius startBorderRadius(TextDirection direction)
method endBorderRadius (line 50) | BorderRadius endBorderRadius(TextDirection direction)
class IntroConst (line 54) | abstract class IntroConst {
class WarpConst (line 62) | abstract class WarpConst {
class KeyboardConst (line 71) | abstract class KeyboardConst {
FILE: lib/core/model/directories.dart
type Directories (line 3) | typedef Directories = ({Directory baseDir, Directory workingDir, Directo...
FILE: lib/core/model/environment.dart
type Environment (line 3) | enum Environment {
type Release (line 12) | enum Release {
FILE: lib/core/model/failures.dart
type PresentableError (line 5) | typedef PresentableError = ({String type, String? message});
function present (line 8) | ({String type, String? message}) present(TranslationsEn t)
function errorToPair (line 25) | PresentableError errorToPair(Object error)
function presentError (line 33) | PresentableError presentError(Object error, {String? action})
function presentShortError (line 39) | String presentShortError(Object error, {String? action})
function present (line 47) | PresentableError present(TranslationsEn t)
FILE: lib/core/model/optional_range.dart
class OptionalRange (line 8) | @MappableClass()
method format (line 15) | String format()
method present (line 16) | String present(TranslationsEn t)
method tryParse (line 25) | OptionalRange? tryParse(String input, {bool allowEmpty = false})
class OptionalRangeJsonConverter (line 34) | class OptionalRangeJsonConverter implements JsonConverter<OptionalRange,...
method fromJson (line 38) | OptionalRange fromJson(String json)
method toJson (line 41) | String toJson(OptionalRange object)
FILE: lib/core/model/region.dart
type Region (line 3) | enum Region {
FILE: lib/core/notification/in_app_notification_controller.dart
function inAppNotificationController (line 10) | InAppNotificationController inAppNotificationController(Ref ref)
type NotificationType (line 14) | enum NotificationType { info, error, success }
class InAppNotificationController (line 16) | class InAppNotificationController with AppLogger {
method _show (line 17) | ToastificationItem _show(
method showErrorToast (line 37) | ToastificationItem? showErrorToast(String message)
method showSuccessToast (line 40) | ToastificationItem? showSuccessToast(String message)
method showInfoToast (line 42) | ToastificationItem? showInfoToast(String message, {Duration duration =...
FILE: lib/core/preferences/actions_at_closing.dart
type ActionsAtClosing (line 3) | enum ActionsAtClosing {
FILE: lib/core/preferences/general_preferences.dart
class Preferences (line 19) | abstract class Preferences {
class DebugModeNotifier (line 115) | @Riverpod(keepAlive: true)
method build (line 124) | bool build()
method update (line 126) | Future<void> update(bool value)
FILE: lib/core/preferences/preferences_migration.dart
class PreferencesMigration (line 4) | class PreferencesMigration with InfraLogger {
method migrate (line 11) | Future<void> migrate()
class PreferencesMigrationStep (line 33) | abstract interface class PreferencesMigrationStep {
method migrate (line 38) | Future<void> migrate()
class PreferencesVersion1Migration (line 41) | class PreferencesVersion1Migration extends PreferencesMigrationStep with...
method migrate (line 45) | Future<void> migrate()
method _ipv6Mapper (line 91) | String _ipv6Mapper(String persisted)
method _domainStrategyMapper (line 100) | String _domainStrategyMapper(String persisted)
FILE: lib/core/preferences/preferences_provider.dart
function sharedPreferences (line 15) | Future<SharedPreferences> sharedPreferences(Ref ref)
FILE: lib/core/router/adaptive_layout/my_adaptive_layout.dart
class MyAdaptiveLayout (line 13) | class MyAdaptiveLayout extends HookConsumerWidget {
method build (line 26) | Widget build(BuildContext context, WidgetRef ref)
method handler (line 32) | bool handler(KeyEvent event)
method _onTap (line 97) | void _onTap(BuildContext context, int index)
method _actions (line 101) | List<ShellRouteAction> _actions(Translations t, bool showProfilesActio...
method _navDests (line 109) | List<NavigationDestination> _navDests(List<ShellRouteAction> actions)
method _navRailDests (line 111) | List<NavigationRailDestination> _navRailDests(List<ShellRouteAction> a...
FILE: lib/core/router/adaptive_layout/shell_route_action.dart
class ShellRouteAction (line 4) | class ShellRouteAction {
FILE: lib/core/router/bottom_sheets/bottom_sheets_notifier.dart
class BottomSheetsNotifier (line 14) | @riverpod
method build (line 17) | void build()
method _show (line 19) | Future<T?> _show<T>({required Widget child, required bool isScrollCont...
method showAddProfile (line 45) | Future<void> showAddProfile({String? url})
method showProfilesOverview (line 48) | Future<void> showProfilesOverview()
method showQuickSettings (line 50) | Future<void> showQuickSettings()
method showAutoAppsSelection (line 51) | Future<void> showAutoAppsSelection({required AppProxyMode mode})
FILE: lib/core/router/bottom_sheets/widgets/auto_apps_selection_modal.dart
class AutoAppsSelectionModal (line 14) | class AutoAppsSelectionModal extends HookConsumerWidget {
method _genSliderText (line 19) | String _genSliderText(Translations t, int sliderValue)
method build (line 25) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/core/router/bottom_sheets/widgets/quick_settings_modal.dart
class QuickSettingsModal (line 10) | class QuickSettingsModal extends HookConsumerWidget {
method build (line 14) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/core/router/deep_linking/my_app_links.dart
function myAppLinks (line 10) | Stream<String> myAppLinks(Ref ref)
FILE: lib/core/router/deep_linking/url_protocol/api.dart
function registerProtocolHandler (line 22) | void registerProtocolHandler(String scheme, {String? executable, List<St...
function unregisterProtocolHandler (line 32) | void unregisterProtocolHandler(String scheme)
FILE: lib/core/router/deep_linking/url_protocol/protocol.dart
class ProtocolHandler (line 1) | abstract class ProtocolHandler {
method register (line 2) | void register(String scheme, {String? executable, List<String>? argume...
method unregister (line 4) | void unregister(String scheme)
method getArguments (line 6) | List<String> getArguments(List<String>? arguments)
FILE: lib/core/router/deep_linking/url_protocol/web_url_protocol.dart
class WindowsProtocolHandler (line 3) | class WindowsProtocolHandler extends ProtocolHandler {
method register (line 5) | void register(String scheme, {String? executable, List<String>? argume...
method unregister (line 8) | void unregister(String scheme)
FILE: lib/core/router/deep_linking/url_protocol/windows_protocol.dart
class WindowsProtocolHandler (line 10) | class WindowsProtocolHandler extends ProtocolHandler {
method register (line 12) | void register(String scheme, {String? executable, List<String>? argume...
method unregister (line 26) | void unregister(String scheme)
method _regPrefix (line 37) | String _regPrefix(String scheme)
method _regCreateStringKey (line 39) | int _regCreateStringKey(int hKey, String key, String valueName, String...
method _sanitize (line 52) | String _sanitize(String value)
FILE: lib/core/router/dialog/dialog_notifier.dart
class DialogNotifier (line 34) | @Riverpod(keepAlive: true)
method build (line 37) | void build()
method _show (line 39) | Future<T?> _show<T>(Widget child)
method showQrScanner (line 51) | Future<String?> showQrScanner()
method showSortProfiles (line 55) | Future<void> showSortProfiles()
method showWarpLicense (line 59) | Future<bool> showWarpLicense()
method showQrCode (line 63) | Future<void> showQrCode(String link, {String? message})
method showOk (line 67) | Future<void> showOk(String title, String description)
method showSettingSlider (line 71) | Future<double?> showSettingSlider({
method showNewVersion (line 93) | Future<void> showNewVersion({
method showConfirmation (line 101) | Future<bool> showConfirmation({
method showActionAtClosing (line 113) | Future<ActionsAtClosing?> showActionAtClosing({required ActionsAtClosi...
method showExperimentalFeatureNotice (line 117) | Future<bool> showExperimentalFeatureNotice()
method showNoActiveProfile (line 126) | Future<void> showNoActiveProfile()
method showFreeProfileConsent (line 130) | Future<bool> showFreeProfileConsent({required String title, required S...
method showUnknownDomainsWarning (line 134) | Future<bool> showUnknownDomainsWarning({required String url})
method showProxyInfo (line 138) | Future<void> showProxyInfo({required OutboundInfo outboundInfo})
method showSettingText (line 142) | Future<String?> showSettingText({
method showSettingCheckbox (line 153) | Future<List<ProtobufEnum>?> showSettingCheckbox({
method showSettingRadio (line 171) | Future<T?> showSettingRadio<T>({
method showSettingInput (line 183) | Future<T?> showSettingInput<T>({
method showSettingPicker (line 211) | Future<T?> showSettingPicker<T>({
method showSave (line 231) | Future<bool?> showSave({required String title, required String descrip...
method showWindowClosing (line 235) | Future<void> showWindowClosing()
method showCustomAlert (line 239) | Future<void> showCustomAlert({String? title, required String message})
method showCustomAlertFromErr (line 243) | Future<void> showCustomAlertFromErr(({String type, String? message}) err)
FILE: lib/core/router/dialog/widgets/action_at_closing_dialog.dart
class ActionsAtClosingDialog (line 7) | class ActionsAtClosingDialog extends HookConsumerWidget {
method build (line 11) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/core/router/dialog/widgets/confirmation_dialog.dart
class ConfirmationDialog (line 7) | class ConfirmationDialog extends HookConsumerWidget {
method build (line 15) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/core/router/dialog/widgets/custom_alert_dialog.dart
class CustomAlertDialog (line 6) | class CustomAlertDialog extends HookConsumerWidget {
method build (line 16) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/core/router/dialog/widgets/experimental_feature_notice.dart
class ExperimentalFeatureNoticeDialog (line 18) | class ExperimentalFeatureNoticeDialog extends HookConsumerWidget {
method build (line 22) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/core/router/dialog/widgets/free_profile_consent_dialog.dart
class FreeProfileConsentDialog (line 9) | class FreeProfileConsentDialog extends HookConsumerWidget {
method build (line 14) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/core/router/dialog/widgets/new_version_dialog.dart
class NewVersionDialog (line 10) | class NewVersionDialog extends HookConsumerWidget with PresLogger {
method build (line 18) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/core/router/dialog/widgets/no_active_profile_dialog.dart
class NoActiveProfileDialog (line 7) | class NoActiveProfileDialog extends HookConsumerWidget {
method build (line 10) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/core/router/dialog/widgets/ok_dialog.dart
class OkDialog (line 6) | class OkDialog extends HookConsumerWidget {
method build (line 11) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/core/router/dialog/widgets/proxy_info_dialog.dart
class ProxyInfoDialog (line 10) | class ProxyInfoDialog extends HookConsumerWidget {
method build (line 16) | Widget build(BuildContext context, WidgetRef ref)
class OutboundInfoWidget (line 26) | class OutboundInfoWidget extends HookConsumerWidget {
method build (line 32) | Widget build(BuildContext context, WidgetRef ref)
method formatBytes (line 62) | String formatBytes(int bytes, {int decimals = 3})
method _buildInfoRow (line 83) | Widget _buildInfoRow(String title, String value, {Future<bool>? Functi...
method _buildIpInfo (line 111) | Widget _buildIpInfo(IpInfo ipInfo, WidgetRef ref)
FILE: lib/core/router/dialog/widgets/save_dialog.dart
class SaveDialog (line 7) | class SaveDialog extends HookConsumerWidget {
method build (line 12) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/core/router/dialog/widgets/setting_checkbox_dialog.dart
class SettingCheckboxDialog (line 8) | class SettingCheckboxDialog extends ConsumerWidget {
method textWithTranslation (line 24) | String textWithTranslation(ProtobufEnum e)
method build (line 30) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/core/router/dialog/widgets/setting_input_dialog.dart
class SettingInputDialog (line 11) | class SettingInputDialog<T> extends HookConsumerWidget with PresLogger {
method build (line 38) | Widget build(BuildContext context, WidgetRef ref)
method handleKeyEvent (line 47) | KeyEventResult handleKeyEvent(FocusNode node, KeyEvent event)
FILE: lib/core/router/dialog/widgets/setting_picker_dialog.dart
class SettingPickerDialog (line 8) | class SettingPickerDialog<T> extends HookConsumerWidget with PresLogger {
method build (line 27) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/core/router/dialog/widgets/setting_radio_dialog.dart
class SettingRadioDialog (line 7) | class SettingRadioDialog<T> extends ConsumerWidget {
method textWithTranslation (line 23) | String textWithTranslation(T e)
method build (line 29) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/core/router/dialog/widgets/setting_slider_dialog.dart
class SettingsSliderDialog (line 10) | class SettingsSliderDialog extends HookConsumerWidget with PresLogger {
method build (line 31) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/core/router/dialog/widgets/setting_text_dialog.dart
class SettingTextDialog (line 8) | class SettingTextDialog extends HookConsumerWidget {
method build (line 17) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/core/router/dialog/widgets/sort_profiles_dialog.dart
class SortProfilesDialog (line 9) | class SortProfilesDialog extends HookConsumerWidget {
method build (line 13) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/core/router/dialog/widgets/unknown_domains_warning_dialog.dart
class UnknownDomainsWarningDialog (line 7) | class UnknownDomainsWarningDialog extends HookConsumerWidget {
method build (line 13) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/core/router/dialog/widgets/warp_license_dialog.dart
class WarpLicenseDialog (line 12) | class WarpLicenseDialog extends HookConsumerWidget {
method _handleKeyEvent (line 16) | KeyEventResult _handleKeyEvent(KeyEvent event, String key)
method build (line 25) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/core/router/dialog/widgets/window_closing_dialog.dart
class WindowClosingDialog (line 9) | class WindowClosingDialog extends ConsumerStatefulWidget {
method createState (line 13) | ConsumerState<WindowClosingDialog> createState()
class _WindowClosingDialogState (line 16) | class _WindowClosingDialogState extends ConsumerState<WindowClosingDialo...
method build (line 20) | Widget build(BuildContext context)
FILE: lib/core/router/go_router/go_router_notifier.dart
class GoRouterNotifer (line 12) | @Riverpod(keepAlive: true)
method build (line 16) | GoRouter build()
FILE: lib/core/router/go_router/helper/active_breakpoint_notifier.dart
class ActiveBreakpointNotifier (line 7) | @Riverpod(keepAlive: true)
method build (line 10) | Breakpoints? build()
method update (line 14) | void update(Breakpoints breakpoint)
function isMobileBreakpoint (line 21) | bool? isMobileBreakpoint(Ref ref)
class Breakpoint (line 27) | class Breakpoint {
method isMobile (line 49) | bool isMobile()
method isTablet (line 50) | bool isTablet()
method isDesktop (line 51) | bool isDesktop()
method toString (line 54) | String toString()
type Breakpoints (line 59) | enum Breakpoints { mobile, tablet, desktop }
FILE: lib/core/router/go_router/helper/custom_transition.dart
type TransitionType (line 4) | enum TransitionType { slide, fade }
function customTransition (line 6) | CustomTransitionPage<dynamic> customTransition(TransitionType transition...
FILE: lib/core/router/go_router/refresh_listenable.dart
class RefreshListenable (line 9) | class RefreshListenable extends ChangeNotifier {
FILE: lib/core/router/go_router/routing_config_notifier.dart
function getNameOfBranch (line 44) | String getNameOfBranch(bool isMobileBreakpoint, bool showProfilesAction,...
function getIndexOfBranch (line 48) | int getIndexOfBranch(bool isMobileBreakpoint, bool showProfilesAction, S...
class RoutingConfigNotifier (line 52) | @Riverpod(keepAlive: true)
method build (line 55) | RoutingConfig build()
FILE: lib/core/theme/app_theme.dart
class AppTheme (line 6) | class AppTheme {
method lightTheme (line 11) | ThemeData lightTheme(ColorScheme? lightColorScheme)
method darkTheme (line 21) | ThemeData darkTheme(ColorScheme? darkColorScheme)
method cupertinoThemeData (line 33) | CupertinoThemeData cupertinoThemeData(bool sysDark, ColorScheme? light...
FILE: lib/core/theme/app_theme_mode.dart
type AppThemeMode (line 4) | enum AppThemeMode {
FILE: lib/core/theme/theme_extensions.dart
class ConnectionButtonTheme (line 3) | class ConnectionButtonTheme extends ThemeExtension<ConnectionButtonTheme> {
method copyWith (line 15) | ThemeExtension<ConnectionButtonTheme> copyWith({Color? idleColor, Colo...
method lerp (line 21) | ThemeExtension<ConnectionButtonTheme> lerp(covariant ThemeExtension<Co...
FILE: lib/core/theme/theme_preferences.dart
class ThemePreferences (line 7) | @Riverpod(keepAlive: true)
method build (line 10) | AppThemeMode build()
method changeThemeMode (line 16) | Future<void> changeThemeMode(AppThemeMode value)
FILE: lib/core/utils/exception_handler.dart
function exceptionHandler (line 6) | TaskEither<F, R> exceptionHandler<F, R>(
function handleExceptions (line 21) | Stream<Either<F, R>> handleExceptions<F>(F Function(Object error, StackT...
function handleExceptions (line 29) | TaskEither<F, R> handleExceptions(F Function(Object error, StackTrace st...
FILE: lib/core/utils/ffi_utils.dart
function withMemory (line 5) | R withMemory<R, T extends NativeType>(int size, R Function(Pointer<T> me...
FILE: lib/core/utils/ip_utils.dart
function obscureIp (line 3) | String obscureIp(String ip)
FILE: lib/core/utils/json_converters.dart
class IntervalInSecondsConverter (line 3) | class IntervalInSecondsConverter implements JsonConverter<Duration, int> {
method fromJson (line 7) | Duration fromJson(int json)
method toJson (line 10) | int toJson(Duration object)
FILE: lib/core/utils/laststeam.dart
class LastStream (line 3) | class LastStream<T> {
method clean (line 22) | void clean()
method get (line 29) | Future<T> get({Duration? timeout})
method close (line 49) | Future<void> close()
FILE: lib/core/utils/preferences_utils.dart
class PreferencesEntry (line 6) | class PreferencesEntry<T, P> with InfraLogger {
method read (line 16) | T read()
method write (line 42) | Future<bool> write(T value)
method writeRaw (line 68) | Future<T?> writeRaw(P input)
method remove (line 79) | Future<void> remove()
class PreferencesNotifier (line 88) | class PreferencesNotifier<T, P> extends StateNotifier<T> {
method create (line 96) | StateNotifierProvider<PreferencesNotifier<T, P>, T> create<T, P>(
method createAutoDispose (line 114) | AutoDisposeStateNotifierProvider<PreferencesNotifier<T, P>, T> createA...
method raw (line 123) | P raw()
method updateRaw (line 129) | Future<void> updateRaw(P input)
method update (line 134) | Future<void> update(T value)
method reset (line 138) | Future<void> reset()
FILE: lib/core/utils/throttler.dart
class Throttler (line 3) | class Throttler {
method call (line 9) | void call(VoidCallback callback)
FILE: lib/core/widget/adaptive_icon.dart
class AdaptiveIcon (line 4) | class AdaptiveIcon {
FILE: lib/core/widget/adaptive_menu.dart
type AdaptiveMenuBuilder (line 4) | typedef AdaptiveMenuBuilder = Widget Function(BuildContext context, void...
class AdaptiveMenuItem (line 6) | class AdaptiveMenuItem<T> {
method _equality (line 15) | (String, IconData?, T Function()?, bool?, List<AdaptiveMenuItem>?) _eq...
class AdaptiveMenu (line 28) | class AdaptiveMenu extends HookConsumerWidget {
method build (line 36) | Widget build(BuildContext context, WidgetRef ref)
method buildMenuItems (line 37) | List<Widget> buildMenuItems(Iterable<AdaptiveMenuItem> scopeItems)
FILE: lib/core/widget/animated_text.dart
class AnimatedText (line 4) | class AnimatedText extends Text {
method build (line 19) | Widget build(BuildContext context)
FILE: lib/core/widget/animated_visibility.dart
class AnimatedVisibility (line 3) | class AnimatedVisibility extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
FILE: lib/core/widget/shimmer_skeleton.dart
class ShimmerSkeleton (line 5) | class ShimmerSkeleton extends StatelessWidget {
method build (line 24) | Widget build(BuildContext context)
FILE: lib/core/widget/skeleton_widget.dart
class Skeleton (line 3) | class Skeleton extends StatelessWidget {
method build (line 21) | Widget build(BuildContext context)
FILE: lib/core/widget/spaced_list_widget.dart
function spaceBy (line 4) | List<Widget> spaceBy({double? width, double? height})
FILE: lib/core/widget/tip_card.dart
class TipCard (line 4) | class TipCard extends StatelessWidget {
method build (line 10) | Widget build(BuildContext context)
FILE: lib/features/about/widget/about_page.dart
class AboutPage (line 18) | class AboutPage extends HookConsumerWidget {
method build (line 22) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/app/widget/app.dart
class App (line 34) | class App extends HookConsumerWidget with WidgetsBindingObserver, PresLo...
method onInactive (line 37) | void onInactive(WidgetRef ref)
method onPause (line 41) | void onPause(WidgetRef ref)
method onResume (line 47) | void onResume(WidgetRef ref)
method build (line 58) | Widget build(BuildContext context, WidgetRef ref)
method setupStateListener (line 186) | void setupStateListener(WidgetRef ref)
FILE: lib/features/app_update/data/app_update_data_providers.dart
function appUpdateRepository (line 8) | AppUpdateRepository appUpdateRepository(AppUpdateRepositoryRef ref)
FILE: lib/features/app_update/data/app_update_repository.dart
class AppUpdateRepository (line 11) | abstract interface class AppUpdateRepository {
method getLatestVersion (line 12) | TaskEither<AppUpdateFailure, RemoteVersionEntity> getLatestVersion({
class AppUpdateRepositoryImpl (line 18) | class AppUpdateRepositoryImpl with ExceptionHandler, InfraLogger impleme...
method getLatestVersion (line 24) | TaskEither<AppUpdateFailure, RemoteVersionEntity> getLatestVersion({
FILE: lib/features/app_update/data/github_release_parser.dart
class GithubReleaseParser (line 5) | abstract class GithubReleaseParser {
method parse (line 6) | RemoteVersionEntity parse(Map<String, dynamic> json)
FILE: lib/features/app_update/model/app_update_failure.dart
class AppUpdateFailure (line 7) | @freezed
FILE: lib/features/app_update/model/remote_version_entity.dart
class RemoteVersionEntity (line 6) | @Freezed()
FILE: lib/features/app_update/notifier/app_update_notifier.dart
function upgrader (line 23) | Upgrader upgrader(Ref ref)
class AppUpdateNotifier (line 39) | @Riverpod(keepAlive: true)
method build (line 42) | AppUpdateState build()
method check (line 50) | Future<AppUpdateState> check()
method ignoreRelease (line 89) | Future<void> ignoreRelease(RemoteVersionEntity version)
FILE: lib/features/app_update/notifier/app_update_state.dart
class AppUpdateState (line 7) | @freezed
FILE: lib/features/auto_start/notifier/auto_start_notifier.dart
class AutoStartNotifier (line 11) | @Riverpod(keepAlive: true)
method build (line 16) | Future<bool> build()
method _startTimer (line 31) | void _startTimer()
method updateStatus (line 36) | Future<bool> updateStatus()
method enable (line 43) | Future<void> enable()
method disable (line 49) | Future<void> disable()
FILE: lib/features/common/custom_text_scroll.dart
class CustomTextScroll (line 5) | class CustomTextScroll extends ConsumerWidget {
method calculateHeight (line 11) | double calculateHeight(BuildContext context)
method build (line 22) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/common/general_pref_tiles.dart
class LocalePrefTile (line 12) | class LocalePrefTile extends ConsumerWidget {
method build (line 16) | Widget build(BuildContext context, WidgetRef ref)
class EnableAnalyticsPrefTile (line 42) | class EnableAnalyticsPrefTile extends ConsumerWidget {
method build (line 48) | Widget build(BuildContext context, WidgetRef ref)
class ThemeModePrefTile (line 72) | class ThemeModePrefTile extends ConsumerWidget {
method build (line 76) | Widget build(BuildContext context, WidgetRef ref)
class ClosingPrefTile (line 108) | class ClosingPrefTile extends ConsumerWidget {
method build (line 112) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/common/qr_code_dialog.dart
class QrCodeDialog (line 4) | class QrCodeDialog extends StatelessWidget {
method build (line 13) | Widget build(BuildContext context)
FILE: lib/features/common/qr_code_scanner_screen.dart
class QrCodeScannerDialog (line 402) | class QrCodeScannerDialog extends ConsumerWidget {
method build (line 406) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/connection/data/connection_data_providers.dart
function connectionRepository (line 12) | ConnectionRepository connectionRepository(Ref ref)
FILE: lib/features/connection/data/connection_repository.dart
class ConnectionRepository (line 18) | abstract interface class ConnectionRepository {
method setup (line 21) | TaskEither<ConnectionFailure, Unit> setup()
method watchConnectionStatus (line 22) | Stream<ConnectionStatus> watchConnectionStatus()
method connect (line 23) | TaskEither<ConnectionFailure, Unit> connect(ProfileEntity activeProfil...
method disconnect (line 24) | TaskEither<ConnectionFailure, Unit> disconnect()
method reconnect (line 25) | TaskEither<ConnectionFailure, Unit> reconnect(ProfileEntity activeProf...
class ConnectionRepositoryImpl (line 28) | class ConnectionRepositoryImpl with ExceptionHandler, InfraLogger implem...
method setup (line 52) | TaskEither<ConnectionFailure, Unit> setup()
method watchConnectionStatus (line 69) | Stream<ConnectionStatus> watchConnectionStatus()
method connect (line 81) | TaskEither<ConnectionFailure, Unit> connect(ProfileEntity activeProfil...
method disconnect (line 89) | TaskEither<ConnectionFailure, Unit> disconnect()
method reconnect (line 92) | TaskEither<ConnectionFailure, Unit> reconnect(ProfileEntity activeProf...
method applyConfigOption (line 100) | TaskEither<ConnectionFailure, Unit> applyConfigOption(ProfileEntity prof)
FILE: lib/features/connection/model/connection_failure.dart
class ConnectionFailure (line 8) | @freezed
FILE: lib/features/connection/model/connection_status.dart
class ConnectionStatus (line 7) | @freezed
method format (line 32) | String format()
method present (line 40) | String present(TranslationsEn t)
FILE: lib/features/connection/notifier/connection_notifier.dart
class ConnectionNotifier (line 23) | @Riverpod(keepAlive: true)
method build (line 26) | Stream<ConnectionStatus> build()
method mayConnect (line 68) | Future<void> mayConnect()
method toggleConnection (line 74) | Future<void> toggleConnection()
method reconnect (line 96) | Future<void> reconnect(ProfileEntity? profile)
method abortConnection (line 114) | Future<void> abortConnection()
method _connect (line 127) | Future<void> _connect()
method _connectThrottled (line 138) | Future<void> _connectThrottled()
method _disconnect (line 161) | Future<void> _disconnect()
function serviceRunning (line 173) | Future<bool> serviceRunning(Ref ref)
class SingleCall (line 180) | class SingleCall {
method run (line 183) | Future<T> run<T>(Future<T> Function() task, {required T onIgnored})
FILE: lib/features/connection/widget/connection_wrapper.dart
class ConnectionWrapper (line 10) | class ConnectionWrapper extends StatefulHookConsumerWidget {
method createState (line 16) | ConsumerState<ConsumerStatefulWidget> createState()
class _ConnectionWrapperState (line 19) | class _ConnectionWrapperState extends ConsumerState<ConnectionWrapper> w...
method build (line 21) | Widget build(BuildContext context)
method initState (line 46) | void initState()
FILE: lib/features/home/widget/connection_button.dart
class ConnectionButton (line 23) | class ConnectionButton extends HookConsumerWidget {
method build (line 27) | Widget build(BuildContext context, WidgetRef ref)
class _ConnectionButton (line 190) | class _ConnectionButton extends StatelessWidget {
method build (line 216) | Widget build(BuildContext context)
FILE: lib/features/home/widget/empty_profiles_home_body.dart
class EmptyProfilesHomeBody (line 7) | class EmptyProfilesHomeBody extends HookConsumerWidget {
method build (line 11) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/home/widget/home_page.dart
class HomePage (line 16) | class HomePage extends HookConsumerWidget {
method build (line 20) | Widget build(BuildContext context, WidgetRef ref)
class AppVersionLabel (line 157) | class AppVersionLabel extends HookConsumerWidget {
method build (line 161) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/home/widget/new_con_button.dart
class CircleDesignWidget (line 6) | class CircleDesignWidget extends StatelessWidget {
method build (line 31) | Widget build(BuildContext context)
class CirclePainter (line 88) | class CirclePainter extends CustomPainter {
method paint (line 95) | void paint(Canvas canvas, Size size)
method shouldRepaint (line 155) | bool shouldRepaint(CustomPainter oldDelegate)
FILE: lib/features/home/widget/new_connection_button.dart
type ConnectionStateStatus (line 3) | enum ConnectionStateStatus { disconnected, connecting, connected, error }
class CircleDesignWidget (line 5) | class CircleDesignWidget extends StatefulWidget {
method createState (line 7) | _CircleDesignWidgetState createState()
class _CircleDesignWidgetState (line 10) | class _CircleDesignWidgetState extends State<CircleDesignWidget> with Si...
method initState (line 16) | void initState()
method dispose (line 29) | void dispose()
method changeState (line 34) | void changeState(ConnectionStateStatus state)
method build (line 46) | Widget build(BuildContext context)
class CirclePainter (line 73) | class CirclePainter extends CustomPainter {
method paint (line 80) | void paint(Canvas canvas, Size size)
method shouldRepaint (line 162) | bool shouldRepaint(CustomPainter oldDelegate)
FILE: lib/features/intro/widget/intro_page.dart
class IntroPage (line 23) | class IntroPage extends HookConsumerWidget with PresLogger {
method _handleKeyEvent (line 29) | KeyEventResult _handleKeyEvent(KeyEvent event, String key)
method build (line 38) | Widget build(BuildContext context, WidgetRef ref)
method autoSelectRegion (line 195) | Future<void> autoSelectRegion(WidgetRef ref)
method _getRegionLocale (line 231) | RegionLocale _getRegionLocale(String country)
class RegionLocale (line 251) | class RegionLocale {
class RegionDetector (line 258) | class RegionDetector {
method detect (line 260) | String detect()
method _fromTzName (line 281) | String? _fromTzName(String tz, int offset)
method _matchesRussiaTz (line 306) | bool _matchesRussiaTz(String tz)
method _matchesBrazilTz (line 332) | bool _matchesBrazilTz(String tz)
method _candidatesForOffset (line 340) | Set<String> _candidatesForOffset(int offset)
method _resolveByLocale (line 358) | String _resolveByLocale(Set<String> candidates)
method _parseLocale (line 373) | (String, String?) _parseLocale()
FILE: lib/features/log/data/log_data_providers.dart
function logRepository (line 10) | Future<LogRepository> logRepository(LogRepositoryRef ref)
function logPathResolver (line 20) | LogPathResolver logPathResolver(LogPathResolverRef ref)
FILE: lib/features/log/data/log_parser.dart
class LogParser (line 9) | abstract class LogParser {
method parseLogProto (line 10) | LogEntity parseLogProto(pb.LogMessage message)
method parseSingbox (line 23) | LogEntity parseSingbox(String log)
FILE: lib/features/log/data/log_path_resolver.dart
class LogPathResolver (line 5) | class LogPathResolver {
method coreFile (line 12) | File coreFile()
method appFile (line 16) | File appFile()
FILE: lib/features/log/data/log_repository.dart
class LogRepository (line 11) | abstract interface class LogRepository {
method init (line 12) | TaskEither<LogFailure, Unit> init()
method watchLogs (line 13) | Stream<Either<LogFailure, List<LogEntity>>> watchLogs()
method clearLogs (line 14) | TaskEither<LogFailure, Unit> clearLogs()
class LogRepositoryImpl (line 17) | class LogRepositoryImpl with ExceptionHandler, InfraLogger implements Lo...
method init (line 24) | TaskEither<LogFailure, Unit> init()
method watchLogs (line 46) | Stream<Either<LogFailure, List<LogEntity>>> watchLogs()
method clearLogs (line 57) | TaskEither<LogFailure, Unit> clearLogs()
FILE: lib/features/log/model/log_entity.dart
class LogEntity (line 6) | @freezed
FILE: lib/features/log/model/log_failure.dart
class LogFailure (line 7) | @freezed
FILE: lib/features/log/model/log_level.dart
type LogLevel (line 7) | @MappableEnum()
FILE: lib/features/log/overview/logs_overview_notifier.dart
class LogsOverviewNotifier (line 15) | @riverpod
method build (line 18) | LogsOverviewState build()
method _addListeners (line 45) | Future<void> _addListeners()
method _computeLogs (line 75) | Future<List<LogEntity>> _computeLogs()
method pause (line 83) | void pause()
method resume (line 89) | void resume()
method clear (line 95) | Future<void> clear()
method filterMessage (line 113) | void filterMessage(String? filter)
method filterLevel (line 122) | Future<void> filterLevel(LogLevel? level)
FILE: lib/features/log/overview/logs_overview_state.dart
class LogsOverviewState (line 8) | @freezed
FILE: lib/features/log/overview/logs_page.dart
class LogsPage (line 17) | class LogsPage extends HookConsumerWidget with PresLogger {
method build (line 21) | Widget build(BuildContext context, WidgetRef ref)
function extractMessage (line 192) | String extractMessage(String message)
FILE: lib/features/per_app_proxy/data/app_proxy_data_source.dart
class AppProxyDataSource (line 10) | abstract interface class AppProxyDataSource {
method updatePkg (line 11) | Future<void> updatePkg({required String pkg, required AppProxyMode mode})
method watchAll (line 12) | Stream<List<AppProxyEntry>> watchAll({required AppProxyMode mode})
method watchFilterForDisplay (line 13) | Stream<List<AppProxyEntry>> watchFilterForDisplay({required Set<String...
method watchActivePackages (line 14) | Stream<List<String>> watchActivePackages({required Set<String> phonePk...
method getPkgsByFlag (line 15) | Future<List<String>> getPkgsByFlag({required PkgFlag flag, required Ap...
method importPkgs (line 16) | Future<void> importPkgs({required PerAppProxyBackup backup})
method applyAutoSelection (line 17) | Future<void> applyAutoSelection({required Set<String> autoList, requir...
method clearAutoSelected (line 18) | Future<void> clearAutoSelected({required AppProxyMode mode})
method revertForceDeselection (line 19) | Future<void> revertForceDeselection({required AppProxyMode mode})
method clearAll (line 20) | Future<int> clearAll({required AppProxyMode mode})
class AppProxyDao (line 23) | @DriftAccessor(tables: [AppProxyEntries])
method updatePkg (line 28) | Future<void> updatePkg({required String pkg, required AppProxyMode mode})
method watchAll (line 65) | Stream<List<AppProxyEntry>> watchAll({required AppProxyMode mode})
method watchFilterForDisplay (line 71) | Stream<List<AppProxyEntry>> watchFilterForDisplay({required Set<String...
method watchActivePackages (line 83) | Stream<List<String>> watchActivePackages({required Set<String> phonePk...
method getPkgsByFlag (line 104) | Future<List<String>> getPkgsByFlag({required PkgFlag flag, required Ap...
method importPkgs (line 116) | Future<void> importPkgs({required PerAppProxyBackup backup})
method applyAutoSelection (line 172) | Future<void> applyAutoSelection({required Set<String> autoList, requir...
method clearAutoSelected (line 207) | Future<void> clearAutoSelected({required AppProxyMode mode})
method revertForceDeselection (line 223) | Future<void> revertForceDeselection({required AppProxyMode mode})
method clearAll (line 237) | Future<int> clearAll({required AppProxyMode mode})
FILE: lib/features/per_app_proxy/data/auto_selection_repository.dart
type AutoSelectionResult (line 11) | enum AutoSelectionResult {
class AutoSelectionRepository (line 21) | abstract interface class AutoSelectionRepository {
method getByAppProxyMode (line 22) | Future<(Set<String>?, AutoSelectionResult)> getByAppProxyMode({AppProx...
method getInclude (line 23) | Future<(Set<String>?, AutoSelectionResult)> getInclude({Region? region})
method getExclude (line 24) | Future<(Set<String>?, AutoSelectionResult)> getExclude({Region? region})
class AutoSelectionRepositoryImpl (line 27) | class AutoSelectionRepositoryImpl with AppLogger implements AutoSelectio...
method getByAppProxyMode (line 33) | Future<(Set<String>?, AutoSelectionResult)> getByAppProxyMode({AppProx...
method getExclude (line 37) | Future<(Set<String>?, AutoSelectionResult)> getExclude({Region? region})
method getInclude (line 41) | Future<(Set<String>?, AutoSelectionResult)> getInclude({Region? region})
method _makeRequest (line 44) | Future<(Set<String>?, AutoSelectionResult)> _makeRequest({required App...
method _genUrl (line 66) | String _genUrl(AppProxyMode mode, Region region)
method _parseToListOfString (line 71) | Set<String> _parseToListOfString(dynamic data)
method _getMode (line 74) | AppProxyMode _getMode()
method _getRegion (line 76) | Region _getRegion()
method _getHttp (line 78) | DioHttpClient _getHttp()
FILE: lib/features/per_app_proxy/data/auto_selection_repository_provider.dart
function autoSelectionRepo (line 8) | AutoSelectionRepository autoSelectionRepo(Ref ref)
FILE: lib/features/per_app_proxy/data/selected_data_provider.dart
function appProxyDataSource (line 9) | AppProxyDataSource appProxyDataSource(Ref ref)
FILE: lib/features/per_app_proxy/model/app_package_info.dart
class AppPackageInfo (line 3) | class AppPackageInfo {
FILE: lib/features/per_app_proxy/model/per_app_proxy_backup.dart
class PerAppProxyBackup (line 6) | @freezed
class PerAppProxyBackupMode (line 16) | @freezed
FILE: lib/features/per_app_proxy/model/per_app_proxy_mode.dart
type PerAppProxyMode (line 3) | enum PerAppProxyMode {
type AppProxyMode (line 32) | enum AppProxyMode {
FILE: lib/features/per_app_proxy/model/pkg_flag.dart
type PkgFlag (line 1) | enum PkgFlag {
FILE: lib/features/per_app_proxy/overview/per_app_proxy_loading_notifier.dart
class AppProxyLoading (line 5) | @Riverpod()
method build (line 8) | bool build()
method doAsync (line 10) | Future<T?> doAsync<T>(Future<T> Function() operation)
FILE: lib/features/per_app_proxy/overview/per_app_proxy_notifier.dart
class PerAppProxy (line 26) | @riverpod
method build (line 31) | Stream<Map<String, int>> build(AppProxyMode? mode)
method updatePkg (line 45) | Future<void> updatePkg(String pkg)
method applyAutoSelection (line 50) | Future<bool> applyAutoSelection()
method revertForceDeselection (line 80) | Future<void> revertForceDeselection()
method clearAutoSelected (line 85) | Future<void> clearAutoSelected()
method clearAll (line 92) | Future<void> clearAll()
method importClipboard (line 98) | Future<bool> importClipboard()
method importFile (line 112) | Future<bool> importFile()
method exportClipboard (line 129) | Future<bool> exportClipboard()
method exportFile (line 148) | Future<bool> exportFile()
method shareOnGithub (line 175) | Future<bool> shareOnGithub()
method _importJson (line 217) | Future<void> _importJson(String input)
method _exportJson (line 222) | Future<String> _exportJson()
FILE: lib/features/per_app_proxy/overview/per_app_proxy_page.dart
class PerAppProxyPage (line 22) | class PerAppProxyPage extends HookConsumerWidget with PresLogger {
method _getPriority (line 25) | int _getPriority(AppPackageInfo app, Map<String, int> selected)
method getApps (line 37) | Future<Set<AppPackageInfo>> getApps(bool hideSystem)
method build (line 46) | Widget build(BuildContext context, WidgetRef ref)
method listener (line 110) | void listener()
FILE: lib/features/per_app_proxy/overview/per_app_proxy_service_notifier.dart
class PerAppProxyService (line 14) | @riverpod
method build (line 20) | Future<void> build()
method _autoSelectionUpdate (line 40) | Future<void> _autoSelectionUpdate()
FILE: lib/features/profile/add/add_profile_modal.dart
class AddProfileModal (line 15) | class AddProfileModal extends HookConsumerWidget {
method build (line 21) | Widget build(BuildContext context, WidgetRef ref)
class AddProfileOptions (line 51) | class AddProfileOptions extends HookConsumerWidget {
method build (line 54) | Widget build(BuildContext context, WidgetRef ref)
class AddProfileManual (line 90) | class AddProfileManual extends HookConsumerWidget {
method _genSliderText (line 93) | String _genSliderText(Translations t, int sliderValue)
method build (line 105) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/profile/add/model/free_profiles_model.dart
class FreeProfilesModel (line 8) | @freezed
class FreeProfile (line 15) | @freezed
class StringByLocale (line 29) | @freezed
class ListOfStringByLocale (line 36) | @freezed
FILE: lib/features/profile/add/widgets/fix_btn.dart
class FixBtn (line 6) | class FixBtn extends ConsumerWidget {
method build (line 15) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/profile/add/widgets/fix_btns.dart
class FixBtns (line 12) | class FixBtns extends ConsumerWidget {
method build (line 17) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/profile/add/widgets/free_btn.dart
class FreeBtn (line 9) | class FreeBtn extends ConsumerWidget {
method build (line 16) | Widget build(BuildContext context, WidgetRef ref)
class Feature (line 75) | class Feature extends ConsumerWidget {
method build (line 82) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/profile/add/widgets/free_btns.dart
class FreeBtns (line 12) | class FreeBtns extends ConsumerWidget {
method build (line 18) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/profile/add/widgets/loading.dart
class ProfileLoading (line 7) | class ProfileLoading extends ConsumerWidget {
method build (line 11) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/profile/add/widgets/nav_bar.dart
class NavBar (line 9) | class NavBar extends ConsumerWidget {
method build (line 13) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/profile/data/profile_data_mapper.dart
function toInsertEntry (line 8) | ProfileEntriesCompanion toInsertEntry()
function toUpdateEntry (line 39) | ProfileEntriesCompanion toUpdateEntry()
function toEntity (line 65) | ProfileEntity toEntity()
FILE: lib/features/profile/data/profile_data_providers.dart
function profileRepository (line 16) | Future<ProfileRepository> profileRepository(Ref ref)
function profileDataSource (line 29) | ProfileDataSource profileDataSource(Ref ref)
function profilePathResolver (line 34) | ProfilePathResolver profilePathResolver(Ref ref)
function profileParser (line 39) | ProfileParser profileParser(Ref ref)
FILE: lib/features/profile/data/profile_data_source.dart
class ProfileDataSource (line 10) | abstract interface class ProfileDataSource {
method getById (line 11) | Future<ProfileEntry?> getById(String id)
method getByUrl (line 12) | Future<ProfileEntry?> getByUrl(String url)
method getByName (line 13) | Future<ProfileEntry?> getByName(String name)
method watchActiveProfile (line 14) | Stream<ProfileEntry?> watchActiveProfile()
method watchProfilesCount (line 15) | Stream<int> watchProfilesCount()
method watchAll (line 16) | Stream<List<ProfileEntry>> watchAll({required ProfilesSort sort, requi...
method insert (line 17) | Future<void> insert(ProfileEntriesCompanion entry)
method edit (line 18) | Future<void> edit(String id, ProfileEntriesCompanion entry)
method deleteById (line 19) | Future<void> deleteById(String id, bool isActive)
class ProfileDao (line 24) | @DriftAccessor(tables: [ProfileEntries])
method getById (line 29) | Future<ProfileEntry?> getById(String id)
method getByUrl (line 34) | Future<ProfileEntry?> getByUrl(String url)
method getByName (line 42) | Future<ProfileEntry?> getByName(String name)
method watchActiveProfile (line 50) | Stream<ProfileEntry?> watchActiveProfile()
method watchProfilesCount (line 59) | Stream<int> watchProfilesCount()
method watchAll (line 65) | Stream<List<ProfileEntry>> watchAll({required ProfilesSort sort, requi...
method insert (line 87) | Future<void> insert(ProfileEntriesCompanion entry)
method edit (line 101) | Future<void> edit(String id, ProfileEntriesCompanion entry)
method deleteById (line 116) | Future<void> deleteById(String id, bool isActive)
FILE: lib/features/profile/data/profile_parser.dart
class ProfileParser (line 30) | class ProfileParser {
method addLocal (line 56) | TaskEither<ProfileFailure, ProfileEntriesCompanion> addLocal({
method addRemote (line 88) | TaskEither<ProfileFailure, ProfileEntriesCompanion> addRemote({
method updateRemote (line 116) | TaskEither<ProfileFailure, ProfileEntriesCompanion> updateRemote({
method offlineUpdate (line 134) | Either<ProfileFailure, ProfileEntriesCompanion> offlineUpdate({
method _downloadProfile (line 144) | TaskEither<ProfileFailure, Map<String, dynamic>> _downloadProfile(
method expandRemoteLinesInParallel (line 179) | Future<void> expandRemoteLinesInParallel({
method worker (line 193) | Future<void> worker()
method populateHeaders (line 239) | Either<ProfileFailure, Map<String, dynamic>> populateHeaders({
method _mergeAndValidateHeaders (line 247) | Map<String, dynamic> _mergeAndValidateHeaders(
method _parseHeadersFromContent (line 265) | Map<String, dynamic> _parseHeadersFromContent(String content)
method _parseSubscriptionInfo (line 283) | SubscriptionInfo? _parseSubscriptionInfo(String subInfoStr)
method parse (line 300) | Either<ProfileFailure, ProfileEntity> parse({required String tempFileP...
method protocol (line 395) | String protocol(String content)
method applyProfileOverride (line 426) | Map<String, dynamic> applyProfileOverride(Map<String, dynamic> main, S...
method _mergeJson (line 436) | Map<String, dynamic> _mergeJson(Map<String, dynamic> main, Map<String,...
FILE: lib/features/profile/data/profile_path_resolver.dart
class ProfilePathResolver (line 5) | class ProfilePathResolver {
method file (line 12) | File file(String fileName)
method tempFile (line 16) | File tempFile(String fileName)
FILE: lib/features/profile/data/profile_repository.dart
class ProfileRepository (line 20) | abstract interface class ProfileRepository {
method init (line 21) | TaskEither<ProfileFailure, Unit> init()
method getById (line 22) | TaskEither<ProfileFailure, ProfileEntity?> getById(String id)
method setAsActive (line 23) | TaskEither<ProfileFailure, Unit> setAsActive(String id)
method deleteById (line 24) | TaskEither<ProfileFailure, Unit> deleteById(String id, bool isActive)
method watchActiveProfile (line 25) | Stream<Either<ProfileFailure, ProfileEntity?>> watchActiveProfile()
method watchHasAnyProfile (line 26) | Stream<Either<ProfileFailure, bool>> watchHasAnyProfile()
method watchAll (line 27) | Stream<Either<ProfileFailure, List<ProfileEntity>>> watchAll({
method upsertRemote (line 31) | TaskEither<ProfileFailure, Unit> upsertRemote(String url, {UserOverrid...
method addLocal (line 32) | TaskEither<ProfileFailure, Unit> addLocal(String content, {UserOverrid...
method offlineUpdate (line 33) | TaskEither<ProfileFailure, Unit> offlineUpdate(ProfileEntity nProfile,...
method validateConfig (line 34) | TaskEither<ProfileFailure, Unit> validateConfig(String path, String te...
method generateConfig (line 35) | TaskEither<ProfileFailure, String> generateConfig(String id)
method getRawConfig (line 36) | TaskEither<ProfileFailure, String> getRawConfig(String id)
class ProfileRepositoryImpl (line 39) | class ProfileRepositoryImpl with ExceptionHandler, InfraLogger implement...
method init (line 59) | TaskEither<ProfileFailure, Unit> init()
method getById (line 72) | TaskEither<ProfileFailure, ProfileEntity?> getById(String id)
method setAsActive (line 80) | TaskEither<ProfileFailure, Unit> setAsActive(String id)
method deleteById (line 88) | TaskEither<ProfileFailure, Unit> deleteById(String id, bool isActive)
method watchActiveProfile (line 97) | Stream<Either<ProfileFailure, ProfileEntity?>> watchActiveProfile()
method watchHasAnyProfile (line 108) | Stream<Either<ProfileFailure, bool>> watchHasAnyProfile()
method watchAll (line 116) | Stream<Either<ProfileFailure, List<ProfileEntity>>> watchAll({
method upsertRemote (line 127) | TaskEither<ProfileFailure, Unit> upsertRemote(String url, {UserOverrid...
method addLocal (line 179) | TaskEither<ProfileFailure, Unit> addLocal(String content, {UserOverrid...
method offlineUpdate (line 204) | TaskEither<ProfileFailure, Unit> offlineUpdate(ProfileEntity profile, ...
method validateConfig (line 241) | TaskEither<ProfileFailure, Unit> validateConfig(String path, String te...
method generateConfig (line 254) | TaskEither<ProfileFailure, String> generateConfig(String id)
method getRawConfig (line 259) | TaskEither<ProfileFailure, String> getRawConfig(String id)
FILE: lib/features/profile/details/json_editor.dart
type _OptionItems (line 30) | typedef _OptionItems = String;
type _SearchActions (line 32) | enum _SearchActions { next, prev }
type Editors (line 35) | enum Editors { tree, text }
class JsonEditor (line 367) | class JsonEditor extends StatefulWidget {
method createState (line 471) | State<JsonEditor> createState()
class _JsonEditorState (line 474) | class _JsonEditorState extends State<JsonEditor> {
method getExpandedParents (line 493) | Map<String, bool> getExpandedParents()
method callOnChanged (line 509) | void callOnChanged()
method parseData (line 517) | void parseData(String value)
method copyData (line 535) | void copyData()
method updateParentObjects (line 539) | bool updateParentObjects(List newExpandList)
method findMatchingKeys (line 551) | void findMatchingKeys(data, String text, List nestedParents)
method onSearch (line 580) | void onSearch(String text)
method getOffset (line 603) | int getOffset(List toFind)
method calculateOffset (line 607) | void calculateOffset(data, List parents, List toFind)
method scrollTo (line 642) | void scrollTo(int index)
method onSearchAction (line 655) | void onSearchAction(_SearchActions action)
method expandAllObjects (line 673) | void expandAllObjects(data, List expandedList)
method wrapWithHorizontolScroll (line 693) | Widget wrapWithHorizontolScroll(Widget child)
method initState (line 701) | void initState()
method dispose (line 710) | void dispose()
method build (line 717) | Widget build(BuildContext context)
class _Holder (line 867) | class _Holder extends StatefulWidget {
method getKeyPath (line 890) | String getKeyPath()
method createState (line 902) | State<_Holder> createState()
class _HolderState (line 905) | class _HolderState extends State<_Holder> {
method _toggleState (line 908) | void _toggleState()
method onSelected (line 919) | void onSelected(_OptionItems selectedItem)
method onKeyChanged (line 969) | void onKeyChanged(Object key)
method onValueChanged (line 977) | void onValueChanged(Object value)
method wrapWithColoredBox (line 983) | Widget wrapWithColoredBox(Widget child, String key)
method getChildSummary (line 990) | String getChildSummary(_Holder widget)
method build (line 1015) | Widget build(BuildContext context)
class _ReplaceTextWithField (line 1212) | class _ReplaceTextWithField extends StatefulWidget {
method createState (line 1230) | State<_ReplaceTextWithField> createState()
class _ReplaceTextWithFieldState (line 1233) | class _ReplaceTextWithFieldState extends State<_ReplaceTextWithField> {
method handleChange (line 1240) | void handleChange()
method wrapWithColoredBox (line 1256) | Widget wrapWithColoredBox(String keyName)
method initState (line 1267) | void initState()
method dispose (line 1294) | void dispose()
method build (line 1301) | Widget build(BuildContext context)
class _Options (line 1391) | class _Options<T> extends StatelessWidget {
method build (line 1397) | Widget build(BuildContext context)
class _PopupMenuWidget (line 1559) | class _PopupMenuWidget extends PopupMenuEntry<Never> {
method represents (line 1568) | bool represents(_)
method createState (line 1571) | State<_PopupMenuWidget> createState()
class _PopupMenuWidgetState (line 1574) | class _PopupMenuWidgetState extends State<_PopupMenuWidget> {
method build (line 1576) | Widget build(BuildContext context)
class _SearchField (line 1581) | class _SearchField extends StatelessWidget {
method build (line 1588) | Widget build(BuildContext context)
function _getSpace (line 1638) | List<String> _getSpace(int count)
function _stringifyData (line 1648) | String _stringifyData(data, int spacing, [bool isLast = false])
FILE: lib/features/profile/details/profile_details_notifier.dart
class ProfileDetailsNotifier (line 18) | @riverpod
method build (line 23) | Future<ProfileDetailsState> build(String id)
method doAsync (line 73) | Future<T?> doAsync<T>(Future<T> Function() operation)
method setUserOverride (line 83) | void setUserOverride(UserOverride userOverride)
method setContent (line 91) | void setContent(String configContent)
method save (line 97) | Future<bool> save()
FILE: lib/features/profile/details/profile_details_page.dart
class ProfileDetailsPage (line 19) | class ProfileDetailsPage extends HookConsumerWidget with PresLogger {
method _genSliderText (line 24) | String _genSliderText(Translations t, int sliderValue)
method build (line 36) | Widget build(BuildContext context, WidgetRef ref)
method _buildSubProp (line 305) | InlineSpan _buildSubProp(IconData icon, String text, String semanticLa...
function isJson (line 316) | bool isJson(String value)
FILE: lib/features/profile/details/profile_details_state.dart
class ProfileDetailsState (line 7) | @freezed
FILE: lib/features/profile/model/profile_entity.dart
type ProfileType (line 10) | enum ProfileType { remote, local }
class ProfileEntity (line 12) | @freezed
class ProfileOptions (line 40) | @freezed
class SubscriptionInfo (line 45) | @freezed
class UserOverride (line 71) | @freezed
method toStr (line 87) | String toStr()
method fromStr (line 89) | UserOverride? fromStr(String? str)
method _migrate (line 97) | Map<String, dynamic> _migrate(Map<String, Object?> json)
FILE: lib/features/profile/model/profile_failure.dart
class ProfileFailure (line 8) | @freezed
FILE: lib/features/profile/model/profile_sort_enum.dart
type ProfilesSort (line 5) | enum ProfilesSort {
type SortMode (line 22) | enum SortMode { ascending, descending }
FILE: lib/features/profile/notifier/active_profile_notifier.dart
class ActiveProfile (line 10) | @Riverpod(keepAlive: true)
method build (line 13) | Stream<ProfileEntity?> build()
function hasAnyProfile (line 21) | Stream<bool> hasAnyProfile(Ref ref)
FILE: lib/features/profile/notifier/profile_notifier.dart
class AddProfileNotifier (line 27) | @riverpod
method build (line 30) | AsyncValue<Unit?> build()
method addClipboard (line 63) | Future<void> addClipboard(String rawInput)
method addManual (line 96) | Future<void> addManual({required String url, required UserOverride use...
class UpdateProfileNotifier (line 117) | @riverpod
method build (line 120) | AsyncValue<Unit?> build(String id)
method updateProfile (line 139) | Future<void> updateProfile(RemoteProfileEntity profile)
class FreeSwitchNotifier (line 167) | @riverpod
method build (line 170) | bool build()
method onChange (line 174) | Future<void> onChange(bool value)
class AddProfilePageNotifier (line 177) | @riverpod
method build (line 180) | AddProfilePages build()
method goOptions (line 182) | void goOptions()
method goManual (line 183) | void goManual()
type AddProfilePages (line 186) | enum AddProfilePages { options, manual }
class FreeProfilesNotifier (line 188) | @riverpod
method build (line 191) | Future<List<FreeProfile>> build()
function freeProfilesFilteredByRegion (line 204) | Future<List<FreeProfile>> freeProfilesFilteredByRegion(Ref ref)
FILE: lib/features/profile/notifier/profiles_update_notifier.dart
type ProfileUpdateStatus (line 15) | typedef ProfileUpdateStatus = ({String name, bool success});
class ForegroundProfilesUpdateNotifier (line 17) | @Riverpod(keepAlive: true)
method build (line 23) | Stream<ProfileUpdateStatus?> build()
method trigger (line 52) | Future<void> trigger()
method updateProfiles (line 59) | Future<void> updateProfiles()
FILE: lib/features/profile/overview/profiles_modal.dart
class ProfilesModal (line 13) | class ProfilesModal extends HookConsumerWidget {
method build (line 17) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/profile/overview/profiles_notifier.dart
class ProfilesSortNotifier (line 18) | @riverpod
method changeSort (line 25) | void changeSort(ProfilesSort sortBy)
method toggleMode (line 27) | void toggleMode()
class ProfilesNotifier (line 31) | @riverpod
method build (line 34) | Stream<List<ProfileEntity>> build()
method selectActiveProfile (line 41) | Future<Unit> selectActiveProfile(String id)
method deleteProfile (line 50) | Future<void> deleteProfile(ProfileEntity profile)
method exportConfigToClipboard (line 71) | Future<void> exportConfigToClipboard(ProfileEntity profile)
FILE: lib/features/profile/overview/profiles_page.dart
class ProfilesPage (line 13) | class ProfilesPage extends HookConsumerWidget {
method build (line 17) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/profile/widget/profile_tile.dart
class ProfileTile (line 25) | class ProfileTile extends HookConsumerWidget {
method build (line 36) | Widget build(BuildContext context, WidgetRef ref)
class ProfileActionButton (line 182) | class ProfileActionButton extends HookConsumerWidget {
method build (line 189) | Widget build(BuildContext context, WidgetRef ref)
class ProfileActionsMenu (line 229) | class ProfileActionsMenu extends HookConsumerWidget {
method build (line 237) | Widget build(BuildContext context, WidgetRef ref)
class ProfileSubscriptionInfo (line 317) | class ProfileSubscriptionInfo extends HookConsumerWidget {
method remainingText (line 322) | (String, Color?) remainingText(TranslationsEn t, ThemeData theme)
method build (line 335) | Widget build(BuildContext context, WidgetRef ref)
class NewTrafficSubscriptionInfo (line 374) | class NewTrafficSubscriptionInfo extends HookConsumerWidget {
method build (line 380) | Widget build(BuildContext context, WidgetRef ref)
class NewDaySubscriptionInfo (line 416) | class NewDaySubscriptionInfo extends HookConsumerWidget {
method remainingText (line 421) | (String, Color?) remainingText(TranslationsEn t, ThemeData theme)
method build (line 434) | Widget build(BuildContext context, WidgetRef ref)
class NewDayTrafficSubscriptionInfo (line 463) | class NewDayTrafficSubscriptionInfo extends HookConsumerWidget {
method remainingText (line 468) | (String, Color?) remainingText(TranslationsEn t, ThemeData theme)
method build (line 481) | Widget build(BuildContext context, WidgetRef ref)
class NewSiteSubscriptionInfo (line 518) | class NewSiteSubscriptionInfo extends HookConsumerWidget {
method build (line 524) | Widget build(BuildContext context, WidgetRef ref)
class RemainingTrafficIndicator (line 558) | class RemainingTrafficIndicator extends StatelessWidget {
method build (line 564) | Widget build(BuildContext context)
FILE: lib/features/profile/widget/profile_tile_main.dart
class ProfileTileMain (line 13) | class ProfileTileMain extends HookConsumerWidget {
method _launchUrlWithCheck (line 33) | Future<void> _launchUrlWithCheck(BuildContext context, WidgetRef ref, ...
method build (line 50) | Widget build(BuildContext context, WidgetRef ref)
method _getLinkIcon (line 170) | IconData _getLinkIcon(String url, [IconData? icon])
method _formatSupportLink (line 192) | String _formatSupportLink(String url)
method _getProgressColor (line 214) | Color _getProgressColor(double ratio)
method _BandwithUsageRow (line 220) | Widget _BandwithUsageRow(SubscriptionInfo subInfo)
class _UsageRow (line 232) | class _UsageRow extends StatelessWidget {
method build (line 241) | Widget build(BuildContext context)
class _InfoItem (line 273) | class _InfoItem extends StatelessWidget {
method build (line 281) | Widget build(BuildContext context)
FILE: lib/features/proxy/active/active_proxy_card.dart
class ActiveProxyFooter (line 13) | class ActiveProxyFooter extends ConsumerWidget with InfraLogger {
method build (line 17) | Widget build(BuildContext context, WidgetRef ref)
method handleUrlTest (line 33) | Future<void> handleUrlTest()
function getRealOutboundTag (line 119) | String getRealOutboundTag(OutboundInfo group)
FILE: lib/features/proxy/active/active_proxy_delay_indicator.dart
class ActiveProxyDelayIndicator (line 10) | class ActiveProxyDelayIndicator extends HookConsumerWidget with InfraLog...
method build (line 14) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/proxy/active/active_proxy_notifier.dart
class IpInfoNotifier (line 19) | @riverpod
method build (line 22) | Future<oldipinfo.IpInfo> build()
method refresh (line 64) | Future<void> refresh()
class ActiveProxyNotifier (line 74) | @Riverpod(keepAlive: true)
method build (line 77) | Stream<OutboundInfo> build()
method urlTest (line 93) | Future<void> urlTest(String? groupTag_)
FILE: lib/features/proxy/active/ip_widget.dart
class IPText (line 22) | class IPText extends HookConsumerWidget {
method build (line 30) | Widget build(BuildContext context, WidgetRef ref)
class UnknownIPText (line 69) | class UnknownIPText extends HookConsumerWidget {
method build (line 77) | Widget build(BuildContext context, WidgetRef ref)
class IPCountryFlag (line 96) | class IPCountryFlag extends HookConsumerWidget {
method build (line 113) | Widget build(BuildContext context, WidgetRef ref)
class OrgIconData (line 151) | class OrgIconData {
class OrganisationFlag (line 173) | class OrganisationFlag extends HookConsumerWidget {
method getFlagWidget (line 180) | Widget getFlagWidget({
method build (line 201) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/proxy/data/proxy_data_providers.dart
function proxyRepository (line 10) | ProxyRepository proxyRepository(Ref ref)
FILE: lib/features/proxy/data/proxy_repository.dart
class ProxyRepository (line 12) | abstract interface class ProxyRepository {
method watchProxies (line 14) | Stream<Either<ProxyFailure, OutboundGroup?>> watchProxies()
method watchActiveProxies (line 15) | Stream<Either<ProxyFailure, List<OutboundGroup>>> watchActiveProxies()
method getCurrentIpInfo (line 16) | TaskEither<ProxyFailure, oldipinfo.IpInfo> getCurrentIpInfo(CancelToke...
method selectProxy (line 17) | TaskEither<ProxyFailure, Unit> selectProxy(String groupTag, String out...
method urlTest (line 18) | TaskEither<ProxyFailure, Unit> urlTest(String groupTag)
class ProxyRepositoryImpl (line 21) | class ProxyRepositoryImpl with ExceptionHandler, InfraLogger implements ...
method watchProxies (line 63) | Stream<Either<ProxyFailure, OutboundGroup?>> watchProxies()
method watchActiveProxies (line 71) | Stream<Either<ProxyFailure, List<OutboundGroup>>> watchActiveProxies()
method selectProxy (line 79) | TaskEither<ProxyFailure, Unit> selectProxy(String groupTag, String out...
method urlTest (line 87) | TaskEither<ProxyFailure, Unit> urlTest(String groupTag)
method getCurrentIpInfo (line 103) | TaskEither<ProxyFailure, oldipinfo.IpInfo> getCurrentIpInfo(CancelToke...
FILE: lib/features/proxy/model/ip_info_entity.dart
class IpInfo (line 5) | @MappableClass()
method fromIpInfoIoJson (line 25) | IpInfo fromIpInfoIoJson(Map<String, dynamic> json)
method fromIpApiCoJson (line 47) | IpInfo fromIpApiCoJson(Map<String, dynamic> json)
method fromIpSbJson (line 71) | IpInfo fromIpSbJson(Map<String, dynamic> json)
method fromIpwhoIsJson (line 95) | IpInfo fromIpwhoIsJson(Map<String, dynamic> json)
method fromGeolocationDbComJson (line 119) | IpInfo fromGeolocationDbComJson(Map<String, dynamic> json)
FILE: lib/features/proxy/model/proxy_entity.dart
class ProxyGroupEntity (line 6) | @freezed
class ProxyItemEntity (line 20) | @freezed
function _sanitizedTag (line 36) | String _sanitizedTag(String tag)
FILE: lib/features/proxy/model/proxy_failure.dart
class ProxyFailure (line 7) | @freezed
FILE: lib/features/proxy/overview/proxies_overview_notifier.dart
type ProxiesSort (line 20) | enum ProxiesSort {
class ProxiesSortNotifier (line 34) | @Riverpod(keepAlive: true)
method build (line 45) | ProxiesSort build()
method update (line 51) | Future<void> update(ProxiesSort value)
class ProxiesOverviewNotifier (line 57) | @riverpod
method build (line 60) | Stream<OutboundGroup?> build()
method _sortOutbounds (line 140) | Future<OutboundGroup?> _sortOutbounds(OutboundGroup? proxies, ProxiesS...
method changeProxy (line 204) | Future<void> changeProxy(String groupTag, String outboundTag)
method urlTest (line 221) | Future<void> urlTest(String groupTag)
FILE: lib/features/proxy/overview/proxies_overview_page.dart
class ProxiesOverviewPage (line 13) | class ProxiesOverviewPage extends HookConsumerWidget with PresLogger {
method build (line 17) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/proxy/widget/proxy_tile.dart
class ProxyTile (line 10) | class ProxyTile extends HookConsumerWidget with PresLogger {
method build (line 18) | Widget build(BuildContext context, WidgetRef ref)
method delayColor (line 68) | Color delayColor(BuildContext context, int delay)
FILE: lib/features/route_rules/notifier/android_apps_notifier.dart
function apps (line 14) | Future<List<AppInfo>> apps(Ref ref)
function appsHideSystem (line 20) | Future<List<AppInfo>> appsHideSystem(Ref ref)
function appPackages (line 26) | Future<List<String>> appPackages(Ref ref)
function filteredByHideSystem (line 32) | Future<List<AppInfo>> filteredByHideSystem(Ref ref)
function uninstalledPackages (line 38) | Future<List<String>> uninstalledPackages(Ref ref, int? ruleListOrder)
function filterBySearch (line 45) | Future<List<dynamic>> filterBySearch(Ref ref, int? ruleListOrder)
class HideSystemNotifier (line 72) | @riverpod
method build (line 75) | bool build()
method show (line 79) | void show()
method hide (line 81) | void hide()
class SearchQueryNotifier (line 84) | @riverpod
method build (line 87) | String build()
method setQuery (line 89) | void setQuery(String query)
method clear (line 91) | void clear()
class SelectedPackagesNotifier (line 94) | @riverpod
method build (line 100) | List<String> build(int? ruleListOrder)
method onChanged (line 107) | void onChanged(String packageName)
method clearSelection (line 116) | void clearSelection()
method _save (line 121) | void _save()
FILE: lib/features/route_rules/notifier/generic_list_notifier.dart
class GenericListNotifier (line 7) | @riverpod
method build (line 13) | List<dynamic> build(int? ruleListOrder, RuleEnum ruleEnum)
method add (line 21) | void add(dynamic value)
method update (line 27) | void update(int index, dynamic value)
method remove (line 33) | void remove(int index)
method reset (line 38) | void reset()
method _save (line 43) | void _save()
method _isValid (line 45) | bool _isValid(dynamic value)
FILE: lib/features/route_rules/notifier/rule_notifier.dart
type RuleEnum (line 12) | enum RuleEnum {
class RuleNotifier (line 56) | @riverpod
method build (line 61) | Rule build(int? listOrder)
method update (line 70) | void update<T>(RuleEnum key, T value)
method save (line 80) | void save()
function isRuleEdited (line 92) | bool isRuleEdited(Ref ref, int? listOrder)
class DialogCheckboxNotifier (line 98) | @riverpod
method build (line 101) | List<ProtobufEnum> build(List<ProtobufEnum> selected)
method update (line 105) | void update(ProtobufEnum value)
FILE: lib/features/route_rules/notifier/rules_notifier.dart
class RulesNotifier (line 16) | @riverpod
method build (line 21) | List<Rule> build()
method addRule (line 31) | Future<void> addRule(Rule rule)
method updateRule (line 41) | Future<void> updateRule(Rule rule)
method deleteRule (line 50) | Future<void> deleteRule(int listOrder)
method reorder (line 56) | Future<void> reorder(int oldIndex, int newIndex)
method updateEnabled (line 64) | Future<void> updateEnabled(bool enabled, int listOrder)
method exportJsonToClipboard (line 72) | Future<bool> exportJsonToClipboard()
method importRulesFromClipboard (line 92) | Future<bool> importRulesFromClipboard()
method saveRulesAsJsonFile (line 110) | Future<bool> saveRulesAsJsonFile()
method importRulesFromJsonFile (line 137) | Future<bool> importRulesFromJsonFile()
method resetRules (line 157) | Future<void> resetRules()
method _updateFile (line 164) | Future<void> _updateFile()
method _updateListOrder (line 173) | List<Rule> _updateListOrder(List<Rule> rules)
FILE: lib/features/route_rules/overview/android_apps_page.dart
class AndroidAppsPage (line 9) | class AndroidAppsPage extends HookConsumerWidget {
method build (line 15) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/route_rules/overview/generic_list_page.dart
class GenericListPage (line 10) | class GenericListPage extends HookConsumerWidget {
method build (line 18) | Widget build(BuildContext context, WidgetRef ref)
method addNewValue (line 23) | Future<void> addNewValue()
class GenericListTile (line 79) | class GenericListTile extends ConsumerWidget {
method build (line 87) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/route_rules/overview/rule_page.dart
class RulePage (line 19) | class RulePage extends HookConsumerWidget {
method getTitle (line 24) | String getTitle(Map<String, String> t, RuleEnum key)
method build (line 27) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/route_rules/overview/rules_page.dart
class RulesPage (line 9) | class RulesPage extends HookConsumerWidget {
method build (line 13) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/route_rules/widget/rule_tile.dart
class RuleTile (line 14) | class RuleTile extends HookConsumerWidget {
method detailChipsValue (line 20) | Map detailChipsValue()
method mergeTranslation (line 33) | Map<String, String> mergeTranslation(List<Map<String, String>> transla...
method handleDelete (line 37) | Future handleDelete(BuildContext context, WidgetRef ref)
method build (line 52) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/route_rules/widget/setting_checkbox.dart
class SettingCheckbox (line 7) | class SettingCheckbox extends ConsumerWidget {
method textWithTranslation (line 25) | String textWithTranslation(List<ProtobufEnum> e, WidgetRef ref)
method build (line 35) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/route_rules/widget/setting_detail_chips.dart
class SettingDetailChips (line 9) | class SettingDetailChips<T extends Object> extends HookConsumerWidget {
method build (line 26) | Widget build(BuildContext context, WidgetRef ref)
method listener (line 32) | void listener()
method scrollToEnd (line 41) | void scrollToEnd()
method scrollToStart (line 49) | void scrollToStart()
class SettingDetailChip (line 115) | class SettingDetailChip<T extends Object> extends ConsumerWidget {
method valueByType (line 129) | Widget valueByType(T value, ThemeData theme)
method tText (line 143) | Widget tText(String value, ThemeData theme)
method build (line 152) | Widget build(BuildContext context, WidgetRef ref)
class AndroidAppInfo (line 163) | class AndroidAppInfo extends HookConsumerWidget {
method useEllipsis (line 168) | String useEllipsis()
method getAppInfo (line 176) | Future<AppInfo?> getAppInfo()
method build (line 179) | Widget build(BuildContext context, WidgetRef ref)
class ScrollBtn (line 209) | class ScrollBtn extends ConsumerWidget {
method build (line 216) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/route_rules/widget/setting_divider.dart
class SettingDivider (line 5) | class SettingDivider extends ConsumerWidget {
method build (line 11) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/route_rules/widget/setting_generic_list.dart
class SettingGenericList (line 7) | class SettingGenericList<T extends Object> extends ConsumerWidget {
method build (line 26) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/route_rules/widget/setting_radio.dart
class SettingRadio (line 5) | class SettingRadio<T> extends ConsumerWidget {
method textWithTranslation (line 23) | String textWithTranslation(T e)
method build (line 29) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/route_rules/widget/setting_text.dart
class SettingText (line 6) | class SettingText extends ConsumerWidget {
method build (line 23) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/settings/data/battery_optimization_repository.dart
class BatteryOptimizationRepository (line 6) | abstract interface class BatteryOptimizationRepository {
method isIgnoringBatteryOptimizations (line 7) | Future<bool?> isIgnoringBatteryOptimizations()
method requestIgnoreBatteryOptimizations (line 8) | Future<bool?> requestIgnoreBatteryOptimizations()
class BatteryOptimizationRepositoryImpl (line 11) | class BatteryOptimizationRepositoryImpl with ExceptionHandler, InfraLogg...
method isIgnoringBatteryOptimizations (line 15) | Future<bool?> isIgnoringBatteryOptimizations()
method requestIgnoreBatteryOptimizations (line 28) | Future<bool?> requestIgnoreBatteryOptimizations()
FILE: lib/features/settings/data/config_option_data_providers.dart
function configOptionRepository (line 10) | ConfigOptionRepository configOptionRepository(Ref ref)
FILE: lib/features/settings/data/config_option_repository.dart
class ConfigOptions (line 18) | abstract class ConfigOptions {
class ConfigOptionRepository (line 490) | class ConfigOptionRepository with ExceptionHandler, InfraLogger {
method fullOptions (line 497) | Either<ConfigOptionFailure, SingboxConfigOption> fullOptions()
method fullOptionsOverrided (line 500) | Either<ConfigOptionFailure, SingboxConfigOption> fullOptionsOverrided(...
FILE: lib/features/settings/model/config_option_failure.dart
class ConfigOptionFailure (line 7) | @freezed
FILE: lib/features/settings/model/settings_failure.dart
class SettingsFailure (line 7) | @freezed
FILE: lib/features/settings/notifier/battery_optimization/battery_optimizations_notifier.dart
class BatteryOptimizationNotifier (line 6) | @riverpod
method build (line 9) | Future<bool> build()
method requestToIgnore (line 13) | Future<void> requestToIgnore()
FILE: lib/features/settings/notifier/config_option/config_option_notifier.dart
class ConfigOptionNotifier (line 21) | @Riverpod(keepAlive: true)
method build (line 24) | Future<bool> build()
method _exportJson (line 50) | Future<String?> _exportJson(bool excludePrivate)
method exportJsonClipboard (line 71) | Future<bool> exportJsonClipboard({bool excludePrivate = true})
method exportJsonFile (line 91) | Future<bool> exportJsonFile({bool excludePrivate = true})
method _importJson (line 119) | Future<void> _importJson(String input)
method importFromClipboard (line 135) | Future<bool> importFromClipboard()
method importFromJsonFile (line 150) | Future<bool> importFromJsonFile()
method resetOption (line 168) | Future<void> resetOption()
FILE: lib/features/settings/notifier/reset_tunnel/reset_tunnel_notifier.dart
class ResetTunnelNotifier (line 7) | @riverpod
method build (line 10) | Future<void> build()
method run (line 12) | Future<void> run()
FILE: lib/features/settings/notifier/warp_option/warp_option_notifier.dart
class WarpOptionNotifier (line 15) | @riverpod
method build (line 20) | AsyncValue<String> build()
method genWarps (line 33) | Future<void> genWarps({bool showToast = true})
method _genWarpConfig (line 54) | Future<String?> _genWarpConfig()
method _genWarp2Config (line 76) | Future<String?> _genWarp2Config()
class WarpLicenseNotifier (line 98) | @riverpod
method build (line 103) | bool build()
method agree (line 108) | Future<void> agree()
FILE: lib/features/settings/overview/sections/dns_options_page.dart
class DnsOptionsPage (line 8) | class DnsOptionsPage extends HookConsumerWidget {
method build (line 11) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/settings/overview/sections/general_page.dart
class GeneralPage (line 16) | class GeneralPage extends HookConsumerWidget {
method build (line 19) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/settings/overview/sections/inbound_options_page.dart
class InboundOptionsPage (line 11) | class InboundOptionsPage extends HookConsumerWidget {
method build (line 14) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/settings/overview/sections/route_options_page.dart
class RouteOptionsPage (line 15) | class RouteOptionsPage extends HookConsumerWidget {
method build (line 18) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/settings/overview/sections/tls_tricks_page.dart
class TlsTricksPage (line 8) | class TlsTricksPage extends HookConsumerWidget {
method _presentFragmentPackets (line 11) | String _presentFragmentPackets(TranslationsEn t, String value)
method build (line 22) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/settings/overview/sections/warp_options_page.dart
class WarpOptionsPage (line 11) | class WarpOptionsPage extends HookConsumerWidget {
method build (line 14) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/settings/overview/settings_page.dart
type ConfigOptionSection (line 12) | enum ConfigOptionSection {
class SettingsPage (line 25) | class SettingsPage extends HookConsumerWidget {
method build (line 32) | Widget build(BuildContext context, WidgetRef ref)
class SettingsSection (line 202) | class SettingsSection extends HookConsumerWidget {
method build (line 210) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/settings/widget/autocomplete_field.dart
class AutocompleteField (line 3) | class AutocompleteField extends StatelessWidget {
method build (line 9) | Widget build(BuildContext context)
FILE: lib/features/settings/widget/preference_tile.dart
class ValuePreferenceWidget (line 8) | class ValuePreferenceWidget<T> extends HookConsumerWidget {
method build (line 35) | Widget build(BuildContext context, WidgetRef ref)
class ChoicePreferenceWidget (line 66) | class ChoicePreferenceWidget<T> extends HookConsumerWidget {
method build (line 92) | Widget build(BuildContext context, WidgetRef ref)
class BatteryOptimizationWidget (line 118) | class BatteryOptimizationWidget extends HookConsumerWidget {
method build (line 122) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/shortcut/shortcut_wrapper.dart
class ShortcutWrapper (line 11) | class ShortcutWrapper extends HookConsumerWidget {
method build (line 17) | Widget build(BuildContext context, WidgetRef ref)
class CloseWindowIntent (line 77) | class CloseWindowIntent extends Intent {}
class QuitAppIntent (line 79) | class QuitAppIntent extends Intent {}
class OpenSettingsIntent (line 81) | class OpenSettingsIntent extends Intent {}
class PasteIntent (line 83) | class PasteIntent extends Intent {}
FILE: lib/features/stats/data/stats_data_providers.dart
function statsRepository (line 8) | StatsRepository statsRepository(StatsRepositoryRef ref)
FILE: lib/features/stats/data/stats_repository.dart
class StatsRepository (line 8) | abstract interface class StatsRepository {
method watchStats (line 9) | Stream<Either<StatsFailure, SystemInfo>> watchStats()
class StatsRepositoryImpl (line 12) | class StatsRepositoryImpl with ExceptionHandler, InfraLogger implements ...
method watchStats (line 18) | Stream<Either<StatsFailure, SystemInfo>> watchStats()
FILE: lib/features/stats/model/stats_entity.dart
class StatsEntity (line 5) | @freezed
FILE: lib/features/stats/model/stats_failure.dart
class StatsFailure (line 7) | @freezed
FILE: lib/features/stats/notifier/stats_notifier.dart
class StatsNotifier (line 10) | @riverpod
method build (line 13) | Stream<SystemInfo> build()
FILE: lib/features/stats/widget/connection_stats_card.dart
class ConnectionStatsCard (line 10) | class ConnectionStatsCard extends HookConsumerWidget {
method build (line 14) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/stats/widget/side_bar_stats_overview.dart
class SideBarStatsOverview (line 16) | class SideBarStatsOverview extends HookConsumerWidget {
method build (line 20) | Widget build(BuildContext context, WidgetRef ref)
FILE: lib/features/stats/widget/stats_card.dart
type PresentableStat (line 5) | typedef PresentableStat = ({Widget label, Widget data, String? semanticL...
class StatsCard (line 7) | class StatsCard extends StatelessWidget {
method build (line 26) | Widget build(BuildContext context)
FILE: lib/features/system_tray/notifier/system_tray_notifier.dart
class SystemTrayNotifier (line 21) | @Riverpod(keepAlive: true)
method build (line 25) | Future<void> build()
method _initializeTray (line 34) | Future<void> _initializeTray()
method _trayMenu (line 57) | Menu _trayMenu(ConnectionStatus connection, ServiceMode serviceMode, T...
method _trayIconPath (line 86) | String _trayIconPath(ConnectionStatus status)
method _trayTooltip (line 107) | String _trayTooltip(ConnectionStatus connection, int urlTestDelay, Tra...
method _modifyConnectionStatus (line 118) | ConnectionStatus _modifyConnectionStatus(ConnectionStatus connection, ...
method onTrayMenuItemClick (line 127) | Future<void> onTrayMenuItemClick(MenuItem menuItem)
method onTrayIconMouseDown (line 145) | Future<void> onTrayIconMouseDown()
method onTrayIconRightMouseDown (line 155) | Future<void> onTrayIconRightMouseDown()
FILE: lib/features/window/notifier/window_notifier.dart
class WindowNotifier (line 18) | @Riverpod(keepAlive: true)
method build (line 21) | Future<void> build()
method saveWindowState (line 33) | Future<void> saveWindowState()
method initWindowState (line 46) | Future<void> initWindowState()
method checkWindowVisivility (line 78) | Future<bool> checkWindowVisivility(Offset windowPos, Size windowSize, ...
method show (line 98) | Future<void> show({bool focus = true})
method hide (line 106) | Future<void> hide()
method showOrHide (line 113) | Future<void> showOrHide()
method exit (line 121) | Future<void> exit()
FILE: lib/features/window/widget/window_wrapper.dart
class WindowWrapper (line 14) | class WindowWrapper extends StatefulHookConsumerWidget {
method createState (line 20) | ConsumerState<ConsumerStatefulWidget> createState()
class _WindowWrapperState (line 23) | class _WindowWrapperState extends ConsumerState<WindowWrapper> with Wind...
method build (line 29) | Widget build(BuildContext context)
method initState (line 36) | void initState()
method dispose (line 47) | void dispose()
method onWindowClose (line 53) | Future<void> onWindowClose()
method onWindowResized (line 75) | Future<void> onWindowResized()
method onWindowMoved (line 80) | Future<void> onWindowMoved()
method onWindowMaximize (line 85) | Future<void> onWindowMaximize()
method onWindowUnmaximize (line 90) | Future<void> onWindowUnmaximize()
method onWindowFocus (line 95) | void onWindowFocus()
FILE: lib/gen/hiddify_core_generated_bindings.dart
class HiddifyCoreNativeLibrary (line 8) | class HiddifyCoreNativeLibrary {
method signal (line 19) | ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Int)>> signal(
method getpriority (line 43) | int getpriority(int arg0, int arg1)
method getiopolicy_np (line 50) | int getiopolicy_np(int arg0, int arg1)
method getrlimit (line 57) | int getrlimit(int arg0, ffi.Pointer<rlimit> arg1)
method getrusage (line 64) | int getrusage(int arg0, ffi.Pointer<rusage> arg1)
method setpriority (line 71) | int setpriority(int arg0, int arg1, int arg2)
method setiopolicy_np (line 78) | int setiopolicy_np(int arg0, int arg1, int arg2)
method setrlimit (line 87) | int setrlimit(int arg0, ffi.Pointer<rlimit> arg1)
method wait1 (line 94) | int wait1(ffi.Pointer<ffi.Int> arg0)
method waitpid (line 101) | int waitpid(int arg0, ffi.Pointer<ffi.Int> arg1, int arg2)
method waitid (line 108) | int waitid(idtype_t arg0, Dart__uint32_t arg1, ffi.Pointer<siginfo_t> ...
method wait3 (line 116) | int wait3(ffi.Pointer<ffi.Int> arg0, int arg1, ffi.Pointer<rusage> arg2)
method wait4 (line 124) | int wait4(int arg0, ffi.Pointer<ffi.Int> arg1, int arg2, ffi.Pointer<r...
method alloca (line 132) | ffi.Pointer<ffi.Void> alloca(int arg0)
method malloc_type_malloc (line 145) | ffi.Pointer<ffi.Void> malloc_type_malloc(int size, int type_id)
method malloc_type_calloc (line 153) | ffi.Pointer<ffi.Void> malloc_type_calloc(int count, int size, int type...
method malloc_type_free (line 163) | void malloc_type_free(ffi.Pointer<ffi.Void> ptr, int type_id)
method malloc_type_realloc (line 171) | ffi.Pointer<ffi.Void> malloc_type_realloc(ffi.Pointer<ffi.Void> ptr, i...
method malloc_type_valloc (line 182) | ffi.Pointer<ffi.Void> malloc_type_valloc(int size, int type_id)
method malloc_type_aligned_alloc (line 190) | ffi.Pointer<ffi.Void> malloc_type_aligned_alloc(int alignment, int siz...
method malloc_type_posix_memalign (line 201) | int malloc_type_posix_memalign(ffi.Pointer<ffi.Pointer<ffi.Void>> memp...
method malloc_type_zone_malloc (line 212) | ffi.Pointer<ffi.Void> malloc_type_zone_malloc(ffi.Pointer<malloc_zone_...
method malloc_type_zone_calloc (line 223) | ffi.Pointer<ffi.Void> malloc_type_zone_calloc(ffi.Pointer<malloc_zone_...
method malloc_type_zone_free (line 236) | void malloc_type_zone_free(ffi.Pointer<malloc_zone_t> zone, ffi.Pointe...
method malloc_type_zone_realloc (line 247) | ffi.Pointer<ffi.Void> malloc_type_zone_realloc(
method malloc_type_zone_valloc (line 265) | ffi.Pointer<ffi.Void> malloc_type_zone_valloc(ffi.Pointer<malloc_zone_...
method malloc_type_zone_memalign (line 276) | ffi.Pointer<ffi.Void> malloc_type_zone_memalign(
method malloc (line 294) | ffi.Pointer<ffi.Void> malloc(int __size)
method calloc (line 301) | ffi.Pointer<ffi.Void> calloc(int __count, int __size)
method free (line 308) | void free(ffi.Pointer<ffi.Void> arg0)
method realloc (line 315) | ffi.Pointer<ffi.Void> realloc(ffi.Pointer<ffi.Void> __ptr, int __size)
method reallocf (line 324) | ffi.Pointer<ffi.Void> reallocf(ffi.Pointer<ffi.Void> __ptr, int __size)
method valloc (line 332) | ffi.Pointer<ffi.Void> valloc(int arg0)
method aligned_alloc (line 339) | ffi.Pointer<ffi.Void> aligned_alloc(int __alignment, int __size)
method posix_memalign (line 348) | int posix_memalign(ffi.Pointer<ffi.Pointer<ffi.Void>> __memptr, int __...
method abort (line 359) | void abort()
method abs (line 366) | int abs(int arg0)
method atexit (line 373) | int atexit(ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>> arg0)
method atof (line 381) | double atof(ffi.Pointer<ffi.Char> arg0)
method atoi (line 388) | int atoi(ffi.Pointer<ffi.Char> arg0)
method atol (line 395) | int atol(ffi.Pointer<ffi.Char> arg0)
method atoll (line 402) | int atoll(ffi.Pointer<ffi.Char> arg0)
method bsearch (line 409) | ffi.Pointer<ffi.Void> bsearch(
method div (line 442) | div_t div(int arg0, int arg1)
method exit (line 449) | void exit(int arg0)
method getenv (line 456) | ffi.Pointer<ffi.Char> getenv(ffi.Pointer<ffi.Char> arg0)
method labs (line 463) | int labs(int arg0)
method ldiv (line 470) | ldiv_t ldiv(int arg0, int arg1)
method llabs (line 477) | int llabs(int arg0)
method lldiv (line 484) | lldiv_t lldiv(int arg0, int arg1)
method mblen (line 491) | int mblen(ffi.Pointer<ffi.Char> __s, int __n)
method mbstowcs (line 498) | int mbstowcs(ffi.Pointer<ffi.WChar> arg0, ffi.Pointer<ffi.Char> arg1, ...
method mbtowc (line 508) | int mbtowc(ffi.Pointer<ffi.WChar> arg0, ffi.Pointer<ffi.Char> arg1, in...
method qsort (line 516) | void qsort(
method rand (line 546) | int rand()
method srand (line 553) | void srand(int arg0)
method strtod (line 560) | double strtod(ffi.Pointer<ffi.Char> arg0, ffi.Pointer<ffi.Pointer<ffi....
method strtof (line 571) | double strtof(ffi.Pointer<ffi.Char> arg0, ffi.Pointer<ffi.Pointer<ffi....
method strtol (line 582) | int strtol(ffi.Pointer<ffi.Char> __str, ffi.Pointer<ffi.Pointer<ffi.Ch...
method strtoll (line 593) | int strtoll(ffi.Pointer<ffi.Char> __str, ffi.Pointer<ffi.Pointer<ffi.C...
method strtoul (line 604) | int strtoul(ffi.Pointer<ffi.Char> __str, ffi.Pointer<ffi.Pointer<ffi.C...
method strtoull (line 617) | int strtoull(ffi.Pointer<ffi.Char> __str, ffi.Pointer<ffi.Pointer<ffi....
method system (line 630) | int system(ffi.Pointer<ffi.Char> arg0)
method wcstombs (line 637) | int wcstombs(ffi.Pointer<ffi.Char> arg0, ffi.Pointer<ffi.WChar> arg1, ...
method wctomb (line 647) | int wctomb(ffi.Pointer<ffi.Char> arg0, int arg1)
method _Exit (line 654) | void _Exit(int arg0)
method a64l (line 661) | int a64l(ffi.Pointer<ffi.Char> arg0)
method drand48 (line 668) | double drand48()
method ecvt (line 675) | ffi.Pointer<ffi.Char> ecvt(double arg0, int arg1, ffi.Pointer<ffi.Int>...
method erand48 (line 688) | double erand48(ffi.Pointer<ffi.UnsignedShort> arg0)
method fcvt (line 695) | ffi.Pointer<ffi.Char> fcvt(double arg0, int arg1, ffi.Pointer<ffi.Int>...
method gcvt (line 708) | ffi.Pointer<ffi.Char> gcvt(double arg0, int arg1, ffi.Pointer<ffi.Char...
method getsubopt (line 716) | int getsubopt(
method grantpt (line 743) | int grantpt(int arg0)
method initstate (line 750) | ffi.Pointer<ffi.Char> initstate(int arg0, ffi.Pointer<ffi.Char> arg1, ...
method jrand48 (line 760) | int jrand48(ffi.Pointer<ffi.UnsignedShort> arg0)
method l64a (line 767) | ffi.Pointer<ffi.Char> l64a(int arg0)
method lcong48 (line 774) | void lcong48(ffi.Pointer<ffi.UnsignedShort> arg0)
method lrand48 (line 781) | int lrand48()
method mktemp (line 788) | ffi.Pointer<ffi.Char> mktemp(ffi.Pointer<ffi.Char> arg0)
method mkstemp (line 795) | int mkstemp(ffi.Pointer<ffi.Char> arg0)
method mrand48 (line 802) | int mrand48()
method nrand48 (line 809) | int nrand48(ffi.Pointer<ffi.UnsignedShort> arg0)
method posix_openpt (line 816) | int posix_openpt(int arg0)
method ptsname (line 823) | ffi.Pointer<ffi.Char> ptsname(int arg0)
method ptsname_r (line 830) | int ptsname_r(int fildes, ffi.Pointer<ffi.Char> buffer, int buflen)
method putenv (line 839) | int putenv(ffi.Pointer<ffi.Char> arg0)
method random (line 846) | int random()
method rand_r (line 853) | int rand_r(ffi.Pointer<ffi.UnsignedInt> arg0)
method realpath (line 860) | ffi.Pointer<ffi.Char> realpath(ffi.Pointer<ffi.Char> arg0, ffi.Pointer...
method seed48 (line 871) | ffi.Pointer<ffi.UnsignedShort> seed48(ffi.Pointer<ffi.UnsignedShort> a...
method setenv (line 879) | int setenv(ffi.Pointer<ffi.Char> __name, ffi.Pointer<ffi.Char> __value...
method setkey (line 887) | void setkey(ffi.Pointer<ffi.Char> arg0)
method setstate (line 894) | ffi.Pointer<ffi.Char> setstate(ffi.Pointer<ffi.Char> arg0)
method srand48 (line 903) | void srand48(int arg0)
method srandom (line 910) | void srandom(int arg0)
method unlockpt (line 917) | int unlockpt(int arg0)
method unsetenv (line 924) | int unsetenv(ffi.Pointer<ffi.Char> arg0)
method arc4random (line 931) | int arc4random()
method arc4random_addrandom (line 938) | void arc4random_addrandom(ffi.Pointer<ffi.UnsignedChar> arg0, int arg1)
method arc4random_buf (line 947) | void arc4random_buf(ffi.Pointer<ffi.Void> __buf, int __nbytes)
method arc4random_stir (line 956) | void arc4random_stir()
method arc4random_uniform (line 963) | int arc4random_uniform(int __upper_bound)
method cgetcap (line 972) | ffi.Pointer<ffi.Char> cgetcap(ffi.Pointer<ffi.Char> arg0, ffi.Pointer<...
method cgetclose (line 983) | int cgetclose()
method cgetent (line 990) | int cgetent(
method cgetfirst (line 1013) | int cgetfirst(ffi.Pointer<ffi.Pointer<ffi.Char>> arg0, ffi.Pointer<ffi...
method cgetmatch (line 1024) | int cgetmatch(ffi.Pointer<ffi.Char> arg0, ffi.Pointer<ffi.Char> arg1)
method cgetnext (line 1032) | int cgetnext(ffi.Pointer<ffi.Pointer<ffi.Char>> arg0, ffi.Pointer<ffi....
method cgetnum (line 1043) | int cgetnum(ffi.Pointer<ffi.Char> arg0, ffi.Pointer<ffi.Char> arg1, ff...
method cgetset (line 1054) | int cgetset(ffi.Pointer<ffi.Char> arg0)
method cgetstr (line 1061) | int cgetstr(ffi.Pointer<ffi.Char> arg0, ffi.Pointer<ffi.Char> arg1, ff...
method cgetustr (line 1074) | int cgetustr(ffi.Pointer<ffi.Char> arg0, ffi.Pointer<ffi.Char> arg1, f...
method daemon (line 1087) | int daemon(int arg0, int arg1)
method devname (line 1094) | ffi.Pointer<ffi.Char> devname(int arg0, int arg1)
method devname_r (line 1101) | ffi.Pointer<ffi.Char> devname_r(int arg0, int arg1, ffi.Pointer<ffi.Ch...
method getbsize (line 1112) | ffi.Pointer<ffi.Char> getbsize(ffi.Pointer<ffi.Int> arg0, ffi.Pointer<...
method getloadavg (line 1123) | int getloadavg(ffi.Pointer<ffi.Double> arg0, int arg1)
method getprogname (line 1132) | ffi.Pointer<ffi.Char> getprogname()
method setprogname (line 1139) | void setprogname(ffi.Pointer<ffi.Char> arg0)
method heapsort (line 1146) | int heapsort(
method mergesort (line 1176) | int mergesort(
method psort (line 1206) | void psort(
method psort_r (line 1236) | void psort_r(
method qsort_r (line 1276) | void qsort_r(
method radixsort (line 1316) | int radixsort(
method rpmatch (line 1339) | int rpmatch(ffi.Pointer<ffi.Char> arg0)
method sradixsort (line 1346) | int sradixsort(
method sranddev (line 1369) | void sranddev()
method srandomdev (line 1376) | void srandomdev()
method strtonum (line 1383) | int strtonum(
method strtoq (line 1401) | int strtoq(ffi.Pointer<ffi.Char> __str, ffi.Pointer<ffi.Pointer<ffi.Ch...
method strtouq (line 1412) | int strtouq(ffi.Pointer<ffi.Char> __str, ffi.Pointer<ffi.Pointer<ffi.C...
method raise (line 1447) | int raise(int arg0)
method bsd_signal (line 1454) | ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Int)>> bsd_signal(
method kill (line 1478) | int kill(int arg0, int arg1)
method killpg (line 1485) | int killpg(int arg0, int arg1)
method pthread_kill (line 1492) | int pthread_kill(pthread_t arg0, int arg1)
method pthread_sigmask (line 1499) | int pthread_sigmask(int arg0, ffi.Pointer<sigset_t> arg1, ffi.Pointer<...
method sigaction1 (line 1510) | int sigaction1(int arg0, ffi.Pointer<sigaction> arg1, ffi.Pointer<siga...
method sigaddset (line 1521) | int sigaddset(ffi.Pointer<sigset_t> arg0, int arg1)
method sigaltstack (line 1528) | int sigaltstack(ffi.Pointer<stack_t> arg0, ffi.Pointer<stack_t> arg1)
method sigdelset (line 1536) | int sigdelset(ffi.Pointer<sigset_t> arg0, int arg1)
method sigemptyset (line 1543) | int sigemptyset(ffi.Pointer<sigset_t> arg0)
method sigfillset (line 1550) | int sigfillset(ffi.Pointer<sigset_t> arg0)
method sighold (line 1557) | int sighold(int arg0)
method sigignore (line 1564) | int sigignore(int arg0)
method siginterrupt (line 1571) | int siginterrupt(int arg0, int arg1)
method sigismember (line 1578) | int sigismember(ffi.Pointer<sigset_t> arg0, int arg1)
method sigpause (line 1587) | int sigpause(int arg0)
method sigpending (line 1594) | int sigpending(ffi.Pointer<sigset_t> arg0)
method sigprocmask (line 1601) | int sigprocmask(int arg0, ffi.Pointer<sigset_t> arg1, ffi.Pointer<sigs...
method sigrelse (line 1612) | int sigrelse(int arg0)
method sigset (line 1619) | ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Int)>> sigset(
method sigsuspend (line 1643) | int sigsuspend(ffi.Pointer<sigset_t> arg0)
method sigwait (line 1650) | int sigwait(ffi.Pointer<sigset_t> arg0, ffi.Pointer<ffi.Int> arg1)
method psignal (line 1659) | void psignal(int arg0, ffi.Pointer<ffi.Char> arg1)
method sigblock (line 1666) | int sigblock(int arg0)
method sigsetmask (line 1673) | int sigsetmask(int arg0)
method sigvec1 (line 1680) | int sigvec1(int arg0, ffi.Pointer<sigvec> arg1, ffi.Pointer<sigvec> arg2)
method init_signals (line 1688) | void init_signals()
method cleanup_signals (line 1695) | void cleanup_signals()
method parseCli (line 1702) | ffi.Pointer<ffi.Char> parseCli(int argc, ffi.Pointer<ffi.Pointer<ffi.C...
method cleanup (line 1713) | void cleanup()
method setup (line 1720) | ffi.Pointer<ffi.Char> setup(
method freeString (line 1762) | void freeString(ffi.Pointer<ffi.Char> str)
method start (line 1769) | ffi.Pointer<ffi.Char> start(ffi.Pointer<ffi.Char> configPath, int disa...
method stop (line 1778) | ffi.Pointer<ffi.Char> stop()
method restart (line 1785) | ffi.Pointer<ffi.Char> restart(ffi.Pointer<ffi.Char> configPath, int di...
method GetServerPublicKey (line 1794) | ffi.Pointer<ffi.Char> GetServerPublicKey()
method AddGrpcClientPublicKey (line 1803) | ffi.Pointer<ffi.Char> AddGrpcClientPublicKey(ffi.Pointer<ffi.Char> cli...
method closeGrpc (line 1812) | void closeGrpc(int mode)
method StartCoreGrpcServer (line 1819) | ffi.Pointer<ffi.Char> StartCoreGrpcServer(ffi.Pointer<ffi.Char> listen...
class __mbstate_t (line 1829) | final class __mbstate_t extends ffi.Union {
method __mbstate8 (line 1831) | ffi.Array<ffi.Char> __mbstate8;
class __darwin_pthread_handler_rec (line 1837) | final class __darwin_pthread_handler_rec extends ffi.Struct {
class _opaque_pthread_attr_t (line 1845) | final class _opaque_pthread_attr_t extends ffi.Struct {
class _opaque_pthread_cond_t (line 1853) | final class _opaque_pthread_cond_t extends ffi.Struct {
class _opaque_pthread_condattr_t (line 1861) | final class _opaque_pthread_condattr_t extends ffi.Struct {
class _opaque_pthread_mutex_t (line 1869) | final class _opaque_pthread_mutex_t extends ffi.Struct {
class _opaque_pthread_mutexattr_t (line 1877) | final class _opaque_pthread_mutexattr_t extends ffi.Struct {
class _opaque_pthread_once_t (line 1885) | final class _opaque_pthread_once_t extends ffi.Struct {
class _opaque_pthread_rwlock_t (line 1893) | final class _opaque_pthread_rwlock_t extends ffi.Struct {
class _opaque_pthread_rwlockattr_t (line 1901) | final class _opaque_pthread_rwlockattr_t extends ffi.Struct {
class _opaque_pthread_t (line 1909) | final class _opaque_pthread_t extends ffi.Struct {
method __cleanup_stack (line 1913) | ffi.Pointer<__darwin_pthread_handler_rec> __cleanup_stack;
type ptrdiff_t (line 1926) | typedef ptrdiff_t = __darwin_ptrdiff_t;
type __darwin_ptrdiff_t (line 1927) | typedef __darwin_ptrdiff_t = ffi.Long;
type Dart__darwin_ptrdiff_t (line 1928) | typedef Dart__darwin_ptrdiff_t = int;
type idtype_t (line 1930) | enum idtype_t {
class __darwin_arm_exception_state (line 1946) | final class __darwin_arm_exception_state extends ffi.Struct {
type __uint32_t (line 1957) | typedef __uint32_t = ffi.UnsignedInt;
type Dart__uint32_t (line 1958) | typedef Dart__uint32_t = int;
class __darwin_arm_exception_state64 (line 1960) | final class __darwin_arm_exception_state64 extends ffi.Struct {
type __uint64_t (line 1971) | typedef __uint64_t = ffi.UnsignedLongLong;
type Dart__uint64_t (line 1972) | typedef Dart__uint64_t = int;
class __darwin_arm_thread_state (line 1974) | final class __darwin_arm_thread_state extends ffi.Struct {
method __uint32_t (line 1976) | ffi.Array<__uint32_t> __r;
class __darwin_arm_thread_state64 (line 1991) | final class __darwin_arm_thread_state64 extends ffi.Struct {
method __uint64_t (line 1993) | ffi.Array<__uint64_t> __x;
class __darwin_arm_vfp_state (line 2014) | final class __darwin_arm_vfp_state extends ffi.Struct {
method __uint32_t (line 2016) | ffi.Array<__uint32_t> __r;
class __darwin_arm_neon_state64 (line 2022) | final class __darwin_arm_neon_state64 extends ffi.Opaque {}
class __darwin_arm_neon_state (line 2024) | final class __darwin_arm_neon_state extends ffi.Opaque {}
class __arm_pagein_state (line 2026) | final class __arm_pagein_state extends ffi.Struct {
FILE: lib/hiddifycore/core_interface/core_interface.dart
class CoreInterface (line 5) | class CoreInterface {
method setup (line 9) | Future<String> setup(Directories directories, bool debug, int mode)
method setupBackground (line 13) | Future<CoreStatus> setupBackground(String path, String name)
method restart (line 17) | Future<bool> restart(String path, String name)
method stop (line 21) | Future<bool> stop()
method isBgClientAvailable (line 25) | Future<bool> isBgClientAvailable()
method isSingleChannel (line 29) | bool isSingleChannel()
method resetTunnel (line 34) | Future<bool> resetTunnel()
method isActiveFg (line 38) | Future<bool> isActiveFg()
method isActiveBg (line 42) | Future<bool> isActiveBg()
method isInitialized (line 46) | bool isInitialized()
FILE: lib/hiddifycore/core_interface/core_interface_desktop.dart
type StopFunc (line 22) | typedef StopFunc = Pointer<Utf8> Function();
type StopFuncDart (line 23) | typedef StopFuncDart = Pointer<Utf8> Function();
class CoreInterfaceDesktop (line 25) | class CoreInterfaceDesktop extends CoreInterface with InfraLogger {
method _gen (line 28) | HiddifyCoreNativeLibrary _gen()
method isMusl (line 50) | Future<bool> isMusl()
method generateRandomPassword (line 60) | String generateRandomPassword(int length)
method setup (line 69) | Future<String> setup(Directories directories, bool debug, int mode)
method restart (line 125) | Future<bool> restart(String path, String name)
method stop (line 130) | Future<bool> stop()
FILE: lib/hiddifycore/core_interface/core_interface_mobile.dart
class CoreInterfaceMobile (line 22) | class CoreInterfaceMobile extends CoreInterface with InfraLogger {
method setup (line 39) | Future<String> setup(Directories directories, bool debug, int mode)
method setupBackground (line 104) | Future<CoreStatus> setupBackground(String path, String name)
method stop (line 149) | Future<bool> stop()
method stopMethodChannel (line 159) | Future stopMethodChannel()
method isBgClientAvailable (line 164) | Future<bool> isBgClientAvailable()
method resetTunnel (line 169) | Future<bool> resetTunnel()
method isActiveFg (line 175) | Future<bool> isActiveFg()
method isActiveBg (line 180) | Future<bool> isActiveBg()
function waitUntilPort (line 185) | Future<bool> waitUntilPort(
function isPortOpen (line 204) | Future<bool> isPortOpen(String host, int port, {Duration timeout = const...
FILE: lib/hiddifycore/core_interface/core_interface_wrapper.dart
function getCoreInterface (line 7) | CoreInterface getCoreInterface()
FILE: lib/hiddifycore/core_interface/core_interface_wrapper_stub.dart
function getCoreInterface (line 3) | CoreInterface getCoreInterface()
FILE: lib/hiddifycore/core_interface/mtls_channel_cred.dart
class MTLSChannelCredentials (line 7) | class MTLSChannelCredentials extends ChannelCredentials {
FILE: lib/hiddifycore/generated/extension/extension.pb.dart
class ExtensionActionResult (line 17) | class ExtensionActionResult extends $pb.GeneratedMessage {
method clone (line 49) | ExtensionActionResult clone()
method copyWith (line 54) | ExtensionActionResult copyWith(void Function(ExtensionActionResult) up...
method create (line 57) | ExtensionActionResult create()
method createEmptyInstance (line 58) | ExtensionActionResult createEmptyInstance()
method createRepeated (line 59) | $pb.PbList<ExtensionActionResult> createRepeated()
method getDefault (line 61) | ExtensionActionResult getDefault()
method hasExtensionId (line 69) | $core.bool hasExtensionId()
method clearExtensionId (line 71) | void clearExtensionId()
method hasCode (line 78) | $core.bool hasCode()
method clearCode (line 80) | void clearCode()
method hasMessage (line 87) | $core.bool hasMessage()
method clearMessage (line 89) | void clearMessage()
class ExtensionList (line 92) | class ExtensionList extends $pb.GeneratedMessage {
method clone (line 114) | ExtensionList clone()
method copyWith (line 119) | ExtensionList copyWith(void Function(ExtensionList) updates)
method create (line 122) | ExtensionList create()
method createEmptyInstance (line 123) | ExtensionList createEmptyInstance()
method createRepeated (line 124) | $pb.PbList<ExtensionList> createRepeated()
method getDefault (line 126) | ExtensionList getDefault()
class EditExtensionRequest (line 133) | class EditExtensionRequest extends $pb.GeneratedMessage {
method clone (line 160) | EditExtensionRequest clone()
method copyWith (line 165) | EditExtensionRequest copyWith(void Function(EditExtensionRequest) upda...
method create (line 168) | EditExtensionRequest create()
method createEmptyInstance (line 169) | EditExtensionRequest createEmptyInstance()
method createRepeated (line 170) | $pb.PbList<EditExtensionRequest> createRepeated()
method getDefault (line 172) | EditExtensionRequest getDefault()
method hasExtensionId (line 180) | $core.bool hasExtensionId()
method clearExtensionId (line 182) | void clearExtensionId()
method hasEnable (line 189) | $core.bool hasEnable()
method clearEnable (line 191) | void clearEnable()
class ExtensionMsg (line 194) | class ExtensionMsg extends $pb.GeneratedMessage {
method clone (line 231) | ExtensionMsg clone()
method copyWith (line 236) | ExtensionMsg copyWith(void Function(ExtensionMsg) updates)
method create (line 239) | ExtensionMsg create()
method createEmptyInstance (line 240) | ExtensionMsg createEmptyInstance()
method createRepeated (line 241) | $pb.PbList<ExtensionMsg> createRepeated()
method getDefault (line 243) | ExtensionMsg getDefault()
method hasId (line 251) | $core.bool hasId()
method clearId (line 253) | void clearId()
method hasTitle (line 260) | $core.bool hasTitle()
method clearTitle (line 262) | void clearTitle()
method hasDescription (line 269) | $core.bool hasDescription()
method clearDescription (line 271) | void clearDescription()
method hasEnable (line 278) | $core.bool hasEnable()
method clearEnable (line 280) | void clearEnable()
class ExtensionRequest (line 283) | class ExtensionRequest extends $pb.GeneratedMessage {
method clone (line 310) | ExtensionRequest clone()
method copyWith (line 315) | ExtensionRequest copyWith(void Function(ExtensionRequest) updates)
method create (line 318) | ExtensionRequest create()
method createEmptyInstance (line 319) | ExtensionRequest createEmptyInstance()
method createRepeated (line 320) | $pb.PbList<ExtensionRequest> createRepeated()
method getDefault (line 322) | ExtensionRequest getDefault()
method hasExtensionId (line 330) | $core.bool hasExtensionId()
method clearExtensionId (line 332) | void clearExtensionId()
class SendExtensionDataRequest (line 338) | class SendExtensionDataRequest extends $pb.GeneratedMessage {
method clone (line 370) | SendExtensionDataRequest clone()
method copyWith (line 375) | SendExtensionDataRequest copyWith(void Function(SendExtensionDataReque...
method create (line 378) | SendExtensionDataRequest create()
method createEmptyInstance (line 379) | SendExtensionDataRequest createEmptyInstance()
method createRepeated (line 380) | $pb.PbList<SendExtensionDataRequest> createRepeated()
method getDefault (line 382) | SendExtensionDataRequest getDefault()
method hasExtensionId (line 390) | $core.bool hasExtensionId()
method clearExtensionId (line 392) | void clearExtensionId()
method hasButton (line 399) | $core.bool hasButton()
method clearButton (line 401) | void clearButton()
class ExtensionResponse (line 407) | class ExtensionResponse extends $pb.GeneratedMessage {
method clone (line 439) | ExtensionResponse clone()
method copyWith (line 444) | ExtensionResponse copyWith(void Function(ExtensionResponse) updates)
method create (line 447) | ExtensionResponse create()
method createEmptyInstance (line 448) | ExtensionResponse createEmptyInstance()
method createRepeated (line 449) | $pb.PbList<ExtensionResponse> createRepeated()
method getDefault (line 451) | ExtensionResponse getDefault()
method hasType (line 459) | $core.bool hasType()
method clearType (line 461) | void clearType()
method hasExtensionId (line 468) | $core.bool hasExtensionId()
method clearExtensionId (line 470) | void clearExtensionId()
method hasJsonUi (line 477) | $core.bool hasJsonUi()
method clearJsonUi (line 479) | void clearJsonUi()
FILE: lib/hiddifycore/generated/extension/extension.pbenum.dart
class ExtensionResponseType (line 12) | class ExtensionResponseType extends $pb.ProtobufEnum {
method valueOf (line 26) | ExtensionResponseType? valueOf($core.int value)
FILE: lib/hiddifycore/generated/extension/extension_service.pbgrpc.dart
class ExtensionHostServiceClient (line 17) | class ExtensionHostServiceClient extends $grpc.Client {
method listExtensions (line 59) | $grpc.ResponseFuture<$6.ExtensionList> listExtensions($1.Empty request,
method connect (line 64) | $grpc.ResponseStream<$6.ExtensionResponse> connect(
method editExtension (line 72) | $grpc.ResponseFuture<$6.ExtensionActionResult> editExtension(
method submitForm (line 78) | $grpc.ResponseFuture<$6.ExtensionActionResult> submitForm(
method close (line 84) | $grpc.ResponseFuture<$6.ExtensionActionResult> close(
method getUI (line 90) | $grpc.ResponseFuture<$6.ExtensionActionResult> getUI(
class ExtensionHostServiceBase (line 97) | abstract class ExtensionHostServiceBase extends $grpc.Service {
method listExtensions_Pre (line 153) | $async.Future<$6.ExtensionList> listExtensions_Pre(
method connect_Pre (line 158) | $async.Stream<$6.ExtensionResponse> connect_Pre($grpc.ServiceCall call,
method editExtension_Pre (line 163) | $async.Future<$6.ExtensionActionResult> editExtension_Pre(
method submitForm_Pre (line 169) | $async.Future<$6.ExtensionActionResult> submitForm_Pre($grpc.ServiceCa...
method close_Pre (line 174) | $async.Future<$6.ExtensionActionResult> close_Pre($grpc.ServiceCall call,
method getUI_Pre (line 179) | $async.Future<$6.ExtensionActionResult> getUI_Pre($grpc.ServiceCall call,
method listExtensions (line 184) | $async.Future<$6.ExtensionList> listExtensions(
method connect (line 186) | $async.Stream<$6.ExtensionResponse> connect(
method editExtension (line 188) | $async.Future<$6.ExtensionActionResult> editExtension(
method submitForm (line 190) | $async.Future<$6.ExtensionActionResult> submitForm(
method close (line 192) | $async.Future<$6.ExtensionActionResult> close(
method getUI (line 194) | $async.Future<$6.ExtensionActionResult> getUI(
FILE: lib/hiddifycore/generated/google/protobuf/timestamp.pb.dart
class Timestamp (line 15) | class Timestamp extends $pb.GeneratedMessage with $mixin.TimestampMixin {
method clone (line 42) | Timestamp clone()
method copyWith (line 47) | Timestamp copyWith(void Function(Timestamp) updates)
method create (line 50) | Timestamp create()
method createEmptyInstance (line 51) | Timestamp createEmptyInstance()
method createRepeated (line 52) | $pb.PbList<Timestamp> createRepeated()
method getDefault (line 54) | Timestamp getDefault()
method hasSeconds (line 62) | $core.bool hasSeconds()
method clearSeconds (line 64) | void clearSeconds()
method hasNanos (line 71) | $core.bool hasNanos()
method clearNanos (line 73) | void clearNanos()
method fromDateTime (line 77) | Timestamp fromDateTime($core.DateTime dateTime)
FILE: lib/hiddifycore/generated/v2/common/common.pb.dart
class Empty (line 20) | class Empty extends $pb.GeneratedMessage {
method clone (line 35) | Empty clone()
method copyWith (line 39) | Empty copyWith(void Function(Empty) updates)
method create (line 44) | Empty create()
method createEmptyInstance (line 45) | Empty createEmptyInstance()
method createRepeated (line 46) | $pb.PbList<Empty> createRepeated()
method getDefault (line 48) | Empty getDefault()
class Response (line 52) | class Response extends $pb.GeneratedMessage {
method clone (line 82) | Response clone()
method copyWith (line 86) | Response copyWith(void Function(Response) updates)
method create (line 92) | Response create()
method createEmptyInstance (line 93) | Response createEmptyInstance()
method createRepeated (line 94) | $pb.PbList<Response> createRepeated()
method getDefault (line 96) | Response getDefault()
method hasCode (line 107) | $core.bool hasCode()
method clearCode (line 109) | void clearCode()
method hasMessage (line 119) | $core.bool hasMessage()
method clearMessage (line 121) | void clearMessage()
FILE: lib/hiddifycore/generated/v2/common/common.pbenum.dart
class ResponseCode (line 16) | class ResponseCode extends $pb.ProtobufEnum {
method valueOf (line 28) | ResponseCode? valueOf($core.int value)
FILE: lib/hiddifycore/generated/v2/config/route_rule.pb.dart
class RouteRule (line 16) | class RouteRule extends $pb.GeneratedMessage {
method clone (line 38) | RouteRule clone()
method copyWith (line 43) | RouteRule copyWith(void Function(RouteRule) updates)
method create (line 46) | RouteRule create()
method createEmptyInstance (line 47) | RouteRule createEmptyInstance()
method createRepeated (line 48) | $pb.PbList<RouteRule> createRepeated()
method getDefault (line 50) | RouteRule getDefault()
class Rule (line 57) | class Rule extends $pb.GeneratedMessage {
method clone (line 164) | Rule clone()
method copyWith (line 169) | Rule copyWith(void Function(Rule) updates)
method create (line 172) | Rule create()
method createEmptyInstance (line 173) | Rule createEmptyInstance()
method createRepeated (line 174) | $pb.PbList<Rule> createRepeated()
method getDefault (line 176) | Rule getDefault()
method hasListOrder (line 184) | $core.bool hasListOrder()
method clearListOrder (line 186) | void clearListOrder()
method hasEnabled (line 193) | $core.bool hasEnabled()
method clearEnabled (line 195) | void clearEnabled()
method hasName (line 202) | $core.bool hasName()
method clearName (line 204) | void clearName()
method hasOutbound (line 211) | $core.bool hasOutbound()
method clearOutbound (line 213) | void clearOutbound()
method hasNetwork (line 232) | $core.bool hasNetwork()
method clearNetwork (line 234) | void clearNetwork()
FILE: lib/hiddifycore/generated/v2/config/route_rule.pbenum.dart
class Outbound (line 12) | class Outbound extends $pb.ProtobufEnum {
method valueOf (line 26) | Outbound? valueOf($core.int value)
class Network (line 31) | class Network extends $pb.ProtobufEnum {
method valueOf (line 43) | Network? valueOf($core.int value)
class Protocol (line 48) | class Protocol extends $pb.ProtobufEnum {
method valueOf (line 66) | Protocol? valueOf($core.int value)
FILE: lib/hiddifycore/generated/v2/hcommon/common.pb.dart
class Empty (line 16) | class Empty extends $pb.GeneratedMessage {
method clone (line 29) | Empty clone()
method copyWith (line 34) | Empty copyWith(void Function(Empty) updates)
method create (line 37) | Empty create()
method createEmptyInstance (line 38) | Empty createEmptyInstance()
method createRepeated (line 39) | $pb.PbList<Empty> createRepeated()
method getDefault (line 41) | Empty getDefault()
class Response (line 45) | class Response extends $pb.GeneratedMessage {
method clone (line 72) | Response clone()
method copyWith (line 77) | Response copyWith(void Function(Response) updates)
method create (line 80) | Response create()
method createEmptyInstance (line 81) | Response createEmptyInstance()
method createRepeated (line 82) | $pb.PbList<Response> createRepeated()
method getDefault (line 84) | Response getDefault()
method hasCode (line 92) | $core.bool hasCode()
method clearCode (line 94) | void clearCode()
method hasMessage (line 101) | $core.bool hasMessage()
method clearMessage (line 103) | void clearMessage()
FILE: lib/hiddifycore/generated/v2/hcommon/common.pbenum.dart
class ResponseCode (line 12) | class ResponseCode extends $pb.ProtobufEnum {
method valueOf (line 24) | ResponseCode? valueOf($core.int value)
FILE: lib/hiddifycore/generated/v2/hcore/hcore.pb.dart
class CoreInfoResponse (line 20) | class CoreInfoResponse extends $pb.GeneratedMessage {
method clone (line 52) | CoreInfoResponse clone()
method copyWith (line 57) | CoreInfoResponse copyWith(void Function(CoreInfoResponse) updates)
method create (line 60) | CoreInfoResponse create()
method createEmptyInstance (line 61) | CoreInfoResponse createEmptyInstance()
method createRepeated (line 62) | $pb.PbList<CoreInfoResponse> createRepeated()
method getDefault (line 64) | CoreInfoResponse getDefault()
method hasCoreState (line 72) | $core.bool hasCoreState()
method clearCoreState (line 74) | void clearCoreState()
method hasMessageType (line 81) | $core.bool hasMessageType()
method clearMessageType (line 83) | void clearMessageType()
method hasMessage (line 90) | $core.bool hasMessage()
method clearMessage (line 92) | void clearMessage()
class StartRequest (line 95) | class StartRequest extends $pb.GeneratedMessage {
method clone (line 147) | StartRequest clone()
method copyWith (line 152) | StartRequest copyWith(void Function(StartRequest) updates)
method create (line 155) | StartRequest create()
method createEmptyInstance (line 156) | StartRequest createEmptyInstance()
method createRepeated (line 157) | $pb.PbList<StartRequest> createRepeated()
method getDefault (line 159) | StartRequest getDefault()
method hasConfigPath (line 167) | $core.bool hasConfigPath()
method clearConfigPath (line 169) | void clearConfigPath()
method hasConfigContent (line 176) | $core.bool hasConfigContent()
method clearConfigContent (line 178) | void clearConfigContent()
method hasDisableMemoryLimit (line 185) | $core.bool hasDisableMemoryLimit()
method clearDisableMemoryLimit (line 187) | void clearDisableMemoryLimit()
method hasDelayStart (line 194) | $core.bool hasDelayStart()
method clearDelayStart (line 196) | void clearDelayStart()
method hasEnableOldCommandServer (line 203) | $core.bool hasEnableOldCommandServer()
method clearEnableOldCommandServer (line 205) | void clearEnableOldCommandServer()
method hasEnableRawConfig (line 212) | $core.bool hasEnableRawConfig()
method clearEnableRawConfig (line 214) | void clearEnableRawConfig()
method hasConfigName (line 221) | $core.bool hasConfigName()
method clearConfigName (line 223) | void clearConfigName()
class CloseRequest (line 226) | class CloseRequest extends $pb.GeneratedMessage {
method clone (line 248) | CloseRequest clone()
method copyWith (line 253) | CloseRequest copyWith(void Function(CloseRequest) updates)
method create (line 256) | CloseRequest create()
method createEmptyInstance (line 257) | CloseRequest createEmptyInstance()
method createRepeated (line 258) | $pb.PbList<CloseRequest> createRepeated()
method getDefault (line 260) | CloseRequest getDefault()
method hasMode (line 268) | $core.bool hasMode()
method clearMode (line 270) | void clearMode()
class SetupRequest (line 273) | class SetupRequest extends $pb.GeneratedMessage {
method clone (line 335) | SetupRequest clone()
method copyWith (line 340) | SetupRequest copyWith(void Function(SetupRequest) updates)
method create (line 343) | SetupRequest create()
method createEmptyInstance (line 344) | SetupRequest createEmptyInstance()
method createRepeated (line 345) | $pb.PbList<SetupRequest> createRepeated()
method getDefault (line 347) | SetupRequest getDefault()
method hasBasePath (line 355) | $core.bool hasBasePath()
method clearBasePath (line 357) | void clearBasePath()
method hasWorkingDir (line 364) | $core.bool hasWorkingDir()
method clearWorkingDir (line 366) | void clearWorkingDir()
method hasTempDir (line 373) | $core.bool hasTempDir()
method clearTempDir (line 375) | void clearTempDir()
method hasFlutterStatusPort (line 382) | $core.bool hasFlutterStatusPort()
method clearFlutterStatusPort (line 384) | void clearFlutterStatusPort()
method hasListen (line 391) | $core.bool hasListen()
method clearListen (line 393) | void clearListen()
method hasSecret (line 400) | $core.bool hasSecret()
method clearSecret (line 402) | void clearSecret()
method hasDebug (line 409) | $core.bool hasDebug()
method clearDebug (line 411) | void clearDebug()
method hasMode (line 418) | $core.bool hasMode()
method clearMode (line 420) | void clearMode()
method hasFixAndroidStack (line 427) | $core.bool hasFixAndroidStack()
method clearFixAndroidStack (line 429) | void clearFixAndroidStack()
class SystemInfo (line 432) | class SystemInfo extends $pb.GeneratedMessage {
method clone (line 504) | SystemInfo clone()
method copyWith (line 509) | SystemInfo copyWith(void Function(SystemInfo) updates)
method create (line 512) | SystemInfo create()
method createEmptyInstance (line 513) | SystemInfo createEmptyInstance()
method createRepeated (line 514) | $pb.PbList<SystemInfo> createRepeated()
method getDefault (line 516) | SystemInfo getDefault()
method hasMemory (line 524) | $core.bool hasMemory()
method clearMemory (line 526) | void clearMemory()
method hasGoroutines (line 533) | $core.bool hasGoroutines()
method clearGoroutines (line 535) | void clearGoroutines()
method hasConnectionsIn (line 542) | $core.bool hasConnectionsIn()
method clearConnectionsIn (line 544) | void clearConnectionsIn()
method hasConnectionsOut (line 551) | $core.bool hasConnectionsOut()
method clearConnectionsOut (line 553) | void clearConnectionsOut()
method hasTrafficAvailable (line 560) | $core.bool hasTrafficAvailable()
method clearTrafficAvailable (line 562) | void clearTrafficAvailable()
method hasUplink (line 569) | $core.bool hasUplink()
method clearUplink (line 571) | void clearUplink()
method hasDownlink (line 578) | $core.bool hasDownlink()
method clearDownlink (line 580) | void clearDownlink()
method hasUplinkTotal (line 587) | $core.bool hasUplinkTotal()
method clearUplinkTotal (line 589) | void clearUplinkTotal()
method hasDownlinkTotal (line 596) | $core.bool hasDownlinkTotal()
method clearDownlinkTotal (line 598) | void clearDownlinkTotal()
method hasCurrentOutbound (line 605) | $core.bool hasCurrentOutbound()
method clearCurrentOutbound (line 607) | void clearCurrentOutbound()
method hasCurrentProfile (line 614) | $core.bool hasCurrentProfile()
method clearCurrentProfile (line 616) | void clearCurrentProfile()
class OutboundInfo (line 619) | class OutboundInfo extends $pb.GeneratedMessage {
method clone (line 716) | OutboundInfo clone()
method copyWith (line 721) | OutboundInfo copyWith(void Function(OutboundInfo) updates)
method create (line 724) | OutboundInfo create()
method createEmptyInstance (line 725) | OutboundInfo createEmptyInstance()
method createRepeated (line 726) | $pb.PbList<OutboundInfo> createRepeated()
method getDefault (line 728) | OutboundInfo getDefault()
method hasTag (line 736) | $core.bool hasTag()
method clearTag (line 738) | void clearTag()
method hasType (line 745) | $core.bool hasType()
method clearType (line 747) | void clearType()
method hasUrlTestTime (line 754) | $core.bool hasUrlTestTime()
method clearUrlTestTime (line 756) | void clearUrlTestTime()
method ensureUrlTestTime (line 758) | $7.Timestamp ensureUrlTestTime()
method hasUrlTestDelay (line 765) | $core.bool hasUrlTestDelay()
method clearUrlTestDelay (line 767) | void clearUrlTestDelay()
method hasIpinfo (line 774) | $core.bool hasIpinfo()
method clearIpinfo (line 776) | void clearIpinfo()
method ensureIpinfo (line 778) | IpInfo ensureIpinfo()
method hasIsSelected (line 785) | $core.bool hasIsSelected()
method clearIsSelected (line 787) | void clearIsSelected()
method hasIsGroup (line 794) | $core.bool hasIsGroup()
method clearIsGroup (line 796) | void clearIsGroup()
method hasIsSecure (line 803) | $core.bool hasIsSecure()
method clearIsSecure (line 805) | void clearIsSecure()
method hasIsVisible (line 812) | $core.bool hasIsVisible()
method clearIsVisible (line 814) | void clearIsVisible()
method hasPort (line 821) | $core.bool hasPort()
method clearPort (line 823) | void clearPort()
method hasHost (line 830) | $core.bool hasHost()
method clearHost (line 832) | void clearHost()
method hasTagDisplay (line 839) | $core.bool hasTagDisplay()
method clearTagDisplay (line 841) | void clearTagDisplay()
method hasGroupSelectedTag (line 848) | $core.bool hasGroupSelectedTag()
method clearGroupSelectedTag (line 850) | void clearGroupSelectedTag()
method hasGroupSelectedTagDisplay (line 857) | $core.bool hasGroupSelectedTagDisplay()
method clearGroupSelectedTagDisplay (line 859) | void clearGroupSelectedTagDisplay()
method hasUpload (line 866) | $core.bool hasUpload()
method clearUpload (line 868) | void clearUpload()
method hasDownload (line 875) | $core.bool hasDownload()
method clearDownload (line 877) | void clearDownload()
class IpInfo (line 880) | class IpInfo extends $pb.GeneratedMessage {
method clone (line 942) | IpInfo clone()
method copyWith (line 947) | IpInfo copyWith(void Function(IpInfo) updates)
method create (line 950) | IpInfo create()
method createEmptyInstance (line 951) | IpInfo createEmptyInstance()
method createRepeated (line 952) | $pb.PbList<IpInfo> createRepeated()
method getDefault (line 954) | IpInfo getDefault()
method hasIp (line 962) | $core.bool hasIp()
method clearIp (line 964) | void clearIp()
method hasCountryCode (line 971) | $core.bool hasCountryCode()
method clearCountryCode (line 973) | void clearCountryCode()
method hasRegion (line 980) | $core.bool hasRegion()
method clearRegion (line 982) | void clearRegion()
method hasCity (line 989) | $core.bool hasCity()
method clearCity (line 991) | void clearCity()
method hasAsn (line 998) | $core.bool hasAsn()
method clearAsn (line 1000) | void clearAsn()
method hasOrg (line 1007) | $core.bool hasOrg()
method clearOrg (line 1009) | void clearOrg()
method hasLatitude (line 1016) | $core.bool hasLatitude()
method clearLatitude (line 1018) | void clearLatitude()
method hasLongitude (line 1025) | $core.bool hasLongitude()
method clearLongitude (line 1027) | void clearLongitude()
method hasPostalCode (line 1034) | $core.bool hasPostalCode()
method clearPostalCode (line 1036) | void clearPostalCode()
class OutboundGroup (line 1039) | class OutboundGroup extends $pb.GeneratedMessage {
method clone (line 1086) | OutboundGroup clone()
method copyWith (line 1091) | OutboundGroup copyWith(void Function(OutboundGroup) updates)
method create (line 1094) | OutboundGroup create()
method createEmptyInstance (line 1095) | OutboundGroup createEmptyInstance()
method createRepeated (line 1096) | $pb.PbList<OutboundGroup> createRepeated()
method getDefault (line 1098) | OutboundGroup getDefault()
method hasTag (line 1106) | $core.bool hasTag()
method clearTag (line 1108) | void clearTag()
method hasType (line 1115) | $core.bool hasType()
method clearType (line 1117) | void clearType()
method hasSelected (line 1124) | $core.bool hasSelected()
method clearSelected (line 1126) | void clearSelected()
method hasSelectable (line 1133) | $core.bool hasSelectable()
method clearSelectable (line 1135) | void clearSelectable()
method hasIsExpand (line 1142) | $core.bool hasIsExpand()
method clearIsExpand (line 1144) | void clearIsExpand()
class OutboundGroupList (line 1150) | class OutboundGroupList extends $pb.GeneratedMessage {
method clone (line 1172) | OutboundGroupList clone()
method copyWith (line 1177) | OutboundGroupList copyWith(void Function(OutboundGroupList) updates)
method create (line 1180) | OutboundGroupList create()
method createEmptyInstance (line 1181) | OutboundGroupList createEmptyInstance()
method createRepeated (line 1182) | $pb.PbList<OutboundGroupList> createRepeated()
method getDefault (line 1184) | OutboundGroupList getDefault()
class WarpAccount (line 1191) | class WarpAccount extends $pb.GeneratedMessage {
method clone (line 1218) | WarpAccount clone()
method copyWith (line 1223) | WarpAccount copyWith(void Function(WarpAccount) updates)
method create (line 1226) | WarpAccount create()
method createEmptyInstance (line 1227) | WarpAccount createEmptyInstance()
method createRepeated (line 1228) | $pb.PbList<WarpAccount> createRepeated()
method getDefault (line 1230) | WarpAccount getDefault()
method hasAccountId (line 1238) | $core.bool hasAccountId()
method clearAccountId (line 1240) | void clearAccountId()
method hasAccessToken (line 1247) | $core.bool hasAccessToken()
method clearAccessToken (line 1249) | void clearAccessToken()
class WarpWireguardConfig (line 1252) | class WarpWireguardConfig extends $pb.GeneratedMessage {
method clone (line 1294) | WarpWireguardConfig clone()
method copyWith (line 1299) | WarpWireguardConfig copyWith(void Function(WarpWireguardConfig) updates)
method create (line 1302) | WarpWireguardConfig create()
method createEmptyInstance (line 1303) | WarpWireguardConfig createEmptyInstance()
method createRepeated (line 1304) | $pb.PbList<WarpWireguardConfig> createRepeated()
method getDefault (line 1306) | WarpWireguardConfig getDefault()
method hasPrivateKey (line 1314) | $core.bool hasPrivateKey()
method clearPrivateKey (line 1316) | void clearPrivateKey()
method hasLocalAddressIpv4 (line 1323) | $core.bool hasLocalAddressIpv4()
method clearLocalAddressIpv4 (line 1325) | void clearLocalAddressIpv4()
method hasLocalAddressIpv6 (line 1332) | $core.bool hasLocalAddressIpv6()
method clearLocalAddressIpv6 (line 1334) | void clearLocalAddressIpv6()
method hasPeerPublicKey (line 1341) | $core.bool hasPeerPublicKey()
method clearPeerPublicKey (line 1343) | void clearPeerPublicKey()
method hasClientId (line 1350) | $core.bool hasClientId()
method clearClientId (line 1352) | void clearClientId()
class WarpGenerationResponse (line 1355) | class WarpGenerationResponse extends $pb.GeneratedMessage {
method clone (line 1387) | WarpGenerationResponse clone()
method copyWith (line 1392) | WarpGenerationResponse copyWith(void Function(WarpGenerationResponse) ...
method create (line 1395) | WarpGenerationResponse create()
method createEmptyInstance (line 1396) | WarpGenerationResponse createEmptyInstance()
method createRepeated (line 1397) | $pb.PbList<WarpGenerationResponse> createRepeated()
method getDefault (line 1399) | WarpGenerationResponse getDefault()
method hasAccount (line 1407) | $core.bool hasAccount()
method clearAccount (line 1409) | void clearAccount()
method ensureAccount (line 1411) | WarpAccount ensureAccount()
method hasLog (line 1418) | $core.bool hasLog()
method clearLog (line 1420) | void clearLog()
method hasConfig (line 1427) | $core.bool hasConfig()
method clearConfig (line 1429) | void clearConfig()
method ensureConfig (line 1431) | WarpWireguardConfig ensureConfig()
class SystemProxyStatus (line 1434) | class SystemProxyStatus extends $pb.GeneratedMessage {
method clone (line 1461) | SystemProxyStatus clone()
method copyWith (line 1466) | SystemProxyStatus copyWith(void Function(SystemProxyStatus) updates)
method create (line 1469) | SystemProxyStatus create()
method createEmptyInstance (line 1470) | SystemProxyStatus createEmptyInstance()
method createRepeated (line 1471) | $pb.PbList<SystemProxyStatus> createRepeated()
method getDefault (line 1473) | SystemProxyStatus getDefault()
method hasAvailable (line 1481) | $core.bool hasAvailable()
method clearAvailable (line 1483) | void clearAvailable()
method hasEnabled (line 1490) | $core.bool hasEnabled()
method clearEnabled (line 1492) | void clearEnabled()
class ParseRequest (line 1495) | class ParseRequest extends $pb.GeneratedMessage {
method clone (line 1532) | ParseRequest clone()
method copyWith (line 1537) | ParseRequest copyWith(void Function(ParseRequest) updates)
method create (line 1540) | ParseRequest create()
method createEmptyInstance (line 1541) | ParseRequest createEmptyInstance()
method createRepeated (line 1542) | $pb.PbList<ParseRequest> createRepeated()
method getDefault (line 1544) | ParseRequest getDefault()
method hasContent (line 1552) | $core.bool hasContent()
method clearContent (line 1554) | void clearContent()
method hasConfigPath (line 1561) | $core.bool hasConfigPath()
method clearConfigPath (line 1563) | void clearConfigPath()
method hasTempPath (line 1570) | $core.bool hasTempPath()
method clearTempPath (line 1572) | void clearTempPath()
method hasDebug (line 1579) | $core.bool hasDebug()
method clearDebug (line 1581) | void clearDebug()
class ParseResponse (line 1584) | class ParseResponse extends $pb.GeneratedMessage {
method clone (line 1616) | ParseResponse clone()
method copyWith (line 1621) | ParseResponse copyWith(void Function(ParseResponse) updates)
method create (line 1624) | ParseResponse create()
method createEmptyInstance (line 1625) | ParseResponse createEmptyInstance()
method createRepeated (line 1626) | $pb.PbList<ParseResponse> createRepeated()
method getDefault (line 1628) | ParseResponse getDefault()
method hasResponseCode (line 1636) | $core.bool hasResponseCode()
method clearResponseCode (line 1638) | void clearResponseCode()
method hasContent (line 1645) | $core.bool hasContent()
method clearContent (line 1647) | void clearContent()
method hasMessage (line 1654) | $core.bool hasMessage()
method clearMessage (line 1656) | void clearMessage()
class ChangeHiddifySettingsRequest (line 1659) | class ChangeHiddifySettingsRequest extends $pb.GeneratedMessage {
method clone (line 1681) | ChangeHiddifySettingsRequest clone()
method copyWith (line 1686) | ChangeHiddifySettingsRequest copyWith(void Function(ChangeHiddifySetti...
method create (line 1689) | ChangeHiddifySettingsRequest create()
method createEmptyInstance (line 1690) | ChangeHiddifySettingsRequest createEmptyInstance()
method createRepeated (line 1691) | $pb.PbList<ChangeHiddifySettingsRequest> createRepeated()
method getDefault (line 1693) | ChangeHiddifySettingsRequest getDefault()
method hasHiddifySettingsJson (line 1701) | $core.bool hasHiddifySettingsJson()
method clearHiddifySettingsJson (line 1703) | void clearHiddifySettingsJson()
class GenerateConfigRequest (line 1706) | class GenerateConfigRequest extends $pb.GeneratedMessage {
method clone (line 1738) | GenerateConfigRequest clone()
method copyWith (line 1743) | GenerateConfigRequest copyWith(void Function(GenerateConfigRequest) up...
method create (line 1746) | GenerateConfigRequest create()
method createEmptyInstance (line 1747) | GenerateConfigRequest createEmptyInstance()
method createRepeated (line 1748) | $pb.PbList<GenerateConfigRequest> createRepeated()
method getDefault (line 1750) | GenerateConfigRequest getDefault()
method hasPath (line 1758) | $core.bool hasPath()
method clearPath (line 1760) | void clearPath()
method hasTempPath (line 1767) | $core.bool hasTempPath()
method clearTempPath (line 1769) | void clearTempPath()
method hasDebug (line 1776) | $core.bool hasDebug()
method clearDebug (line 1778) | void clearDebug()
class GenerateConfigResponse (line 1781) | class GenerateConfigResponse extends $pb.GeneratedMessage {
method clone (line 1803) | GenerateConfigResponse clone()
method copyWith (line 1808) | GenerateConfigResponse copyWith(void Function(GenerateConfigResponse) ...
method create (line 1811) | GenerateConfigResponse create()
method createEmptyInstance (line 1812) | GenerateConfigResponse createEmptyInstance()
method createRepeated (line 1813) | $pb.PbList<GenerateConfigResponse> createRepeated()
method getDefault (line 1815) | GenerateConfigResponse getDefault()
method hasConfigContent (line 1823) | $core.bool hasConfigContent()
method clearConfigContent (line 1825) | void clearConfigContent()
class SelectOutboundRequest (line 1828) | class SelectOutboundRequest extends $pb.GeneratedMessage {
method clone (line 1855) | SelectOutboundRequest clone()
method copyWith (line 1860) | SelectOutboundRequest copyWith(void Function(SelectOutboundRequest) up...
method create (line 1863) | SelectOutboundRequest create()
method createEmptyInstance (line 1864) | SelectOutboundRequest createEmptyInstance()
method createRepeated (line 1865) | $pb.PbList<SelectOutboundRequest> createRepeated()
method getDefault (line 1867) | SelectOutboundRequest getDefault()
method hasGroupTag (line 1875) | $core.bool hasGroupTag()
method clearGroupTag (line 1877) | void clearGroupTag()
method hasOutboundTag (line 1884) | $core.bool hasOutboundTag()
method clearOutboundTag (line 1886) | void clearOutboundTag()
class UrlTestRequest (line 1889) | class UrlTestRequest extends $pb.GeneratedMessage {
method clone (line 1911) | UrlTestRequest clone()
method copyWith (line 1916) | UrlTestRequest copyWith(void Function(UrlTestRequest) updates)
method create (line 1919) | UrlTestRequest create()
method createEmptyInstance (line 1920) | UrlTestRequest createEmptyInstance()
method createRepeated (line 1921) | $pb.PbList<UrlTestRequest> createRepeated()
method getDefault (line 1923) | UrlTestRequest getDefault()
method hasTag (line 1931) | $core.bool hasTag()
method clearTag (line 1933) | void clearTag()
class GenerateWarpConfigRequest (line 1936) | class GenerateWarpConfigRequest extends $pb.GeneratedMessage {
method clone (line 1968) | GenerateWarpConfigRequest clone()
method copyWith (line 1973) | GenerateWarpConfigRequest copyWith(void Function(GenerateWarpConfigReq...
method create (line 1976) | GenerateWarpConfigRequest create()
method createEmptyInstance (line 1977) | GenerateWarpConfigRequest createEmptyInstance()
method createRepeated (line 1978) | $pb.PbList<GenerateWarpConfigRequest> createRepeated()
method getDefault (line 1980) | GenerateWarpConfigRequest getDefault()
method hasLicenseKey (line 1988) | $core.bool hasLicenseKey()
method clearLicenseKey (line 1990) | void clearLicenseKey()
method hasAccountId (line 1997) | $core.bool hasAccountId()
method clearAccountId (line 1999) | void clearAccountId()
method hasAccessToken (line 2006) | $core.bool hasAccessToken()
method clearAccessToken (line 2008) | void clearAccessToken()
class SetSystemProxyEnabledRequest (line 2011) | class SetSystemProxyEnabledRequest extends $pb.GeneratedMessage {
method clone (line 2033) | SetSystemProxyEnabledRequest clone()
method copyWith (line 2038) | SetSystemProxyEnabledRequest copyWith(void Function(SetSystemProxyEnab...
method create (line 2041) | SetSystemProxyEnabledRequest create()
method createEmptyInstance (line 2042) | SetSystemProxyEnabledRequest createEmptyInstance()
method createRepeated (line 2043) | $pb.PbList<SetSystemProxyEnabledRequest> createRepeated()
method getDefault (line 2045) | SetSystemProxyEnabledRequest getDefault()
method hasIsEnabled (line 2053) | $core.bool hasIsEnabled()
method clearIsEnabled (line 2055) | void clearIsEnabled()
class LogMessage (line 2058) | class LogMessage extends $pb.GeneratedMessage {
method clone (line 2095) | LogMessage clone()
method copyWith (line 2100) | LogMessage copyWith(void Function(LogMessage) updates)
method create (line 2103) | LogMessage create()
method createEmptyInstance (line 2104) | LogMessage createEmptyInstance()
method createRepeated (line 2105) | $pb.PbList<LogMessage> createRepeated()
method getDefault (line 2107) | LogMessage getDefault()
method hasLevel (line 2115) | $core.bool hasLevel()
method clearLevel (line 2117) | void clearLevel()
method hasType (line 2124) | $core.bool hasType()
method clearType (line 2126) | void clearType()
method hasMessage (line 2133) | $core.bool hasMessage()
method clearMessage (line 2135) | void clearMessage()
method hasTime (line 2142) | $core.bool hasTime()
method clearTime (line 2144) | void clearTime()
method ensureTime (line 2146) | $7.Timestamp ensureTime()
class LogRequest (line 2149) | class LogRequest extends $pb.GeneratedMessage {
method clone (line 2171) | LogRequest clone()
method copyWith (line 2176) | LogRequest copyWith(void Function(LogRequest) updates)
method create (line 2179) | LogRequest create()
method createEmptyInstance (line 2180) | LogRequest createEmptyInstance()
method createRepeated (line 2181) | $pb.PbList<LogRequest> createRepeated()
method getDefault (line 2183) | LogRequest getDefault()
method hasLevel (line 2191) | $core.bool hasLevel()
method clearLevel (line 2193) | void clearLevel()
class StopRequest (line 2196) | class StopRequest extends $pb.GeneratedMessage {
method clone (line 2209) | StopRequest clone()
method copyWith (line 2214) | StopRequest copyWith(void Function(StopRequest) updates)
method create (line 2217) | StopRequest create()
method createEmptyInstance (line 2218) | StopRequest createEmptyInstance()
method createRepeated (line 2219) | $pb.PbList<StopRequest> createRepeated()
method getDefault (line 2221) | StopRequest getDefault()
FILE: lib/hiddifycore/generated/v2/hcore/hcore.pbenum.dart
class CoreStates (line 12) | class CoreStates extends $pb.ProtobufEnum {
method valueOf (line 26) | CoreStates? valueOf($core.int value)
class MessageType (line 31) | class MessageType extends $pb.ProtobufEnum {
method valueOf (line 67) | MessageType? valueOf($core.int value)
class SetupMode (line 72) | class SetupMode extends $pb.ProtobufEnum {
method valueOf (line 88) | SetupMode? valueOf($core.int value)
class LogLevel (line 93) | class LogLevel extends $pb.ProtobufEnum {
method valueOf (line 111) | LogLevel? valueOf($core.int value)
class LogType (line 116) | class LogType extends $pb.ProtobufEnum {
method valueOf (line 128) | LogType? valueOf($core.int value)
FILE: lib/hiddifycore/generated/v2/hcore/hcore_service.pbgrpc.dart
class CoreClient (line 17) | class CoreClient extends $grpc.Client {
method start (line 125) | $grpc.ResponseFuture<$0.CoreInfoResponse> start($0.StartRequest request,
method coreInfoListener (line 130) | $grpc.ResponseStream<$0.CoreInfoResponse> coreInfoListener($1.Empty re...
method outboundsInfo (line 137) | $grpc.ResponseStream<$0.OutboundGroupList> outboundsInfo($1.Empty requ...
method mainOutboundsInfo (line 144) | $grpc.ResponseStream<$0.OutboundGroupList> mainOutboundsInfo($1.Empty ...
method getSystemInfo (line 151) | $grpc.ResponseFuture<$0.SystemInfo> getSystemInfo($1.Empty request,
method getSystemInfoStream (line 156) | $grpc.ResponseStream<$0.SystemInfo> getSystemInfoStream($1.Empty request,
method setup (line 163) | $grpc.ResponseFuture<$1.Response> setup($0.SetupRequest request,
method parse (line 168) | $grpc.ResponseFuture<$0.ParseResponse> parse($0.ParseRequest request,
method changeHiddifySettings (line 173) | $grpc.ResponseFuture<$0.CoreInfoResponse> changeHiddifySettings(
method startService (line 179) | $grpc.ResponseFuture<$0.CoreInfoResponse> startService(
method stop (line 185) | $grpc.ResponseFuture<$0.CoreInfoResponse> stop($1.Empty request,
method restart (line 190) | $grpc.ResponseFuture<$0.CoreInfoResponse> restart($0.StartRequest requ...
method selectOutbound (line 195) | $grpc.ResponseFuture<$1.Response> selectOutbound(
method urlTest (line 201) | $grpc.ResponseFuture<$1.Response> urlTest($0.UrlTestRequest request,
method urlTestActive (line 206) | $grpc.ResponseFuture<$1.Response> urlTestActive($1.Empty request,
method generateWarpConfig (line 211) | $grpc.ResponseFuture<$0.WarpGenerationResponse> generateWarpConfig(
method getSystemProxyStatus (line 217) | $grpc.ResponseFuture<$0.SystemProxyStatus> getSystemProxyStatus(
method setSystemProxyEnabled (line 223) | $grpc.ResponseFuture<$1.Response> setSystemProxyEnabled(
method logListener (line 229) | $grpc.ResponseStream<$0.LogMessage> logListener($0.LogRequest request,
method close (line 236) | $grpc.ResponseFuture<$1.Empty> close($0.CloseRequest request,
class CoreServiceBase (line 242) | abstract class CoreServiceBase extends $grpc.Service {
method start_Pre (line 395) | $async.Future<$0.CoreInfoResponse> start_Pre(
method coreInfoListener_Pre (line 400) | $async.Stream<$0.CoreInfoResponse> coreInfoListener_Pre(
method outboundsInfo_Pre (line 405) | $async.Stream<$0.OutboundGroupList> outboundsInfo_Pre(
method mainOutboundsInfo_Pre (line 410) | $async.Stream<$0.OutboundGroupList> mainOutboundsInfo_Pre(
method getSystemInfo_Pre (line 415) | $async.Future<$0.SystemInfo> getSystemInfo_Pre(
method getSystemInfoStream_Pre (line 420) | $async.Stream<$0.SystemInfo> getSystemInfoStream_Pre(
method setup_Pre (line 425) | $async.Future<$1.Response> setup_Pre(
method parse_Pre (line 430) | $async.Future<$0.ParseResponse> parse_Pre(
method changeHiddifySettings_Pre (line 435) | $async.Future<$0.CoreInfoResponse> changeHiddifySettings_Pre(
method startService_Pre (line 441) | $async.Future<$0.CoreInfoResponse> startService_Pre(
method stop_Pre (line 446) | $async.Future<$0.CoreInfoResponse> stop_Pre(
method restart_Pre (line 451) | $async.Future<$0.CoreInfoResponse> restart_Pre(
method selectOutbound_Pre (line 456) | $async.Future<$1.Response> selectOutbound_Pre($grpc.ServiceCall call,
method urlTest_Pre (line 461) | $async.Future<$1.Response> urlTest_Pre(
method urlTestActive_Pre (line 466) | $async.Future<$1.Response> urlTestActive_Pre(
method generateWarpConfig_Pre (line 471) | $async.Future<$0.WarpGenerationResponse> generateWarpConfig_Pre(
method getSystemProxyStatus_Pre (line 477) | $async.Future<$0.SystemProxyStatus> getSystemProxyStatus_Pre(
method setSystemProxyEnabled_Pre (line 482) | $async.Future<$1.Response> setSystemProxyEnabled_Pre($grpc.ServiceCall...
method logListener_Pre (line 487) | $async.Stream<$0.LogMessage> logListener_Pre(
method close_Pre (line 492) | $async.Future<$1.Empty> close_Pre(
method start (line 497) | $async.Future<$0.CoreInfoResponse> start(
method coreInfoListener (line 499) | $async.Stream<$0.CoreInfoResponse> coreInfoListener(
method outboundsInfo (line 501) | $async.Stream<$0.OutboundGroupList> outboundsInfo(
method mainOutboundsInfo (line 503) | $async.Stream<$0.OutboundGroupList> mainOutboundsInfo(
method getSystemInfo (line 505) | $async.Future<$0.SystemInfo> getSystemInfo(
method getSystemInfoStream (line 507) | $async.Stream<$0.SystemInfo> getSystemInfoStream(
method setup (line 509) | $async.Future<$1.Response> setup(
method parse (line 511) | $async.Future<$0.ParseResponse> parse(
method changeHiddifySettings (line 513) | $async.Future<$0.CoreInfoResponse> changeHiddifySettings(
method startService (line 515) | $async.Future<$0.CoreInfoResponse> startService(
method stop (line 517) | $async.Future<$0.CoreInfoResponse> stop(
method restart (line 519) | $async.Future<$0.CoreInfoResponse> restart(
method selectOutbound (line 521) | $async.Future<$1.Response> selectOutbound(
method urlTest (line 523) | $async.Future<$1.Response> urlTest(
method urlTestActive (line 525) | $async.Future<$1.Response> urlTestActive(
method generateWarpConfig (line 527) | $async.Future<$0.WarpGenerationResponse> generateWarpConfig(
method getSystemProxyStatus (line 529) | $async.Future<$0.SystemProxyStatus> getSystemProxyStatus(
method setSystemProxyEnabled (line 531) | $async.Future<$1.Response> setSystemProxyEnabled(
method logListener (line 533) | $async.Stream<$0.LogMessage> logListener(
method close (line 535) | $async.Future<$1.Empty> close(
FILE: lib/hiddifycore/generated/v2/hcore/tunnelservice/tunnel.pb.dart
class TunnelStartRequest (line 12) | class TunnelStartRequest extends $pb.GeneratedMessage {
method clone (line 64) | TunnelStartRequest clone()
method copyWith (line 69) | TunnelStartRequest copyWith(void Function(TunnelStartRequest) updates)
method create (line 72) | TunnelStartRequest create()
method createEmptyInstance (line 73) | TunnelStartRequest createEmptyInstance()
method createRepeated (line 74) | $pb.PbList<TunnelStartRequest> createRepeated()
method getDefault (line 76) | TunnelStartRequest getDefault()
method hasIpv6 (line 84) | $core.bool hasIpv6()
method clearIpv6 (line 86) | void clearIpv6()
method hasServerPort (line 93) | $core.bool hasServerPort()
method clearServerPort (line 95) | void clearServerPort()
method hasServerUsername (line 102) | $core.bool hasServerUsername()
method clearServerUsername (line 104) | void clearServerUsername()
method hasServerPassword (line 111) | $core.bool hasServerPassword()
method clearServerPassword (line 113) | void clearServerPassword()
method hasStrictRoute (line 120) | $core.bool hasStrictRoute()
method clearStrictRoute (line 122) | void clearStrictRoute()
method hasEndpointIndependentNat (line 129) | $core.bool hasEndpointIndependentNat()
method clearEndpointIndependentNat (line 131) | void clearEndpointIndependentNat()
method hasStack (line 138) | $core.bool hasStack()
method clearStack (line 140) | void clearStack()
class TunnelResponse (line 143) | class TunnelResponse extends $pb.GeneratedMessage {
method clone (line 165) | TunnelResponse clone()
method copyWith (line 170) | TunnelResponse copyWith(void Function(TunnelResponse) updates)
method create (line 173) | TunnelResponse create()
method createEmptyInstance (line 174) | TunnelResponse createEmptyInstance()
method createRepeated (line 175) | $pb.PbList<TunnelResponse> createRepeated()
method getDefault (line 177) | TunnelResponse getDefault()
method hasMessage (line 185) | $core.bool hasMessage()
method clearMessage (line 187) | void clearMessage()
FILE: lib/hiddifycore/generated/v2/hcore/tunnelservice/tunnel_service.pbgrpc.dart
class TunnelServiceClient (line 17) | class TunnelServiceClient extends $grpc.Client {
method start (line 41) | $grpc.ResponseFuture<$2.TunnelResponse> start($2.TunnelStartRequest re...
method stop (line 46) | $grpc.ResponseFuture<$2.TunnelResponse> stop($1.Empty request,
method status (line 51) | $grpc.ResponseFuture<$2.TunnelResponse> status($1.Empty request,
method exit (line 56) | $grpc.ResponseFuture<$2.TunnelResponse> exit($1.Empty request,
class TunnelServiceBase (line 62) | abstract class TunnelServiceBase extends $grpc.Service {
method start_Pre (line 97) | $async.Future<$2.TunnelResponse> start_Pre($grpc.ServiceCall call,
method stop_Pre (line 102) | $async.Future<$2.TunnelResponse> stop_Pre(
method status_Pre (line 107) | $async.Future<$2.TunnelResponse> status_Pre(
method exit_Pre (line 112) | $async.Future<$2.TunnelResponse> exit_Pre(
method start (line 117) | $async.Future<$2.TunnelResponse> start(
method stop (line 119) | $async.Future<$2.TunnelResponse> stop(
method status (line 121) | $async.Future<$2.TunnelResponse> status(
method exit (line 123) | $async.Future<$2.TunnelResponse> exit(
FILE: lib/hiddifycore/generated/v2/hello/hello.pb.dart
class HelloRequest (line 12) | class HelloRequest extends $pb.GeneratedMessage {
method clone (line 34) | HelloRequest clone()
method copyWith (line 39) | HelloRequest copyWith(void Function(HelloRequest) updates)
method create (line 42) | HelloRequest create()
method createEmptyInstance (line 43) | HelloRequest createEmptyInstance()
method createRepeated (line 44) | $pb.PbList<HelloRequest> createRepeated()
method getDefault (line 46) | HelloRequest getDefault()
method hasName (line 54) | $core.bool hasName()
method clearName (line 56) | void clearName()
class HelloResponse (line 59) | class HelloResponse extends $pb.GeneratedMessage {
method clone (line 81) | HelloResponse clone()
method copyWith (line 86) | HelloResponse copyWith(void Function(HelloResponse) updates)
method create (line 89) | HelloResponse create()
method createEmptyInstance (line 90) | HelloResponse createEmptyInstance()
method createRepeated (line 91) | $pb.PbList<HelloResponse> createRepeated()
method getDefault (line 93) | HelloResponse getDefault()
method hasMessage (line 101) | $core.bool hasMessage()
method clearMessage (line 103) | void clearMessage()
FILE: lib/hiddifycore/generated/v2/hello/hello_service.pbgrpc.dart
class HelloClient (line 16) | class HelloClient extends $grpc.Client {
method sayHello (line 33) | $grpc.ResponseFuture<$5.HelloResponse> sayHello($5.HelloRequest request,
method sayHelloStream (line 38) | $grpc.ResponseStream<$5.HelloResponse> sayHelloStream(
class HelloServiceBase (line 45) | abstract class HelloServiceBase extends $grpc.Service {
method sayHello_Pre (line 65) | $async.Future<$5.HelloResponse> sayHello_Pre(
method sayHello (line 70) | $async.Future<$5.HelloResponse> sayHello(
method sayHelloStream (line 72) | $async.Stream<$5.HelloResponse> sayHelloStream(
FILE: lib/hiddifycore/generated/v2/hiddifyoptions/hiddify_options.pb.dart
class HiddifyOptions (line 17) | class HiddifyOptions extends $pb.GeneratedMessage {
method clone (line 124) | HiddifyOptions clone()
method copyWith (line 129) | HiddifyOptions copyWith(void Function(HiddifyOptions) updates)
method create (line 132) | HiddifyOptions create()
method createEmptyInstance (line 133) | HiddifyOptions createEmptyInstance()
method createRepeated (line 134) | $pb.PbList<HiddifyOptions> createRepeated()
method getDefault (line 136) | HiddifyOptions getDefault()
method hasEnableFullConfig (line 144) | $core.bool hasEnableFullConfig()
method clearEnableFullConfig (line 146) | void clearEnableFullConfig()
method hasLogLevel (line 153) | $core.bool hasLogLevel()
method clearLogLevel (line 155) | void clearLogLevel()
method hasLogFile (line 162) | $core.bool hasLogFile()
method clearLogFile (line 164) | void clearLogFile()
method hasEnableClashApi (line 171) | $core.bool hasEnableClashApi()
method clearEnableClashApi (line 173) | void clearEnableClashApi()
method hasClashApiPort (line 180) | $core.bool hasClashApiPort()
method clearClashApiPort (line 182) | void clearClashApiPort()
method hasWebSecret (line 189) | $core.bool hasWebSecret()
method clearWebSecret (line 191) | void clearWebSecret()
method hasRegion (line 198) | $core.bool hasRegion()
method clearRegion (line 200) | void clearRegion()
method hasBlockAds (line 207) | $core.bool hasBlockAds()
method clearBlockAds (line 209) | void clearBlockAds()
method hasUseXrayCoreWhenPossible (line 216) | $core.bool hasUseXrayCoreWhenPossible()
method clearUseXrayCoreWhenPossible (line 218) | void clearUseXrayCoreWhenPossible()
method hasWarp (line 228) | $core.bool hasWarp()
method clearWarp (line 230) | void clearWarp()
method ensureWarp (line 232) | WarpOptions ensureWarp()
method hasWarp2 (line 239) | $core.bool hasWarp2()
method clearWarp2 (line 241) | void clearWarp2()
method ensureWarp2 (line 243) | WarpOptions ensureWarp2()
method hasMux (line 250) | $core.bool hasMux()
method clearMux (line 252) | void clearMux()
method ensureMux (line 254) | MuxOptions ensureMux()
method hasTlsTricks (line 261) | $core.bool hasTlsTricks()
method clearTlsTricks (line 263) | void clearTlsTricks()
method ensureTlsTricks (line 265) | TLSTricks ensureTlsTricks()
method hasDnsOptions (line 272) | $core.bool hasDnsOptions()
method clearDnsOptions (line 274) | void clearDnsOptions()
method ensureDnsOptions (line 276) | DNSOptions ensureDnsOptions()
method hasInboundOptions (line 283) | $core.bool hasInboundOptions()
method clearInboundOptions (line 285) | void clearInboundOptions()
method ensureInboundOptions (line 287) | InboundOptions ensureInboundOptions()
method hasUrlTestOptions (line 294) | $core.bool hasUrlTestOptions()
method clearUrlTestOptions (line 296) | void clearUrlTestOptions()
method ensureUrlTestOptions (line 298) | URLTestOptions ensureUrlTestOptions()
method hasRouteOptions (line 305) | $core.bool hasRouteOptions()
method clearRouteOptions (line 307) | void clearRouteOptions()
method ensureRouteOptions (line 309) | RouteOptions ensureRouteOptions()
class IntRange (line 312) | class IntRange extends $pb.GeneratedMessage {
method clone (line 339) | IntRange clone()
method copyWith (line 344) | IntRange copyWith(void Function(IntRange) updates)
method create (line 347) | IntRange create()
method createEmptyInstance (line 348) | IntRange createEmptyInstance()
method createRepeated (line 349) | $pb.PbList<IntRange> createRepeated()
method getDefault (line 351) | IntRange getDefault()
method hasFrom (line 359) | $core.bool hasFrom()
method clearFrom (line 361) | void clearFrom()
method hasTo (line 368) | $core.bool hasTo()
method clearTo (line 370) | void clearTo()
class DNSOptions (line 373) | class DNSOptions extends $pb.GeneratedMessage {
method clone (line 425) | DNSOptions clone()
method copyWith (line 430) | DNSOptions copyWith(void Function(DNSOptions) updates)
method create (line 433) | DNSOptions create()
method createEmptyInstance (line 434) | DNSOptions createEmptyInstance()
method createRepeated (line 435) | $pb.PbList<DNSOptions> createRepeated()
method getDefault (line 437) | DNSOptions getDefault()
method hasRemoteDnsAddress (line 445) | $core.bool hasRemoteDnsAddress()
method clearRemoteDnsAddress (line 447) | void clearRemoteDnsAddress()
method hasRemoteDnsDomainStrategy (line 454) | $core.bool hasRemoteDnsDomainStrategy()
method clearRemoteDnsDomainStrategy (line 456) | void clearRemoteDnsDomainStrategy()
method hasDirectDnsAddress (line 463) | $core.bool hasDirectDnsAddress()
method clearDirectDnsAddress (line 465) | void clearDirectDnsAddress()
method hasDirectDnsDomainStrategy (line 472) | $core.bool hasDirectDnsDomainStrategy()
method clearDirectDnsDomainStrategy (line 474) | void clearDirectDnsDomainStrategy()
method hasIndependentDnsCache (line 481) | $core.bool hasIndependentDnsCache()
method clearIndependentDnsCache (line 483) | void clearIndependentDnsCache()
method hasEnableFakeDns (line 490) | $core.bool hasEnableFakeDns()
method clearEnableFakeDns (line 492) | void clearEnableFakeDns()
method hasEnableDnsRouting (line 499) | $core.bool hasEnableDnsRouting()
method clearEnableDnsRouting (line 501) | void clearEnableDnsRouting()
class InboundOptions (line 504) | class InboundOptions extends $pb.GeneratedMessage {
method clone (line 571) | InboundOptions clone()
method copyWith (line 576) | InboundOptions copyWith(void Function(InboundOptions) updates)
method create (line 579) | InboundOptions create()
method createEmptyInstance (line 580) | InboundOptions createEmptyInstance()
method createRepeated (line 581) | $pb.PbList<InboundOptions> createRepeated()
method getDefault (line 583) | InboundOptions getDefault()
method hasEnableTun (line 591) | $core.bool hasEnableTun()
method clearEnableTun (line 593) | void clearEnableTun()
method hasEnableTunService (line 600) | $core.bool hasEnableTunService()
method clearEnableTunService (line 602) | void clearEnableTunService()
method hasSetSystemProxy (line 609) | $core.bool hasSetSystemProxy()
method clearSetSystemProxy (line 611) | void clearSetSystemProxy()
method hasMixedPort (line 618) | $core.bool hasMixedPort()
method clearMixedPort (line 620) | void clearMixedPort()
method hasTproxyPort (line 627) | $core.bool hasTproxyPort()
method clearTproxyPort (line 629) | void clearTproxyPort()
method hasDirectPort (line 636) | $core.bool hasDirectPort()
method clearDirectPort (line 638) | void clearDirectPort()
method hasMtu (line 645) | $core.bool hasMtu()
method clearMtu (line 647) | void clearMtu()
method hasStrictRoute (line 654) | $core.bool hasStrictRoute()
method clearStrictRoute (line 656) | void clearStrictRoute()
method hasTunStack (line 663) | $core.bool hasTunStack()
method clearTunStack (line 665) | void clearTunStack()
method hasRedirectPort (line 672) | $core.bool hasRedirectPort()
method clearRedirectPort (line 674) | void clearRedirectPort()
class URLTestOptions (line 677) | class URLTestOptions extends $pb.GeneratedMessage {
method clone (line 704) | URLTestOptions clone()
method copyWith (line 709) | URLTestOptions copyWith(void Function(URLTestOptions) updates)
method create (line 712) | URLTestOptions create()
method createEmptyInstance (line 713) | URLTestOptions createEmptyInstance()
method createRepeated (line 714) | $pb.PbList<URLTestOptions> createRepeated()
method getDefault (line 716) | URLTestOptions getDefault()
method hasConnectionTestUrl (line 724) | $core.bool hasConnectionTestUrl()
method clearConnectionTestUrl (line 726) | void clearConnectionTestUrl()
method hasUrlTestInterval (line 733) | $core.bool hasUrlTestInterval()
method clearUrlTestInterval (line 735) | void clearUrlTestInterval()
class RouteOptions (line 738) | class RouteOptions extends $pb.GeneratedMessage {
method clone (line 775) | RouteOptions clone()
method copyWith (line 780) | RouteOptions copyWith(void Function(RouteOptions) updates)
method create (line 783) | RouteOptions create()
method createEmptyInstance (line 784) | RouteOptions createEmptyInstance()
method createRepeated (line 785) | $pb.PbList<RouteOptions> createRepeated()
method getDefault (line 787) | RouteOptions getDefault()
method hasResolveDestination (line 795) | $core.bool hasResolveDestination()
method clearResolveDestination (line 797) | void clearResolveDestination()
method hasIpv6Mode (line 804) | $core.bool hasIpv6Mode()
method clearIpv6Mode (line 806) | void clearIpv6Mode()
method hasBypassLan (line 813) | $core.bool hasBypassLan()
method clearBypassLan (line 815) | void clearBypassLan()
method hasAllowConnectionFromLan (line 822) | $core.bool hasAllowConnectionFromLan()
method clearAllowConnectionFromLan (line 824) | void clearAllowConnectionFromLan()
class TLSTricks (line 827) | class TLSTricks extends $pb.GeneratedMessage {
method clone (line 874) | TLSTricks clone()
method copyWith (line 879) | TLSTricks copyWith(void Function(TLSTricks) updates)
method create (line 882) | TLSTricks create()
method createEmptyInstance (line 883) | TLSTricks createEmptyInstance()
method createRepeated (line 884) | $pb.PbList<TLSTricks> createRepeated()
method getDefault (line 886) | TLSTricks getDefault()
method hasEnableFragment (line 894) | $core.bool hasEnableFragment()
method clearEnableFragment (line 896) | void clearEnableFragment()
method hasFragmentSize (line 903) | $core.bool hasFragmentSize()
method clearFragmentSize (line 905) | void clearFragmentSize()
method ensureFragmentSize (line 907) | IntRange ensureFragmentSize()
method hasFragmentSleep (line 914) | $core.bool hasFragmentSleep()
method clearFragmentSleep (line 916) | void clearFragmentSleep()
method ensureFragmentSleep (line 918) | IntRange ensureFragmentSleep()
method hasMixedSniCase (line 925) | $core.bool hasMixedSniCase()
method clearMixedSniCase (line 927) | void clearMixedSniCase()
method hasEnablePadding (line 934) | $core.bool hasEnablePadding()
method clearEnablePadding (line 936) | void clearEnablePadding()
method hasPaddingSize (line 943) | $core.bool hasPaddingSize()
method clearPaddingSize (line 945) | void clearPaddingSize()
method ensurePaddingSize (line 947) | IntRange ensurePaddingSize()
class MuxOptions (line 950) | class MuxOptions extends $pb.GeneratedMessage {
method clone (line 987) | MuxOptions clone()
method copyWith (line 992) | MuxOptions copyWith(void Function(MuxOptions) updates)
method create (line 995) | MuxOptions create()
method createEmptyInstance (line 996) | MuxOptions createEmptyInstance()
method createRepeated (line 997) | $pb.PbList<MuxOptions> createRepeated()
method getDefault (line 999) | MuxOptions getDefault()
method hasEnable (line 1007) | $core.bool hasEnable()
method clearEnable (line 1009) | void clearEnable()
method hasPadding (line 1016) | $core.bool hasPadding()
method clearPadding (line 1018) | void clearPadding()
method hasMaxStreams (line 1025) | $core.bool hasMaxStreams()
method clearMaxStreams (line 1027) | void clearMaxStreams()
method hasProtocol (line 1034) | $core.bool hasProtocol()
method clearProtocol (line 1036) | void clearProtocol()
class WarpOptions (line 1039) | class WarpOptions extends $pb.GeneratedMessage {
method clone (line 1111) | WarpOptions clone()
method copyWith (line 1116) | WarpOptions copyWith(void Function(WarpOptions) updates)
method create (line 1119) | WarpOptions create()
method createEmptyInstance (line 1120) | WarpOptions createEmptyInstance()
method createRepeated (line 1121) | $pb.PbList<WarpOptions> createRepeated()
method getDefault (line 1123) | WarpOptions getDefault()
method hasId (line 1131) | $core.bool hasId()
method clearId (line 1133) | void clearId()
method hasEnableWarp (line 1140) | $core.bool hasEnableWarp()
method clearEnableWarp (line 1142) | void clearEnableWarp()
method hasMode (line 1149) | $core.bool hasMode()
method clearMode (line 1151) | void clearMode()
method hasWireguardConfig (line 1158) | $core.bool hasWireguardConfig()
method clearWireguardConfig (line 1160) | void clearWireguardConfig()
method ensureWireguardConfig (line 1162) | WarpWireguardConfig ensureWireguardConfig()
method hasFakePackets (line 1169) | $core.bool hasFakePackets()
method clearFakePackets (line 1171) | void clearFakePackets()
method hasFakePacketSize (line 1178) | $core.bool hasFakePacketSize()
method clearFakePacketSize (line 1180) | void clearFakePacketSize()
method ensureFakePacketSize (line 1182) | IntRange ensureFakePacketSize()
method hasFakePacketDelay (line 1189) | $core.bool hasFakePacketDelay()
method clearFakePacketDelay (line 1191) | void clearFakePacketDelay()
method ensureFakePacketDelay (line 1193) | IntRange ensureFakePacketDelay()
method hasFakePacketMode (line 1200) | $core.bool hasFakePacketMode()
method clearFakePacketMode (line 1202) | void clearFakePacketMode()
method hasCleanIp (line 1209) | $core.bool hasCleanIp()
method clearCleanIp (line 1211) | void clearCleanIp()
method hasCleanPort (line 1218) | $core.bool hasCleanPort()
method clearCleanPort (line 1220) | void clearCleanPort()
method hasAccount (line 1227) | $core.bool hasAccount()
method clearAccount (line 1229) | void clearAccount()
method ensureAccount (line 1231) | WarpAccount ensureAccount()
class WarpAccount (line 1234) | class WarpAccount extends $pb.GeneratedMessage {
method clone (line 1261) | WarpAccount clone()
method copyWith (line 1266) | WarpAccount copyWith(void Function(WarpAccount) updates)
method create (line 1269) | WarpAccount create()
method createEmptyInstance (line 1270) | WarpAccount createEmptyInstance()
method createRepeated (line 1271) | $pb.PbList<WarpAccount> createRepeated()
method getDefault (line 1273) | WarpAccount getDefault()
method hasAccountId (line 1281) | $core.bool hasAccountId()
method clearAccountId (line 1283) | void clearAccountId()
method hasAccessToken (line 1290) | $core.bool hasAccessToken()
method clearAccessToken (line 1292) | void clearAccessToken()
class WarpWireguardConfig (line 1295) | class WarpWireguardConfig extends $pb.GeneratedMessage {
method clone (line 1337) | WarpWireguardConfig clone()
method copyWith (line 1342) | WarpWireguardConfig copyWith(void Function(WarpWireguardConfig) updates)
method create (line 1345) | WarpWireguardConfig create()
method createEmptyInstance (line 1346) | WarpWireguardConfig createEmptyInstance()
method createRepeated (line 1347) | $pb.PbList<WarpWireguardConfig> createRepeated()
method getDefault (line 1349) | WarpWireguardConfig getDefault()
method hasPrivateKey (line 1357) | $core.bool hasPrivateKey()
method clearPrivateKey (line 1359) | void clearPrivateKey()
method hasLocalAddressIpv4 (line 1366) | $core.bool hasLocalAddressIpv4()
method clearLocalAddressIpv4 (line 1368) | void clearLocalAddressIpv4()
method hasLocalAddressIpv6 (line 1375) | $core.bool hasLocalAddressIpv6()
method clearLocalAddressIpv6 (line 1377) | void clearLocalAddressIpv6()
method hasPeerPublicKey (line 1384) | $core.bool hasPeerPublicKey()
method clearPeerPublicKey (line 1386) | void clearPeerPublicKey()
method hasClientId (line 1393) | $core.bool hasClientId()
method clearClientId (line 1395) | void clearClientId()
class Rule (line 1398) | class Rule extends $pb.GeneratedMessage {
method clone (line 1450) | Rule clone()
method copyWith (line 1455) | Rule copyWith(void Function(Rule) updates)
method create (line 1458) | Rule create()
method createEmptyInstance (line 1459) | Rule createEmptyInstance()
method createRepeated (line 1460) | $pb.PbList<Rule> createRepeated()
method getDefault (line 1462) | Rule getDefault()
method hasRuleSetUrl (line 1470) | $core.bool hasRuleSetUrl()
method clearRuleSetUrl (line 1472) | void clearRuleSetUrl()
method hasDomains (line 1479) | $core.bool hasDomains()
method clearDomains (line 1481) | void clearDomains()
method hasIp (line 1488) | $core.bool hasIp()
method clearIp (line 1490) | void clearIp()
method hasPort (line 1497) | $core.bool hasPort()
method clearPort (line 1499) | void clearPort()
method hasNetwork (line 1506) | $core.bool hasNetwork()
method clearNetwork (line 1508) | void clearNetwork()
method hasProtocol (line 1515) | $core.bool hasProtocol()
method clearProtocol (line 1517) | void clearProtocol()
method hasOutbound (line 1524) | $core.bool hasOutbound()
method clearOutbound (line 1526) | void clearOutbound()
FILE: lib/hiddifycore/generated/v2/hiddifyoptions/hiddify_options.pbenum.dart
class DomainStrategy (line 12) | class DomainStrategy extends $pb.ProtobufEnum {
method valueOf (line 28) | DomainStrategy? valueOf($core.int value)
FILE: lib/hiddifycore/generated/v2/profile/profile.pb.dart
class ProfileEntity (line 15) | class ProfileEntity extends $pb.GeneratedMessage {
method clone (line 67) | ProfileEntity clone()
method copyWith (line 72) | ProfileEntity copyWith(void Function(ProfileEntity) updates)
method create (line 75) | ProfileEntity create()
method createEmptyInstance (line 76) | ProfileEntity createEmptyInstance()
method createRepeated (line 77) | $pb.PbList<ProfileEntity> createRepeated()
method getDefault (line 79) | ProfileEntity getDefault()
method hasId (line 87) | $core.bool hasId()
method clearId (line 89) | void clearId()
method hasName (line 96) | $core.bool hasName()
method clearName (line 98) | void clearName()
method hasUrl (line 105) | $core.bool hasUrl()
method clearUrl (line 107) | void clearUrl()
method hasLastUpdate (line 114) | $core.bool hasLastUpdate()
method clearLastUpdate (line 116) | void clearLastUpdate()
method hasOptions (line 123) | $core.bool hasOptions()
method clearOptions (line 125) | void clearOptions()
method ensureOptions (line 127) | ProfileOptions ensureOptions()
method hasSubInfo (line 134) | $core.bool hasSubInfo()
method clearSubInfo (line 136) | void clearSubInfo()
method ensureSubInfo (line 138) | SubscriptionInfo ensureSubInfo()
method hasOverrideHiddifyOptions (line 145) | $core.bool hasOverrideHiddifyOptions()
method clearOverrideHiddifyOptions (line 147) | void clearOverrideHiddifyOptions()
method ensureOverrideHiddifyOptions (line 149) | $8.HiddifyOptions ensureOverrideHiddifyOptions()
class ProfileOptions (line 152) | class ProfileOptions extends $pb.GeneratedMessage {
method clone (line 174) | ProfileOptions clone()
method copyWith (line 179) | ProfileOptions copyWith(void Function(ProfileOptions) updates)
method create (line 182) | ProfileOptions create()
method createEmptyInstance (line 183) | ProfileOptions createEmptyInstance()
method createRepeated (line 184) | $pb.PbList<ProfileOptions> createRepeated()
method getDefault (line 186) | ProfileOptions getDefault()
method hasUpdateInterval (line 194) | $core.bool hasUpdateInterval()
method clearUpdateInterval (line 196) | void clearUpdateInterval()
class SubscriptionInfo (line 199) | class SubscriptionInfo extends $pb.GeneratedMessage {
method clone (line 246) | SubscriptionInfo clone()
method copyWith (line 251) | SubscriptionInfo copyWith(void Function(SubscriptionInfo) updates)
method create (line 254) | SubscriptionInfo create()
method createEmptyInstance (line 255) | SubscriptionInfo createEmptyInstance()
method createRepeated (line 256) | $pb.PbList<SubscriptionInfo> createRepeated()
method getDefault (line 258) | SubscriptionInfo getDefault()
method hasUpload (line 266) | $core.bool hasUpload()
method clearUpload (line 268) | void clearUpload()
method hasDownload (line 275) | $core.bool hasDownload()
method clearDownload (line 277) | void clearDownload()
method hasTotal (line 284) | $core.bool hasTotal()
method clearTotal (line 286) | void clearTotal()
method hasExpire (line 293) | $core.bool hasExpire()
method clearExpire (line 295) | void clearExpire()
method hasWebPageUrl (line 302) | $core.bool hasWebPageUrl()
method clearWebPageUrl (line 304) | void clearWebPageUrl()
method hasSupportUrl (line 311) | $core.bool hasSupportUrl()
method clearSupportUrl (line 313) | void clearSupportUrl()
FILE: lib/hiddifycore/generated/v2/profile/profile_service.pb.dart
class ProfileRequest (line 16) | class ProfileRequest extends $pb.GeneratedMessage {
method clone (line 48) | ProfileRequest clone()
method copyWith (line 53) | ProfileRequest copyWith(void Function(ProfileRequest) updates)
method create (line 56) | ProfileRequest create()
method createEmptyInstance (line 57) | ProfileRequest createEmptyInstance()
method createRepeated (line 58) | $pb.PbList<ProfileRequest> createRepeated()
method getDefault (line 60) | ProfileRequest getDefault()
method hasId (line 68) | $core.bool hasId()
method clearId (line 70) | void clearId()
method hasName (line 77) | $core.bool hasName()
method clearName (line 79) | void clearName()
method hasUrl (line 86) | $core.bool hasUrl()
method clearUrl (line 88) | void clearUrl()
class AddProfileRequest (line 91) | class AddProfileRequest extends $pb.GeneratedMessage {
method clone (line 128) | AddProfileRequest clone()
method copyWith (line 133) | AddProfileRequest copyWith(void Function(AddProfileRequest) updates)
method create (line 136) | AddProfileRequest create()
method createEmptyInstance (line 137) | AddProfileRequest createEmptyInstance()
method createRepeated (line 138) | $pb.PbList<AddProfileRequest> createRepeated()
method getDefault (line 140) | AddProfileRequest getDefault()
method hasUrl (line 148) | $core.bool hasUrl()
method clearUrl (line 150) | void clearUrl()
method hasContent (line 157) | $core.bool hasContent()
method clearContent (line 159) | void clearContent()
method hasName (line 166) | $core.bool hasName()
method clearName (line 168) | void clearName()
method hasMarkAsActive (line 175) | $core.bool hasMarkAsActive()
method clearMarkAsActive (line 177) | void clearMarkAsActive()
class ProfileResponse (line 180) | class ProfileResponse extends $pb.GeneratedMessage {
method clone (line 212) | ProfileResponse clone()
method copyWith (line 217) | ProfileResponse copyWith(void Function(ProfileResponse) updates)
method create (line 220) | ProfileResponse create()
method createEmptyInstance (line 221) | ProfileResponse createEmptyInstance()
method createRepeated (line 222) | $pb.PbList<ProfileResponse> createRepeated()
method getDefault (line 224) | ProfileResponse getDefault()
method hasProfile (line 232) | $core.bool hasProfile()
method clearProfile (line 234) | void clearProfile()
method ensureProfile (line 236) | $4.ProfileEntity ensureProfile()
method hasResponseCode (line 243) | $core.bool hasResponseCode()
method clearResponseCode (line 245) | void clearResponseCode()
method hasMessage (line 252) | $core.bool hasMessage()
method clearMessage (line 254) | void clearMessage()
class MultiProfilesResponse (line 257) | class MultiProfilesResponse extends $pb.GeneratedMessage {
method clone (line 289) | MultiProfilesResponse clone()
method copyWith (line 294) | MultiProfilesResponse copyWith(void Function(MultiProfilesResponse) up...
method create (line 297) | MultiProfilesResponse create()
method createEmptyInstance (line 298) | MultiProfilesResponse createEmptyInstance()
method createRepeated (line 299) | $pb.PbList<MultiProfilesResponse> createRepeated()
method getDefault (line 301) | MultiProfilesResponse getDefault()
method hasResponseCode (line 312) | $core.bool hasResponseCode()
method clearResponseCode (line 314) | void clearResponseCode()
method hasMessage (line 321) | $core.bool hasMessage()
method clearMessage (line 323) | void clearMessage()
FILE: lib/hiddifycore/generated/v2/profile/profile_service.pbgrpc.dart
class ProfileServiceClient (line 18) | class ProfileServiceClient extends $grpc.Client {
method getProfile (line 65) | $grpc.ResponseFuture<$3.ProfileResponse> getProfile($3.ProfileRequest ...
method updateProfile (line 70) | $grpc.ResponseFuture<$3.ProfileResponse> updateProfile(
method getAllProfiles (line 76) | $grpc.ResponseFuture<$3.MultiProfilesResponse> getAllProfiles(
method getActiveProfile (line 82) | $grpc.ResponseFuture<$3.ProfileResponse> getActiveProfile($1.Empty req...
method setActiveProfile (line 87) | $grpc.ResponseFuture<$1.Response> setActiveProfile($3.ProfileRequest r...
method addProfile (line 92) | $grpc.ResponseFuture<$3.ProfileResponse> addProfile(
method deleteProfile (line 98) | $grpc.ResponseFuture<$1.Response> deleteProfile($3.ProfileRequest requ...
class ProfileServiceBase (line 104) | abstract class ProfileServiceBase extends $grpc.Service {
method getProfile_Pre (line 159) | $async.Future<$3.ProfileResponse> getProfile_Pre(
method updateProfile_Pre (line 164) | $async.Future<$3.ProfileResponse> updateProfile_Pre(
method getAllProfiles_Pre (line 169) | $async.Future<$3.MultiProfilesResponse> getAllProfiles_Pre(
method getActiveProfile_Pre (line 174) | $async.Future<$3.ProfileResponse> getActiveProfile_Pre(
method setActiveProfile_Pre (line 179) | $async.Future<$1.Response> setActiveProfile_Pre(
method addProfile_Pre (line 184) | $async.Future<$3.ProfileResponse> addProfile_Pre($grpc.ServiceCall call,
method deleteProfile_Pre (line 189) | $async.Future<$1.Response> deleteProfile_Pre(
method getProfile (line 194) | $async.Future<$3.ProfileResponse> getProfile(
method updateProfile (line 196) | $async.Future<$3.ProfileResponse> updateProfile(
method getAllProfiles (line 198) | $async.Future<$3.MultiProfilesResponse> getAllProfiles(
method getActiveProfile (line 200) | $async.Future<$3.ProfileResponse> getActiveProfile(
method setActiveProfile (line 202) | $async.Future<$1.Response> setActiveProfile(
method addProfile (line 204) | $async.Future<$3.ProfileResponse> addProfile(
method deleteProfile (line 206) | $async.Future<$1.Response> deleteProfile(
FILE: lib/hiddifycore/hiddify_core_service.dart
class HiddifyCoreService (line 32) | class HiddifyCoreService with InfraLogger {
method init (line 46) | Future<void> init()
method validateConfigByPath (line 67) | TaskEither<String, Unit> validateConfigByPath(String path, String temp...
method generateFullConfigByPath (line 81) | TaskEither<String, String> generateFullConfigByPath(String path)
method setup (line 89) | TaskEither<String, Unit> setup()
method changeOptions (line 115) | TaskEither<String, Unit> changeOptions(SingboxConfigOption options)
method start (line 139) | TaskEither<ConnectionFailure, Unit> start(String path, String name, bo...
method stop (line 204) | TaskEither<String, Unit> stop()
method restart (line 227) | TaskEither<String, Unit> restart(String path, String name, bool disabl...
method resetTunnel (line 255) | TaskEither<String, Unit> resetTunnel()
method watchGroup (line 277) | Stream<OutboundGroup?> watchGroup()
method watchActiveGroups (line 297) | Stream<List<OutboundGroup>> watchActiveGroups()
method watchStats (line 321) | ResponseStream<SystemInfo> watchStats()
method selectOutbound (line 331) | TaskEither<String, Unit> selectOutbound(String groupTag, String outbou...
method urlTest (line 349) | TaskEither<String, Unit> urlTest(String tag)
method watchLogs (line 368) | Stream<List<LogMessage>> watchLogs(String path)
method clearLogs (line 400) | TaskEither<String, Unit> clearLogs()
method generateWarpConfig (line 410) | TaskEither<String, WarpResponse> generateWarpConfig({
method watchStatus (line 435) | Stream<CoreStatus> watchStatus()
method startListeningStatus (line 441) | Future<void> startListeningStatus(String key, CoreClient cc)
method startListeningLogs (line 476) | Future<void> startListeningLogs(String key, CoreClient cc)
method stopListenSingle (line 498) | Future<void> stopListenSingle(String key)
method listenSingle (line 514) | Future<StreamSubscription<T>?> listenSingle<T>(
method getLogLevel (line 539) | loggyl.LogLevel getLogLevel(LogLevel level)
method getCoreLogLevel (line 550) | LogLevel getCoreLogLevel(config_log_level.LogLevel level)
method closeFront (line 563) | Future<void> closeFront()
FILE: lib/hiddifycore/hiddify_core_service_provider.dart
function hiddifyCoreService (line 11) | HiddifyCoreService hiddifyCoreService(Ref ref)
FILE: lib/hiddifycore/init_signal.dart
class CoreRestartSignal (line 9) | @riverpod
method build (line 12) | int build()
method restart (line 14) | void restart()
FILE: lib/main.dart
function main (line 7) | Future<void> main()
FILE: lib/main_prod.dart
function main (line 6) | Future<void> main()
FILE: lib/riverpod_observer.dart
class RiverpodObserver (line 5) | class RiverpodObserver extends ProviderObserver {
method didAddProvider (line 7) | void didAddProvider(ProviderBase<Object?> provider, Object? value, Pro...
method didDisposeProvider (line 12) | void didDisposeProvider(ProviderBase<Object?> provider, ProviderContai...
method didUpdateProvider (line 17) | void didUpdateProvider(
FILE: lib/singbox/model/core_status.dart
class CoreStatus (line 8) | @freezed
method getCoreAlert (line 75) | ConnectionFailure? getCoreAlert()
type CoreAlert (line 98) | enum CoreAlert {
FILE: lib/singbox/model/singbox_config_enum.dart
type ServiceMode (line 7) | @JsonEnum(valueField: 'key')
type BalancerStrategy (line 53) | @JsonEnum(valueField: 'key')
type IPv6Mode (line 70) | @JsonEnum(valueField: 'key')
type DomainStrategy (line 89) | @JsonEnum(valueField: 'key')
type TunImplementation (line 110) | enum TunImplementation {
type MuxProtocol (line 122) | enum MuxProtocol { h2mux, smux, yamux }
type WarpDetourMode (line 124) | @JsonEnum(valueField: 'key')
FILE: lib/singbox/model/singbox_config_option.dart
class SingboxConfigOption (line 13) | @freezed
method format (line 57) | String format()
class SingboxWarpOption (line 65) | @freezed
class SingboxTlsTricks (line 99) | @freezed
FILE: lib/singbox/model/singbox_outbound.dart
class SingboxOutboundGroup (line 7) | @freezed
class SingboxOutboundGroupItem (line 22) | @freezed
function _typeFromJson (line 35) | ProxyType _typeFromJson(dynamic type)
FILE: lib/singbox/model/singbox_proxy_type.dart
type ProxyType (line 1) | enum ProxyType {
FILE: lib/singbox/model/singbox_rule.dart
class SingboxRule (line 6) | @freezed
type RuleOutbound (line 24) | enum RuleOutbound { proxy, bypass, block }
type RuleNetwork (line 26) | @JsonEnum(valueField: 'key')
FILE: lib/singbox/model/singbox_stats.dart
class SingboxStats (line 6) | @freezed
FILE: lib/singbox/model/warp_account.dart
type WarpResponse (line 3) | typedef WarpResponse = ({
Condensed preview — 610 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,205K chars).
[
{
"path": ".gitchangelog.rc",
"chars": 483,
"preview": "#output_engine = mustache(\"markdown\")\noutput_engine = mustache(\".release_notes.tpl\")\n\n\ntag_filter_regexp = r'^v?[0-9]+\\."
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yaml",
"chars": 3958,
"preview": "---\nname: Bug Report\ndescription: Report a bug encountered while using Hiddify\nlabels: [\"bug\"]\nbody:\n - type: markdown\n"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 146,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: Questions & Help\n url: https://t.me/hiddify_board\n about: Ask"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.yaml",
"chars": 384,
"preview": "name: Feature Request\ndescription: Request a new feature\ntitle: '[FR] '\nbody:\n - type: markdown\n attributes:\n v"
},
{
"path": ".github/auto_translator.py",
"chars": 1380,
"preview": "import i18n\nimport json\nfrom deep_translator import GoogleTranslator\nimport sys\nimport os\n\n\ndef get_path(lang):\n base"
},
{
"path": ".github/change_version.sh",
"chars": 2395,
"preview": "#! /bin/bash\nSED() { [[ \"$OSTYPE\" == \"darwin\"* ]] && sed -i '' \"$@\" || sed -i \"$@\"; }\necho \"previous version was $(git d"
},
{
"path": ".github/dependabot.yml",
"chars": 544,
"preview": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where "
},
{
"path": ".github/release_message.md",
"chars": 3380,
"preview": "<div align=center>\n \n[\n\n#### New\n\n* Add doc for dnstt. \n\n\n\n## v4.1.0 (2026-03-05)\n\n#### New\n\n* Add dnstt. \n"
},
{
"path": "LICENSE.md",
"chars": 36345,
"preview": "# Hiddify Extended GNU General Public License v3\n\nThe Hiddify project is licensed under GPL v3, with the following addit"
},
{
"path": "Makefile",
"chars": 17757,
"preview": "# .ONESHELL:\ninclude dependencies.properties\n\n# --- Log Colors ---\nblue := \\033[1;34m\ngreen := \\033[1;92m\nyellow := \\"
},
{
"path": "README.md",
"chars": 11569,
"preview": "<div dir=\"ltr\" align=center>\n \n[** / [**🇨🇳 简体中文**](README_cn.md) / [**🇷🇺 Русский**"
},
{
"path": "README_ja.md",
"chars": 10343,
"preview": "<div dir=\"ltr\" align=center>\n\n[**;\n vo"
},
{
"path": "android/app/src/main/aidl/com/hiddify/hiddify/IServiceCallback.aidl",
"chars": 247,
"preview": "package com.hiddify.hiddify;\n\ninterface IServiceCallback {\n void onServiceStatusChanged(int status);\n void onServiceAl"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/ActiveGroupsChannel.kt",
"chars": 2137,
"preview": "package com.hiddify.hiddify\n\nimport android.util.Log\nimport com.google.gson.Gson\n//import com.hiddify.hiddify.utils.Comm"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/Application.kt",
"chars": 1485,
"preview": "package com.hiddify.hiddify\n\nimport android.app.Application\nimport android.app.NotificationManager\nimport android.conten"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/EventHandler.kt",
"chars": 3446,
"preview": "package com.hiddify.hiddify\n\nimport android.util.Log\nimport androidx.lifecycle.Observer\nimport com.hiddify.hiddify.const"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/GroupsChannel.kt",
"chars": 2094,
"preview": "package com.hiddify.hiddify\n\nimport android.util.Log\nimport com.google.gson.Gson\n//import com.hiddify.hiddify.utils.Comm"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/LogHandler.kt",
"chars": 1188,
"preview": "package com.hiddify.hiddify\n\nimport android.util.Log\nimport io.flutter.embedding.engine.plugins.FlutterPlugin\nimport io."
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/MainActivity.kt",
"chars": 6090,
"preview": "package com.hiddify.hiddify\n\nimport android.annotation.SuppressLint\nimport android.content.Intent\nimport android.Manifes"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/MethodHandler.kt",
"chars": 7379,
"preview": "package com.hiddify.hiddify\n\nimport android.util.Log\nimport com.hiddify.hiddify.bg.BoxService\n//import com.hiddify.hiddi"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/PlatformSettingsHandler.kt",
"chars": 7906,
"preview": "package com.hiddify.hiddify\n\nimport android.Manifest\nimport android.annotation.SuppressLint\nimport android.app.Activity\n"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/Settings.kt",
"chars": 6380,
"preview": "package com.hiddify.hiddify\n\nimport android.content.Context\nimport android.util.Base64\nimport com.hiddify.hiddify.bg.Pro"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/ShortcutActivity.kt",
"chars": 2225,
"preview": "package com.hiddify.hiddify\n\nimport android.app.Activity\nimport android.content.Intent\nimport android.content.pm.Shortcu"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/StatsChannel.kt",
"chars": 2504,
"preview": "package com.hiddify.hiddify\n\nimport android.util.Log\n//import com.hiddify.hiddify.utils.CommandClient\nimport io.flutter."
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/bg/AppChangeReceiver.kt",
"chars": 1172,
"preview": "package com.hiddify.hiddify.bg\n\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.c"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/bg/BootReceiver.kt",
"chars": 1009,
"preview": "package com.hiddify.hiddify.bg\nimport android.content.BroadcastReceiver\nimport android.content.Context\n\nimport android.c"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/bg/BoxService.kt",
"chars": 13462,
"preview": "package com.hiddify.hiddify.bg\n\nimport android.app.NotificationChannel\nimport android.app.NotificationManager\nimport and"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/bg/Bugs.kt",
"chars": 454,
"preview": "package com.hiddify.hiddify.bg\n\nimport android.os.Build\nimport com.hiddify.hiddify.BuildConfig\n\n\nobject Bugs {\n // TO"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/bg/DefaultNetworkListener.kt",
"chars": 7874,
"preview": "package com.hiddify.hiddify.bg\n\nimport android.annotation.TargetApi\nimport android.net.ConnectivityManager\nimport androi"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/bg/DefaultNetworkMonitor.kt",
"chars": 2066,
"preview": "package com.hiddify.hiddify.bg\n\nimport android.net.Network\nimport android.os.Build\nimport com.hiddify.hiddify.Applicatio"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/bg/LocalResolver.kt",
"chars": 5792,
"preview": "package com.hiddify.hiddify.bg\n\nimport android.net.DnsResolver\nimport android.os.Build\nimport android.os.CancellationSig"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/bg/PlatformInterfaceWrapper.kt",
"chars": 8268,
"preview": "package com.hiddify.hiddify.bg\n\nimport android.annotation.SuppressLint\nimport android.content.pm.PackageManager\nimport a"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/bg/ProxyService.kt",
"chars": 576,
"preview": "package com.hiddify.hiddify.bg\n\nimport android.app.Service\nimport android.content.Intent\nimport com.hiddify.core.libbox."
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/bg/ServiceBinder.kt",
"chars": 1789,
"preview": "package com.hiddify.hiddify.bg\n\nimport android.os.RemoteCallbackList\nimport androidx.lifecycle.MutableLiveData\nimport co"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/bg/ServiceConnection.kt",
"chars": 3686,
"preview": "package com.hiddify.hiddify.bg\n\nimport com.hiddify.hiddify.IService\nimport com.hiddify.hiddify.IServiceCallback\nimport c"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/bg/ServiceNotification.kt",
"chars": 7957,
"preview": "package com.hiddify.hiddify.bg\n\nimport android.app.NotificationChannel\nimport android.app.NotificationManager\nimport and"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/bg/TileService.kt",
"chars": 2294,
"preview": "package com.hiddify.hiddify.bg\n\nimport android.app.KeyguardManager\nimport android.content.Context\nimport android.content"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/bg/VPNService.kt",
"chars": 7710,
"preview": "package com.hiddify.hiddify.bg\nimport android.util.Log\n\nimport com.hiddify.hiddify.Settings\nimport android.content.Inten"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/constant/Action.kt",
"chars": 167,
"preview": "package com.hiddify.hiddify.constant\n\nobject Action {\n const val SERVICE = \"com.hiddify.app.SERVICE\"\n const val SE"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/constant/Alert.kt",
"chars": 203,
"preview": "package com.hiddify.hiddify.constant\n\nenum class Alert {\n RequestVPNPermission,\n RequestNotificationPermission,\n "
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/constant/PerAppProxyMode.kt",
"chars": 158,
"preview": "package com.hiddify.hiddify.constant\n\nobject PerAppProxyMode {\n const val OFF = \"off\"\n const val INCLUDE = \"includ"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/constant/ServiceMode.kt",
"chars": 117,
"preview": "package com.hiddify.hiddify.constant\n\nobject ServiceMode {\n const val NORMAL = \"proxy\"\n const val VPN = \"vpn\"\n}"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/constant/SettingsKey.kt",
"chars": 1263,
"preview": "package com.hiddify.hiddify.constant\n\nobject SettingsKey {\n private const val KEY_PREFIX = \"flutter.\"\n\n const val "
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/constant/Status.kt",
"chars": 113,
"preview": "package com.hiddify.hiddify.constant\n\nenum class Status {\n Stopped,\n Starting,\n Started,\n Stopping,\n}"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/constant/bugs.kt",
"chars": 431,
"preview": "package com.hiddify.hiddify.constant\n\n\nimport android.os.Build\nimport com.hiddify.hiddify.BuildConfig\n\n\nobject Bugs {\n\n "
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/ktx/Continuations.kt",
"chars": 408,
"preview": "package com.hiddify.hiddify.ktx\n\nimport kotlin.coroutines.Continuation\n\n\nfun <T> Continuation<T>.tryResume(value: T) {\n "
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/ktx/Wrappers.kt",
"chars": 657,
"preview": "package com.hiddify.hiddify.ktx\n\nimport android.net.IpPrefix\nimport android.os.Build\nimport androidx.annotation.Requires"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/utils/CommandClient.kt",
"chars": 4622,
"preview": "package com.hiddify.hiddify.utils\n\nimport com.hiddify.core.libbox.CommandClient\nimport com.hiddify.core.libbox.CommandCl"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/utils/GrpcProvider.kt",
"chars": 6194,
"preview": "package com.hiddify.hiddify.utils\n\n/*\n * Copyright (C) 2019 Square, Inc.\n *\n * Licensed under the Apache License, Versio"
},
{
"path": "android/app/src/main/kotlin/com/hiddify/hiddify/utils/OutboundMapper.kt",
"chars": 1149,
"preview": "package com.hiddify.hiddify.utils\n\nimport com.google.gson.annotations.SerializedName\nimport com.hiddify.core.libbox.Outb"
},
{
"path": "android/app/src/main/protos/extension/extension.proto",
"chars": 981,
"preview": "syntax = \"proto3\";\n\nimport \"v2/hcommon/common.proto\";\n\npackage extension;\n\noption go_package = \"github.com/hiddify/hiddi"
},
{
"path": "android/app/src/main/protos/extension/extension_service.proto",
"chars": 690,
"preview": "\n\nsyntax = \"proto3\";\n\nimport \"extension/extension.proto\";\nimport \"v2/hcommon/common.proto\";\npackage extension;\n\noption g"
},
{
"path": "android/app/src/main/protos/v2/config/route_rule.proto",
"chars": 1561,
"preview": "syntax = \"proto3\";\npackage config;\noption go_package = \"github.com/hiddify/hiddify-core/v2/config\";\noption java_package "
},
{
"path": "android/app/src/main/protos/v2/hcommon/common.proto",
"chars": 313,
"preview": "syntax = \"proto3\";\n\npackage hcommon;\n\noption go_package = \"github.com/hiddify/hiddify-core/v2/hcommon\";\noption java_pack"
},
{
"path": "android/app/src/main/protos/v2/hcore/hcore.proto",
"chars": 5172,
"preview": "syntax = \"proto3\";\nimport \"v2/hcommon/common.proto\";\nimport \"google/protobuf/timestamp.proto\";\n\npackage hcore;\noption go"
},
{
"path": "android/app/src/main/protos/v2/hcore/hcore_service.proto",
"chars": 1650,
"preview": "syntax = \"proto3\";\nimport \"v2/hcommon/common.proto\";\npackage hcore;\n\noption go_package = \"github.com/hiddify/hiddify-cor"
},
{
"path": "android/app/src/main/protos/v2/hcore/tunnelservice/tunnel.proto",
"chars": 465,
"preview": "syntax = \"proto3\";\n\npackage tunnelservice;\n\noption go_package = \"github.com/hiddify/hiddify-core/v2/hcore/tunnelservice\""
},
{
"path": "android/app/src/main/protos/v2/hcore/tunnelservice/tunnel_service.proto",
"chars": 520,
"preview": "syntax = \"proto3\";\nimport \"v2/hcommon/common.proto\";\npackage tunnelservice;\n\noption go_package = \"github.com/hiddify/hid"
},
{
"path": "android/app/src/main/protos/v2/hello/hello.proto",
"chars": 247,
"preview": "syntax = \"proto3\";\n\npackage hello;\noption go_package = \"github.com/hiddify/hiddify-core/v2/hello\";\noption java_package ="
},
{
"path": "android/app/src/main/protos/v2/hello/hello_service.proto",
"chars": 334,
"preview": "syntax = \"proto3\";\n\npackage hello;\noption go_package = \"github.com/hiddify/hiddify-core/v2/hello\";\noption java_package ="
},
{
"path": "android/app/src/main/protos/v2/hiddifyoptions/hiddify_options.proto",
"chars": 7177,
"preview": "/**\n * This file defines various configuration options for the Hiddify application.\n */\n\nsyntax = \"proto3\";\n\npackage hid"
},
{
"path": "android/app/src/main/protos/v2/profile/profile.proto",
"chars": 1347,
"preview": "syntax = \"proto3\";\n\npackage profile;\noption go_package = \"github.com/hiddify/hiddify-core/v2/profile\";\noption java_packa"
},
{
"path": "android/app/src/main/protos/v2/profile/profile_service.proto",
"chars": 3147,
"preview": "syntax = \"proto3\";\n\npackage profile;\noption go_package = \"github.com/hiddify/hiddify-core/v2/profile\";\noption java_packa"
},
{
"path": "android/app/src/main/res/drawable/android12splash.xml",
"chars": 1883,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"108dp\"\n android:height=\"108dp\"\n"
},
{
"path": "android/app/src/main/res/drawable/ic_banner_foreground.xml",
"chars": 7104,
"preview": "\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"640dp\"\n android:height=\"360dp\""
},
{
"path": "android/app/src/main/res/drawable/ic_launcher_background.xml",
"chars": 363,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"2048dp\"\n android:height=\"2048dp"
},
{
"path": "android/app/src/main/res/drawable/ic_launcher_foreground.xml",
"chars": 1883,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"108dp\"\n android:height=\"108dp\"\n"
},
{
"path": "android/app/src/main/res/drawable/launch_background.xml",
"chars": 321,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item"
},
{
"path": "android/app/src/main/res/drawable-v21/launch_background.xml",
"chars": 321,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item"
},
{
"path": "android/app/src/main/res/mipmap-anydpi-v26/ic_banner.xml",
"chars": 263,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
"chars": 267,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
"chars": 267,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "android/app/src/main/res/values/colors.xml",
"chars": 64,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n</resources>"
},
{
"path": "android/app/src/main/res/values/ic_banner_background.xml",
"chars": 118,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"ic_banner_background\">#F0F3FA</color>\n</resources>"
},
{
"path": "android/app/src/main/res/values/ic_launcher_background.xml",
"chars": 120,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"ic_launcher_background\">#F0F3FA</color>\n</resources>"
},
{
"path": "android/app/src/main/res/values/strings.xml",
"chars": 270,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"stop\">Stop</string>\n <string name=\"quick_toggle\""
},
{
"path": "android/app/src/main/res/values/styles.xml",
"chars": 1267,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!-- Theme applied to the Android Window while the process is sta"
},
{
"path": "android/app/src/main/res/values-night/styles.xml",
"chars": 1266,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!-- Theme applied to the Android Window while the process is sta"
},
{
"path": "android/app/src/main/res/values-night-v31/styles.xml",
"chars": 1225,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!-- Theme applied to the Android Window while the process is sta"
},
{
"path": "android/app/src/main/res/values-v31/styles.xml",
"chars": 1225,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!-- Theme applied to the Android Window while the process is sta"
},
{
"path": "android/app/src/main/res/xml/network_security_config.xml",
"chars": 226,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<network-security-config>\n <domain-config cleartextTrafficPermitted=\"true\">\n "
},
{
"path": "android/app/src/main/res/xml/shortcuts.xml",
"chars": 545,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shortcuts xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <short"
},
{
"path": "android/app/src/profile/AndroidManifest.xml",
"chars": 378,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <!-- The INTERNET permission is required for d"
},
{
"path": "android/build.gradle",
"chars": 324,
"preview": "allprojects {\n repositories {\n mavenCentral()\n google()\n }\n\n}\n\n\nrootProject.buildDir = '../build'\nsu"
},
{
"path": "android/gradle/wrapper/gradle-wrapper.properties",
"chars": 200,
"preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
},
{
"path": "android/gradle.properties",
"chars": 322,
"preview": "org.gradle.jvmargs=-Xmx4048m -Dfile.encoding=UTF-8\nandroid.useAndroidX=true\nandroid.enableJetifier=true\nandroid.defaults"
},
{
"path": "android/settings.gradle",
"chars": 726,
"preview": "pluginManagement {\n def flutterSdkPath = {\n def properties = new Properties()\n file(\"local.properties\")"
},
{
"path": "appcast.xml",
"chars": 1809,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<rss version=\"2.0\" xmlns:sparkle=\"http://www.andymatuschak.org/xml-namespaces/spa"
},
{
"path": "assets/core/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "assets/fonts/emoji_source.txt",
"chars": 3589,
"preview": "https://github.com/hiddify-com/noto-emoji\n\n\npyftsubset \"Emoji3.ttf\" --output-file=Emoji.ttf --unicodes=U+1F1E6+1F1E9,U+1"
},
{
"path": "assets/images/convert_icon.sh",
"chars": 90,
"preview": "in=$1\nconvert -define icon:auto-resize=128,64,48,32,16 -gravity center $in.png $in.ico\n"
},
{
"path": "assets/translations/ar.i18n.json",
"chars": 22387,
"preview": "{\n \"common\": {\n \"appTitle\": \"Hiddify\",\n \"start\": \"ابدأ\",\n \"version\": \"الإصدار\",\n \"ok\": \"موافق\",\n \"cancel"
},
{
"path": "assets/translations/en.i18n.json",
"chars": 22555,
"preview": "{\n \"common\": {\n \"appTitle\": \"Hiddify\",\n \"start\": \"Start\",\n \"version\": \"Version\",\n \"ok\": \"OK\",\n \"cancel\":"
},
{
"path": "assets/translations/es.i18n.json",
"chars": 24301,
"preview": "{\n \"common\": {\n \"appTitle\": \"Hiddify\",\n \"start\": \"Comenzar\",\n \"version\": \"Versión\",\n \"ok\": \"Aceptar\",\n \""
},
{
"path": "assets/translations/fa.i18n.json",
"chars": 22687,
"preview": "{\n \"common\": {\n \"appTitle\": \"هیدیفای\",\n \"start\": \"شروع\",\n \"version\": \"نسخه\",\n \"ok\": \"باشه\",\n \"cancel\": \""
},
{
"path": "assets/translations/fr.i18n.json",
"chars": 24839,
"preview": "{\n \"common\": {\n \"appTitle\": \"Hiddify\",\n \"start\": \"Commencer\",\n \"version\": \"Version\",\n \"ok\": \"OK\",\n \"canc"
},
{
"path": "assets/translations/id.i18n.json",
"chars": 23280,
"preview": "{\n \"common\": {\n \"appTitle\": \"Hiddify\",\n \"start\": \"Mulai\",\n \"version\": \"Versi\",\n \"ok\": \"Oke\",\n \"cancel\": "
},
{
"path": "assets/translations/pt-BR.i18n.json",
"chars": 24118,
"preview": "{\n \"common\": {\n \"appTitle\": \"Hiddify\",\n \"start\": \"Começar\",\n \"version\": \"Versão\",\n \"ok\": \"OK\",\n \"cancel\""
},
{
"path": "assets/translations/ru.i18n.json",
"chars": 23846,
"preview": "{\n \"common\": {\n \"appTitle\": \"Hiddify\",\n \"start\": \"Начать\",\n \"version\": \"Версия\",\n \"ok\": \"OK\",\n \"cancel\":"
},
{
"path": "assets/translations/tr.i18n.json",
"chars": 23414,
"preview": "{\n \"common\": {\n \"appTitle\": \"Hiddify\",\n \"start\": \"Başlat\",\n \"version\": \"Sürüm\",\n \"ok\": \"Tamam\",\n \"cancel"
},
{
"path": "assets/translations/zh-CN.i18n.json",
"chars": 17855,
"preview": "{\n \"common\": {\n \"appTitle\": \"Hiddify\",\n \"start\": \"开始\",\n \"version\": \"版本\",\n \"ok\": \"确定\",\n \"cancel\": \"取消\",\n "
},
{
"path": "assets/translations/zh-TW.i18n.json",
"chars": 17866,
"preview": "{\n \"common\": {\n \"appTitle\": \"Hiddify\",\n \"start\": \"開始\",\n \"version\": \"版本\",\n \"ok\": \"確定\",\n \"cancel\": \"取消\",\n "
},
{
"path": "build.yaml",
"chars": 994,
"preview": "targets:\n $default:\n builders:\n json_serializable:\n options:\n explicit_to_json: true\n drif"
},
{
"path": "dependencies.properties",
"chars": 18,
"preview": "core.version=4.1.0"
},
{
"path": "devtools_options.yaml",
"chars": 12,
"preview": "extensions:\n"
},
{
"path": "ios/.gitignore",
"chars": 569,
"preview": "**/dgph\n*.mode1v3\n*.mode2v3\n*.moved-aside\n*.pbxuser\n*.perspectivev3\n**/*sync/\n.sconsign.dblite\n.tags*\n**/.vagrant/\n**/De"
},
{
"path": "ios/.stignore",
"chars": 568,
"preview": "/**/dgph\n/*.mode1v3\n/*.mode2v3\n/*.moved-aside\n/*.pbxuser\n/*.perspectivev3\n/**/*sync/\n/.sconsign.dblite\n/.tags*\n/**/.vagr"
},
{
"path": "ios/Base.xcconfig",
"chars": 186,
"preview": "//\n// Base.xcconfig\n// Runner\n//\n// Created by GFWFighter on 7/24/1402 AP.\n//\n\nBASE_BUNDLE_IDENTIFIER=apple.hiddify.c"
},
{
"path": "ios/Flutter/AppFrameworkInfo.plist",
"chars": 774,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Flutter/Debug.xcconfig",
"chars": 133,
"preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"\n#include \"Generated.xcconfig\"\n\n#include \"Ba"
},
{
"path": "ios/Flutter/Release.xcconfig",
"chars": 135,
"preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"\n#include \"Generated.xcconfig\"\n\n#include \""
},
{
"path": "ios/Frameworks/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "ios/HiddifyPacketTunnel/HiddifyPacketTunnel.entitlements",
"chars": 881,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/HiddifyPacketTunnel/Info.plist",
"chars": 510,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/HiddifyPacketTunnel/Logger.swift",
"chars": 1432,
"preview": "//\n// Logger.swift\n// SingBoxPacketTunnel\n//\n// Created by GFWFighter on 10/24/23.\n//\n\nimport Foundation\n\nclass Logge"
},
{
"path": "ios/HiddifyPacketTunnel/PacketTunnelProvider.swift",
"chars": 1194,
"preview": "//\n// PacketTunnelProvider.swift\n// SingBoxPacketTunnel\n//\n// Created by GFWFighter on 7/24/1402 AP.\n//\n\nimport Netwo"
},
{
"path": "ios/HiddifyPacketTunnel/PrivacyInfo.xcprivacy",
"chars": 680,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/HiddifyPacketTunnel/SingBox/Extension+RunBlocking.swift",
"chars": 984,
"preview": "//\n// Extension+RunBlocking.swift\n// SingBoxPacketTunnel\n//\n// Created by GFWFighter on 7/25/1402 AP.\n//\n\nimport Foun"
},
{
"path": "ios/HiddifyPacketTunnel/SingBox/ExtensionPlatformInterface.swift",
"chars": 20667,
"preview": "//\n// ExtensionPlatformInterface.swift\n// SingBoxPacketTunnel\n//\n// Created by GFWFighter on 7/25/1402 AP.\n//\n\nimport"
},
{
"path": "ios/HiddifyPacketTunnel/SingBox/ExtensionProvider.swift",
"chars": 8393,
"preview": "import Foundation\nimport HiddifyCore\nimport NetworkExtension\nimport os.log\n\nopen class ExtensionProvider: NEPacketTunnel"
},
{
"path": "ios/HiddifyPacketTunnel/SingBox/SingBox.swift",
"chars": 1800,
"preview": "//\n// SingBox.swift\n// SingBoxPacketTunnel\n//\n// Created by GFWFighter on 7/25/1402 AP.\n//\n\nimport Foundation\n\nclass "
},
{
"path": "ios/HiddifyPacketTunnel/TrafficReader.swift",
"chars": 2057,
"preview": "//\n// TrafficReader.swift\n// SingBoxPacketTunnel\n//\n// Created by GFWFighter on 7/25/1402 AP.\n//\n\nimport Foundation\n\n"
},
{
"path": "ios/Local Packages/Package.swift",
"chars": 614,
"preview": "// swift-tools-version: 5.4\n// The swift-tools-version declares the minimum version of Swift required to build this pack"
},
{
"path": "ios/Podfile",
"chars": 1568,
"preview": "# Uncomment this line to define a global platform for your project\nplatform :ios, '15.5'\n\n# CocoaPods analytics sends ne"
},
{
"path": "ios/Runner/AppDelegate.swift",
"chars": 1651,
"preview": "import UIKit\nimport Flutter\nimport HiddifyCore\nimport Sentry\n@main\n@objc class AppDelegate: FlutterAppDelegate {\n \n "
},
{
"path": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
"chars": 217,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"app-icon-1024.png\",\n \"idiom\" : \"universal\",\n \"platform\" : \"ios\",\n "
},
{
"path": "ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json",
"chars": 308,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"background.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n "
},
{
"path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json",
"chars": 391,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"LaunchImage.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n "
},
{
"path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md",
"chars": 336,
"preview": "# Launch Screen Assets\n\nYou can customize the launch screen with your own desired assets by replacing the image files in"
},
{
"path": "ios/Runner/Base.lproj/LaunchScreen.storyboard",
"chars": 3489,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
},
{
"path": "ios/Runner/Base.lproj/Main.storyboard",
"chars": 1811,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
},
{
"path": "ios/Runner/Extensions/Bundle+Properties.swift",
"chars": 341,
"preview": "//\n// Bundle+Properties.swift\n// Runner\n//\n// Created by Hiddify on 12/26/23.\n//\n\nimport Foundation\n\nextension Bundle"
},
{
"path": "ios/Runner/Handlers/ActiveGroupsEventHandler.swift",
"chars": 1779,
"preview": "import Foundation\nimport Combine\nimport HiddifyCore\n\npublic class ActiveGroupsEventHandler: NSObject, FlutterPlugin, Flu"
},
{
"path": "ios/Runner/Handlers/AlertsEventHandler.swift",
"chars": 1411,
"preview": "//\n// AlertEventHandler.swift\n// Runner\n//\n// Created by GFWFighter on 10/24/23.\n//\n\nimport Foundation\nimport Combine"
},
{
"path": "ios/Runner/Handlers/FileMethodHandler.swift",
"chars": 1065,
"preview": "//\n// FileMethodHandler.swift\n// Runner\n//\n// Created by GFWFighter on 10/24/23.\n//\n\nimport Foundation\n\npublic class "
},
{
"path": "ios/Runner/Handlers/GroupsEventHandler.swift",
"chars": 1748,
"preview": "import Foundation\nimport Combine\nimport HiddifyCore\n\npublic class GroupsEventHandler: NSObject, FlutterPlugin, FlutterSt"
},
{
"path": "ios/Runner/Handlers/LogsEventHandler.swift",
"chars": 1800,
"preview": "import Foundation\nimport Combine\nimport HiddifyCore\n\nclass LogsEventHandler: NSObject, FlutterPlugin, FlutterStreamHandl"
},
{
"path": "ios/Runner/Handlers/MethodHandler.swift",
"chars": 10255,
"preview": "//\n// MethodHandler.swift\n// Runner\n//\n// Created by GFWFighter on 10/23/23.\n//\n\nimport Flutter\nimport Combine\nimport"
},
{
"path": "ios/Runner/Handlers/PlatformMethodHandler.swift",
"chars": 1216,
"preview": "//\n// PlatformMethodHandler.swift\n// Runner\n//\n// Created by Hiddify on 12/27/23.\n//\n\nimport Flutter\nimport Combine\ni"
},
{
"path": "ios/Runner/Handlers/StatsEventHandler.swift",
"chars": 1944,
"preview": "import Foundation\nimport Flutter\nimport Combine\nimport HiddifyCore\n\npublic class StatsEventHandler: NSObject, FlutterPlu"
},
{
"path": "ios/Runner/Handlers/StatusEventHandler.swift",
"chars": 1519,
"preview": "//\n// StatusEventHandler.swift\n// Runner\n//\n// Created by GFWFighter on 10/24/23.\n//\n\nimport Foundation\nimport Combin"
},
{
"path": "ios/Runner/Info.plist",
"chars": 2874,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner/PrivacyInfo.xcprivacy",
"chars": 1109,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner/Runner-Bridging-Header.h",
"chars": 38,
"preview": "#import \"GeneratedPluginRegistrant.h\"\n"
},
{
"path": "ios/Runner/Runner.entitlements",
"chars": 815,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner/VPN/Helpers/Stored.swift",
"chars": 2509,
"preview": "//\n// Stored.swift\n// Runner\n//\n// Created by GFWFighter on 10/24/23.\n//\n\nimport Foundation\nimport Combine\n\nenum Stor"
},
{
"path": "ios/Runner/VPN/VPNConfig.swift",
"chars": 916,
"preview": "//\n// VPNConfig.swift\n// Runner\n//\n// Created by GFWFighter on 10/24/23.\n//\n\nimport Foundation\nimport Combine\n\nclass "
},
{
"path": "ios/Runner/VPN/VPNManager.swift",
"chars": 8039,
"preview": "//\n// VPNManager.swift\n// Runner\n//\n// Created by GFWFighter on 7/25/1402 AP.\n//\n\nimport Foundation\nimport Combine\nim"
},
{
"path": "ios/Runner.xcodeproj/project.pbxproj",
"chars": 68492,
"preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 54;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
},
{
"path": "ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
"chars": 135,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"self:\">\n </FileRef"
},
{
"path": "ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
"chars": 226,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner.xcodeproj/xcshareddata/xcschemes/HiddifyPacketTunnel.xcscheme",
"chars": 3760,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"1540\"\n wasCreatedForAppExtension = \"YES\"\n ve"
},
{
"path": "ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
"chars": 4054,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"1510\"\n version = \"1.3\">\n <BuildAction\n "
},
{
"path": "ios/Runner.xcworkspace/contents.xcworkspacedata",
"chars": 224,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"group:Runner.xcodepr"
},
{
"path": "ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
"chars": 226,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/RunnerTests/RunnerTests.swift",
"chars": 285,
"preview": "import Flutter\nimport UIKit\nimport XCTest\n\nclass RunnerTests: XCTestCase {\n\n func testExample() {\n // If you add cod"
},
{
"path": "ios/Shared/CommandClient.swift",
"chars": 5683,
"preview": "import Foundation\nimport HiddifyCore\n\npublic class CommandClient: ObservableObject {\n public enum ConnectionType {\n "
},
{
"path": "ios/Shared/FilePath.swift",
"chars": 1070,
"preview": "//\n// FilePath.swift\n// SingBoxPacketTunnel\n//\n// Created by GFWFighter on 7/25/1402 AP.\n//\n\nimport Foundation\n\npubli"
},
{
"path": "ios/Shared/Outbound.swift",
"chars": 359,
"preview": "public struct SBItem: Codable {\n let tag: String\n let type: String\n let urlTestDelay: Int\n \n enum CodingK"
},
{
"path": "ios/exportOptions.plist",
"chars": 846,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/packaging/ios/make_config.yaml",
"chars": 708,
"preview": "display_name: Hiddify\n\nicon: ..\\..\\assets\\images\\windows.ico\n\nkeywords:\n - Hiddify\n - Proxy\n - VPN\n - V2ray\n - Neko"
},
{
"path": "lib/bootstrap.dart",
"chars": 6081,
"preview": "import 'dart:async';\nimport 'dart:io';\n\nimport 'package:flutter/foundation.dart';\nimport 'package:flutter/material.dart'"
},
{
"path": "lib/core/analytics/analytics_controller.dart",
"chars": 2655,
"preview": "import 'package:flutter/foundation.dart';\nimport 'package:hiddify/core/analytics/analytics_filter.dart';\nimport 'package"
},
{
"path": "lib/core/analytics/analytics_filter.dart",
"chars": 931,
"preview": "import 'dart:io';\n\nimport 'package:dio/dio.dart';\nimport 'package:hiddify/core/model/failures.dart';\nimport 'package:riv"
},
{
"path": "lib/core/analytics/analytics_logger.dart",
"chars": 2705,
"preview": "import 'package:hiddify/utils/sentry_utils.dart';\nimport 'package:loggy/loggy.dart';\nimport 'package:sentry_flutter/sent"
}
]
// ... and 410 more files (download for full content)
About this extraction
This page contains the full source code of the hiddify/hiddify-app GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 610 files (2.9 MB), approximately 787.9k tokens, and a symbol index with 4886 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.