YougroupYougroup Field Notes
All notes

Yougroup Field Notes

How Anyone Can Build and Load a Chrome Extension From Source

Learn to clone, build, and load an open-source Chrome extension from source in under 15 minutes. A step-by-step developer tutorial using Yougroup as the example.

How to Build and Load an Open-Source Chrome Extension From Source

Chrome extensions from the Web Store are black boxes. You install one, grant it permissions, and trust that the code running in your browser does what the description claims. When an extension is closed-source, there is no way to verify what data it collects, where that data goes, or whether a future update changes the bargain without warning.

Building from source flips that dynamic. You clone the repository, read the code, compile it yourself, and load the output directly into Chrome. No storefront in the middle, no auto-updates you didn't approve.

This walkthrough uses Yougroup as the running example. Yougroup is an open-source Chrome extension maintained by Thoughtbubble that organizes YouTube subscriptions into curated Lists and a deduplicated Feed. By the end, you will have cloned, built, and loaded a working extension from source in under 15 minutes.

Prerequisites: what you need before you start

Three tools are required, and you may already have them installed.

Google Chrome 114 or later. Manifest V3 is the only accepted format for new extensions, and Chrome 114+ is the minimum version that fully supports it. Check your version by navigating to chrome://settings/help.

Node.js. Yougroup uses npm-based build tooling to bundle TypeScript and process assets. Download the current LTS version from nodejs.org if you don't have it.

Git. Needed to clone the repository. You can also download a ZIP archive from GitHub, but Git makes it easier to pull updates later.

If you plan to modify the code in a TypeScript project, install the chrome-types npm package. It provides auto-completion for Chrome extension APIs in your editor.

Chrome extension development starts with the right toolchain. Verify your environment with two commands:

node --version
git --version

If both return version numbers, you are ready.

Inside Yougroup: a local-first, no-backend architecture

Before building, it helps to understand what you are compiling. Yougroup is designed around a local-first principle: no Yougroup account, no hosted backend, no server-side sync, and no product analytics. All data persists in Chrome extension storage on your machine.

The extension discovers new uploads using YouTube RSS feeds for public channel uploads. No YouTube Data API key is required to get started. An API key is optional and only enhances metadata like video duration and view counts.

The feature set includes curated Lists for grouping channels by theme (research, recipes, interviews), a deduplicated cross-list Feed that consolidates uploads from every channel across every list, local watch-state tracking, and playback queue management with sorting by newest, popular, or interleaved. Queues open directly on YouTube.

This architecture matters for the transparency narrative: developers can audit the source and confirm that zero data leaves the browser. For a deeper look at why that matters, see why your YouTube organizer should never see your data.

Thoughtbubble, the maintainer, is an AI-focused company that provides prototyping services and consulting. Yougroup serves as both a community tool and a demonstration of their engineering approach: open, inspectable, and built to respect user privacy by default.

Manifest V3: the blueprint every modern extension needs

Every Chrome extension requires a manifest.json file at its root directory. This is the file Chrome reads first when loading an extension. Manifest V3 replaced V2 with a focus on security, privacy, and performance. As the Chrome for Developers documentation states, "Manifest V3 aims to be the first step in our platform vision to improve the privacy, security, and performance of extensions."

Key changes in MV3 include:

  • Service workers replace persistent background pages, reducing memory usage.
  • declarativeNetRequest replaces the blocking webRequest API.
  • All JavaScript must be bundled within the extension package. No remotely hosted code is allowed.
  • Host permissions are tighter and more explicit.

A minimal manifest.json looks like this:

{
"manifest_version": 3,
"name": "My Extension",
"version": "1.0.0",
"description": "A minimal Manifest V3 extension.",
"permissions": ["storage"],
"host_permissions": ["https://www.youtube.com/*"],
"action": {
"default_popup": "popup.html"
},
"background": {
"service_worker": "background.js"
}
}

The manifest_version field must be set to 3. The permissions array declares which Chrome APIs the extension needs. The host_permissions array specifies which domains the extension can interact with. The action object defines the toolbar button and its popup. The background object registers the service worker that handles events.

Yougroup's actual manifest includes additional permissions and configuration specific to its features, but the structure follows this pattern.

Clone, install, build: running from source

