-
Notifications
You must be signed in to change notification settings - Fork 0
EN Release Notes 5.2.31
-
CI publish validation now uses
Directory.Build.propsas the single product-version source, matching the repository rule that project files inherit<Version>. GitHub workflow files are included in the release-ready source package and checked for this contract. -
Localization validation now matches
CsvLocalizationServiceexactly: source keys are compared with ordinal case sensitivity, so true duplicates remain release-blocking without falsely collapsing intentional keys such asActiveandACTIVE. Stale case-only variants were canonicalized/removed and regression tests cover both behaviors. -
Release validation now avoids PowerShell
return if (...)runtime semantics and includes a guard against statement keywords used directly as return operands. -
Release validation hotfix: PowerShell StrictMode no longer crashes successful empty-collection checks while evaluating diagnostic text (
.FullName/.Name). Repository, DNSCrypt and package validators now format collection names through explicit projection and guard against reintroducing the unsafe pattern. -
DNSCrypt first-use defaults and tests are now separated correctly: active runtime routing still defaults through Shadowsocks and requires a valid local SOCKS5 endpoint, while offline/direct test fixtures opt out explicitly; resolver-catalog TOML ignores the active runtime proxy preference because it only reads the pre-seeded signed cache.
-
Analyzer hotfix: online-config selection recovery now uses the concrete
List<Server>type already passed byConfiguration.configs, removing CA1859 without suppression or behavior changes. -
Compile hotfix: server-editor empty-state gating now disables the actual WinUI input controls instead of assigning the unsupported
IsEnabledproperty to aBorder; release validation now catches the same non-Control misuse statically. -
Final routing hardening excludes incomplete legacy/damaged profiles from Balancing/High Availability, tray selection and server hotkeys; same-endpoint profiles remain distinct for HA and SIP003 plugin processes. Strategy TCP timeouts now follow the actually selected server, and subscription refresh preserves the selected profile without host/port collisions.
-
Final release audit preserves previously persisted DNSCrypt compatibility values instead of rewriting them during load/settings apply, while keeping Administrator-mode DNSCrypt capture effectively fail-closed. Server saves now also retain the actual selected server when local/subscription grouping reorders the list.
-
Built-in QTun installation now matches the upstream Windows release ZIP convention (
x86_64-pc-windows-msvc) instead of the unrelatedwindows-nativeActions artifact label. -
UDP load balancing now safely handles negative endpoint hash codes and always selects a valid server index.
-
5.2.31 hotfix: removed the synthetic empty
Server 1; zero servers is now a valid state and incomplete drafts do not unlock server-dependent features. -
DNS, PAC and enabling the Windows system proxy are disabled until a complete Shadowsocks server exists; removing the last usable server disables effective proxy/DNS/capture activity but preserves the saved DNS policy for reuse when a working server is added.
-
Added non-blocking busy feedback for Start on Boot, Administrator capture/UAC transitions and update operations.
-
Fresh DNSCrypt configuration enables every first-use option except IPv6. Existing persisted DNSCrypt settings are preserved exactly; schema v3 does not migrate or overwrite them.
-
WinUI navigation, Logs and UAC/Administrator glyphs now use explicit Windows 10-compatible Segoe MDL2 Assets.
-
Fixed DNSCrypt installation with the current official resolver catalog: the catalog Minisign verifier now accepts the official legacy
Edsignature over the original catalog bytes as well as modern pre-hashedEDover BLAKE2b-512, while still verifying the pinned key ID, payload signature, and trusted-comment global signature. Legacy acceptance is scoped to resolver catalogs; downloaded dnscrypt-proxy release archives remain strict modern-EDonly. -
Self-update now resumes the live shell state captured at handoff instead of the process's original startup argument, so opening or hiding the window after launch is preserved across automatic and manual application updates.
-
Fixed reboot/session restore state preservation: Start with Windows and Windows Restart Manager remain mutually exclusive, but now track the actual shell state with
--start-visible/--start-hidden. An open window is restored open; a tray-only session remains tray-only.WM_QUERYENDSESSIONsnapshots visibility before Windows closes the HWND so shutdown cannot be mistaken for a user close-to-tray action. Both restore markers bypass plain second-launch handling, preventing redirected system restore from surfacing the already-running dialog. -
Fixed release validation drift:
packaging/Validate-DnsCrypt.ps1no longer fails underSet-StrictModefrom an uninitialized$controllerPath, andValidate-Repository.ps1now checks the currentFilePath/FallbackFilePathlogging schema rather than the retiredFileNamefield. -
Final analyzer follow-up: DNSCrypt TOML static-resolver serialization and its test helper now use their concrete
Dictionarytype, removing the remaining CA1859 diagnostics without suppression. DNSCrypt component installation/update no longer uses the Windows resolver forapi.github.comor GitHub release asset hosts. GitHub API, archive and Minisign HTTPS are resolved by Cloudflare DoH with Google DoH fallback and connected through the active Shadowsocks SOCKS5 tunnel; failures are logged before rollback and shown as a localized tunneled-upstream error. -
Fixed the DNSCrypt resolver-catalog bootstrap deadlock: Cloudflare DoH over Shadowsocks is primary, Google DoH over Shadowsocks is fallback, resolver-list HTTPS also stays inside the tunnel, Minisign is verified before publication, and dnscrypt-proxy consumes only an offline local cache (
urls = [],bootstrap_resolvers = [],ignore_system_dns = true). The final WinUI polish pass audits localization, tooltips/accessibility help and contextual visibility across every page plus the tray. Settings navigation, indirect Hotkey labels/statuses and missing Forward Proxy labels now follow the selected app locale in all seven shipped languages. Context-only options are hidden when irrelevant, selection/dirty/busy state gates actions consistently, invalid persisted Online PAC URLs are corrected before activation, GeoSite refresh visibly locks conflicting edits, and update/plugin operations no longer leave contradictory actions clickable.
Regression-test follow-up: embedded legal-resource tests now track the current Adblock Plus-derived network routing notice heading, and fake GitHub plugin releases reuse one immutable ZIP payload for both the advertised SHA-256 digest and download response. This removes ZIP timestamp-induced digest flakiness and lets the anti-downgrade test exercise the intended version gate.
The current UI also closes four first-use gaps: Share / QR preflights known SIP003 plugins referenced by imported ss:// links and can install missing catalog packages before import; DNSCrypt first-install keeps an animated operation card visible throughout download/verification/install/activation; Local PAC exposes user-rule.txt editing; and Online PAC hides Local managed-routing, local-rule and GeoSite cards because the external PAC is authoritative.
A follow-up compile fix removes the last stale _resolverLatencyCancellation references from DnsPage; resolver-selection visibility now uses the current _cancelResolverLatency cancellation delegate.
WinUI lifetime/analyzer cleanup now explicitly disposes application/page-owned resources, releases cached DNS/Logs pages before controller shutdown, keeps asynchronous cancellation ownership race-safe, serializes Logs settings writes with .NET Lock, and removes the remaining reported CA1725/CA1822/CA1834/CA1305/CA1806/CA1859 warnings without broad production suppression.
- About → License and Third-party notices now use the selected UI language for explanatory text in EN/RU/zh-CN/zh-TW/JA/KO/FR, while authoritative license wording remains embedded in its original language.
Shadowsocks Reborn 5.2.31 focuses on DNS privacy, automatic-update reliability, WinUI stability, and release hardening.
-
Added background SIP003 updates for trusted built-in catalog packages: daily successful-check gate, in-use deferral, manual Check updates, per-plugin automatic-update toggle, retry after failed checks, trusted release provenance, rollback-safe package promotion and next-start recovery of orphaned swap backups. Manual imports never auto-update; arbitrary repository sources remain a documented TODO.
-
Plugin update supply-chain handling now bounds downloads/extraction, rejects traversal/rooted/Windows-ADS names and TAR links/special entries, verifies GitHub SHA-256 asset digests when supplied, and rejects a parseable candidate version lower than the installed plugin version.
-
Traffic statistics now use a cancellation-aware task and immutable snapshots instead of a non-terminating thread plus externally mutable queue.
-
Strict-build follow-up cleanup fixes the TrafficPage local-variable casing compile regression and the remaining reported .NET 10 analyzer findings. Production diagnostics are fixed in code; UnitTests alone opt out of CA1707/CA1861 so readable
Method_Scenario_Resultnames and local literal fixtures are not rewritten into less readable forms. Security-pin tests now inspect runtime constant metadata instead of compile-time-folded assertions. -
Follow-up Windows analyzer pass fixed relay/controller member-rename regressions, made proxy/UDP/DNSCrypt/WinDivert/controller resource ownership explicit, propagated
CancellationTokenthrough asynchronous I/O, and applied concrete collection types only on private hot paths without broad analyzer suppression. -
Final compile cleanup corrected the DNSCrypt resolver-array length test, removed invalid
protectedvisibility from members of the sealed controller, and madeUDPRelayexplicitlyIDisposable. -
Final release-maintenance pass centralized versioning in
Directory.Build.props, replaced brittle source-token PowerShell validation with structural/supply-chain gates backed by unit/integration tests, enabled the .NET 10 recommended analyzer ruleset, and completed full EN/RU/ZH user-guide coverage. -
Restored synchronized English, Russian and Simplified Chinese README files in the application repository root while keeping Wiki mirrors; DNS documentation reflects the working 5.2.31 Administrator-mode
System/Direct/Proxy/CustomDoh/DnsCrypttransparent routing contract. -
Kept long-form project documentation in the dedicated GitHub Wiki, added a complete Simplified Chinese usage guide, and excluded
.git/.githubmetadata from distributed source archives. -
Fixed duplicate Start-with-Windows instances: stale/legacy Run entries are migrated or removed, disabling autostart clears matching legacy entries, and a process-wide guard prevents the LocalAppData startup copy and original EXE from starting two controllers on the same ports.
-
Hidden startup activation no longer displays the user-visible already-running dialog.
-
Disabled Fody-generated
FodyWeavers.xsd, removed stale schema files and removed the explicit XSD schema references fromFodyWeavers.xml, stopping recurring Visual Studio XSD/XML prompts and source-tree churn. -
Added and hardened DNSCrypt/DoH resolver management while keeping ODoH disabled.
-
Fixed DNSCrypt loopback-port allocation on Windows by selecting UDP-first and verifying the same port over TCP.
-
Fixed Windows automatic-update downloads so
.downloadstreams are disposed before atomic promotion, eliminating theFile.Movesharing violation. -
Verified the self-update handoff with a previous-version to newer-version test build.
-
SHA-256 sidecars accept both a plain 64-character digest and standard
sha256sumformat. -
Hardened the staged updater across UAC handoff with SHA-256 verification, rollback, relaunch, cleanup, primary-EXE version awareness for stale startup copies, and a final fail-closed anti-downgrade FileVersion check.
-
Fixed
ss://protocol registration for executable paths containing spaces. -
Kept Windows 10 build 19041+ compatibility while building the WinUI application against the newer Windows SDK.
-
Improved the selectable RichTextBlock Logs viewer and removed stale legacy ListView validation assumptions.
-
Simplified release validation: PowerShell parser validation, project/package/localization/supply-chain invariants and one-file packaging remain release gates, while behavioral contracts are enforced by unit/integration tests instead of brittle source-text assertions. Product versioning is centralized in
Directory.Build.props. -
Completed DNSCrypt management localization across all shipped locales.
- Windows 10 version 2004 / build 19041 or newer
- Windows 11
- x64 only
Shadowsocks-win-x64.zipShadowsocks-win-x64.zip.sha256
The .sha256 sidecar must contain the SHA-256 digest for the exact ZIP asset.
The dependency-free Shadowsocks.Routing.FilterEngine is now the sole authority for Local GeoSite + EasyList/ABP routing. The Local PAC contains only a minimal FindProxyForURL funnel into ManagedHttpProxyService; application rules run first, then the immutable GeoSite + user-rule.txt snapshot selects DIRECT or PROXY. The same managed rule set is supplied to Administrator Mode, where HTTP Host and TLS SNI allow late hostname-aware decisions without TLS decryption. The historical bundled abp.js, the compiled-PAC compatibility backend, the historical backend selector, and executable custom abp.txt override are removed. Removed configuration properties are pruned from existing JSON by schema migration. The PAC / GeoSite page shows effective mode, snapshot generation/source, rule counts, local decision counters, and Admin managed-routing state. Online PAC remains a separate explicit external-PAC mode because an arbitrary PAC program cannot be losslessly translated into ABP/EasyList rules.
Administrator Mode now transports the same rule set to Shadowsocks.NetworkService. Ordinary unmatched TCP is marked Deferred at SYN time and reflected into the transparent TCP relay, which examines at most the initial bounded client bytes for HTTP Host or TLS ClientHello SNI. HTTP routing can retain path/query context; TLS routing is hostname-only. The relay does not decrypt TLS, install a CA or replace certificates. It forwards the buffered bytes unchanged after selecting either direct transport or the existing Shadowsocks SOCKS5 path. Explicit application rules retain priority, while UDP, DNS/53 and protocols without usable Host/SNI retain deterministic fallback behavior.
Managed rule updates are passed over the existing named-pipe protocol. When Admin capture is active, rapid GeoSite/user-rule changes are coalesced and the capture child is restarted through the already-elevated broker so the latest complete rule set wins without another UAC prompt.