dumbtv
dumbtv가 ADB로 Fire TV에서 광고·추적·업데이트 알림을 제거, 루트·앱 변경 없이, 무료 오픈소스
Chromium 엔터프라이즈 정책으로 Linux·macOS·Windows의 Brave 브라우저를 불필요 요소 제거하고 강화
Debloat and harden Brave Browser on Linux, macOS, and Windows using Chromium enterprise policies. Curses TUI on Linux/macOS, native GUI on Windows. 79 policies, 6 presets, zero dependencies.
보안Python · PowerShellGitHub @ChaoticSi1ence직접 설치운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗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.
[!IMPORTANT] Source code only — no
.exe,.msi,.dmgor installers, ever. This repository is the only official source; a download claiming to be SlimBrave Neo anywhere else is not from this project. SeeSECURITY.md.
[!NOTE] A fork of SlimBrave by @ltx0101, GPL-3.0, extended to Linux and macOS. Policy keys are curated and re-audited against brave-core and Chromium source by Claude Fable/Opus; what ships is a human call. Receipts in
AUDIT.md.
[!NOTE] Linux users: consider Brave Origin first — an official Brave build with telemetry and bloat already removed, now on the Release channel (
apt install brave-origin). SlimBrave Neo is the better fit if you want per-policy control, presets, or your own DoH templates — and it runs on Origin too: the Archbrave-origin-binpackage and thebrave-origindeb/rpm are detected, and Origin reads the same/etc/brave/policiesdirectory, so everything Origin has not already compiled out applies there as well.
The Windows GUI, on All Options: every policy in one scroll, each with a plain-English description under its title. A sidebar splits them into categories, and the search reads the descriptions as well as the names.
git clone https://github.com/ChaoticSi1ence/SlimBrave-Neo.git
cd SlimBrave-Neo
powershell -ExecutionPolicy Bypass -File .\SlimBrave.ps1
No git? One line:
iwr "https://raw.githubusercontent.com/ChaoticSi1ence/SlimBrave-Neo/main/SlimBrave.ps1" -OutFile "SlimBrave.ps1"; powershell -ExecutionPolicy Bypass -File .\SlimBrave.ps1
This 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.
"running scripts is disabled on this system"? That is Windows' default execution policy (
Restricted) refusing to run any.ps1, and it is why both commands above end inpowershell -ExecutionPolicy Bypass -Filerather than.\SlimBrave.ps1. The bypass applies to that one launch only — it changes no setting on your machine, and you never needSet-ExecutionPolicy. If you hit the error, you ran a copy of the one-liner without that part; re-run the version above.
Prefer the previous layout? v2.1.0 is the last release with the three-column window. It keeps working; it just won't receive the newer fixes. Pinned to that tag, either way:
git clone -b v2.1.0 --depth 1 https://github.com/ChaoticSi1ence/SlimBrave-Neo.git
cd SlimBrave-Neo
powershell -ExecutionPolicy Bypass -File .\SlimBrave.ps1
iwr "https://raw.githubusercontent.com/ChaoticSi1ence/SlimBrave-Neo/v2.1.0/SlimBrave.ps1" -OutFile "SlimBrave.ps1"; powershell -ExecutionPolicy Bypass -File .\SlimBrave.ps1
A tag never moves, so both of those fetch the same file every time.
Requires Administrator privileges; the script re-launches itself elevated, so run it from a local folder: the elevated copy cannot see a subst drive or, usually, a mapped network drive, and started from one it closes without a message. It opens showing the policy already on the machine.
Every policy explains itself. Each row carries a plain-English description under its title — "Stops the daily usage ping that counts this install in Brave's active-user statistics, plus the search-engine usage counts it carries and the referral-code check" — rather than hiding it in a tooltip. Where the text is longer than the row, a chevron expands it in place.
Search reads the descriptions, not just the names. The box in the header matches titles, policy keys, category names and the description text, so typing passwords surfaces "Require HTTPS for Basic Auth" even though its title never says the word, and telemetry returns the whole reporting section. Several words narrow the results, plurals match singulars, punctuation is ignored on both sides, and title matches rank above prose matches.
A sidebar splits the policies into seven categories — or skip it entirely: All Options lists all 90 in one scroll with section headers, for anyone who would rather not navigate.
Presets are cards. Each shows what it does and how many policies it sets. Loading one only fills in the controls; nothing reaches the registry until you press Apply Settings, so you can change your mind first. The presets are embedded in SlimBrave.ps1 itself, so they work for the one-liner download above with no Presets/ directory on disk.
Clicking a label does nothing. Only the toggle and the dropdown respond, each within its own bounds. Opening a menu is reversible; flipping a machine-wide policy is not.
It works without a mouse. Tab moves between the sidebar, the search box, the list and the button row; Space or Enter presses whatever has focus, on release, so a held key acts once. Right opens a row's description and Left closes it. Escape clears a search, or closes the window — asking first if there are staged changes.
| Key | Action |
|---|---|
| Tab / Shift+Tab | Sidebar → search → list → buttons (Export first), and round again |
| Up / Down | Previous / next item |
| PageUp / PageDown / Home / End | Move through the list |
| Space / Enter | Toggle, open a dropdown, load a preset, pick a page, press a button |
| Right / Left | Open / close a row's description |
| Escape | Clear the search; otherwise close the window, asking if changes are staged |
A dotted outline marks the focused control. It appears once the keyboard moves focus, so a mouse session never shows it.
The button row is Export, Import, Re-sync, Reset and Apply Settings. Re-sync reads the policy currently in the registry back into the interface, discarding on-screen selections you have not applied. It writes nothing, and goes through the same reader that fills the form at startup, so a re-sync can never disagree with a fresh launch.
Every content-setting row of Site Permissions is a dropdown rather than a checkbox: Not managed / Ask / Block, plus Allow on the keys where Chromium accepts it; Web Notifications leaves out Ask. Not managed is the default and writes nothing at all. The two rows at the end, Block Microphone Access and Block Camera Access, are plain checkboxes. The Site Permissions section below covers what each state does and which keys offer Allow.
The Linux/macOS TUI: collapsible categories with a live count of what each one is managing, a description pane for whatever the cursor is on, / 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.py
That'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 nine 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.
Every row explains itself here too. A boxed pane under the list shows the plain-English description of whatever the cursor is on - the same text the Windows GUI shows under each row - and, on the button row, what each button does. It starts shown wherever there is room for it; d hides it to give the list the rows back, and on a terminal too short to hold both it steps aside on its own. The pane takes as many lines as the longest description needs at that width, up to four; one that still does not fit ends in an ellipsis, and a wider terminal shows more of it. The list and the buttons sit in frames of their own.
? 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 |
d | Show or hide the description pane |
| 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 --reset
Multiple 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, stray scheme-wide Shields exceptions are scrubbed from each channel's user-data directory and "Brave is running" detection covers all installed channels.
Brave Origin: detected as its own channel — the Arch brave-origin-bin package (/opt/brave-origin-bin), the official brave-origin deb and rpm (/opt/brave.com/brave-origin), or a brave-origin launcher on PATH; Origin's beta and nightly builds (brave-origin-beta, brave-origin-nightly) are picked up by their profile directories and launchers the same way Brave's own beta and nightly are. There is no official Flatpak or Snap of Origin to look for, and the unofficial Origin Flatpaks are not detected. Origin reads the same /etc/brave/policies/managed directory as regular Brave — brave-core sets it for every Linux build, and on 1.94.121 a managed policy dropped there was watched installing extensions into the Brave-Origin profile — so the one policy file covers it, and its profile under ~/.config/BraveSoftware/Brave-Origin gets the same Shields-exception repair. On a machine whose only Brave is Origin, the 13 rows for features Origin removes at build time — Rewards, Wallet, VPN, Leo, Local AI, News, Talk, Playlist, Web Discovery, Speedreader, Tor, Email Aliases, Wayback Machine — are shown inert: [-], greyed, marked (built into Origin), left out of the section counts, and never written, because the feature is not in the binary and a policy for it would switch nothing. The description pane says so on each, and importing a preset that names them reports how many were left unmanaged. Beside a regular Brave every row stays live, since the one policy file serves both browsers. AUDIT.md has the per-key receipts. --channels origin narrows the CLI to it.
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.py
Requires root. Policies are written to /Library/Managed Preferences/com.brave.Browser.plist by default; with --persist on an Apple Configuration Profile is installed instead. Brave Origin for macOS is a separate app that reads only its own ids (com.brave.Browser.origin, .origin.beta, .origin.nightly); SlimBrave Neo neither detects nor writes those, so on macOS it does not manage Origin.
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. While the Configuration Profile is installed, every Apply or Reset removes the whole profile. A scope that leaves out a channel that still holds a SlimBrave policy is therefore refused, in the TUI and with --channels: select that channel too, or Reset first.
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 --reset
Finishing 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. Until you click Install, the selected channels have no SlimBrave policy: Apply removes the previous profile and SlimBrave Neo's keys in those channels' plists first. If SlimBrave Neo cannot hand the profile to System Settings (for example over SSH with no desktop session for your user), it says so and prints where the file was staged. Double-click it from a desktop session. 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 on
After applying, restart Brave and verify at brave://policy.
brave://flags/#brave-webgl-balanced-fingerprinting-protections to keep it), clean links from sites' copy and share buttons (brave://flags/#brave-clean-link-js-api), and Brave's Google sign-in fix, without which Chromium's bounce-tracking cleanup may sign you out of Google. On macOS, session cookies are also dropped when you quit and reopen Brave, even with "Continue where you left off". Either refuses studies, not the download (the seed is still fetched), and takes effect after a browser restart.AutofillSettings, which does not work in Brave yet; Brave still applies them, and brave://policy lists them as Deprecatedchrome.identity; Brave Account sign-in is not affected; needs a restart)canMakePayment always answers yes and hasEnrolledInstrument always no, so sites can't learn whether you have saved payment methods)brave://inspect remote-debugging toggle, while inspecting local tabs keeps working; no restart needed)What sites may use: nine content-setting defaults, then two device blocks. The nine content-setting 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:
brave://settings or per-site. The answer to a prompt is not remembered, so a site asks again each time. The exception is the WebUSB, Web Serial and WebHID rows, where a device you grant stays granted.Any managed value overrides the per-site choices you made for that permission while it is set.
Where Allow is offered 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, Window Management and Clipboard Read Access do not — DefaultWebUsbGuardSetting, DefaultSerialGuardSetting, DefaultWebHidGuardSetting, DefaultLocalFontsSetting, DefaultWindowManagementSetting and DefaultClipboardSetting are Ask-or-Block only and value 1 is not a member at all. Chromium does not reject a 1, though: it silently ignores one for the three device keys and applies it as a managed Allow for Local Fonts, Window Management and Clipboard. Those six rows never show an Allow entry. Checked key by key against Chromium main; the per-key legal enum is recorded in AUDIT.md.
queryLocalFonts() hands over your installed font list, a strong fingerprint that Shields' font protections don't coverOlder 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.
The section ends with two plain checkboxes, because their policies are on/off switches whose "on" is the same as leaving them unset. Each is a hard block (no site or extension can use the device, none is asked, and per-site Allow exceptions stop working), so neither is in any preset:
Lockdowns, and the escape hatches a lockdown would otherwise leave open (guest and incognito windows that keep no history, history that can be deleted, extensions that can route around a filter, the click-through on security warnings) — ordinary toggles:
brave://settings/security; mutually exclusive with Disable Safe Browsing)brave://settings/privacy can still expire history after as little as a day, and no policy can lock it; machine-wide, so it binds every profile on the computer)--load-extension) — Google Chrome ignores that switch, but Brave honours it, and malware adds it to browser shortcuts to slip an extension in; this makes Brave ignore it too. --disable-extensions-except can still load one (only Block All Extensions refuses both). Breaks shortcuts and test tools that use the switch; needs a restartbrave://policy still reports the key as applied)brave://flags turns it on. Separate from AI Chat: turning Leo off does not cover it. Needs Brave 1.94 or newer; older versions ignore the key. Needs a restart.Pin Brave's own protection defaults as managed policy so they can't be weakened in settings or with per-site exceptions (requires Brave 1.86+; fingerprinting protection also works on 1.85). None of them applies on a site where Shields are off, which only Force Shields On rules out:
brave://settings/security once, as a setting you can change. Limit or Disable Variations keeps Brave's own upgrader, and the lock, in placeNote 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. Cap Referrers locks Brave's default and voids per-site referrer exceptions, including any Brave's compatibility list adds to fix sites; lowering Shields on a site still lifts the cap there.
Note on Adblock-Only mode: since 1.96, Brave offers this mode on desktop when its interface language is English, from the Shields panel or Brave's Shields settings; it stays off until you turn it on. Turned on, it applies Brave's own lower-priority policies that keep ad blocking but allow third-party cookies, drop HTTPS upgrades to Standard and switch off fingerprinting protection, referrer capping, forget-on-close, De-AMP, debouncing, tracking-parameter stripping, language-fingerprinting reduction and GPC. Wherever SlimBrave Neo writes one of those keys, its mandatory value wins and
brave://policyshows a conflict warning if the two values differ; keys you leave unmanaged take the mode's value. (A macOS--policy-fileunder/Library/Preferencesis read as recommended, not mandatory, and loses.) The mode also trims Brave's built-in filter lists to its default ones, which no policy can undo; custom filters and subscriptions keep working.
brave://settings; Brave's first-run welcome page still offers Set as default, and with this key on, clicking it crashes Brave — choose Skip)unmanaged by default — no DNS policy is written, so Brave's own DNS settings stay user-controlledautomatic, off, secure, custom (off force-disables DoH as policy)https://cloudflare-dns.com/dns-query)secure and custom require 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 from brave://settings. automatic is exempt: an empty template there is valid. The three scripts differ on a template with automatic: the Windows GUI writes and exports a template only with secure or custom, while the Linux and macOS scripts — whose template field is greyed out in automatic too — still write and export one that arrives with automatic from an imported file or --doh-templates, and Brave uses it.automatic or off stops that, and Brave shows a policy warning instead; the Balanced Privacy, Performance Focused and Developer presets set automatic. unmanaged keeps the protection, and secure and custom already send every lookup over DoH.No Brave or Chromium policy covers these, so SlimBrave Neo can't set or lock them. Set them yourself:
brave://settings/appearance.brave://settings/shields, under Social media blocking.AUDIT.md (What's next) has the evidence and the other gaps, which need nothing from you.
The Windows PowerShell script is GUI-only: it has no user-facing flags. It declares only the two internal parameters the elevation relaunch passes to itself, so 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, written with your own account's rights (pick a path you can write). Cannot be combined with --reset; export first. |
--reset | Remove the managed policy file |
--policy-file PATH | Override the policy file: a slimbrave*.json directly in /etc/brave/policies/managed (Linux), or com.brave.Browser[.beta|.nightly].plist directly in /Library/Managed Preferences or /Library/Preferences (macOS); anything else is refused. On macOS it implies --persist off and never touches an installed Configuration Profile; --persist on is refused. |
--doh-templates URL | Set custom DNS-over-HTTPS template URL |
--channels LIST | Comma-separated channels to target (stable,beta,nightly; Linux also accepts dev, origin, origin-beta and origin-nightly). Default auto = all detected. macOS writes one plist per channel; Linux always shares a single policy file. Only with --import, --export or --reset; refused with --policy-file and when launching the TUI. |
--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. With --policy-file, the default is off. 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.
A preset is a starting point, not a verdict — import it, untick whatever you don't want, then Apply. Maximum Privacy, Balanced Privacy, Performance Focused and Developer turn off Background Mode (Strict Parental Controls and Brave Origin leave it alone); 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", "Block Dynamic Code in the Browser Process", or the two mutually-exclusive Shields overrides. Rows that would have no effect in Brave are not offered. Some rows the presets carry change nothing on a default Release install: Playlist is off by default on Release and Beta, Local AI on Release, and rows such as Global Privacy Control, De-AMP and Block Third Party Cookies lock a default Brave already has, so a settings toggle, Adblock-Only mode or a change of default can't undo it. The Features lists above say which.
--load-extension ignored (Google Chrome already ignores that switch, which malware adds to browser shortcuts; --disable-extensions-except can still load one). Dropped: Limit Variations (see below) and three rows that did nothing in Brave (shopping list, alternate error pages and DNS interception checks).brave://inspect remote-debugging toggle — the tools this preset exists to keep working.SafeSitesFilterBehavior. It blocks nothing in Brave (Brave ships no Google API key, so Google rejects every lookup) yet still sent every page address to Google, so it was dropped; the DNS filter below does the blocking. On Windows, Apply and Reset remove a value an older version wrote.--load-extension, --disable-extensions-except) — a proxy or VPN extension would bypass the DNS filter.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 to unmanaged and re-Apply, or reset the policy entirely. Point it at a resolver you know works on the networks the machine will be used on.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.
brave_origin_service_factory.cc in 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.PsstEnabled has been dispatched since Brave 1.95, but its feature is off by default and no Release study turns it on, 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 in AUDIT.md).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, Brave Origin included) |
macOS — --persist off | /Library/Managed Preferences/com.brave.Browser{,.beta,.nightly}.plist (one per selected channel). Brave Origin, a separate app reading com.brave.Browser.origin{,.beta,.nightly}, is neither detected nor written. |
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:
brave-bin, brave-origin-bin), deb/rpm (brave-browser, brave-origin), Flatpak, Snap, macOS App (Stable / Beta / Nightly; not Brave Origin), and PATH fallback; on Linux, Brave Origin is reported as its own channelLinux:
sudo)macOS:
sudo)Windows:
3.9 is the floor CI lints against; the scripts themselves use nothing newer than 3.7 syntax.
Launch the script the way the Quick Start does — the bypass applies to that one process and nothing else:
powershell -ExecutionPolicy Bypass -File .\SlimBrave.ps1
You 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
Like this project? Give it a star!
Made with Python and PowerShell.
brave://flags#site-isolation-trial-opt-out or --disable-site-isolation-trials turning that off; needs a restart)mail.example.com and docs.example.com no longer share one, against Spectre-style leaks between subdomains; more processes and memory; a setting in brave://flags still overrides it; needs a restart)SlimBrave.ps1: Arbitrary Code Guard for Brave's main process; some antivirus, printer-driver or input-method software that loads into Brave may fail or crash it, so untick the row if that happens; in no preset; needs a restart)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.--remote-debugging-port cookie-theft vector DeveloperToolsAvailability never covered), Basic Auth refused over cleartext HTTP, the sideload-extension channel closed, and variations limited to critical fixes only — Brave's A/B seed stops flipping features; only studies Brave marks critical still arrive (today one Windows 11 kill switch with no effect here).--load-extension ignored (Google Chrome already ignores that switch, which malware adds to browser shortcuts; --disable-extensions-except can still load one). Dropped: Always Open PDF Externally, which made you easier to fingerprint, and three rows that did nothing in Brave (shopping list, alternate error pages and DNS interception checks).brave://flags: WebGL/WebGPU fingerprint masking (#brave-webgl-balanced-fingerprinting-protections; without it, sites can read your GPU vendor and renderer) and clean links from sites' copy buttons (#brave-clean-link-js-api). Brave's Google sign-in fix goes too, so Google may sign you out mid-session (forget-on-close already signs you out once a site's last tab closes), and on macOS session cookies are dropped when you quit and reopen Brave. The preset keeps the limit because it is what keeps strict HTTPS enforced where Brave is moving to HTTPS-First, and Brave's servers can no longer flip its features between updates, critical fixes aside.