v1.0.5 -- "就像那句狠话:有一天,我一定会后悔的。"
-
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: httpproxies 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 registerssocks5
- SOCKS nodes were emitted as
-
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)@hostshare 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.
-
h2transport was written tohttp-opts, and header values were
-
written as plain strings. Mihomo splits these: HTTPOptions takes
-
pathas a list andheadersvalues as lists, HTTP2Options takes -
hostas a list with a plainpath, 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
Download based on your OS: