Skip to content

v1.0.5 -- "就像那句狠话:有一天,我一定会后悔的。"

Choose a tag to compare

@github-actions github-actions released this 03 Sep 03:21
· 5 commits to main since this release
  • chore(release): bump version to 1.0.5

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_01LKYUwNq8JMjiGfvPQWekST

  • fix(nodes): send XHTTP transport settings to xhttp-opts

  • Importing a VLESS or VMess link with type=xhttp put path and host into

  • ws-opts. mihomo reads XHTTP settings from xhttp-opts only (XHTTPOptions

  • in adapter/outbound/vless.go), so path was lost, mode was dropped on

  • the floor, and host fell back to the TLS servername. The node could not

  • connect at all, and nothing in the app ever wrote xhttp-opts, so only

  • raw YAML nodes could carry an XHTTP transport.

  • Route them to xhttp-opts on import, keep mode, and read them back on

  • export so the URI round-trips. httpupgrade keeps using ws-opts, which

  • is where mihomo reads it from.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_01LKYUwNq8JMjiGfvPQWekST

  • fix(tun): put the IPv6 takeover behind an explicit switch

  • The virtual adapter took over IPv6 whenever it was enabled, overriding

  • the IPv6 switch the user had turned off in settings. That also handed

  • ::/0 to the tun, so direct traffic started depending on the host having

  • a working IPv6 uplink — the shape of failure where a half-broken v6

  • (address and default route present, packets dropped) makes dual-stack

  • sites time out.

  • Add tun.ipv6, on by default, and let it decide. With it off,

  • inet6-address is not written either, so sing-tun never installs the

  • ::/0 route, and the global ipv6 switch is left exactly as the user set

  • it. Taking over ::/0 is safe to keep as the default: verified on a

  • device with deliberately broken IPv6 that domestic sites still load,

  • because mihomo restores the domain in preHandleMetadata and re-resolves

  • it, so the outbound address family is mihomo's choice and

  • tcp-concurrent races the dead v6 leg away. Xray honours what the client

  • picked and has no such fallback, which is why the same setup breaks

  • there.

  • Android builds the adapter in VpnService, where tun.enable is always

  • false, so the takeover lives in the VPN IPv6 switch instead. That

  • switch never reached the core: VpnService pointed ::/0 at the adapter

  • while the core still had ipv6 off, so the route was taken over but no

  • AAAA was ever resolved. Both platforms now decide through

  • SetupAction._tunTakesIpv6, and the result is passed into

  • makeRealProfileTask rather than derived there — that runs in a compute

  • isolate and should not reach for the platform singleton.

  • Also move the fake-ip-range6 gate out of the overrideDns branch. A

  • profile shipping its own dns block skips that branch entirely, so a

  • subscription setting ipv6: true silently overrode the local DNS IPv6

  • switch. Outside the branch the dns map may still be the read-only one

  • the profile arrived with, so copy it before writing.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_01LKYUwNq8JMjiGfvPQWekST

  • chore(release): bump version to 1.0.4

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_01YWcTvHimUrxTUtVBRVTcZn

  • fix(tun): stop DNS and WebRTC leaking the real address

  • With the virtual adapter on, DNS queries and WebRTC candidates still

  • exposed the real address. mihomo implements the defences for both, but

  • the app could not reach them: the Tun model, the config writer and the

  • Go bridge each carried the same six tun fields, so strict-route had no

  • way out of the app.

  • Add strict-route, on by default. On Windows sing-tun installs WFP

  • filters that permit only the tun interface and this process and block

  • remote port 53 everywhere else, which is what Windows' multihomed name

  • resolution needs; on Linux it adds the unreachable ip rules.

  • Make the tun carry IPv6. mihomo clears tun.inet6-address whenever ipv6

  • is false (config.parseIPV6), so a tun that does not take over IPv6

  • leaves the system routing it out of the physical interface. Force ipv6

  • on whenever the tun is enabled and write inet6-address explicitly.

  • Whether AAAA is resolved stays with dns.ipv6, so this does not change

  • which address family applications prefer.

  • Both settings also travel through the bridge, because core_manager

  • patches the running config instead of rewriting the profile: enabling

  • the tun after launch would otherwise recreate it without the IPv6

  • address it needs.

  • Add dns.fake-ip-range6 and tie it to dns.ipv6. Under fake-ip, AAAA is

  • answered by the withFakeIP middleware, which returns an empty answer

  • when there is no v6 pool and never reaches the dns.ipv6 check in

  • withResolver, so that switch did nothing in the default mode. It now

  • provisions the pool. Hosts without global IPv6 are unaffected:

  • parseIPV6 runs before parseDNS and parseTun and clears both the v6 pool

  • and the tun address.

  • Verified by parsing the generated config with mihomo's own config.Parse

  • in both environments. With IPv6 the tun keeps fdfe:dcba:9876::1/126 and

  • FakeIPPool6 is created; without it both are dropped and parsing still

  • succeeds.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_01YWcTvHimUrxTUtVBRVTcZn

  • chore(release): bump version to 1.0.3

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_01THm54YvuV1sjPqEMGFrgxq

  • feat(profiles): give each tab its own action button

  • The Profiles scaffold showed one Add Profile button for all three tabs,

  • while the node and chain actions sat inline above their lists. The

  • button that matters depends on the tab you are looking at.

  • Drive the floating action button from the tab index: Add Profile on

  • Profiles, Create node and Import node on Nodes, Create chain on Chains.

  • The inline buttons in the node toolbar and above the chain list are gone

  • now that the actions live in the scaffold; the empty states keep theirs

  • as a call to action.

  • The two node buttons sit at opposite edges, which the end-aligned slot

  • cannot express, so CommonScaffold gained a floatingActionButtonLocation

  • and that tab uses centerFloat with the edge inset added back.

  • To reach the actions from the scaffold, the node import/create handlers

  • and the chain create handler become top-level functions in their own

  • files; the views delegate to them.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_01THm54YvuV1sjPqEMGFrgxq

  • feat(nodes): import nodes without a preview step

  • Removing only the overwrite-or-copy radios left the preview dialog in

  • place, so importing still interrupted the user to confirm a list they

  • did not ask to review. Importing a link means "add this": parse it, add

  • what is valid, and report what is not.

  • Drop the preview entirely from both import paths. NodeLibraryService

  • already skips drafts that fail to parse and returns their issues, so the

  • Nodes tab now surfaces those issues instead of showing them in a list

  • nobody needed to approve. Binding follows the caller as before: imports

  • bind to the current profile when there is one.

  • Delete NodeImportPreview, NodeImportSelection and their test, along with

  • the importPreview and bindCurrentProfile messages that only that dialog

  • used. _previewAndCommitNodes becomes _commitNodes, since it no longer

  • previews anything.

  • Verified on an Android emulator: a node deep link and the Nodes tab

  • import both create the node with no dialog, and importing the same link

  • twice yields two copies.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_01THm54YvuV1sjPqEMGFrgxq

  • feat(nodes): always add on import instead of asking about duplicates

  • The import preview asked the user to choose between updating the

  • existing node and creating a copy. The choice is not worth a prompt:

  • importing a link means "add this", and re-importing the same link should

  • simply yield another copy.

  • Drop the radio group and commit imports with createCopy, so the preview

  • only asks what it still needs, which drafts to keep and whether to bind

  • them to the current profile.

  • Clean up what the choice left behind:

    • NodeImportSelection.createCopy, now that nothing reads it.
    • The createCopy parameter on importNodeText and _previewAndCommitNodes,
  • which no caller ever passed.

    • The updateExisting message, whose only reference was the removed radio.
  • NodeLibraryService.commit keeps its createCopy parameter: the node menu

  • still duplicates a node with it, and manual creation still dedupes by

  • fingerprint without it.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_01THm54YvuV1sjPqEMGFrgxq

  • fix(android): keep warm-start deep links out of Flutter routing

  • Deep links are handled by app_links, but the Flutter engine's own deep

  • link handling is on by default and pushes the incoming URI into the

  • navigation system. This app uses a plain MaterialApp with no route

  • generator, so a link delivered to an already running instance raised

  • "Could not find a generator for route" and never reached LinkManager.

  • Cold start worked only because getInitialLink reads the intent

  • directly. Warm start is the common case here, since the app is meant to

  • stay running in the background while a subscription link is opened from

  • a browser or chat app.

  • Set flutter_deeplinking_enabled to false so the intent reaches

  • app_links in both cases.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_01THm54YvuV1sjPqEMGFrgxq

  • fix(nodes): treat every http(s) URI as a subscription

  • isHttpProxyUri classified any http(s) URI with an explicit port as an

  • HTTP proxy node, so a subscription link served on a non-default port

  • was imported as a node instead of creating a profile. Self-hosted

  • panels commonly use ports such as 8443 or 2096, and the

  • avalon://install-config deep link routes through the same path, so its

  • explicit intent was overridden by the heuristic.

  • http and https are no longer node schemes, matching what the deep link

  • dispatcher and the Android intent filters already assumed. Drop

  • HttpCodec, its https alias and the port heuristic, and let importText

  • treat any http(s) URI as a subscription URL.

  • Raw Mihomo configs carrying type: http proxies keep working; only the

  • URI codec is gone.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_01THm54YvuV1sjPqEMGFrgxq

  • perf(telemetry): gate UI telemetry on a unified activity state

  • Traffic sampling ran on a fixed 1s global timer that only stopped when

  • the proxy stopped, so a hidden window still paid for Dart scheduling,

  • two IPC round trips and provider updates every second.

  • Introduce a process-wide AppActivityState fed by the Flutter lifecycle,

  • window visibility and window focus, and drive telemetry from it:

    • SetupAction picks 1s, 5s or no sampling from the current activity,
  • the dashboard traffic widgets and the tray title need, resamples

  • immediately on resume, and skips a tick while a request is in flight.

    • The tray speed title is macOS-only, so its need is platform-gated;
  • otherwise showTrayTitle (default true) kept background sampling alive

  • for a consumer that does not exist off macOS.

    • Pages and the app root wrap their subtree in TickerMode so animations
  • stop when the page or the window is inactive.

    • NetworkSpeed and TrafficUsage drop their provider subscription while
  • inactive; Logs and Requests buffer through ActiveSnapshotMixin and

  • commit one snapshot once page and window are both active again.

    • Tray titles dedupe on the formatted string, and getTraffic /
  • getTotalTraffic bypass the debug RPC timing logs.

  • Frame pausing now distinguishes an on-screen window from a hidden one:

  • blur only gates telemetry and tickers, while hide and minimize pause

  • frames after 300ms instead of 5s. Losing focus must not stop frames, as

  • an unfocused window is still scrollable and would appear frozen.

  • Verified on an Android emulator: 1 tick/s in the foreground, zero ticks

  • across 25s backgrounded, and an immediate resample on resume.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_01THm54YvuV1sjPqEMGFrgxq

  • fix(ui): show chain names and align node actions

  • ci: retry Flutter SDK setup after transient downloads

  • ci: use Maven Central mirror for Android builds

  • chore(release): bump version to 1.0.2

  • Start Flutter splash from a blank first frame

  • Add animated Flutter startup splash

  • Refresh primary icon and status generator

  • Update Avalon branding assets across platforms

  • chore(release): prepare signed v1.0.1

  • ci: keep release notes out of the repository

  • fix(windows): resolve installer locale path

  • ci: drop unsupported build architectures

  • chore: organize branding sources

  • chore(release): bump version to 1.0.0

  • ci: optimize release workflow

  • feat: refresh cross-platform branding assets

  • fix: update project links and About page

  • fix: correct packaging paths and platform naming

  • docs: rewrite README and sync translations

  • chore: license Avalon additions under AGPLv3

  • fix(android): update JNI exports for Avalon package

  • refactor: drop the dead crash-reporting plumbing and unused strings

  • Removing Firebase left a settings field, a shared-state field and four

  • localized strings behind, kept alive only by a localization test. This drops

  • them end to end: AppSettingProps.crashlytics/crashlyticsTip, SharedState.crashlytics

  • on both the Dart and Kotlin sides, and the crashlytics, crashlyticsTip,

  • dataCollectionTip and dataCollectionContent strings in all four locales. The

  • shared-state provider now watches two fields instead of three.

  • Also removes chainLibrary, importNodeDesc and chainHopHint, three strings that

  • were never referenced, and renames plugins/rust_api/CLAUDE.md to NOTES.md so the

  • flutter_rust_bridge integration notes survive without carrying an assistant

  • config filename.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_018PvMz7SJGTDgSFovM66xPm

  • chore: remove the remaining agent tooling files

  • AGENTS.md and CLAUDE.md only routed into the deleted .agents directory, and

  • .mcp.json and opencode.jsonc configured a codegraph MCP server this project

  • no longer uses.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_018PvMz7SJGTDgSFovM66xPm

  • chore: remove the JetBrains run configuration

  • .run/main.dart.run.xml only provides a ready-made Flutter run entry for

  • JetBrains IDEs and takes no part in building, testing or packaging.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_018PvMz7SJGTDgSFovM66xPm

  • chore: stop ignoring docs/

  • The directory now holds the translated READMEs, so new files under it must

  • be trackable. Also drops the .claude/settings.local.json rule, which no

  • longer has a directory to apply to.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_018PvMz7SJGTDgSFovM66xPm

  • docs: move the translated READMEs under docs/

  • Keeps the Chinese README at the repository root and relocates the seven

  • translations to docs/. Language navigation, image sources and the LICENSE,

  • NOTICE and CHANGELOG links are rewritten so every relative path still

  • resolves from its new depth.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_018PvMz7SJGTDgSFovM66xPm

  • chore: remove the .codegraph directory

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_018PvMz7SJGTDgSFovM66xPm

  • chore: remove agent tooling configs

  • Drops the .gemini, .codex, .claude, .agents and .zed directories, which

  • carry per-tool assistant configuration rather than anything the project

  • builds or ships.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_018PvMz7SJGTDgSFovM66xPm

  • chore(release): bump version to 0.8.97

  • Artifact file names come from the pubspec version while the release body

  • template builds its download links from the tag, so the two have to match.

  • v0.8.96 is already taken by an upstream FlClash tag, hence 0.8.97 for

  • Avalon's first release.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_018PvMz7SJGTDgSFovM66xPm

  • ci: put a hitokoto quote in the release title

  • Every release is named <tag> -- "<quote>", matching how emailbox names

  • its releases. The quote is fetched from v1.hitokoto.cn with a 5s timeout and

  • falls back to a fixed string when the API is unreachable or returns something

  • jq cannot parse. The value is stripped of newlines and quotes and capped at 80

  • characters so remote content cannot inject extra step outputs or break the

  • title.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_018PvMz7SJGTDgSFovM66xPm

  • refactor!: rename FlClash fork to Avalon and trim the release pipeline

  • Rebrand this FlClash fork as Avalon, repoint every project-owned identifier,

  • and reduce the inherited release pipeline to building installers and attaching

  • them to a GitHub Release.

  • Rename:

    • Dart package fl_clash -> avalon
    • application id com.follow.clash -> com.masteralanlab.avalon, with the Kotlin
  • package directories moved to match

    • executables FlClashCore / FlClashHelperService -> AvalonCore /
  • AvalonHelperService, keeping the Windows pipe name, unix socket path and

  • helper protocol header in sync between the Dart and Rust sides

    • custom URL scheme flclash:// -> avalon:// and generated chain group prefix
  • _flclash -> _avalon

    • a fresh Inno Setup app id so the Windows installer is a distinct application
  • Upstream references are deliberately left untouched: the Clash.Meta submodule

  • branch, the flutter_distributor git ref and the chen08209 forks in pubspec.yaml

  • still point at the upstream projects.

  • Docs:

    • rewrite the README for Avalon in 8 languages, replacing README_zh_CN.md
    • add NOTICE carrying the GPL-3.0 attribution to FlClash and the list of
  • modifications made in this fork

    • state in every README that the project is for study and research only and
  • that any illegal use is prohibited, and add a recommended-resources section

  • CI:

    • drop the F-Droid, Homebrew tap and Telegram publishing steps
    • skip Android signing when no keystore secret is configured instead of writing
  • an empty keystore over the build

    • export ANDROID_NDK from the setup-ndk output, which the Go core build tool
  • requires under that exact name

    • fall back to the runner default Xcode when the pinned version is absent
  • Android:

    • remove Firebase Crashlytics and Analytics; crash-loop protection now reads
  • ActivityManager.getHistoricalProcessExitReasons on API 30+ and degrades to

  • no protection below it

  • BREAKING CHANGE: the application identifiers changed, so Avalon installs

  • alongside FlClash instead of upgrading it. Settings, profiles and the WebDAV

  • backup directory are not migrated.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_018PvMz7SJGTDgSFovM66xPm

  • Fix three codec outputs the Core rejects

  • Device testing surfaced three configs that the Dart layer considered valid

  • but the bundled Core refuses at apply time:

    • SOCKS nodes were emitted as type: socks. Mihomo registers socks5
  • only, so adapter.ParseProxy failed with "unsupport proxy type: socks"

  • and no SOCKS node could start. SOCKS4/4a keep their variant in

  • version, which _socksScheme already uses to restore the scheme.

    • scheme://base64(user:password)@host share links kept the undecoded
  • blob as the username and left the password empty, so servers rejected

  • the auth. Decode it in a shared _credentialParts, but only when the

  • decoded value carries a separator, so a literal username that happens

  • to be valid base64 is left alone. SOCKS and HTTP shared the bug.

    • h2 transport was written to http-opts, and header values were
  • written as plain strings. Mihomo splits these: HTTPOptions takes

  • path as a list and headers values as lists, HTTP2Options takes

  • host as a list with a plain path, and WSOptions takes plain

  • strings throughout. Fixed on URI parse, VMess JSON parse and export.

  • None of these were caught by the existing suite because it validates only

  • within Dart. Two of them were in fact pinned as expected behaviour by

  • codec tests asserting type == 'socks'. Those assertions are corrected

  • here, and hub_validate_test.go now pins the SOCKS naming contract on the

  • Go side.

  • Found by feeding parsed sample URIs for every supported protocol to the

  • real handleValidateConfig; the other 15 protocol/transport combinations

  • tested clean.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_01GuY5bCnM5DDp2Qb5LHKCkS

  • Replace the node import entry with create-from-chain

  • Add Profile offered "Import node", which duplicated the button already on

  • the Nodes tab, while there was no way at all to create a profile without a

  • subscription URL or a config file. Nodes and chains are global, but binding

  • either one needs a profile, so the no-subscription single-node flow was

  • unreachable from the UI.

  • Add Profile now lists the chain library instead: picking a chain creates a

  • stub profile, binds the chain as default and sets the chain entry group.

  • The stub ships an empty PROXY group on purpose. _attachChainEntry appends

  • the generated selector and keeps the first member in place, so an empty

  • group leaves the chain as the only member and therefore the default

  • outbound; a DIRECT placeholder would silently win instead. Core validation

  • accepts a select group with no members, verified against the bundled Core.

  • Verified on an Android emulator: the entry lists the chain library, creates

  • the profile and makes it current.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_01GuY5bCnM5DDp2Qb5LHKCkS

  • Fix R1-R9 from the node library and chain review

    • R1: keep old files, database and settings on restore failure
    • R2: preserve SOCKS4/4a version across export round-trip
    • R3: include chains and generated groups in export
    • R4: show diagnostics and confirmation before saving a chain
    • R5: add explicit chain entry groups for rule profiles (schema v4)
    • R6: make manual nodes visible when only a chain is bound
    • R7: keep distinct endpoints for same-named source nodes
    • R8: retain last valid config when core apply fails
    • R9: forward Windows hot-start app links
  • Also adds a unified node import preview, a backup manifest contract,

  • a v2 database upgrade test, and loading/error states for the node and

  • chain lists.

  • Ignores the core/core build artifact and tracks the third-round

  • verification record, which the docs/ ignore rule was hiding.

  • Verified: analyze 0 error / 0 warning / 28 info; 791 root tests,

  • 26 plugin tests, 27 build_tool tests, 6 go tests all passing.

  • Co-Authored-By: Claude Opus 5 noreply@anthropic.com

  • Claude-Session: https://claude.ai/code/session_01LP2XvuTaTj9jo6CXZZyvTt

  • Add node library and single-core chain development snapshot

  • Include node storage, protocol import/export, chain configuration, UI, and platform link integration.

  • Track task contracts, reviewed development progress, verification results, and remaining implementation gaps.

  • Use synthetic values for the copied VLESS test fixture. Root tests passed (756); sanitized codec tests passed (15). Core and platform acceptance remain pending.

  • Optimize commented policy

  • Fix whole group delay test failing on Windows

  • Optimize package icon loading and connections polling

  • Optimize core service

  • Optimize Android TV launcher icon

  • Optimize back navigation

  • Optimize more details

  • Fix some issues

  • Optimize app layout

  • Optimize focus control

  • Adjust android process

  • Fix macos performance issue

  • Support custom global-ua

  • Update core

  • Optimize some details

  • Fix linux silent launching not working

  • Support custom overwrite

  • Support run on demand

  • Optimize windows ipc

  • Optimize windows arm64

  • Optimize build

  • Optimize some details

  • Update core

  • Add sqlite store

  • Optimize android quick action

  • Optimize backup and restore

  • Optimize more details

  • Fix windows some issues

  • Optimize overwrite handle

  • Optimize access control page

  • Optimize some details

  • Fix android tile service

  • Support append system DNS

  • Fix some issues

  • Fix some issues

  • Optimize Windows service mode

  • Update core

  • Add android separates the core process

  • Support core status check and force restart

  • Optimize proxies page and access page

  • Update flutter and pub dependencies

  • Update go version

  • Optimize more details

  • Optimize desktop view

  • Optimize logs, requests, connection pages

  • Optimize windows tray auto hide

  • Optimize some details

  • Update core

  • Fix windows tun issues

  • Optimize android get system dns

  • Optimize more details

  • Support override script

  • Support proxies search

  • Support svg display

  • Optimize config persistence

  • Add some scenes auto close connections

  • Update core

  • Optimize more details

  • Fix issues that TUN repeat failed to open.

  • Fix windows service verify issues

  • Add windows server mode start process verify

  • Add linux deb dependencies

  • Add backup recovery strategy select

  • Support custom text scaling

  • Optimize the display of different text scale

  • Optimize windows setup experience

  • Optimize startTun performance

  • Optimize android tv experience

  • Optimize default option

  • Optimize computed text size

  • Optimize hyperOS freeform window

  • Add developer mode

  • Update core

  • Optimize more details

  • Add issues template

  • Optimize android vpn performance

  • Add custom primary color and color scheme

  • Add linux nad windows arm release

  • Optimize requests and logs page

  • Fix map input page delete issues

  • Add rule override

  • Update core

  • Optimize more details

  • Optimize dashboard performance

  • Fix some issues

  • Fix unselected proxy group delay issues

  • Fix asn url issues

  • Fix tab delay view issues

  • Fix tray action issues

  • Fix get profile redirect client ua issues

  • Fix proxy card delay view issues

  • Add Russian, Japanese adaptation

  • Fix some issues

  • Fix list form input view issues

  • Fix traffic view issues

  • Optimize performance

  • Update core

  • Optimize core stability

  • Fix linux tun authority check error

  • Fix some issues

  • Fix scroll physics error

  • Add windows storage corruption detection

  • Fix core crash caused by windows resource manager restart

  • Optimize logs, requests, access to pages

  • Fix macos bypass domain issues

  • Fix some issues

  • Update popup menu

  • Add file editor

  • Fix android service issues

  • Optimize desktop background performance

  • Optimize android main process performance

  • Optimize delay test

  • Optimize vpn protect

  • Update core

  • Fix some issues

  • Remake dashboard

  • Optimize theme

  • Optimize more details

  • Update flutter version

  • Support better window position memory

  • Add windows arm64 and linux arm64 build script

  • Optimize some details

  • Remake desktop

  • Optimize change proxy

  • Optimize network check

  • Fix fallback issues

  • Optimize lots of details

  • Update change.yaml

  • Fix android tile issues

  • Fix windows tray issues

  • Support setting bypassDomain

  • Update flutter version

  • Fix android service issues

  • Fix macos dock exit button issues

  • Add route address setting

  • Optimize provider view

  • Update CHANGELOG.md

  • Add android shortcuts

  • Fix init params issues

  • Fix dynamic color issues

  • Optimize navigator animate

  • Optimize window init

  • Optimize fab

  • Optimize save

  • Fix the collapse issues

  • Add fontFamily options

  • Update core version

  • Update flutter version

  • Optimize ip check

  • Optimize url-test

  • Update release message

  • Init auto gen changelog

  • Fix windows tray issues

  • Fix urltest issues

  • Add auto changelog

  • Fix windows admin auto launch issues

  • Add android vpn options

  • Support proxies icon configuration

  • Optimize android immersion display

  • Fix some issues

  • Optimize ip detection

  • Support android vpn ipv6 inbound switch

  • Support log export

  • Optimize more details

  • Fix android system dns issues

  • Optimize dns default option

  • Fix some issues

  • Update readme

  • Fix build error2

  • Fix build error

  • Support desktop hotkey

  • Support android ipv6 inbound

  • Support android system dns

  • fix some bugs

  • Fix delete profile error

  • Fix submit error 2

  • Fix submit error

  • Optimize DNS strategy

  • Fix the problem that the tray is not displayed in some cases

  • Optimize tray

  • Update core

  • Fix some error

  • Fix tun update issues

  • Add DNS override

  • Fixed some bugs

  • Optimize more detail

  • Add Hosts override

  • fix android tip error

  • fix windows auto launch error

  • Fix windows tray issues

  • Optimize windows logic

  • Optimize app logic

  • Support windows administrator auto launch

  • Support android close vpn

  • Change flutter version

  • Support profiles sort

  • Support windows country flags display

  • Optimize proxies page and profiles page columns

  • Update flutter version

  • Update version

  • Update timeout time

  • Update access control page

  • Fix bug

  • Optimize provider page

  • Optimize delay test

  • Support local backup and recovery

  • Fix android tile service issues

  • Fix linux core build error

  • Add proxy-only traffic statistics

  • Update core

  • Optimize more details

  • Add fdroid-repo

  • Optimize proxies page

  • Fix ua issues

  • Optimize more details

  • Fix windows build error

  • Update app icon

  • Fix desktop backup error

  • Optimize request ua

  • Change android icon

  • Optimize dashboard

  • Remove request validate certificate

  • Sync core

  • Fix windows error

  • Fix setup.dart error

  • Fix android system proxy not effective

  • Add macos arm64

  • Optimize proxies page

  • Support mouse drag scroll

  • Adjust desktop ui

  • Revert "Fix android vpn issues"

  • This reverts commit 8919774.

  • Fix android vpn issues

  • Fix android vpn issues

  • Rollback partial modification

  • Fix the problem that ui can't be synchronized when android vpn is occupied by an external

  • Override default socksPort,port

  • Fix fab issues

  • Update version

  • Fix the problem that vpn cannot be started in some cases

  • Fix the problem that geodata url does not take effect

  • Update ua

  • Fix change outbound mode without check ip issues

  • Separate android ui and vpn

  • Fix url validate issues 2

  • Add android hidden from the recent task

  • Add geoip file

  • Support modify geoData URL

  • Fix url validate issues

  • Fix check ip performance problem

  • Optimize resources page

  • Add ua selector

  • Support modify test url

  • Optimize android proxy

  • Fix the error that async proxy provider could not selected the proxy

  • Fix android proxy error

  • Fix submit error

  • Add windows tun

  • Optimize android proxy

  • Optimize change profile

  • Update application ua

  • Optimize delay test

  • Fix android repeated request notification issues

  • Fix memory overflow issues

  • Optimize proxies expansion panel 2

  • Fix android scan qrcode error

  • Optimize proxies expansion panel

  • Fix text error

  • Optimize proxy

  • Optimize delayed sorting performance

  • Add expansion panel proxies page

  • Support to adjust the proxy card size

  • Support to adjust proxies columns number

  • Fix autoRun show issues

  • Fix Android 10 issues

  • Optimize ip show

  • Add intranet IP display

  • Add connections page

  • Add search in connections, requests

  • Add keyword search in connections, requests, logs

  • Add basic viewing editing capabilities

  • Optimize update profile

  • Update version

  • Fix the problem of excessive memory usage in traffic usage.

  • Add lightBlue theme color

  • Fix start unable to update profile issues

  • Fix flashback caused by process

  • Add build version

  • Optimize quick start

  • Update system default option

  • Update build.yml

  • Fix android vpn close issues

  • Add requests page

  • Fix checkUpdate dark mode style error

  • Fix quickStart error open app

  • Add memory proxies tab index

  • Support hidden group

  • Optimize logs

  • Fix externalController hot load error

  • Add tcp concurrent switch

  • Add system proxy switch

  • Add geodata loader switch

  • Add external controller switch

  • Add auto gc on trim memory

  • Fix android notification error

  • Fix ipv6 error

  • Fix android udp direct error

  • Add ipv6 switch

  • Add access all selected button

  • Remove android low version splash

  • Update version

  • Add allowBypass

  • Fix Android only pick .text file issues

  • Fix search issues

  • Fix LoadBalance, Relay load error

  • Fix build.yml4

  • Fix build.yml3

  • Fix build.yml2

  • Fix build.yml

  • Add search function at access control

  • Fix the issues with the profile add button to cover the edit button

  • Adapt LoadBalance and Relay

  • Add arm

  • Fix android notification icon error

  • Add one-click update all profiles

  • Add expire show

  • Temp remove tun mode

  • Remove macos in workflow

  • Change go version

  • Update Version

  • Fix tun unable to open

  • Optimize delay test2

  • Optimize delay test

  • Add check ip

  • add check ip request

  • Fix the problem that the download of remote resources failed after GeodataMode was turned on, which caused the application to flash back.

  • Fix edit profile error

  • Fix quickStart change proxy error

  • Fix core version

  • Fix core version

  • Update file_picker

  • Add resources page

  • Optimize more detail

  • Add access selected sorted

  • Fix notification duplicate creation issue

  • Fix AccessControl click issue

  • Fix Workflow

  • Fix Linux unable to open

  • Update README.md 3

  • Create LICENSE

  • Update README.md 2

  • Update README.md

  • Optimize workFlow

  • optimize checkUpdate

  • Fix submit error

  • add WebDAV

  • add Auto check updates

  • Optimize more details

  • optimize delayTest

  • upgrade flutter version

  • Update kernel

  • Add import profile via QR code image

  • Add compatibility mode and adapt clash scheme.

  • update Version

  • Reconstruction application proxy logic

  • Fix Tab destroy error

  • Optimize repeat healthcheck

  • Optimize Direct mode ui

  • Optimize Healthcheck

  • Remove proxies position animation, improve performance

  • Add Telegram Link

  • Update healthcheck policy

  • New Check URLTest

  • Fix the problem of invalid auto-selection

  • New Async UpdateConfig

  • add changeProfileDebounce

  • Update Workflow

  • Fix ChangeProfile block

  • Fix Release Message Error

  • Update Selector 2

  • Update Version

  • Fix Proxies Select Error

  • Fix the problem that the proxy group is empty in global mode.

  • Fix the problem that the proxy group is empty in global mode.

  • Add ProxyProvider2

  • Add ProxyProvider

  • Update Version

  • Update ProxyGroup Sort

  • Fix Android quickStart VpnService some problems

  • Update version

  • Set Android notification low importance

  • Fix the issue that VpnService can't be closed correctly in special cases

  • Fix the problem that TileService is not destroyed correctly in some cases

  • Adjust tab animation defaults

  • Add Telegram in README_zh_CN.md

  • Add Telegram

  • update mobile_scanner

  • Initial commit

Release Downloads

Download based on your OS:

OS Download
Android

Windows
macOS
Linux