uBlock Origin (uBO) is a CPU and memory-efficient wide-spectrum content blocker for Chromium and Firefox. It blocks ads, trackers, coin miners, popups, annoying anti-blockers, malware sites, etc., by default using EasyList, EasyPrivacy, Peter Lowe's Blocklist, Online Malicious URL Blocklist, and uBO filter lists. There are many other lists available to block even more. Hosts files are also supported. uBO uses the EasyList filter syntax and extends the syntax to work with custom rules and filters.
You may easily unselect any preselected filter lists if you think uBO blocks too much. For reference, Adblock Plus installs with only EasyList, ABP filters, and Acceptable Ads enabled by default.
It is important to note that using a blocker is NOT theft. Do not fall for this creepy idea. The ultimate logical consequence of blocking = theft is the criminalization of the inalienable right to privacy.
Ads, "unintrusive" or not, are just the visible portion of the privacy-invading means entering your browser when you visit most sites. uBO's primary goal is to help users neutralize these privacy-invading methods in a way that welcomes those users who do not wish to use more technical means.
| Basic Mode | Advanced Mode |
|---|---|
| The simple popup user interface for an install-it-and-forget-it type of installation that is configured optimally by default. | The advanced popup user interface includes a point-and-click firewall that is configurable on a per-site basis. |
![]() |
![]() |
Chrome 138 or newer is required. To install, add
"blockddmmcjpfkbhanlgegpmjpfpfjka;https://ublock.r58playz.dev/update.xml" to Chrome's
ExtensionInstallForcelist policy, or install manually and use the
--allowlisted-extension-id=blockddmmcjpfkbhanlgegpmjpfpfjka flag. This varies across operating systems and is
heavily restricted on Windows and macOS. The flag must be present on every launch. Unlike a policy install, the flag-based install does
not allow blocking handlers to return promises while uBO starts.
None of the restrictions described below exist on Linux, on either Chrome or Chromium.
- Create
/etc/opt/chrome/policies/managed/policy.json, or/etc/chromium/policies/managed/policy.jsondepending on your install. - Write
{ "ExtensionInstallForcelist": ["blockddmmcjpfkbhanlgegpmjpfpfjka;https://ublock.r58playz.dev/update.xml"] }into the file. - Restart the browser, then enable
Allow User Scriptsin the extension's details page.
Chrome refuses to force-install an extension from a non-Web-Store update URL unless the device has a management
authority it considers trustworthy. Merely writing the policy locally via platform policy locations like regedit or
plists does not establish that trust. Chrome shows the effective entry as [BLOCKED]... in chrome://policy.
This is the only way to get a full policy install, including promise-returning webRequestBlocking handlers.
- Windows Pro or higher: join the device to Microsoft Entra ID (Settings → Accounts → Access work or school → Join this device to Microsoft Entra ID), join an Active Directory domain, or enroll the device in an MDM.
- macOS: enroll the Mac in an MDM, or bind it to a directory server, meaning an Open Directory node under
/LDAPv3or/Active Directory. - Either platform: enroll the browser in Chrome Enterprise Core and set the forcelist entry in the Google Admin console. No local registry or plist entry is needed in this case.
If the device is managed through a domain or MDM, deploy the policy through that management system. A locally applied machine policy can also be used after Chrome recognises the device as managed:
- Windows: in regedit, create the key
HKEY_LOCAL_MACHINE\Software\Policies\Google\Chrome\ExtensionInstallForcelist, add a string value named1(or the next free number), and set it toblockddmmcjpfkbhanlgegpmjpfpfjka;https://ublock.r58playz.dev/update.xml. - macOS: add
ExtensionInstallForcelist, as an array containingblockddmmcjpfkbhanlgegpmjpfpfjka;https://ublock.r58playz.dev/update.xml, to/Library/Managed Preferences/com.google.Chrome.plist.
Then restart the browser and enable Allow User Scripts in the extension's details page. If chrome://policy still
shows the value with a [BLOCKED] prefix, the device is not being recognised as managed.
This works on any unmanaged Windows or macOS machine, but the extension ends up installed as an ordinary extension
rather than by policy. Promise-returning webRequestBlocking handlers are therefore unavailable. While uBO starts,
subresource requests are temporarily cancelled and affected tabs may be reloaded instead of requests being held until
the filtering engine is ready.
On branded Google Chrome, the packaged CRX must also be added to the machine-level ExtensionInstallAllowlist policy
so Chrome does not disable it after installation. This is not needed for unbranded Chromium. The allowlist does not
install the extension or replace the launch flag.
- Download the CRX from https://ublock.r58playz.dev/.
- Remove any
ExtensionInstallForcelistentry for this extension. - Add
blockddmmcjpfkbhanlgegpmjpfpfjkato the machine-levelExtensionInstallAllowlistpolicy:- Windows: in regedit, create
HKEY_LOCAL_MACHINE\Software\Policies\Google\Chrome\ExtensionInstallAllowlist, add a string value named1(or the next free number), and set it to the extension ID. - macOS: add
ExtensionInstallAllowlist, as an array containing only the extension ID, to/Library/Managed Preferences/com.google.Chrome.plist.
- Windows: in regedit, create
- Completely quit Chrome, including background processes, restart it, and verify the allowlist in
chrome://policy. - Launch Chrome with
--allowlisted-extension-id=blockddmmcjpfkbhanlgegpmjpfpfjka. Chrome will show an unsupported command-line flag warning; do not suppress it with--test-type, which changes other browser behaviour. - Open
chrome://extensions, enableDeveloper mode, then drag the CRX onto the page and approve the installation. - Enable
Allow User Scriptsin the extension's details page. Wait for the!badge to clear; reload the extension if it does not.
The flag is what makes Chromium grant the MV3 webRequestBlocking permission to this extension. Chrome must be
started with it every time.
- This port does not convert uBO's filtering engine to
declarativeNetRequest. The existing engine runs in an MV3 service worker and returns blocking decisions throughwebRequest. - Chromium normally grants
webRequestBlockingto MV3 extensions only when they are installed by policy. The--allowlisted-extension-idflag bypasses that permission check, but does not turn a manual install into a policy install.- Only a real policy install may return promises from blocking handlers. This port uses them to hold requests while the filtering engine starts.
- A manual install instead temporarily cancels subresource requests during startup and reloads affected tabs after the engine is ready, like Chrome on MV2. Normal filtering decisions are synchronous after startup.
chrome.tabs.executeScript,chrome.tabs.insertCSS, andchrome.tabs.removeCSSare implemented withchrome.scriptingandchrome.userScripts.- Small DOM and
XMLHttpRequestshims provide the background-page APIs uBO uses, and a periodic extension API call keeps the service worker active. - Web Workers run in a lazily created offscreen document and communicate with the service worker through message ports.
Help translate uBO via Crowdin.
Free. Open-source. For users by users. No donations sought.
If you ever want to contribute something, think about the people working hard to maintain the filter lists you are using, which are available to use by all for free.

