> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://platform.bctrl.ai/llms.txt.
> For full documentation content, see https://platform.bctrl.ai/llms-full.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://platform.bctrl.ai/_mcp/server.

# Extensions

> Upload or import browser extensions and load them into runtimes.

An extension adds browser capabilities to a runtime. Upload a packed `.crx` or import one from the Chrome Web Store, then load it into a runtime by id.

## Import from the Chrome Web Store

```ts
const extension = await bctrl.browserExtensions.import({
  url: "https://chrome.google.com/webstore/detail/.../abcdefg",
  name: "uBlock Origin",
});
```

## Upload a package

Pass the extension as a `Blob`. It must be a packed `.crx` - that is the only format supported today. `name` is optional and defaults to the manifest name.

```ts
const file = new Blob([crxBytes], { type: "application/x-chrome-extension" });
const extension = await bctrl.browserExtensions.upload({ file, name: "ad blocker" });
```

## List, read, delete

```ts
const { data } = await bctrl.browserExtensions.list();
const one = await bctrl.browserExtensions.get(extension.id);

await bctrl.browserExtensions.update(extension.id, { name: "ad blocker" });
await bctrl.browserExtensions.delete(extension.id);
```

## Load into a runtime

Reference extensions by id in [runtime configuration](/sdk/runtime-config):

```ts
const runtime = await bctrl.runtimes.create({
  type: "browser",
  name: "main",
  config: { extensionIds: [extension.id] },
});
```

## Next

* [Runtime configuration](/sdk/runtime-config) - load extensions at launch
* [Runtimes](/sdk/runtimes) - create a configured browser