Skip to main content
Scrapybara is shutting down their virtual desktop and browser service on October 15, 2025. If you’re currently using Scrapybara for browser automation, Kernel is here to help you migrate seamlessly.

Key Concepts

FeatureScrapybaraKernel
Start Browserclient.start_browser()client.browsers.create()
Standby Modeinstance.pause() / instance.resume()Automatic standby mode
CDP URLinstance.get_cdp_url().cdp_urlReturns cdp_ws_url in create response
Live Viewinstance.get_stream_url().stream_urlReturns browser_live_view_url in create response
Stealth Mode❌ Not availableCreate browser with stealth: true
Replays❌ Not availableclient.browsers.replays.start() and client.browsers.replays.stop()
Save Authinstance.browser.save_auth(name="default")Create Profile. Then create browser with kernel.browsers.create(profile={"name": "profile1", "save_changes": True})

How to migrate

Basic Browser Creation

Scrapybara
from scrapybara import Scrapybara
from playwright.async_api import async_playwright

client = Scrapybara(api_key="your_api_key")
instance = client.start_browser(timeout_hours=1)
cdp_url = instance.get_cdp_url().cdp_url

async with async_playwright() as p:
    browser = await p.chromium.connect_over_cdp(cdp_url)
    page = browser.contexts[0].pages[0]
    await page.goto("https://example.com")
    await browser.close()

instance.stop()
Kernel
from kernel import Kernel
from playwright.async_api import async_playwright

client = Kernel(api_key="your_api_key")
kernel_browser = client.browsers.create(timeout_seconds=3600)
cdp_url = kernel_browser.cdp_ws_url

async with async_playwright() as p:
    browser = await p.chromium.connect_over_cdp(cdp_url)
    page = browser.contexts[0].pages[0]
    await page.goto("https://example.com")
    await browser.close()

await client.browsers.delete_by_id(kernel_browser.session_id)

Save & Reuse Authentication

Scrapybara
# First session - save auth
instance = client.start_browser()
# ... login to website via Playwright ...
auth_state = instance.browser.save_auth(name="my-login")
instance.stop()

# Second session - load auth
instance2 = client.start_browser()
instance2.browser.authenticate(auth_state_id=auth_state.auth_state_id)
# ... browser now has saved cookies ...
Kernel
# First session - save auth
profile = await client.profiles.create(name="my-login")
browser1 = await client.browsers.create(
    profile={"name": "my-login", "save_changes": True}
)
# ... login to website via Playwright ...
await client.browsers.delete_by_id(browser1.session_id)

# Second session - load auth
browser2 = await client.browsers.create(
    profile={"name": "my-login"}
)
# ... browser now has saved cookies ...

File Download

Scrapybara
instance = client.start_browser()
# ... trigger download in browser ...
# Then use file operations
downloaded_file = instance.file(command="read", path="/download/path")
Kernel
browser = await client.browsers.create()
# ... trigger download in browser via Playwright ...
# Then read from filesystem
file_response = await client.browsers.fs.read_file(
    browser.session_id,
    path="/tmp/downloads/file.pdf"
)
await file_response.write_to_file("local-file.pdf")

Long-Running Sessions

Scrapybara
# Pause/resume for long-running sessions
instance = client.start_browser(timeout_hours=24)
# ... do some work ...
instance.pause()  # Pause to save costs
# ... later ...
instance.resume()  # Resume work
Kernel
# Automatic standby mode + persistence
browser = await client.browsers.create(
    persistence={"id": "my-long-session"}
)
# ... do some work ...
# Browser enters standby mode between connections

# Later - reuse the exact browser instance with full state
browser2 = await client.browsers.create(
    persistence={"id": "my-long-session"}
)

Full API Comparison

FeatureScrapybaraKernel
Create Browserclient.start_browser()client.browsers.create()
Get CDP URLinstance.get_cdp_url().cdp_urlReturns cdp_ws_url in create response
Get Live Viewinstance.get_stream_url().stream_urlReturns browser_live_view_url in create response
Delete Browserinstance.stop()client.browsers.delete_by_id(session_id)
List Browsersclient.get_instances()client.browsers.list()
Save Auth Stateinstance.browser.save_auth(name="default")Create Profile. Then create browser with kernel.browsers.create(profile={"name": "profile1", "save_changes": True})
Load Auth Stateinstance.browser.authenticate(auth_state_id="xyz")kernel.browsers.create(profile={"name": "profile1"})
Pause/Resumeinstance.pause() / instance.resume()Automatic standby mode
Screenshotinstance.screenshot()Use Playwright or Puppeteer
Timeout Configtimeout_hours parametertimeout_seconds parameter
Stealth Mode❌ Not availableCreate browser with stealth: true
Headless Mode❌ Not availableCreate browser with headless: true
Session PersistenceAuth state onlyFull browser state via creating browser with persistence={"id": "persist-id"}
Video Replays❌ Not availableclient.browsers.replays.start() and client.browsers.replays.stop()
File Uploadinstance.upload()client.browsers.fs.upload() or Playwright
File DownloadVia browser, then instance.file()client.browsers.fs.read_file()
Process Controlinstance.bash()client.browsers.process.*
Proxy Support❌ Not availableCreate Proxy. Then create browser with client.browsers.create(proxy_id=proxy.id)

Need Help?

I