From 866e9e05dadaef5d91ee0add6363386175ccfe23 Mon Sep 17 00:00:00 2001 From: Mason Williams Date: Tue, 7 Oct 2025 16:14:44 -0400 Subject: [PATCH 1/6] docs(vercel): update marketplace integration guide --- integrations/vercel.mdx | 116 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 113 insertions(+), 3 deletions(-) diff --git a/integrations/vercel.mdx b/integrations/vercel.mdx index de8d114..2b3a874 100644 --- a/integrations/vercel.mdx +++ b/integrations/vercel.mdx @@ -1,4 +1,114 @@ --- -title: "Vercel" -url: "https://github.com/onkernel/vercel-template" ---- \ No newline at end of file +title: "Vercel Marketplace" +description: "Integrate Kernel through the Vercel Marketplace" +--- + +## Integrate Kernel through the Vercel Marketplace + +The Vercel Marketplace allows Vercel users to install and configure third-party services, like Kernel, directly from the Vercel dashboard. Kernel offers an [official integration](https://vercel.com/marketplace/kernel) that Vercel users can install to integrate Kernel into their Vercel projects. + +### Installing the Kernel Integration + +{/* + Deploy an example Next.js application and install the Kernel integration with our [template](https://github.com/onkernel/vercel-template). + */} + +1. Navigate to the [Kernel integration](https://vercel.com/marketplace/kernel) in the Vercel Marketplace. +2. Click **Install** to add Kernel to your Vercel team. +3. Select your pricing plan. +4. Provide a name for your Kernel installation. (this is not used for billing or anything else) +5. Click **Create**. + +Vercel will automatically provision a Kernel account, organization, and API key for you. Vercel calls the provisioned account, organization, and API key a **Resource**. + +Each Vercel team has an associated Kernel Organization. Kernel will automatically provision a new account for you, or link to an existing Kernel account if an account is found with the same email address. An equivalent role in Kernel is assigned to the user based on their Vercel team role. Roles and Vercel team membership are automatically synced to Kernel. + +### Connecting to your Vercel projects + +Once you've installed Kernel, you will need to connect it to one of your Vercel projects. Generally, a Kernel organization should be connected to a single Vercel project. + +Connecting to a project will automatically sync your Kernel API key to your Vercel project's environment variables. The following environment variable will be automatically synced to all environments: + +- `KERNEL_API_KEY` + + + Running `vercel env pull` in your project will automatically sync the development environment variables locally. + + +### Configuring your Kernel integration + +Most of your Kernel integration configuration will be done through the Kernel Dashboard. To access the Dashboard after installing the Kernel integration, navigate to your installation details page and click the **Open in Kernel** button. + +### Using Kernel in your application + +Once your Kernel API key is synced to your Vercel project, you can use it in your application. Here's a quick example: + + +```typescript TypeScript +import { Kernel } from '@onkernel/sdk'; +import { chromium } from 'playwright'; + +const kernel = new Kernel({ apiKey: process.env.KERNEL_API_KEY }); + +// Create a Kernel browser +const kernelBrowser = await kernel.browsers.create(); + +// Connect over CDP with Playwright +const browser = await chromium.connectOverCDP(kernelBrowser.cdp_ws_url); + +try { + const context = browser.contexts()[0]; + const page = context.pages()[0]; + await page.goto('https://example.com'); + const title = await page.title(); + console.log('Page title:', title); +} finally { + await browser.close(); + await kernel.browsers.deleteByID(kernelBrowser.session_id); +} +``` + +```python Python +from kernel import AsyncKernel +from playwright.async_api import async_playwright + +kernel = AsyncKernel(api_key=os.environ.get("KERNEL_API_KEY")) + +# Create a Kernel browser +kernel_browser = await kernel.browsers.create() + +# Connect over CDP with Playwright +playwright = await async_playwright().start() +browser = await playwright.chromium.connect_over_cdp(kernel_browser.cdp_ws_url) + +try: + context = browser.contexts[0] + page = context.pages[0] + await page.goto("https://example.com") + title = await page.title() + print(f"Page title: {title}") +finally: + await browser.close() + await kernel.browsers.delete_by_id(kernel_browser.session_id) +``` + + +For more examples and features like profiles, stealth mode, and live view, check out the [Browsers documentation](/browsers/create-a-browser). + +### Pricing + +The pricing for plans and add-ons purchased through the Vercel Marketplace is the same as the pricing when purchased directly through Kernel. For more information on Kernel's pricing and available plans, see the [Pricing page](https://onkernel.com/#pricing). + +Billing and usage data are reported hourly to Vercel and can be viewed directly in the Vercel Dashboard. + +### Limitations + +The following limitations apply when using Kernel through the Vercel Marketplace: + +- Vercel-managed Organizations cannot be deleted from the Kernel Dashboard, they can only be deleted by uninstalling the Kernel integration. +- Billing plan management can be done through both the Vercel Dashboard and the Kernel Dashboard. +- Existing Kernel organizations cannot be moved to be managed by the Kernel Vercel Integration. + +### Support + +If you encounter any issues with the Kernel Vercel integration, please contact our support team through the Kernel Dashboard or reach out on [Discord](https://discord.gg/onkernel). From 807a83aa9d50dcdc71092a34861b0c6b44b66e38 Mon Sep 17 00:00:00 2001 From: Mason Williams Date: Tue, 7 Oct 2025 16:27:56 -0400 Subject: [PATCH 2/6] docs(vercel): update pricing text and remove support --- integrations/vercel.mdx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/integrations/vercel.mdx b/integrations/vercel.mdx index 2b3a874..bd26810 100644 --- a/integrations/vercel.mdx +++ b/integrations/vercel.mdx @@ -97,7 +97,7 @@ For more examples and features like profiles, stealth mode, and live view, check ### Pricing -The pricing for plans and add-ons purchased through the Vercel Marketplace is the same as the pricing when purchased directly through Kernel. For more information on Kernel's pricing and available plans, see the [Pricing page](https://onkernel.com/#pricing). +The pricing for plans purchased through the Vercel Marketplace is the same as the pricing when purchased directly through Kernel. For more information on Kernel's pricing and available plans, see the [Pricing page](https://onkernel.com/#pricing). Billing and usage data are reported hourly to Vercel and can be viewed directly in the Vercel Dashboard. @@ -108,7 +108,3 @@ The following limitations apply when using Kernel through the Vercel Marketplace - Vercel-managed Organizations cannot be deleted from the Kernel Dashboard, they can only be deleted by uninstalling the Kernel integration. - Billing plan management can be done through both the Vercel Dashboard and the Kernel Dashboard. - Existing Kernel organizations cannot be moved to be managed by the Kernel Vercel Integration. - -### Support - -If you encounter any issues with the Kernel Vercel integration, please contact our support team through the Kernel Dashboard or reach out on [Discord](https://discord.gg/onkernel). From 6f1f35f399c8627efba2d31bd5af546c12c7ee63 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 17 Oct 2025 17:32:17 +0000 Subject: [PATCH 3/6] docs: update code samples from OpenAPI --- snippets/openapi/get-extensions-id_or_name.mdx | 12 ++++++------ snippets/openapi/post-deployments.mdx | 11 ++++++++++- snippets/openapi/post-extensions.mdx | 8 ++++---- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/snippets/openapi/get-extensions-id_or_name.mdx b/snippets/openapi/get-extensions-id_or_name.mdx index 1de750e..9a7acd8 100644 --- a/snippets/openapi/get-extensions-id_or_name.mdx +++ b/snippets/openapi/get-extensions-id_or_name.mdx @@ -6,11 +6,11 @@ const client = new Kernel({ apiKey: 'My API Key', }); -const response = await client.extensions.download('id_or_name'); +const extension = await client.extensions.retrieve('id_or_name'); -console.log(response); +console.log(extension); -const content = await response.blob(); +const content = await extension.blob(); console.log(content); ``` @@ -21,11 +21,11 @@ from kernel import Kernel client = Kernel( api_key="My API Key", ) -response = client.extensions.download( +extension = client.extensions.retrieve( "id_or_name", ) -print(response) -content = response.read() +print(extension) +content = extension.read() print(content) ``` diff --git a/snippets/openapi/post-deployments.mdx b/snippets/openapi/post-deployments.mdx index 6212992..7f8ee8e 100644 --- a/snippets/openapi/post-deployments.mdx +++ b/snippets/openapi/post-deployments.mdx @@ -8,7 +8,10 @@ const client = new Kernel({ const deployment = await client.deployments.create({ entrypoint_rel_path: 'src/app.py', + env_vars: { FOO: 'bar' }, file: fs.createReadStream('path/to/file'), + region: 'aws.us-east-1a', + version: '1.0.0', }); console.log(deployment.id); @@ -23,7 +26,13 @@ client = Kernel( ) deployment = client.deployments.create( entrypoint_rel_path="src/app.py", - file=b"raw file contents", + env_vars={ + "FOO": "bar" + }, + file=b"", + force=False, + region="aws.us-east-1a", + version="1.0.0", ) print(deployment.id) ``` diff --git a/snippets/openapi/post-extensions.mdx b/snippets/openapi/post-extensions.mdx index ed1269b..bf26c0c 100644 --- a/snippets/openapi/post-extensions.mdx +++ b/snippets/openapi/post-extensions.mdx @@ -6,9 +6,9 @@ const client = new Kernel({ apiKey: 'My API Key', }); -const response = await client.extensions.upload({ file: fs.createReadStream('path/to/file') }); +const extension = await client.extensions.create({ file: fs.createReadStream('path/to/file') }); -console.log(response.id); +console.log(extension.id); ``` @@ -18,9 +18,9 @@ from kernel import Kernel client = Kernel( api_key="My API Key", ) -response = client.extensions.upload( +extension = client.extensions.create( file=b"raw file contents", ) -print(response.id) +print(extension.id) ``` From b31eb859287b1bd2eaa0ef6ab0c6be65a0d6cd74 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 17 Oct 2025 21:24:00 +0000 Subject: [PATCH 4/6] docs: update code samples from OpenAPI --- snippets/openapi/get-extensions-id_or_name.mdx | 12 ++++++------ snippets/openapi/post-extensions.mdx | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/snippets/openapi/get-extensions-id_or_name.mdx b/snippets/openapi/get-extensions-id_or_name.mdx index 9a7acd8..1de750e 100644 --- a/snippets/openapi/get-extensions-id_or_name.mdx +++ b/snippets/openapi/get-extensions-id_or_name.mdx @@ -6,11 +6,11 @@ const client = new Kernel({ apiKey: 'My API Key', }); -const extension = await client.extensions.retrieve('id_or_name'); +const response = await client.extensions.download('id_or_name'); -console.log(extension); +console.log(response); -const content = await extension.blob(); +const content = await response.blob(); console.log(content); ``` @@ -21,11 +21,11 @@ from kernel import Kernel client = Kernel( api_key="My API Key", ) -extension = client.extensions.retrieve( +response = client.extensions.download( "id_or_name", ) -print(extension) -content = extension.read() +print(response) +content = response.read() print(content) ``` diff --git a/snippets/openapi/post-extensions.mdx b/snippets/openapi/post-extensions.mdx index bf26c0c..ed1269b 100644 --- a/snippets/openapi/post-extensions.mdx +++ b/snippets/openapi/post-extensions.mdx @@ -6,9 +6,9 @@ const client = new Kernel({ apiKey: 'My API Key', }); -const extension = await client.extensions.create({ file: fs.createReadStream('path/to/file') }); +const response = await client.extensions.upload({ file: fs.createReadStream('path/to/file') }); -console.log(extension.id); +console.log(response.id); ``` @@ -18,9 +18,9 @@ from kernel import Kernel client = Kernel( api_key="My API Key", ) -extension = client.extensions.create( +response = client.extensions.upload( file=b"raw file contents", ) -print(extension.id) +print(response.id) ``` From 0bcd8f4d4ce345bd8f7625de87c357ec5477cf30 Mon Sep 17 00:00:00 2001 From: Mason Williams Date: Fri, 17 Oct 2025 17:27:49 -0400 Subject: [PATCH 5/6] docs(vercel): clarify integration instructions and terms --- integrations/vercel.mdx | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/integrations/vercel.mdx b/integrations/vercel.mdx index bd26810..852e3ac 100644 --- a/integrations/vercel.mdx +++ b/integrations/vercel.mdx @@ -5,7 +5,7 @@ description: "Integrate Kernel through the Vercel Marketplace" ## Integrate Kernel through the Vercel Marketplace -The Vercel Marketplace allows Vercel users to install and configure third-party services, like Kernel, directly from the Vercel dashboard. Kernel offers an [official integration](https://vercel.com/marketplace/kernel) that Vercel users can install to integrate Kernel into their Vercel projects. +The Vercel Marketplace allows Vercel users to install and configure third-party services, like Kernel, directly from the Vercel dashboard. Kernel offers an [official integration](https://vercel.com/marketplace/kernel) that Vercel users can install to integrate Kernel cloud browsers into their Vercel projects. ### Installing the Kernel Integration @@ -16,16 +16,16 @@ The Vercel Marketplace allows Vercel users to install and configure third-party 1. Navigate to the [Kernel integration](https://vercel.com/marketplace/kernel) in the Vercel Marketplace. 2. Click **Install** to add Kernel to your Vercel team. 3. Select your pricing plan. -4. Provide a name for your Kernel installation. (this is not used for billing or anything else) +4. Provide a name for your Kernel installation (this is not used for billing or anything else). 5. Click **Create**. -Vercel will automatically provision a Kernel account, organization, and API key for you. Vercel calls the provisioned account, organization, and API key a **Resource**. +Vercel will automatically provision a Kernel User account, Organization, and API key for you. Vercel calls the provisioned account, Organization, and API key a **Resource**. -Each Vercel team has an associated Kernel Organization. Kernel will automatically provision a new account for you, or link to an existing Kernel account if an account is found with the same email address. An equivalent role in Kernel is assigned to the user based on their Vercel team role. Roles and Vercel team membership are automatically synced to Kernel. +Each Vercel team has an associated Kernel Organization. Kernel will automatically provision a new User account for you, or link to an existing Kernel User account if an account is found with the same email address. An equivalent role in Kernel is assigned to the user based on their Vercel team role. Roles and Vercel team membership are automatically synced to Kernel. ### Connecting to your Vercel projects -Once you've installed Kernel, you will need to connect it to one of your Vercel projects. Generally, a Kernel organization should be connected to a single Vercel project. +Once you've installed Kernel, you will need to connect it to one of your Vercel projects. Generally, a Kernel Organization should be connected to a single Vercel project. Connecting to a project will automatically sync your Kernel API key to your Vercel project's environment variables. The following environment variable will be automatically synced to all environments: @@ -99,12 +99,11 @@ For more examples and features like profiles, stealth mode, and live view, check The pricing for plans purchased through the Vercel Marketplace is the same as the pricing when purchased directly through Kernel. For more information on Kernel's pricing and available plans, see the [Pricing page](https://onkernel.com/#pricing). -Billing and usage data are reported hourly to Vercel and can be viewed directly in the Vercel Dashboard. +Billing and usage data are reported hourly to Vercel and can be viewed directly in the Vercel Dashboard. Billing plan management can be done through both the Vercel Dashboard and the Kernel Dashboard. ### Limitations The following limitations apply when using Kernel through the Vercel Marketplace: -- Vercel-managed Organizations cannot be deleted from the Kernel Dashboard, they can only be deleted by uninstalling the Kernel integration. -- Billing plan management can be done through both the Vercel Dashboard and the Kernel Dashboard. -- Existing Kernel organizations cannot be moved to be managed by the Kernel Vercel Integration. +- Vercel-managed Organizations cannot be deleted from the Kernel Dashboard, they can only be deleted by uninstalling the Kernel integration in Vercel. +- Existing Kernel Organizations cannot be moved to be managed by the Kernel Vercel Integration. From 256f00b208087cb09adc1a983ccd005362aaf9bd Mon Sep 17 00:00:00 2001 From: Catherine Jue Date: Mon, 20 Oct 2025 15:15:34 -0400 Subject: [PATCH 6/6] Add the blurb calling out individual browser frameworks to Vercel Marketplace guide --- integrations/vercel.mdx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/integrations/vercel.mdx b/integrations/vercel.mdx index 852e3ac..6c14316 100644 --- a/integrations/vercel.mdx +++ b/integrations/vercel.mdx @@ -7,6 +7,8 @@ description: "Integrate Kernel through the Vercel Marketplace" The Vercel Marketplace allows Vercel users to install and configure third-party services, like Kernel, directly from the Vercel dashboard. Kernel offers an [official integration](https://vercel.com/marketplace/kernel) that Vercel users can install to integrate Kernel cloud browsers into their Vercel projects. +Kernel works out of the box with every major agent and automation framework, including **Browser Use**, **Stagehand**, **Playwright**, **Puppeteer**, or **Computer Use** via **OpenAI**, **Anthropic**, and **Gemini**. + ### Installing the Kernel Integration {/* @@ -95,6 +97,11 @@ finally: For more examples and features like profiles, stealth mode, and live view, check out the [Browsers documentation](/browsers/create-a-browser). + + Check out our [integration guides](/integrations/overview) to learn how to use Vercel + Kernel with your preferred browser automation framework. + + + ### Pricing The pricing for plans purchased through the Vercel Marketplace is the same as the pricing when purchased directly through Kernel. For more information on Kernel's pricing and available plans, see the [Pricing page](https://onkernel.com/#pricing). @@ -105,5 +112,5 @@ Billing and usage data are reported hourly to Vercel and can be viewed directly The following limitations apply when using Kernel through the Vercel Marketplace: -- Vercel-managed Organizations cannot be deleted from the Kernel Dashboard, they can only be deleted by uninstalling the Kernel integration in Vercel. +- Vercel-managed Organizations cannot be deleted from the Kernel Dashboard. They can only be deleted by uninstalling the Kernel integration in Vercel. - Existing Kernel Organizations cannot be moved to be managed by the Kernel Vercel Integration.