> ## Documentation Index
> Fetch the complete documentation index at: https://tbd-6fc993ce-cj-profile-state.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Pricing & Limits

export const PricingCalculator = () => {
  const planPrices = {
    free: 0,
    hobbyist: 30,
    startup: 200
  };
  const usagePrices = 0.0000166667;
  const getInitialState = () => {
    if (typeof window === 'undefined') {
      return {
        plan: 'free',
        headless: true,
        avgSessionLength: 30,
        numSessions: 100
      };
    }
    const params = new URLSearchParams(window.location.search);
    return {
      plan: params.get('plan') || 'free',
      headless: params.get('headless') === 'false' ? false : true,
      avgSessionLength: parseInt(params.get('length')) || 30,
      numSessions: parseInt(params.get('sessions')) || 100
    };
  };
  const initialState = getInitialState();
  const [plan, setPlan] = useState(initialState.plan);
  const [headless, setHeadless] = useState(initialState.headless);
  const [avgSessionLength, setAvgSessionLength] = useState(initialState.avgSessionLength);
  const [numSessions, setNumSessions] = useState(initialState.numSessions);
  const [flash, setFlash] = useState(false);
  const prevPriceRef = useRef(null);
  let price = planPrices[plan];
  let usageCost = 0;
  if (headless) {
    usageCost += usagePrices * 1 * numSessions * avgSessionLength;
  } else {
    usageCost += usagePrices * 8 * numSessions * avgSessionLength;
  }
  let includedUsageCredits = 5;
  if (plan === 'hobbyist') {
    includedUsageCredits = 10;
  } else if (plan === 'startup') {
    includedUsageCredits = 50;
  }
  if (usageCost > includedUsageCredits) {
    price += Math.max(0, usageCost - includedUsageCredits);
  }
  useEffect(() => {
    const prev = prevPriceRef.current;
    if (prev !== null && (prev.usageCost !== usageCost || prev.includedUsageCredits !== includedUsageCredits || prev.price !== price)) {
      setFlash(true);
      const t = setTimeout(() => setFlash(false), 300);
      return () => clearTimeout(t);
    }
    prevPriceRef.current = {
      usageCost,
      includedUsageCredits,
      price
    };
  }, [usageCost, includedUsageCredits, price]);
  useEffect(() => {
    if (typeof window === 'undefined') return;
    const params = new URLSearchParams();
    params.set('plan', plan);
    params.set('headless', headless.toString());
    params.set('length', avgSessionLength.toString());
    params.set('sessions', numSessions.toString());
    const newUrl = `${window.location.pathname}?${params.toString()}`;
    window.history.replaceState({}, '', newUrl);
  }, [plan, headless, avgSessionLength, numSessions]);
  const labelStyle = {
    fontWeight: 600,
    fontSize: '0.875rem',
    minWidth: '10rem',
    flexShrink: 0,
    maxWidth: '10rem'
  };
  const rowStyle = {
    display: 'flex',
    alignItems: 'center',
    gap: '0.5rem',
    minHeight: '2.25rem'
  };
  const inputStyle = {
    minWidth: 0,
    flex: 1,
    maxWidth: '100%',
    boxSizing: 'border-box',
    background: 'transparent'
  };
  const numberInputStyle = {
    borderBottom: '1px solid #7c3aed',
    textAlign: 'right'
  };
  const selectStyle = {
    ...inputStyle,
    appearance: 'none',
    backgroundImage: `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='%23374151'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 9l-7 7-7-7'/%3E%3C/svg%3E")`,
    backgroundRepeat: 'no-repeat',
    backgroundPosition: 'right 0.5rem center',
    backgroundSize: '0.75rem',
    paddingRight: '1.5rem'
  };
  return <Columns cols={2}>
            <Card title="Controls" icon="calculator">
                <div style={rowStyle}>
                    <label style={labelStyle}>Plan</label>
                    <select style={selectStyle} value={plan} onChange={e => setPlan(e.target.value)}>
                        <option value="free">Free</option>
                        <option value="hobbyist">Hobbyist</option>
                        <option value="startup">Startup</option>
                    </select>
                </div>
                <div style={rowStyle}>
                    <label style={labelStyle}>Session length (seconds)</label>
                    <input type="number" style={{
    ...inputStyle,
    ...numberInputStyle
  }} value={avgSessionLength} onChange={e => setAvgSessionLength(parseInt(e.target.value))} />
                </div>
                <div style={rowStyle}>
                    <label style={labelStyle}>Number of sessions</label>
                    <input type="number" style={{
    ...inputStyle,
    ...numberInputStyle
  }} value={numSessions} onChange={e => setNumSessions(parseInt(e.target.value))} />
                </div>
                <div style={rowStyle}>
                    <button class="btn btn-primary dark:text-white" style={{
    padding: '0.25rem 0.5rem',
    borderRadius: '0.375rem',
    border: `1px solid ${!headless ? '#7c3aed' : 'var(--btn-border)'}`,
    fontSize: '0.875rem',
    background: !headless ? 'var(--btn-selected-bg)' : undefined
  }} onClick={() => setHeadless(false)}>Headful</button>
                    <button class="btn btn-primary dark:text-white" style={{
    padding: '0.25rem 0.5rem',
    borderRadius: '0.375rem',
    border: `1px solid ${headless ? '#7c3aed' : 'var(--btn-border)'}`,
    fontSize: '0.875rem',
    background: headless ? 'var(--btn-selected-bg)' : undefined
  }} onClick={() => setHeadless(true)}>Headless</button>
                </div>
                <div style={rowStyle}><span style={{
    width: '100%',
    fontSize: '0.8rem',
    fontStyle: 'italic'
  }}>${headless ? usagePrices.toFixed(8) : (usagePrices * 8).toFixed(8)}/second</span></div>
            </Card>
            <Card title="Price" icon="circle-dollar">
                <div style={rowStyle}><span style={labelStyle}>Base plan:</span> <span style={{
    background: flash ? '#e9d5ff' : 'transparent',
    transition: 'background 0.5s ease',
    marginLeft: 'auto'
  }}>${planPrices[plan].toFixed(2)}</span></div>
                <div style={rowStyle}><span style={labelStyle}>Usage:</span> <span style={{
    background: flash ? '#e9d5ff' : 'transparent',
    transition: 'background 0.5s ease',
    marginLeft: 'auto'
  }}>+${usageCost.toFixed(2)}</span></div>
                <div style={rowStyle}><span style={labelStyle}>Free credits:</span> <span style={{
    background: flash ? '#e9d5ff' : 'transparent',
    transition: 'background 0.5s ease',
    marginLeft: 'auto'
  }}>-${includedUsageCredits.toFixed(2)}</span></div>
                <div style={rowStyle}><span style={labelStyle}>Total cost:</span> <span style={{
    background: flash ? '#e9d5ff' : 'transparent',
    transition: 'background 0.5s ease',
    marginLeft: 'auto'
  }}>${price.toFixed(2)}</span></div>
            </Card>
        </Columns>;
};

