github ChaoticSi1ence/SlimBrave-Neo v1.9.5
v1.9.5 - Policy audit, critical DNS fix, 12 new toggles

5 hours ago

A maintenance release. No new architecture, no rewrite — this is v1.9 audited against current upstream sources and cleaned up, plus the toggles that audit turned up as missing.

Every one of the 62 policy keys SlimBrave writes was re-fetched from brave-core master and Chromium main and checked for deprecation, milestone support, schema, and value validity. None was dead. The toggle set was in good shape; the problems were around it.

Fixed

DNS mode secure with an empty template could break all name resolution. Selecting secure and leaving the template box blank wrote DnsOverHttpsMode: secure with no resolvers — a combination Chromium's own policy definition forbids, and one it can't recover from: there's no plaintext fallback in secure mode, and the user can't undo it in brave://settings because the policy is machine-managed. Two clicks to reach. Now rejected in all three implementations. automatic is unaffected — an empty template is valid there.

Windows Reset deleted the entire shared Brave policy hive. Reset recursively removed HKLM\SOFTWARE\Policies\BraveSoftware\Brave, destroying policies SlimBrave never wrote — Group Policy ExtensionInstallForcelist, URLBlocklist, ProxySettings, anything another tool had put there. Now scoped to only the keys SlimBrave manages, which is what Apply already did.

Contradictory Shields policies could be written on import. Mutual exclusion was enforced on keypress but not on import, and the Shields group is the only one spanning two different keys — so a config naming both BraveShieldsDisabledForUrls and BraveShieldsEnabledForUrls wrote force-off and force-on for the same URL patterns. Both Python ports now enforce exclusivity on import and on policy sync.

Windows profile repair targeted the wrong user. With over-the-shoulder UAC (standard user, separate admin credentials), the leaked-Shields-exception scrub ran against the admin's profile, found nothing, and reported success while the real user's exceptions survived.

Profile repair reported cleanups that Brave would immediately undo. Editing prefs while Brave is running is discarded on its next save, so the count was reported as fact when it wasn't. It now says so instead of claiming a fix that won't stick.

Root is dropped before touching user-owned files. The prefs scrub forks and drops to the invoking user, so a symlinked profile path can't redirect a root-owned write.

"Brave is running" never detected beta, dev, or nightly. Detection used pgrep -x with process names past the kernel's 15-character comm truncation, so those channels could never match. Now reads Chromium's SingletonLock.

CI could not fail. PSScriptAnalyzer reports syntax errors under a distinct ParseError severity, which the job's severity filter discarded — a broken SlimBrave.ps1 would have shipped green. Added an explicit parser gate, and the matrix now runs on macOS and Windows instead of Linux only.

Added

Twelve new toggles, in all three implementations:

Toggle What it does
Disable Variations / Griffin Experiments Brave fetches a seed from variations.brave.com that can flip features in an already-installed browser. This was the last remote-configuration channel not covered. Two mutually-exclusive modes.
Disable Local AI (On-Device Models) On-device AI, enabled by default, and not covered by the existing AI Chat toggle — separate build flags, separate prefs. Requires Brave 1.94+.
Block Remote Debugging The missing half of the DevTools lockdown: DeveloperToolsAvailability does not stop --remote-debugging-port, the standard CDP cookie-theft vector.
Block Sideloaded (External) Extensions Closes the silent install channel bundleware uses, while leaving user-chosen extensions working.
Block WebUSB / Web Serial / WebHID High-risk device APIs. (WebBluetooth and File System Access are already disabled by Brave itself.)
Disable Enhanced Spell Check Drops the Google web-service callout while keeping offline spellcheck.
Disable DNS Interception Probes Chromium resolves three random hostnames at startup and on every network change — a per-launch beacon visible to your resolver.
Require HTTPS for Basic Auth Stops base64 credentials going out over cleartext HTTP.
Block Local Font Enumeration queryLocalFonts() returns your installed font list — a strong fingerprint that farbling doesn't cover.
Block Multi-Screen Access Hands sites your full multi-monitor topology.

Changed

  • The Maximum Privacy preset no longer disables Safe Browsing. Brave proxies Safe Browsing through its own endpoints (safebrowsing.brave.com), so Google never sees those lookups even with it on. Disabling it cost real phishing and malware protection for no privacy gain. The toggle is still there, now labelled as the security downgrade it is.
  • Disable Brave VPN is labelled as having no effect on Linux builds — the policy handler is compiled out there, though brave://policy shows it as cleanly applied.
  • Background Mode is correctly platform-gated on Linux in the macOS script.
  • Preset descriptions now match what the presets actually do. Several understated how much they turned off.

Notes for upgraders

  • If you have a saved config with DNS mode secure and no template, importing it will now fail with an error instead of silently producing a browser that can't resolve anything. Add a template URL, or switch the mode.
  • Re-importing the Maximum Privacy preset will no longer disable Safe Browsing. If you want it off, tick it manually.

Under the hood

  • Test suite went from 56 to 124, including three-way feature-table parity between the PowerShell and Python implementations, preset invariants, the macOS Configuration Profile path, and regressions for both fixes above.
  • AUDIT.md rewritten for August 2026. Dropped the Brave-version column that mapped one Chromium milestone to three different Brave releases and had leaked into the README and three source comments. EmailAliasesEnabled corrected to 1.92, established by probing release branches rather than extrapolating from supported_on.

Verifying this release

a10978bf65120f04bb26aa23ece165b22fcd4c4e770b7fe42bede88ec294f3a7  SlimBrave.ps1
c2a0b8f8098a91a8ae453b633dedbf3411fa775d7a796125f13849e47d1e1376  slimbrave-linux.py
6cd4ff7b1f0894faed4fd858e8a88af59ce72f96ba15d3fa403e73c203b4da15  slimbrave-mac.py
Get-FileHash -Algorithm SHA256 .\SlimBrave.ps1
sha256sum slimbrave-linux.py     # Linux
shasum -a 256 slimbrave-mac.py   # macOS

Tags are not signed — there's no maintainer signing key published yet, so don't read an unsigned tag as a sign of tampering. See SECURITY.md.

macOS is best-effort. It's covered by CI and by the test suite, but the Configuration Profile approval flow ends in a GUI step no test can reach. Please open an issue if something breaks.

Don't miss a new SlimBrave-Neo release

NewReleases is sending notifications on new releases.