-
Notifications
You must be signed in to change notification settings - Fork 6
extensions docs #73
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
extensions docs #73
Changes from 5 commits
4d3c59f
5b9b1ee
b537260
6307aa0
2c3d6fa
f78fac8
9cde35c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,94 @@ | ||
| --- | ||
| 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: | ||
|
|
||
| <CodeGroup> | ||
| ```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" | ||
| ] | ||
| } | ||
| ] | ||
| } | ||
| ``` | ||
| </CodeGroup> | ||
|
|
||
| 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: | ||
|
|
||
| <CodeGroup> | ||
| ```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 | ||
| ``` | ||
| </CodeGroup> | ||
|
|
||
|
|
||
| ## 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. | ||
|
|
||
|
|
||
| ## 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 $session_id ./my-extension | ||
|
||
| ``` | ||
|
|
||
| Note that this will restart the browser process and break any connections to the browser CDP URL. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I suggest putting this in a block: Note that this will restart the browser process and break any connections to the browser CDP URL. |
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we should continue with the example here and just showcase this code snippet:
kernel extensions upload ./downloaded-extension --dws-extension