BestWebExtension Guide

How to Develop a Chrome Extension

Build your first Chrome extension in about ten minutes: the manifest, a popup page, loading it in developer mode, and debugging it. No build tools needed.

The Chrome Web Store listing page for the Wikipedia browser extension
Image: AHollender (WMF), CC BY-SA 4.0

A Chrome extension is a folder of files with a manifest.json at its root. That one file tells Chrome what the extension is called, which permissions it asks for, and what it can open. You can build and run one with nothing but Chrome and a text editor. No framework, no build step, no account.

This guide follows the official Hello World tutorial. The result is an extension that shows a popup when you click its toolbar icon.

What you need

That is the whole list.

1. Create the manifest

In your folder, create a file named manifest.json:

{
  "name": "Hello Extensions",
  "description": "Base Level Extension",
  "version": "1.0",
  "manifest_version": 3,
  "action": {
    "default_popup": "hello.html",
    "default_icon": "hello_extensions.png"
  }
}

The action key declares the image Chrome uses as the extension’s toolbar icon and the HTML page shown in a popup when that icon is clicked.

Use manifest_version: 3. Manifest V2 is finished: Chrome disabled it in July 2025 (Chrome 138) and removed the remaining V2 extensions from the Chrome Web Store on August 31, 2026. If an older tutorial tells you to write "manifest_version": 2, treat it as out of date.

2. Add the popup page

Create hello.html in the same folder:

<html>
  <body>
    <h1>Hello Extensions</h1>
  </body>
</html>

That is a complete extension: a manifest and one page. You can test it right now.

3. Load it in Chrome

Open the extensions page in a new tab: chrome://extensions. (By design, chrome:// addresses are not linkable, so type it.)

You can also reach the same page through Chrome’s Extensions menu, the puzzle button in the toolbar. Click it, then Manage Extensions. Or use the Chrome menu, hover over More Tools, then choose Extensions.

On the page:

  1. Turn on Developer mode with the toggle in the top right.
  2. Click Load unpacked.
  3. Select the folder that holds manifest.json.

The extension installs immediately. If the manifest declares no icon, Chrome shows a generic one.

4. Pin and test it

By default a locally loaded extension lives in the extensions menu. Pin it to the toolbar so you can reach it while you develop: click the puzzle button, then the pin icon next to “Hello Extensions”.

Now click the extension’s toolbar icon. The popup opens.

5. Reload after changes

Go back to the code and change the manifest’s name to "Hello Extensions of the world!". Save the file, go to chrome://extensions, and click the refresh icon next to the extension’s on/off toggle.

Not every change needs that refresh. From Chrome’s own table:

Extension componentNeeds a reload?
The manifestYes
Service workerYes
Content scriptsYes, plus the host page
The popupNo
Options pageNo
Other extension HTML pagesNo

6. Read console logs and errors

To log from the popup, add a script tag to hello.html:

<html>
  <body>
    <h1>Hello Extensions</h1>
    <script src="popup.js"></script>
  </body>
</html>

Create popup.js:

console.log("This is a popup!")

To see that message: open the popup, right-click inside it, choose Inspect, and go to the Console panel. The popup is a normal web page; Chrome DevTools treats it like any other.

Now break it on purpose. Remove the closing quote:

console.log("This is a popup!) // broken

Reopen the popup and a red Errors button appears on the extension’s card at chrome://extensions. Click it to read the error.

7. What a real extension adds

A popup alone does little. Extensions get useful when they touch pages:

If you write TypeScript, install the chrome-types npm package. It ships autocompletion for the Chrome API and is updated whenever Chromium changes.

Real extensions are built the same way as this demo. BestWebExtension ships open source extensions, including the privacy-first JSON Viewer, on top of the same manifest.json structure. Its docs cover installing them, and the source is public.

When it won’t help

Takeaways

Questions

How long does it take to build a Chrome extension?

A first popup extension takes about ten minutes: a manifest, one HTML page, and loading the folder in developer mode.

Do I need to pay to make a Chrome extension?

Building and running an extension locally is free. Publishing it on the Chrome Web Store needs a developer account and a one-time US$5 registration fee.

Is Manifest V2 still supported?

No. Chrome disabled Manifest V2 in July 2025 and removed the remaining V2 extensions from the Chrome Web Store on August 31, 2026. New extensions use Manifest V3.

BestWebExtension Extension docs