Debloat and harden Brave Browser on Linux, macOS, and Windows.
SlimBrave Neo uses Chromium enterprise managed policies to disable telemetry, bloat, and unwanted features in Brave Browser. No browser extensions, no hacks, just clean policy enforcement that Brave respects natively.
Note
Provenance and AI use. SlimBrave Neo is a fork of SlimBrave by @ltx0101, extended to Linux and macOS and released under the same GPL-3.0 license.
AI maintains this project; it did not write it. Claude re-audits every policy key against brave-core and Chromium source, catches drift between the three implementations, and helps with tests and docs. What ships is a human call. The receipts are in AUDIT.md.
Important
The only official source of SlimBrave Neo is this repository:
github.com/ChaoticSi1ence/SlimBrave-Neo
This project ships source code only. Python and PowerShell scripts you can read before running.
There are no official .exe, .msi, .dmg, .pkg, installers, or compiled binaries.
If you find a download claiming to be SlimBrave-Neo elsewhere, it is not from this project. See SECURITY.md.
Note
Linux users: consider Brave Origin first. Brave Origin is a free, official Brave variant that ships with telemetry and bloat already removed. If you just want a clean Brave without configuration, that's the simpler path.
The Linux version of SlimBrave Neo is still fully supported, and is the right tool if you want fine-grained control over individual policies, custom presets, or your own DoH templates beyond what Origin provides out of the box.
The Linux/macOS TUI: collapsible categories with a live count of what each one is managing, / to search, ? for keys. Zero dependencies, runs in any terminal.
git clone https://github.com/ChaoticSi1ence/SlimBrave-Neo.git
cd SlimBrave-Neo
sudo python3 slimbrave-linux.pyThat's it. No pip install, no jq, no external dependencies. Just Python 3 and root.
With no flags the script opens a curses interface: seven collapsible categories — Telemetry & Reporting, Privacy & Security, Site Permissions, Access Controls, Brave Features, Shields & Content Protection, Performance & Bloat — followed by a DNS Over HTTPS section, with an Import / Export / Apply / Reset / Quit button row underneath.
Each category header carries a disclosure marker and a live n/m on count of the settings under it that are actually managed — a ticked checkbox, or a selector sitting off Not managed. The count updates as you toggle, so a folded section still tells you whether anything inside it is set. Left folds a header, Right unfolds it, Space or Enter does either, and c folds every section at once — or unfolds them all when they are already folded. On launch the folds reflect what is already applied: a section holding a managed setting opens, the rest stay folded — so a clean machine opens on a short overview and a configured one opens on what it is enforcing.
/ filters the list by row name. Matches narrow as you type, the hint line reports how many rows matched, and only matching rows and the headers owning them stay on screen. Folded sections are searched too, so a fold cannot hide a match. Esc clears the filter and puts the fold states back as they were before the search.
The eight tri-state permission rows render as Web Notifications: < Block > and are cycled with Left/Right, the same way the DNS mode selector has always worked; Space or Enter steps forward through the same states. A row sitting off Not managed is highlighted and counts toward the header above it.
? opens a key overlay over the list.
| Key | Action |
|---|---|
| Up / Down | Move the cursor; Down past the last row jumps to the button row |
| PageUp / PageDown | Move one screenful |
| Home / End | Jump to the first / last row |
| Left / Right | Cycle a selector, fold / unfold a header, or move along the button row |
| Space | Toggle a checkbox, cycle a selector, fold or unfold a header |
| Enter | The same, and presses the focused button |
c |
Fold every section, or unfold them all |
/ |
Filter rows by name |
| Esc | Clear the filter; quit when no filter is active |
? |
Show the key overlay |
| Tab | Move between the list and the button row |
q |
Quit |
CLI mode (non-interactive):
sudo python3 slimbrave-linux.py --import "./Presets/Maximum Privacy Preset.json"
sudo python3 slimbrave-linux.py --export ~/SlimBraveNeoSettings.json
sudo python3 slimbrave-linux.py --resetMultiple Brave channels (Stable / Beta / Nightly): Brave hardcodes the managed-policy directory to /etc/brave/policies for every channel, so a single policy file applies to all of them — no per-channel selector is needed. If multiple channels are installed, leaked Shields exceptions are scrubbed from each channel's user-data directory and "Brave is running" detection covers all installed channels.
After applying, restart Brave and verify at brave://policy.
git clone https://github.com/ChaoticSi1ence/SlimBrave-Neo.git
cd SlimBrave-Neo
sudo python3 slimbrave-mac.pyRequires root. Policies are written to /Library/Managed Preferences/com.brave.Browser.plist by default; with --persist on an Apple Configuration Profile is installed instead.
The TUI is the same one described under Linux — same categories and live counts, same collapsing, / search, paging and ? overlay, same Left/Right selectors — plus the two Apply-time prompts below.
Persistence on macOS (Apple Silicon / macOS 13+). On modern macOS, cfprefsd and mdmclient may clear directly-written /Library/Managed Preferences/*.plist files at reboot when no Configuration Profile backs them, so policies don't always survive a restart. SlimBrave Neo offers two modes:
| Mode | What it does | Persists | User action |
|---|---|---|---|
off (default) |
Writes the plist only | may reset on macOS 13+ | just sudo |
on |
Installs an Apple Configuration Profile via System Settings | yes, durable | sudo + one-time GUI install |
When --persist is omitted on the CLI, the mode currently installed on the Mac is reused, so a re-run never silently demotes an installed profile back to plist-only. A fresh install defaults to off.
When you click Apply in the TUI, SlimBrave Neo asks two macOS-only questions in order: which Brave channels to manage (only when more than one is installed), then whether to persist across reboots. Both prompts have a sticky default — Enter keeps whichever scope and mode are currently installed.
sudo python3 slimbrave-mac.py --import "./Presets/Maximum Privacy Preset.json" --persist on
sudo python3 slimbrave-mac.py --import "./Presets/Maximum Privacy Preset.json" --persist off
sudo python3 slimbrave-mac.py --resetFinishing the Configuration Profile install (macOS 26). With --persist on, SlimBrave Neo writes a .mobileconfig and opens System Settings, but macOS 11+ disallows CLI-driven profile installs so you finish the step in the GUI: a "Profile Downloaded" notification appears; in System Settings click General → Device Management, scroll down to Downloaded, double-click SlimBrave Neo - Brave Policy, click Install, and enter your login password. Policies then take effect immediately and persist across reboots. To uninstall, run --reset or remove the profile under the same Device Management pane. Reference: Apple — Install configuration profiles on Mac.
CLI mode (non-interactive):
sudo python3 slimbrave-mac.py --import "./Presets/Maximum Privacy Preset.json"
sudo python3 slimbrave-mac.py --export ~/SlimBraveNeoSettings.json
sudo python3 slimbrave-mac.py --reset
sudo python3 slimbrave-mac.py --import preset.json --channels stable,beta
sudo python3 slimbrave-mac.py --import preset.json --persist onAfter applying, restart Brave and verify at brave://policy.
git clone https://github.com/ChaoticSi1ence/SlimBrave-Neo.git
cd SlimBrave-Neo
powershell -ExecutionPolicy Bypass -File .\SlimBrave.ps1
The Windows GUI: one-click presets across the top, three independently scrolling columns, and three-state dropdowns for the permission settings.
No git? One line:
iwr "https://raw.githubusercontent.com/ChaoticSi1ence/SlimBrave-Neo/main/SlimBrave.ps1" -OutFile "SlimBrave.ps1"; .\SlimBrave.ps1This pulls the current main. If you'd rather pin an exact, unchanging version and check it against a published checksum before running, SECURITY.md covers tagged releases and SHA-256 sums.
Requires Administrator privileges; the script re-launches itself elevated. Hover over any option in the app for a plain-English description of what it does and the exact policy it writes. The app follows your Windows light/dark theme.
The window is a fixed size chosen to fit a 1366x768 display, and it never resizes or reflows. The options sit in three side-by-side columns — Privacy & Security with Telemetry & Reporting, Site Permissions and Access Controls with Brave Features, Shields & Content Protection with Performance & Bloat — and each column scrolls on its own, so a long category scrolls inside its own panel while the DNS row and the buttons underneath stay exactly where they are.
A Quick Presets row sits above the columns, with one button per bundled preset: Maximum Privacy, Balanced Privacy, Performance Focused, Developer, Strict Parental Controls. A preset button only fills in the controls below — nothing reaches the registry until you click Apply Settings, so you can untick whatever you don't want first. The presets are embedded in SlimBrave.ps1 itself, so the buttons work for the one-liner download above too, with no Presets/ directory on disk. A status line at the right of the same row names what the last action did.
The button row underneath is Export Settings, Import Settings, Re-sync Registry, Apply Settings and Reset All Settings. Re-sync reads the policy currently in the registry back into the controls, discarding any on-screen selections you have not applied. It writes nothing, and it goes through the same reader that fills the form at startup, so a re-sync can never disagree with a fresh launch.
Every row of Site Permissions is a dropdown rather than a checkbox: Not managed / Ask / Block, plus Allow on the keys where Chromium accepts it. Not managed is the default and writes nothing at all. The Permissions & Access section below covers what each state does and which keys offer Allow.
- Disable Metrics Reporting (needs a restart)
- Disable Safe Browsing Reporting
- Disable URL Data Collection
- Disable P3A Analytics
- Disable Stats Ping
- Limit Variations to Critical Fixes, or Disable Variations / Griffin Experiments outright (mutually exclusive). Griffin is the remote seed Brave fetches to flip features in a browser that is already installed; "Limit" keeps the emergency security killswitches working, "Disable" blocks those too.
- Disable Enhanced Spell Check — mutually exclusive with Disable Spellcheck below; this row keeps offline checking and only drops the Google lookup
- Disable Safe Browsing (security downgrade — Brave proxies these lookups through its own servers, so Google never sees them either way; excluded from every preset)
- Disable Autofill (Addresses & Credit Cards)
- Disable Password Manager
- Disable Password Leak Detection (the online breach-list credential check)
- Disable Browser Sign-in (needs a restart)
- Enable Global Privacy Control
- Enable De-AMP (strip Google AMP wrappers)
- Enable Debouncing (skip known tracking redirect hops)
- Strip Tracking URL Parameters
- Reduce Language Fingerprinting
- Disable WebRTC IP Leak
- Disable QUIC Protocol (needs a restart)
- Disable Network Prediction (no DNS prefetch / preconnect for links you never click)
- Block Third Party Cookies
- Block Payment Method Probing (sites'
canMakePaymentalways answers "none saved") - Disable Alternate Error Pages
- Block Remote Debugging (closes the CDP port and pipe automation tools drive the browser through — "Disable Developer Tools" does not cover it; breaks Puppeteer, Playwright and
brave://inspect) - Disable DNS Interception Probes (three random hostnames resolved at every launch and network change, visible to your ISP or DoH resolver)
- Require HTTPS for Basic Auth (breaks logins on legacy HTTP-only routers, printers and appliances)
Content-setting defaults sites are granted. These rows are not checkboxes — Chromium models these keys as an enum rather than a boolean, so the tool now exposes the enum instead of hardcoding "block". Each is a dropdown in the Windows GUI and a < Block >-style selector in the TUI, with the same states everywhere:
- Not managed — the default. Writes nothing at all, so Brave's own default and your per-site choices stand. An untouched row behaves exactly like the unticked checkbox it replaced.
- Ask — pins the permission prompt as managed policy: no site is silently granted, and the setting can't be weakened from
brave://settingsor per-site. - Block — what ticking the box used to do. No prompt, no access, for any site.
- Allow — grants the permission to every site, and is offered only on the keys where Chromium actually accepts it.
That last point is not uniform, and it isn't assumed to be. Web Notifications, Location Access and Motion Sensors have an allow member (1) in their enum. WebUSB, Web Serial, WebHID, Local Font Enumeration and Window Management do not — DefaultWebUsbGuardSetting, DefaultSerialGuardSetting, DefaultWebHidGuardSetting, DefaultLocalFontsSetting and DefaultWindowManagementSetting are Ask-or-Block only, value 1 is not a member at all, and Brave rejects a policy file that names one. Those five rows never show an Allow entry. Checked key by key against Chromium main; the per-key legal enum is recorded in AUDIT.md.
- Web Notifications — Allow / Ask / Block
- Location Access — Allow / Ask / Block; Block removes the prompt outright, so maps and delivery sites need an address typed by hand, and Ask is the middle ground
- Motion Sensors — Allow / Ask / Block; a fingerprinting vector, and blocking rarely breaks anything on desktop
- WebUSB Access — Ask / Block; Block breaks Ledger/Trezor web wallets and in-browser firmware flashers
- Web Serial Access — Ask / Block; Block breaks in-browser microcontroller programming tools
- WebHID Access — Ask / Block; Block may break security keys and gamepad configurators that use WebHID rather than WebAuthn
- Local Font Enumeration — Ask / Block;
queryLocalFonts()hands over your installed font list, a strong fingerprint that Shields' font protections don't cover - Multi-Screen Access — Ask / Block; the window-management permission: your monitor layout, plus placing windows on a chosen screen
Older configs keep working unchanged: a v1.9.5 export or preset naming one of these keys carries the value 2, so it imports as Block, and a key the config doesn't name comes back as Not managed. A value outside a key's legal set is left unmanaged rather than written out, and the import result names the key it skipped.
Lockdowns, and the escape hatches (guest, incognito, extensions) that would otherwise bypass the rest of the policy set — ordinary toggles:
- Force Google SafeSearch
- Filter Adult Content (SafeSites) — this is a remote lookup, not a local filter. Every URL you navigate to, including URLs loaded inside frames, is sent to Google's Safe Search API to be classified, and anything rated adult is blocked. Worth knowing in a tool whose other rows exist to keep Google out of your browsing; enable it only if the parental-control value is worth that trade.
- Disable Guest Mode (guest windows bypass profile restrictions)
- Block All Extensions (blocks new installs and disables existing ones — lockdown/parental setups)
- Block Sideloaded (External) Extensions (the silent registry / drop-in-file install channel bundleware uses; extensions you install yourself keep working)
- Disable / Force Incognito Mode (mutually exclusive; needs a restart)
- Disable Brave Rewards
- Disable Brave Wallet
- Disable Brave VPN (no effect on Linux builds — Brave doesn't compile the VPN there, though
brave://policystill reports the key as applied) - Disable Brave AI Chat
- Disable Local AI (On-Device Models, Brave 1.94+) — stops the on-device model download and the AI index built from your history. Separate from AI Chat: turning Leo off does not cover it. Needs Brave 1.94 or newer (current stable); older versions ignore the key. Needs a restart.
- Disable Brave Shields / Force Shields On for all sites (mutually exclusive)
- Disable Brave News
- Disable Brave Talk
- Disable Brave Playlist
- Disable Web Discovery
- Disable Speedreader
- Disable Tor
- Disable Sync
- Disable Email Aliases
Pin Brave's own protection defaults as managed policy so they can't be weakened per-site or in settings (requires Brave 1.84+; fingerprinting protection also works on 1.83):
- Enforce Ad Blocking
- Enforce Fingerprinting Protection
- Force HTTPS Upgrades (Strict — sites that can't serve HTTPS show an interstitial)
- Cap Referrers (Strict Origin) / Allow Permissive Referrers (mutually exclusive — both unchecked leaves referrer behavior unmanaged)
- Forget First-Party Storage on Close
Note on referrers: with no referrer policy applied, Brave still caps cross-origin referrers by default, but you can loosen it per-site by lowering Shields on that site. "Allow Permissive Referrers" makes the loosening global as managed policy (
DefaultBraveReferrersSetting: 1) — sites that requestunsafe-urlget your full referring URL cross-origin. It exists for compatibility with sites that break under capped referrers; it weakens privacy and is deliberately excluded from every preset.
- Disable Background Mode (Windows/Linux only — the policy doesn't exist on macOS)
- Enable Memory Saver (discard inactive tabs to free RAM)
- Force Hardware Acceleration (keeps rendering and video decode on the GPU; needs a restart)
- Disable Media Router (Cast, including its background LAN device discovery; needs a restart)
- Disable Media Recommendations
- Disable Shopping List
- Always Open PDF Externally
- Disable Translate
- Disable Spellcheck (all of it, offline included — mutually exclusive with Disable Enhanced Spell Check)
- Disable Search Suggestions
- Disable Printing
- Disable Default Browser Prompt
- Disable Developer Tools
- Disable Wayback Machine
unmanagedby default — no DNS policy is written, so Brave's own DNS settings stay user-controlled- Four managed modes:
automatic,off,secure,custom(offforce-disables DoH as policy) - Custom DoH template URL support (e.g.
https://cloudflare-dns.com/dns-query) - Inline editable template field in the TUI
secureandcustomrequire a template URL and are refused without one. Chromium would otherwise apply the mode with an empty resolver list and resolve nothing at all — and being machine-managed policy, you couldn't fix it frombrave://settings.automaticis exempt: an empty template there is valid, and a template is honoured if you set one.
The Windows PowerShell script is GUI-only: it declares no parameters and ignores anything on its command line, so flags land silently in $args and the window opens anyway. Use its Import and Export buttons instead.
| Flag | Description |
|---|---|
--import PATH |
Import a SlimBrave Neo JSON config and apply policies |
--export PATH |
Export current policy to a SlimBrave Neo JSON config |
--reset |
Remove the managed policy file |
--policy-file PATH |
Override policy file path |
--doh-templates URL |
Set custom DNS-over-HTTPS template URL |
--channels LIST |
Comma-separated channels to target (stable,beta,nightly; Linux also accepts dev). Default auto = all detected. macOS writes one plist per channel; Linux always shares a single policy file. |
--persist MODE |
macOS only (slimbrave-mac.py). off (plist only; may reset after reboot on macOS 13+) or on (install an Apple Configuration Profile via System Settings; durable, Apple-recommended). Omitted = reuse whatever mode is currently installed; falls back to off if nothing is. slimbrave-linux.py does not accept this flag at all and exits 2 if it is passed; slimbrave-mac.py run on Linux accepts only off, because /etc/brave/policies is already durable. |
-h, --help |
Show help |
Import/export uses the same JSON format as the Windows PowerShell version. Configs are cross-platform compatible.
Presets
A preset is a starting point, not a verdict — import it, untick whatever you don't want, then Apply. Every preset except Strict Parental turns off Background Mode; that policy is Windows/Linux only, so on macOS the key is skipped and the rest of the preset applies unchanged. None of the presets ships "Disable Safe Browsing", "Allow Permissive Referrers", or the two mutually-exclusive Shields overrides.
- Telemetry: Turns off every reporting channel — metrics, extended Safe Browsing reports, URL-keyed data collection, P3A analytics, and the daily stats ping.
- Safe Browsing: Left on. Only the extended reports are disabled. Brave routes Safe Browsing lookups through its own servers rather than Google's, so switching the protection off would cost you phishing and malware interstitials for essentially no privacy gain — the "Disable Safe Browsing (security downgrade)" toggle is there if you disagree, but no preset sets it.
- Privacy: Disables autofill (addresses and cards), the password manager, leak detection, browser sign-in, WebRTC IP exposure, QUIC, network prediction and alternate error pages; blocks third-party cookies, payment-method probing, web notifications, location access, and motion sensors; enables Global Privacy Control, De-AMP, debouncing, tracking-parameter stripping, and reduced language fingerprinting. (Location Access is set to Block, not Ask — maps and delivery sites need addresses typed manually; drop the "Location Access" row to Ask, or to Not managed, if that is too strict.)
- Brave Features: Kills Rewards, Wallet, VPN, AI Chat, News, Talk, Playlist, Speedreader, Web Discovery, Tor, Sync, and Email Aliases.
- Shields: Pins ad blocking, fingerprinting protection, strict HTTPS, capped referrers, and forget-on-close storage as managed policy.
- Performance and bloat — read this one before applying. It goes well past "background processes": background mode, Cast device discovery, media recommendations, and the shopping list are off, and so are developer tools, printing, the built-in PDF viewer (PDFs download and open in your system viewer instead), translation, spellcheck, search suggestions, and the default-browser prompt. If you need devtools or printing, use the Developer preset, or untick those rows in the Performance & Bloat section before Apply.
- DNS: Left unmanaged. Forcing DoH off would hand every DNS query to your ISP in cleartext, while forcing DoH on concentrates that visibility at the DoH provider — which trade-off is right depends on who you distrust more, so the preset leaves the choice to you (set it manually in the DNS section if you have a preference).
- Note: No longer forces incognito-only browsing (earlier versions set
IncognitoModeAvailability: 2, which silently disabled history, persistent logins, and most extensions). Forget-on-close storage covers the privacy goal; the Force Incognito toggle is still available manually. - New in 2.1: on-device AI off, Chromium's per-launch DNS interception probes off, remote debugging blocked (the
--remote-debugging-portcookie-theft vectorDeveloperToolsAvailabilitynever covered), Basic Auth refused over cleartext HTTP, the silent sideload-extension channel closed, and variations pinned to critical fixes only — Brave's A/B seed stops flipping features, security killswitches still arrive. - Deliberately not set: the WebUSB / Web Serial / WebHID / Local Fonts / Multi-Screen dropdowns stay Not managed — blocking them breaks hardware wallets, flashers and some security keys. Flip them to Block yourself for the full lockdown.
- Best for: Paranoid users, journalists, activists, or anyone who wants Brave as private as possible — provided they read the performance bullet first.
- Telemetry: Same five reporting channels as Maximum Privacy — metrics, extended Safe Browsing reports, URL-keyed collection, P3A, stats ping. Safe Browsing protection itself stays on.
- Privacy: Blocks third-party cookies, payment-method probing, network prediction and alternate error pages; enables Global Privacy Control, De-AMP, debouncing, tracking-parameter stripping, and reduced language fingerprinting; disables QUIC (all traffic falls back to TCP) and restricts WebRTC to proxied connections, which can break in-browser video and voice calls. Credit-card autofill is off, but address autofill and the password manager are deliberately kept.
- Accounts: Browser sign-in and Brave Sync are both disabled, so bookmarks, history and settings stop syncing across your devices. Untick "Disable Sync" and "Disable Browser Sign-in" before Apply if you rely on a sync chain.
- Brave Features: Disables Rewards, Wallet, VPN, AI Chat, News, Talk, Web Discovery, and Tor (the "New private window with Tor" option disappears).
- Performance: Turns off background mode, media recommendations, the shopping list, and the default-browser prompt.
- DNS: Uses automatic DoH (lets Brave choose the fastest secure DNS).
- New in 2.1: kills the enhanced-spellcheck web service while keeping offline spellcheck working — the exact balanced trade — plus on-device AI off, DNS interception probes off, remote debugging blocked, cleartext Basic Auth refused, sideloaded extensions blocked (your own extensions keep working), and variations limited to critical fixes.
- Best for: Most users who want privacy but still need convenience features — the password manager, address autofill, and Shields left at Brave's own defaults.
- Telemetry: Blocks metrics reporting, P3A analytics, and the daily stats ping (Safe Browsing and its extended reports stay untouched).
- Privacy: The three no-cost speedups only — De-AMP, debouncing, and tracking-parameter stripping. Nothing else in Privacy & Security is touched.
- Brave Features: Disables Rewards, Wallet, VPN, AI Chat, News, Talk, Playlist, Speedreader, Web Discovery, and the Wayback Machine prompt to declutter the browser.
- Performance: Forces Memory Saver and hardware acceleration on; kills background mode, Cast device discovery, media recommendations, the shopping list, and the default-browser prompt. Network prediction is deliberately left on — prefetch makes browsing faster at a small privacy cost, which is the right trade for this preset.
- DNS: Automatic DoH for a balance of speed and security.
- New in 2.1: on-device AI off — Brave 1.94+ downloads and runs a local model and builds an AI index of your history; this preset's job is exactly that kind of background weight.
- Best for: Users who want a faster, cleaner Brave without extreme privacy tweaks.
- Telemetry: Blocks all five reporting channels (metrics, extended Safe Browsing reports, URL-keyed collection, P3A, stats ping).
- Privacy: Disables alternate error pages so you always see the real network error, never a suggestion page. Nothing else in Privacy & Security is touched.
- Brave Features: Disables Rewards, Wallet, VPN, AI Chat (Leo), News, and Talk.
- Kept on purpose: developer tools, printing, spellcheck, the built-in PDF viewer, QUIC, and Sync — the things the other presets take away and a developer needs back.
- Performance: Turns off background mode, media recommendations, the shopping list, and the default-browser prompt.
- DNS: Automatic DoH (default secure DNS).
- New in 2.1: variations pinned to critical fixes (a browser that doesn't reshuffle its features under your tests), on-device AI off, DNS interception probes off (three fewer phantom lookups in your network logs), and the enhanced-spellcheck web service off while offline spellcheck stays.
- Remote debugging deliberately stays available. Blocking it would break Puppeteer, Playwright and
brave://inspect— the tools this preset exists to keep working. - Best for: Developers who need dev tools and a working network stack but still want telemetry and Brave's monetised features out of the way.
- Telemetry: P3A analytics and the daily stats ping.
- Privacy: Blocks incognito mode and guest mode (a guest window would bypass every other restriction), forces Google SafeSearch, enables the SafeSites adult-content filter, disables browser sign-in and Brave Sync, and turns on De-AMP, debouncing, tracking-parameter stripping, and reduced language fingerprinting.
- SafeSites is a Google callout.
SafeSitesFilterBehaviorsends every URL the browser navigates to — including URLs loaded inside frames — to Google's Safe Search API for classification. It is a remote lookup, not a local blocklist. That is the price of the filter; if it isn't acceptable, untick "Filter Adult Content (SafeSites)" and rely on the DNS filter alone. - Extensions: Blocks all extension installs and disables existing ones — a proxy or VPN extension would bypass the DNS filter.
- Brave Features: Disables Rewards, Wallet, VPN, AI Chat, News, Talk, Web Discovery, Tor, and developer tools.
- DNS — no plaintext fallback. The preset sets a custom DoH template of
https://family.cloudflare-dns.com/dns-query(Cloudflare for Families). Custom mode is Chromium's secure DoH mode: Brave sends DNS-over-HTTPS queries only, and a lookup that fails is not retried against your system resolver. If that endpoint is blocked or unreachable — captive-portal Wi-Fi, some corporate and school networks — nothing resolves at all until you change the DNS mode back tounmanagedand re-Apply, or reset the policy entirely. Point it at a resolver you know works on the networks the machine will be used on. - New in 2.1: remote debugging blocked — a debugging port is a scriptable side door past every filter this preset sets up.
- Best for: Parents, schools, or workplaces that need restricted browsing.
Applies the policy half of what Brave Origin upgrade mode enforces to a standard Brave install — the same feature kill-switches, through the same policy keys Origin itself sets.
- The set is derived from source, not guessed: the 15 keys and their exact values come from
brave_origin_service_factory.ccin brave-core, the file where Origin defines what it enforces. Rewards, Wallet, VPN, AI Chat, Local AI, News, Talk, Playlist, Web Discovery, Speedreader, Wayback Machine, Email Aliases and Tor go off; P3A and the stats ping stop reporting. - Origin's 16th policy is deliberately absent.
PsstEnabledis not dispatched by any stable Brave and its feature flag is off everywhere, so SlimBrave Neo doesn't expose it — a switch that does nothing is worse than no switch. It gets added the release Brave makes it real (tracked inAUDIT.md). - What this can't give you: Origin also compiles features out of the binary, ships with metrics removed, and adjusts a few defaults that have no policy equivalent. Policies can't shrink a binary. For the closest match, also tick "Disable Metrics Reporting" — Origin builds don't report metrics at all.
- DNS: Left unmanaged, matching Origin.
- Best for: Anyone who wants Origin's defaults on the Brave they already run — or on Windows and macOS, where Origin is a paid upgrade.
SlimBrave Neo writes Chromium managed enterprise policies to platform-specific locations. Brave reads these on startup and enforces the policies. No browser modifications needed.
| Platform | Policy Location |
|---|---|
| Linux | /etc/brave/policies/managed/slimbrave.json (shared across all channels) |
macOS — --persist off |
/Library/Managed Preferences/com.brave.Browser{,.beta,.nightly}.plist (one per selected channel). |
macOS — --persist on |
Apple Configuration Profile installed via System Settings → General → Device Management. No plist files written; the profile system manages the values. |
| Windows | Registry keys via PowerShell |
Additional behavior:
- Auto-detects Brave installations: Arch (
brave-bin), deb/rpm, Flatpak, Snap, macOS App (Stable / Beta / Nightly), and PATH fallback - Reads existing policies on startup and pre-checks matching features; on macOS, the Apply-time channel prompt pre-ticks channels that already have a SlimBrave-managed policy (sticky default)
- Full overwrite on Apply, so unchecked features are cleanly removed
- Import/export compatible with the Windows PowerShell version: all three scripts now export UTF-8 without a BOM, and all three still read the UTF-16 files older PowerShell exports produced
Requirements
Linux:
- Python 3.9+ (no external dependencies)
- Root privileges (
sudo) - Brave Browser installed (any packaging method)
macOS:
- Python 3.9+ (no external dependencies)
- Root privileges (
sudo) - Brave Browser installed
Windows:
- Windows 10/11
- Windows PowerShell 5.1 (the one that ships with Windows — no install needed)
- Administrator privileges
3.9 is the floor CI lints against; the scripts themselves use nothing newer than 3.7 syntax.
Windows: "Running Scripts is Disabled on this System"
Launch the script the way the Quick Start does — the bypass applies to that one process and nothing else:
powershell -ExecutionPolicy Bypass -File .\SlimBrave.ps1You do not need to change your machine's execution policy for SlimBrave Neo, and you shouldn't: Set-ExecutionPolicy RemoteSigned with no -Scope defaults to LocalMachine and weakens script execution permanently, for every user on the box. If you want a lasting change anyway, scope it to yourself and know how to undo it:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser # apply
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser # undo- Add preset configurations (Privacy, Performance, etc.)
- Import/export settings (cross-platform compatible)
- Add Linux support with full interactive TUI
- DNS-over-HTTPS with custom template URLs
- CLI mode for scripting and automation
- macOS support via managed plist policies
- Multi-channel support on macOS (Stable / Beta / Nightly)
- Three-state permission settings (Allow / Ask / Block), not just block-or-nothing
- Collapsible, searchable TUI
- One-click presets in the Windows GUI
- @ltx0101 — SlimBrave, the upstream Windows PowerShell script this project grew out of (GPL-3.0)
- @alsyundawy — macOS version
- @zhaoJianNet — macOS refinements
- @cococool13 — the Permissions & Access category and 14 source-verified policies, shipped in v1.9.0