Your feeds. Your rules.
ContentLens is a local-first browser extension that filters YouTube, LinkedIn, X, Reddit and Hacker News with rules you write. Block a channel, an author or a phrase. Every hidden item leaves a placeholder that explains the decision and brings the content back in one action.
The deterministic baseline runs in your browser profile. No account. No required backend. No telemetry.
Install for Chrome · Install in 2 minutes · Build from source · Read the manifesto
The store carries the signed package for the current stable version. Every
release also publishes content-lens-<version>-chrome.zip for manual
installation and verification.
Native controls such as "Not interested" are probabilistic hints. ContentLens turns your preferences into explicit, portable rules:
- Block channels, authors and exact terms immediately.
- Protect context with explicit allow rules and scoped exceptions.
- Preview every rule before it changes the feed.
- Reveal any hidden item from its explainable placeholder.
- Review corrections and carry a versioned profile between Chrome profiles.
The same rule model works across every supported platform. Each adapter stays inactive until you enable it and approve its origin.
Requires Chrome 149 or newer.
- Add ContentLens from the Chrome Web Store.
- Pin ContentLens, open its panel, enable one platform and create your first rule.
The listing serves the signed package of the current stable release.
Use this path to install an exact version or to verify the package yourself.
- Open the
releases list,
select the version you want and download its
content-lens-<version>-chrome.zip. - Extract the ZIP into its own folder.
manifest.jsonmust be at the top level of that folder. - Chrome: open
chrome://extensions, enable Developer mode, choose Load unpacked and select the extracted folder. - Pin ContentLens, open its panel, enable one platform and create your first rule.
Every stable release includes checksums.sha256, an SPDX SBOM and in-toto
provenance. After downloading the checksum file beside your chosen package,
replace the values below and verify its SHA-256 digest:
VERSION=x.y.z
PACKAGE=chrome
grep "content-lens-${VERSION}-${PACKAGE}.zip$" checksums.sha256 | shasum -a 256 --checkOn Windows PowerShell, use Get-FileHash -Algorithm SHA256 and compare its
output with the matching line in checksums.sha256.
With the GitHub CLI installed and authenticated, you can also verify the package against GitHub's build attestation:
gh attestation verify "content-lens-${VERSION}-${PACKAGE}.zip" \
--repo everton-dgn/content-lensContentLens requires Node.js 24.x and pnpm 11.17.0 installed directly.
npm install --global pnpm@11.17.0
pnpm install --frozen-lockfile
pnpm build:chromeLoad .output/chrome-mv3 as an unpacked extension in Chrome.
The getting started guide covers local development requirements, permissions and the first rule in detail.
ContentLens shows matches and protected exceptions before a rule is saved. Every hidden item keeps its reason and a one-action reveal path. Corrections remain available from the local review history.
|
|
| Preview before saving | Privacy stays visible |
Everyday actions stay in the browser panel. The wider extension settings expose platform access, optional providers, privacy, diagnostics, exports and portable sources without hiding the underlying state.
- Enable only the platforms and surfaces you want ContentLens to inspect.
- Create a block rule and add an allow exception when context matters.
- Preview the rule to inspect matches before saving.
- Review hidden items, reveal any item and correct the rule when needed.
Under the hood, each item follows the same explainable decision path:
Content extraction
-> deterministic rules
-> optional classifiers, when explicitly enabled
-> decision policy
-> reversible result with a reason
Known block and allow rules resolve first. Optional model-backed capabilities never override a decision your deterministic rules already made.
These adapters ship in the current release:
| Platform | Surfaces |
|---|---|
| YouTube | Home, search, recommendations, subscriptions, Shorts, channels, playlists and end screens |
| Feed, reposts, promoted posts and comment previews | |
| X | Following, For You, replies, quoted posts and threads |
| Home, Popular, All, subreddits, search and comments | |
| Hacker News | Front page, New, Best, Ask, Show, Jobs and item pages |
Surface scoping is part of the rule: block a channel in recommendations and still find it through search. The interface ships in English, Brazilian Portuguese and Spanish.
ContentLens reads RSS and Atom subscriptions already stored in a profile and exports them with the rest of the portable data. Fetching new feeds over the network is disabled in this release for security reasons.
- Observed content, rules, corrections and history stay in the browser profile by default.
- Host access is opt-in and scoped to each enabled platform.
- Deterministic rules resolve before optional model work.
- Provider credentials stay outside portable profile exports.
- Optional providers and user-owned synchronization require explicit setup, host permission and consent.
The packaged manifest declares optional https://*/* and http://*/* origin
patterns so ContentLens can support its platform adapters and user-owned
endpoints without a new package. The HTTP pattern exists only for loopback
services such as localhost; endpoint validation rejects remote plaintext
HTTP. A browser may describe this optional capability as access to "all sites."
ContentLens ships with no static content scripts and requests an exact origin
only when you enable a platform or configure an endpoint.
See the privacy policy and threat model for the full trust boundaries.
See what ships disabled by default
Some model-backed and network capabilities are built into the codebase but remain off until their quality, privacy and performance gates pass:
- Semantic topic rules and text archetype classification
- Thumbnail and preview-image signals
- Exact deduplication, similarity and a bounded content graph
- Editable AI-assisted rule drafts through a provider you configure
- Reviewed native platform feedback after a local action
- User-owned synchronization through an endpoint you control
Every capability stays off until you turn it on, and deterministic rules keep working with all of them disabled.
Start the Chrome development build:
pnpm install --frozen-lockfile
pnpm devBefore opening a pull request, run the full local validation:
pnpm ci:local
pnpm test:browserGenerated browser packages and source archives stay under .output/ and are
ignored by Git. See the development guide for repository
layout, command ownership and the validation matrix.
- Getting started
- Product scope
- Architecture
- Privacy and security
- Architecture decisions
- Documentation index
Issues and pull requests are welcome. Start with CONTRIBUTING.md and the development guide for the repository layout and validation matrix.
Good first contributions include adapter selectors that broke after a platform update, translations for the three shipped locales and documentation fixes.
Behavior changes need a focused regression test. Changes to architecture, permissions, persisted data or trust boundaries need a matching contract update and an ADR review.
By participating you agree to the Code of Conduct. For vulnerabilities, follow SECURITY.md instead of opening a public issue.
ContentLens is available under the MIT License.







