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.

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 ProjectMaking 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

  1. Navigate to chrome://extensions/
  2. Enable Developer mode
  3. Click Load unpacked
  4. Select dist/build/uBlock0.chromium/

Firefox

  1. Navigate to about:debugging#/runtime/this-firefox
  2. Click Load Temporary Add-on…
  3. 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] from ember.toml on 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 shortcutCtrl+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.

  1. Hover over any element on the page – it will be highlighted
  2. Click to generate a cosmetic filter rule
  3. Preview what will be hidden
  4. Edit the generated rule if needed
  5. 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

  1. Open the CinderBlock dashboard
  2. Go to Filter Lists
  3. Scroll to the import section
  4. Paste the URL into the textarea
  5. 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