CINDERBLOCK Documentation
Introduction
Overview of CinderBlock, the content blocking engine for Ember Browser.
CinderBlock
Content blocking engine for Ember Browser – forked from uBlock Origin.
CinderBlock is Ember’s built-in content blocking engine. It is not an extension – it is a first-class component of Ember, compiled as part of the browser and deeply integrated into the Ember Shell.
What is CinderBlock?
CinderBlock blocks ads, trackers, coin miners, popups, annoyances, malware sites, and more. It inherits uBlock Origin’s core architecture: a highly efficient network request filter, a cosmetic filter engine, a scriptlet injection system, and a full dashboard UI.
CinderBlock is not distributed separately. It ships with Ember and updates with Ember via CPAC. Filter lists are the only thing that update independently, fetched as plaintext from their source URLs on a configurable schedule.
Philosophy
- The user decides what web content is acceptable in their browser
- CinderBlock is a content blocker, not a gatekeeper – the user always has the final say
- Filter matching is fast, efficient, and transparent
- No external service dependencies, no cloud sync, no telemetry
- Ships with curated defaults that work out of the box
Features
Network Request Filtering
Intercepts all HTTP/HTTPS requests made by the browser. Each request is matched against compiled filter lists using a highly efficient trie-based matching algorithm. Blocked requests are cancelled before they reach the network.
Supports all standard filter syntax: URL pattern matching, domain anchors, path filters, query string filters, exception rules, option modifiers, and hosts file format.
Cosmetic Filtering
CSS-based element hiding applied after page load. Removes ad containers, cookie consent banners, newsletter popups, notification permission prompts, chat widgets, floating overlays, and “subscribe to continue reading” overlays.
Supports generic cosmetic filters, domain-specific filters, extended CSS selectors (:has(), :not(), :matches-css()), and procedural cosmetic filters.
Scriptlet Injection
JavaScript snippets injected into page context to neutralize behaviors that CSS cannot reach: anti-adblock detection scripts, tracking calls embedded in page JS, cookie consent wall JS, and fingerprinting scripts.
Dashboard
Full dashboard UI accessible via toolbar button, keyboard shortcut (Ctrl+Shift+B, remappable), or ember://cinderblock. Sections include filter lists, custom filters, per-site rules, trusted sites, and advanced settings.
Element Picker
Point-and-click tool to generate cosmetic filter rules for any page element. Preview what will be hidden before committing, edit the generated rule, and save to custom filters.
Network Logger
Real-time log of all network requests made by the current tab. Shows request URL, type, origin domain, block/allow status, and which filter rule matched.
Dynamic Filtering
Per-domain request type matrix for advanced users. Allows fine-grained control such as blocking all third-party scripts globally while allowing them on specific trusted domains.
Default Filter Lists
CinderBlock ships with a curated default set:
| List | Category | Default |
|---|---|---|
| AdGuard Base | Ads | on |
| AdGuard Tracking Protection | Tracking | on |
| AdGuard Annoyances | Cookie banners, popups | on |
| EasyList | Ads | on |
| EasyPrivacy | Tracking | on |
| Peter Lowe’s Ad and Tracking | Ads + Tracking | on |
| uBlock Origin Filters | Ads | on |
| uBlock Annoyances | Annoyances | on |
| Dan Pollock’s hosts | Malware, spam | on |
| PhishTank | Phishing domains | on |
| HAGEZI Multi Pro | Ads + Tracking + Malware | on |
| StevenBlack Adware + Malware | Adware, malware | on |
| oisd big | Comprehensive | on |
| StevenBlack Gambling | Gambling domains | off |
| Adult content | Adult content | off |
See Filter Lists for full details.
Related Projects
| Project | Role |
|---|---|
| Ember Browser | The browser that ships CinderBlock |
| CPAC | Package trust layer for Ember OS |
| uBlock Origin | Upstream project |
Made By
Developer/Maintainer: Sabeeir Sharrma
Made under The Cinder Project – Making a safer internet
License
GPL-3.0 (inherited from uBlock Origin upstream)
Attribution
CinderBlock is based on uBlock Origin by Raymond Hill and contributors. uBlock Origin is licensed under the GNU General Public License v3.0.
Installation
How to build and install CinderBlock.
Installation
CinderBlock ships with Ember Browser. You do not need to install it separately.
Building from Source
Prerequisites
- Node.js >= 22
- npm >= 11
- Make
- Python 3 (for build scripts)
- Bash
Build Steps
git clone https://github.com/SabeeirSharrma/CinderBlock.git
cd CinderBlock
npm install
Chromium
make chromium
Output: dist/build/uBlock0.chromium/ (unpacked extension)
Firefox
make firefox
Output: dist/build/uBlock0.firefox/ (unpacked extension) and dist/build/uBlock0.firefox.xpi
Both
make all
Loading the Unpacked Extension
Chromium
- Navigate to
chrome://extensions/ - Enable Developer mode
- Click Load unpacked
- Select
dist/build/uBlock0.chromium/
Firefox
- Navigate to
about:debugging#/runtime/this-firefox - Click Load Temporary Add-on…
- Select
dist/build/uBlock0.firefox/manifest.json
For permanent installation on Firefox, use the .xpi file:
# Requires xpinstall.signatures.required = false in about:config
drag dist/build/uBlock0.firefox.xpi into Firefox
Linting
npm run lint
Cleaning
make clean # remove build output
make cleanassets # remove cached filter lists
Configuration
Configuring CinderBlock via ember.toml.
Configuration
CinderBlock reads its initial state from the [blocking] section of ember.toml. Per-site rules, custom filters, and dynamic filtering rules are stored separately in local files.
ember.toml
[blocking]
enabled = true
update_interval_hours = 24
# List overrides (optional -- defaults apply if not specified)
[blocking.lists]
adguard_annoyances = true
stevenblack_gambling = false
adult_content = false
Options
| Key | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable or disable content blocking globally |
update_interval_hours |
integer | 24 |
How often filter lists are updated. Set to 0 to disable auto-update |
List Overrides
Individual filter lists can be toggled under [blocking.lists]. The key names correspond to the list IDs in assets/assets.json. Only lists that exist in the registry can be overridden.
| Key | List | Default |
|---|---|---|
adguard_annoyances |
AdGuard Annoyances | true |
stevenblack_gambling |
StevenBlack Gambling | false |
adult_content |
Adult content | false |
Any list in the registry can be toggled by adding its key under [blocking.lists].
Local Storage
Per-site rules, custom filters, and dynamic filtering rules are stored at:
~/.config/ember/cinderblock/
| File | Contents |
|---|---|
rules.txt |
User-authored custom filter rules (My Filters) |
per-site.json |
Per-site rule overrides (whitelist, cosmetic filtering toggles) |
dynamic.json |
Dynamic filtering matrix |
trusted.txt |
Whitelisted domains |
These files are human-readable and version-controllable.
Keyboard Shortcuts
| Action | Default Shortcut | Remappable |
|---|---|---|
| Open dashboard | Ctrl+Shift+B |
Yes, in ember.toml |
| Element picker | Ctrl+Shift+E |
Yes, in ember.toml |
| Element zapper | Ctrl+Shift+X |
Yes, in ember.toml |
Ember Shell Integration
CinderBlock integrates with Ember Shell through:
- Toolbar button – native Shell component (replaces extension popup)
- Dashboard – themed to match the active Ember theme
- Config bridge – reads
[blocking]fromember.tomlon launch - Update system – filter lists update on the schedule defined in config; CinderBlock itself updates via CPAC with Ember
Reference
CinderBlock dashboard and feature reference.
Reference
Dashboard
The CinderBlock dashboard is the main interface for managing content blocking. Access it via:
- Toolbar button – click the CinderBlock icon in the browser toolbar
- Keyboard shortcut –
Ctrl+Shift+B(remappable) - URL – navigate to
ember://cinderblock
Sections
| Section | Description |
|---|---|
| Settings | Global blocking options, appearance, per-site switches, advanced settings |
| Filter Lists | Enable/disable lists, update individual lists, add custom list URLs |
| My Filters | User-authored custom filter rules in plaintext |
| My Rules | Per-site allow/block rules, whitelist management |
| Trusted Sites | Domains where CinderBlock is fully disabled |
| Support | Filter list tester, diagnostics |
| About | Version info, upstream attribution, dependencies |
Filter Syntax
CinderBlock uses the uBlock Origin / AdGuard filter syntax.
Basic URL Pattern Matching
||ads.example.com^
Blocks all requests to ads.example.com and its subdomains.
Domain-Specific Filters
example.com##.ad-banner
Hides elements matching .ad-banner on example.com only.
Exception Rules
@@||example.com/ads
Allows requests matching the pattern (unblocks them).
Option Modifiers
||ads.example.com^$third-party,script
Blocks third-party script requests to ads.example.com.
Common modifiers: $third-party, $script, $image, $xhr, $stylesheet, $font, $subdocument
Hosts File Format
0.0.0.0 ads.example.com
Supported for lists that use hosts file format (StevenBlack, Dan Pollock, etc.).
Cosmetic Filter Syntax
##.ad-banner ## Generic
example.com##.sponsored ## Domain-specific
example.com##div:has(.popup) ## Extended CSS
Scriptlet Injection
example.com##+js(set-constant, adBlock, false)
example.com##+js(abort-on-property-read, adblock)
Element Picker
Activated via toolbar button or Ctrl+Shift+E.
- Hover over any element on the page – it will be highlighted
- Click to generate a cosmetic filter rule
- Preview what will be hidden
- Edit the generated rule if needed
- Save to My Filters
Network Logger
Accessible from the dashboard. Shows real-time network requests for the current tab.
| Column | Description |
|---|---|
| URL | The request URL |
| Type | Script, image, XHR, frame, etc. |
| Origin | The originating domain |
| Status | Blocked, allowed, or redirected |
| Filter | Which filter rule matched (if any) |
The logger is off by default (performance) and does not persist across sessions.
Dynamic Filtering
Per-domain request type matrix for advanced users. Accessible from the dashboard in advanced mode.
| Action | Description |
|---|---|
| Block | Block all requests of this type from this domain |
| Allow | Allow all requests of this type from this domain |
| Noop | Use the default filter list behavior |
The matrix is color-coded:
- Red – blocked
- Green – allowed
- Gray – default (noop)
Per-Site Rules
Scoped to specific domains:
| Rule | Effect |
|---|---|
| Disable CinderBlock | Whitelist – no filtering at all |
| Disable cosmetic filtering | Elements are not hidden |
| Disable scriptlet injection | Scriptlets are not injected |
| Custom filters | Domain-scoped filter rules |
CLI (Future)
CinderBlock currently has no CLI. All configuration is done through ember.toml and the dashboard.
Future versions may expose CLI commands for headless configuration:
# Not yet implemented
cinderblock status
cinderblock update
cinderblock enable-list easylist
Filter Lists
CinderBlock's default filter list set and custom list support.
Filter Lists
CinderBlock ships with a curated default filter list set. Users can add custom lists via URL from the dashboard.
Default Lists
Enabled by Default
| List | Category | Source |
|---|---|---|
| AdGuard Base | Ads | https://filters.adtidy.org/extension/ublock/filters/2.txt |
| AdGuard Tracking Protection | Tracking | https://filters.adtidy.org/extension/ublock/filters/3.txt |
| AdGuard Annoyances | Cookie banners, popups | https://filters.adtidy.org/extension/ublock/filters/14.txt |
| EasyList | Ads | https://easylist.to/easylist/easylist.txt |
| EasyPrivacy | Tracking | https://easylist.to/easylist/easyprivacy.txt |
| Peter Lowe’s Ad and Tracking | Ads + Tracking | https://pgl.yoyo.org/adservers/serverlist.php?hostformat=adblockplus |
| uBlock Origin Filters | Ads | https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/filters.txt |
| uBlock Annoyances | Annoyances | https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/annoyances.txt |
| Dan Pollock’s hosts | Malware, spam | https://someonewhocares.org/hosts/zero/hosts |
| PhishTank | Phishing domains | https://phishtank.org/phishtank.txt |
| HAGEZI Multi Pro | Ads + Tracking + Malware | https://raw.githubusercontent.com/hagezi/dns-blocklists/main/adblock/pro.txt |
| StevenBlack Adware + Malware | Adware, malware | https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/adware-malware/hosts |
| oisd big | Comprehensive | https://big.oisd.nl |
Opt-in Lists (Disabled by Default)
| List | Category | Source |
|---|---|---|
| StevenBlack Gambling | Gambling domains | https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/gambling/hosts |
| Adult content | Adult content | https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/porn/hosts |
Enable via the dashboard or ember.toml:
[blocking.lists]
stevenblack_gambling = true
adult_content = true
Custom Lists
Users can add any custom filter list via URL from the dashboard (Filter Lists section).
Requirements
- Must be a direct URL to a plaintext file
- Must use uBlock Origin / AdGuard compatible syntax, or hosts file format
- No authentication required (public URL)
Adding a Custom List
- Open the CinderBlock dashboard
- Go to Filter Lists
- Scroll to the import section
- Paste the URL into the textarea
- Click Apply changes
Custom lists are stored by URL reference, not by content. They are fetched and compiled on the same update schedule as built-in lists.
List Update Behavior
- Default interval: every 24 hours
- Configurable in
ember.toml:
[blocking]
update_interval_hours = 24 # set to 0 to disable auto-update
- Updates are plaintext HTTP GET requests to the list source URL
- No binary downloads, no signed packages, fully transparent
- Lists are compiled into an internal format after fetch
- Manual update available per-list from the dashboard
- CinderBlock itself does not auto-update – it ships with Ember and updates via CPAC
Filter List Registry
The master registry is at assets/assets.json. Each entry specifies:
{
"list-id": {
"content": "filters",
"group": "default",
"title": "List Name",
"tags": "ads tracking",
"contentURL": "https://example.com/list.txt",
"supportURL": "https://github.com/example"
}
}
| Field | Description |
|---|---|
content |
Type of content (filters for filter lists) |
group |
Category group (default, ads, privacy, annoyances, malware, regions, custom) |
off |
If true, list is disabled by default (opt-in) |
title |
Display name in the dashboard |
tags |
Space-separated tags for categorization |
contentURL |
URL(s) to fetch the list from |
cdnURLs |
Alternative CDN URLs for redundancy |
supportURL |
Link to the list maintainer’s page |