diff --git a/browsers/extensions.mdx b/browsers/extensions.mdx new file mode 100644 index 0000000..91d120e --- /dev/null +++ b/browsers/extensions.mdx @@ -0,0 +1,99 @@ +--- +title: "Extensions" +description: "Use browser extensions in Kernel browsers" +--- + +Kernel's browsers support running with custom Chrome extensions. +Chrome extensions must be unpacked and can be uploaded to Kernel via the CLI or API. + +## Uploading extensions + +Here is a simple example of an unpacked extension: + + +```js ./my-extension/content-script.js +document.body.innerHTML = document.body.innerHTML.replace(/AI/g, "A1"); +``` + +```json ./my-extension/manifest.json +{ + "manifest_version": 3, + "version": "1.0", + "name": "AI to A1", + "description": "Replace AI with A1", + "content_scripts": [ + { + "matches": [ + "https://*/*" + ], + "js": [ + "content-script.js" + ] + } + ] +} +``` + + +Once these files are in place, you can upload them to Kernel via the CLI (or [API](/api-reference/extensions/upload-a-browser-extension)): + +```bash +kernel extensions upload ./my-extension --name my-extension +``` + +Extensions uploaded to Kernel are assigned a random ID, but you can also give them a name for easier reference. +This name must be unique within your organization. + +## Using extensions in a browser + +Passing the extension name or ID to the `create` method will load it into the browser: + + +```typescript Typescript/Javascript +import { Kernel } from '@onkernel/sdk'; + +const kernel = new Kernel(); +const kernelBrowser = await kernel.browsers.create({ + extensions: [{ name: "my-extension" }], +}); +``` + +```python Python +import kernel + +client = kernel.Kernel() +kernel_browser = client.browsers.create(extensions=[{name: 'my-extension'}]) +``` + +```bash CLI +kernel browsers create --extension my-extension +``` + + + +## Using extensions directly from the Chrome Web Store + +Kernel's CLI offers a command for fetching and unpacking extensions directly from the Chrome Web Store. +Simply pass the URL of the extension you want to download and the CLI will download the extension and unpack it into the specified directory. + +```bash CLI +kernel extensions download-web-store https://chromewebstore.google.com/detail/shutterfly-address-book-e/lddlpciejomhjehckimopnomegilaocb --to ./downloaded-extension +``` + +From here you can upload the extension to Kernel as normal. + +```bash CLI +kernel extensions upload ./downloaded-extension --name my-extension +``` + +## Loading an extension into a running browser + +If you have a browser running and would like to load an extension into it after the browser session has started, Kernel also allows you to do that via the CLI (or [API](http://localhost:3000/api-reference/browsers/ad-hoc-upload-one-or-more-unpacked-extensions-to-a-running-browser-instance)): + +```bash CLI +kernel browsers extensions upload ./my-extension +``` + + +Note that this will restart the browser process and break any connections to the browser CDP URL. + diff --git a/docs.json b/docs.json index e1db215..16bdddc 100644 --- a/docs.json +++ b/docs.json @@ -65,6 +65,7 @@ "browsers/file-io", "browsers/live-view", "browsers/replays", + "browsers/extensions", { "group": "Bot Anti-Detection", "pages": [ diff --git a/info/pricing.mdx b/info/pricing.mdx index 5295907..a8f1c9e 100644 --- a/info/pricing.mdx +++ b/info/pricing.mdx @@ -18,7 +18,7 @@ With Kernel, you only pay for what you use and nothing more. Our goal is to be c | Browser replays | ❌ | ✅ | ✅ | | Browser profiles | ❌ | ✅ | ✅ | | File uploads & downloads | ❌ | ✅ | ✅ | -| Configurable browser extensions | ❌ | Coming soon | Coming soon | +| Configurable browser extensions | ❌ | ✅ | ✅ | | BYO images & storage mounts | ❌ | ❌ | Coming soon | | SOC2 compliance | ✅ | ✅ | ✅ | | HIPAA compliance (BAA) | ❌ | ❌ | ✅ |