With Kernel, you only pay for what you use and nothing more. You don't pay for idle time thanks to [Standby Mode](/browsers/standby), and you're never charged for proxies. Our goal is to be cost-effective, scalable, and transparent.

## Pricing

| Browser type | Memory | Price (\$/sec) |
| ------------ | ------ | -------------- |
| Headless     | 1 GB   | 0.0000166667   |
| Headful      | 8 GB   | 0.0001333336   |

### Pricing calculator

<PricingCalculator />

## Managed infrastructure

| Feature                         | Developer (free + usage) | Hobbyist (\$30 / mo + usage) | Start-Up (\$200 / mo + usage) | Enterprise   |
| ------------------------------- | ------------------------ | ---------------------------- | ----------------------------- | ------------ |
| Included credits / mo           | \$5                      | \$10                         | \$50                          | Custom       |
| Extended browser timeouts       | ✅                        | ✅                            | ✅                             | ✅            |
| Browser live view               | ✅                        | ✅                            | ✅                             | ✅            |
| Configurable browser viewports  | ✅                        | ✅                            | ✅                             | ✅            |
| Managed stealth mode            | ✅                        | ✅                            | ✅                             | ✅            |
| Computer controls API           | ✅                        | ✅                            | ✅                             | ✅            |
| Browser replays                 | ❌                        | 7 days                       | 30 days                       | Custom       |
| Browser profiles                | ❌                        | ✅                            | ✅                             | ✅            |
| Managed auth profiles           | ❌                        | ✅                            | ✅                             | ✅            |
| File uploads & downloads        | ❌                        | ✅                            | ✅                             | ✅            |
| Configurable browser extensions | ❌                        | ❌                            | ✅                             | ✅            |
| Configurable & BYO proxies      | ❌                        | ❌                            | ✅                             | ✅            |
| Browser pools                   | ❌                        | ❌                            | ✅                             | ✅            |
| Support                         | Discord                  | Discord                      | Email                         | Shared Slack |
| SOC2 compliance                 | ✅                        | ✅                            | ✅                             | ✅            |
| HIPAA compliance (BAA)          | ❌                        | ❌                            | ❌                             | ✅            |

> Note: Included monthly credits apply to usage costs only.

## Reserved browsers (browser pools)

With Browser Pools, you pay the standard usage-based price per GB-second while browsers run, plus a small disk space charge when they are idle.

|                                 | Headful     | Headless   |
| ------------------------------- | ----------- | ---------- |
| Disk price per GB/hour          | \$0.001     | \$0.001    |
| Disk allocation per browser     | 4 GB        | 1 GB       |
| Example: 50 browsers idle/month | \$144/month | \$36/month |

> Note: Disk space charges are waived for Enterprise plan customers.

## Managed Auth

Managed Auth is included on all paid plans with no per-connection fees. Under the hood, it uses browser sessions to log in and keep your sessions fresh—these count toward your browser usage and concurrency like any other browser session.

Auth sessions are fast (typically 5-30 seconds each). Kernel monitors session health and re-authenticates automatically when sessions expire—most stay valid for days. For example, keeping 100 auth connections logged in typically costs less than \$5/month in browser usage.

## Concurrency limits

| Feature                                                      | Developer (free + usage) | Hobbyist (\$30 / mo + usage) | Start-Up (\$200 / mo + usage) | Enterprise |
| ------------------------------------------------------------ | ------------------------ | ---------------------------- | ----------------------------- | ---------- |
| Reserved browsers ([browser pools](/browsers/scaling/pools)) | 0                        | 0                            | 100                           | Custom     |
| On-demand browsers                                           | 5                        | 10                           | 50                            | Custom     |
| Invocations                                                  | 5                        | 10                           | 50                            | Custom     |
| Invocations (per-app)                                        | 5                        | 10                           | 20                            | Custom     |
| Managed auth health check interval                           | N/A                      | 1 hour minimum               | 20 minutes minimum            | Custom     |

> Note: Limits are org-wide by default unless stated otherwise. `Managed auth profiles` refer to the number of active auth connections that Kernel maintains using your stored [Credentials](/profiles/credentials) or [1Password connection](/integrations/1password).