The core workflow to build a Chrome extension from source is three commands. Open your terminal and run the following.

Step 1: Clone the repository.

git clone https://github.com/thoughtbubble/yougroup.git

Alternatively, download the ZIP from the GitHub repository page and extract it locally.

Step 2: Install dependencies.

cd yougroup
npm install

This fetches all required packages defined in package.json, including the build tooling, TypeScript compiler, and any libraries the extension depends on.

Step 3: Build the extension.

npm run build

This command bundles the TypeScript and JavaScript source, processes assets, and produces an output directory (typically dist/ or build/) containing the compiled extension. That output directory is what you will load into Chrome. It must contain manifest.json at its root.

For active development, npm run dev or npm run start may be available for a watch-mode build that recompiles automatically when files change.

Loading the unpacked extension in Chrome

Once the build completes, load the extension into Chrome:

  1. Open a new tab and navigate to chrome://extensions.
  2. Enable Developer Mode by toggling the switch in the top-right corner of the Extensions page.
  3. Click Load unpacked and select the build output directory, which is the folder containing manifest.json.

The Chrome for Developers documentation describes this process directly: "Click the Load unpacked button and select the extension directory."

If everything worked, the extension card appears on the Extensions page with its name, version, and icon. Yougroup's toolbar icon should appear in your Chrome browser.

The most common pitfall is selecting the project root instead of the build output directory. Chrome looks for manifest.json in whichever folder you select. If you pick the source root, the compiled artifacts won't be there and Chrome will report an error.

Reloading, debugging, and customizing your local build

After the extension is loaded, the iteration loop is straightforward.

Reloading after code changes. Go to chrome://extensions and click the refresh icon on the extension card. This reloads the extension with your latest build. Changes to manifest.json, the service worker, or content scripts require this full reload. Changes to popup and options pages do not. For those, just close and reopen the popup.

Debugging. Right-click the extension's popup and select "Inspect" to open Chrome DevTools for the popup. To debug the service worker, click "service worker" on the extension card in chrome://extensions. To debug content scripts, open DevTools on the page where they are injected and find them in the Sources panel.

Optional enhancement. Add a YouTube Data API key to unlock richer metadata like video duration and view counts. This is strictly optional. The default RSS-based discovery works without any API key.

Customization. Because you control the full source code, you can modify any behavior locally. Tweak the UI, adjust feature logic, or add new capabilities. If you want to take back control of your YouTube feed without the algorithm, extending Yougroup's Lists and Feed to fit your own workflow is a practical starting point.

Why source-level transparency beats closed-storefront extensions

Running an open-source Chrome extension from source provides four concrete advantages.

Full code auditability. You can read every line and verify claims like "no analytics" or "no backend" directly. Yougroup's local-first architecture is verifiable, not just a marketing claim. The source code confirms that all data lives in Chrome extension storage and nothing is transmitted to a server.

Customization freedom. Modify feature logic, UI, or add capabilities without waiting for the maintainer to ship an update. Your local build is yours to change.

No storefront dependency. The extension cannot be pulled from the Chrome Web Store, deprecated, or silently updated without your knowledge. You control when and whether to pull new changes from the repository.

Trust through transparency. Open-source extensions are a trust-building alternative to opaque closed-source tools. The transparency is structural. You don't have to take the developer's word for it when you can read the code yourself.

These benefits are not theoretical. Yougroup's architecture demonstrates them: no account, no backend, no sync, no analytics. Every claim is checkable against the source.

From clone to customization

The workflow boils down to five steps: clone the repository, install dependencies, build the extension, load it unpacked in Chrome, and iterate with reloads. The entire process takes under 15 minutes and requires only Chrome 114+, Node.js, and Git.

The same workflow applies to any open-source Chrome extension, not just Yougroup. If you find the codebase useful, explore it, file issues, or submit pull requests. The repository is open for community contribution.

Thoughtbubble also offers AI prototyping, consulting, and product development services for teams looking to build similar tools. If your organization needs help designing or shipping a browser extension, AI-powered app, or custom prototype, that is where their broader work lives.

Source-level transparency is more than a developer convenience. It is a fundamentally more trustworthy software model, and it is accessible to anyone willing to spend fifteen minutes with a terminal.