> ## Documentation Index
> Fetch the complete documentation index at: https://docs.uplink.build/llms.txt
> Use this file to discover all available pages before exploring further.

# Browser

> API reference for the Browser class

The `Browser` class represents a browser instance running on a mobile device. It provides methods for managing pages (tabs) within the browser.

## Page operations

### `browser.newPage()`

Creates a new page (tab) in the browser.

```typescript theme={null}
browser.newPage(): Promise<Page>
```

**Returns:** `Promise<Page>` - New page instance

**Example:**

```typescript theme={null}
const browser = await client.launch()
const page = await browser.newPage()

await page.goto('https://example.com')
```

### `browser.pages()`

Lists all pages currently open in the browser.

```typescript theme={null}
browser.pages(): Promise<Page[]>
```

**Returns:** `Promise<Page[]>` - Array of page instances

**Example:**

```typescript theme={null}
const pages = await browser.pages()

console.log(`${pages.length} pages open`)

for (const page of pages) {
  const url = await page.url()
  console.log('Page URL:', url)
}
```

## Browser management

### `browser.close()`

Closes the browser and all its pages.

```typescript theme={null}
browser.close(): Promise<void>
```

**Returns:** `Promise<void>`

**Example:**

```typescript theme={null}
await browser.close()
console.log('Browser closed')
```

<Tip>
  Always close browsers when done to free up device resources. Closing a browser automatically closes all its pages.
</Tip>

## Properties

### `browser.handle`

The unique handle identifier for this browser instance. Use this handle to reconnect to the browser later.

```typescript theme={null}
browser.handle: string
```

**Example:**

```typescript theme={null}
const browser = await client.launch()
console.log('Browser handle:', browser.handle)

// Save handle for later reconnection
const handle = browser.handle

// Later, reconnect to the same browser
const sameBrowser = await client.connect(handle)
```

## Complete examples

### Basic browser usage

```typescript theme={null}
const session = await uplink.session('<project-api-key>', {
  include: { ecdsa: true, ecdh: true }
})
const client = await uplink.client.fromSession(session)
const browser = await client.launch()

try {
  // Create a page and navigate
  const page = await browser.newPage()
  await page.goto('https://example.com')

  console.log('Page loaded successfully')

  await page.close()
} finally {
  // Always close the browser
  await browser.close()
}
```

### Multiple pages

```typescript theme={null}
const browser = await client.launch()

// Open multiple pages
const page1 = await browser.newPage()
const page2 = await browser.newPage()
const page3 = await browser.newPage()

// Navigate in parallel
await Promise.all([
  page1.goto('https://example.com'),
  page2.goto('https://google.com'),
  page3.goto('https://github.com')
])

// Get page titles
const titles = await Promise.all([
  page1.evaluate(() => document.title),
  page2.evaluate(() => document.title),
  page3.evaluate(() => document.title)
])

console.log('Page titles:', titles)

// Close all pages
const pages = await browser.pages()
await Promise.all(pages.map(p => p.close()))

await browser.close()
```

### Switching between pages

```typescript theme={null}
const browser = await client.launch()

const page1 = await browser.newPage()
const page2 = await browser.newPage()

await page1.goto('https://example.com')
await page2.goto('https://google.com')

// Show page1 (bring to foreground)
await page1.show()
console.log('Showing page 1')

// Wait a bit
await new Promise(resolve => setTimeout(resolve, 2000))
await page1.hide()

// Switch to page2
await page2.show()
console.log('Showing page 2')

await browser.close()
```

### Browser reconnection

```typescript theme={null}
const session = await uplink.session('<project-api-key>', {
  include: { ecdsa: true, ecdh: true }
})
const client = await uplink.client.fromSession(session)

// Launch and save handle
const browser = await client.launch()
const handle = browser.handle
console.log('Browser handle:', handle)

const page = await browser.newPage()
await page.goto('https://example.com')

// Later, reconnect to the same browser
const reconnectedBrowser = await client.connect(handle)

// Browser state is preserved
const pages = await reconnectedBrowser.pages()
console.log(`Reconnected browser has ${pages.length} page(s)`)

const existingPage = pages[0]
const url = await existingPage.url()
console.log('Page still on:', url)

await reconnectedBrowser.close()
```

## Related

<CardGroup cols={2}>
  <Card title="Page" icon="window-maximize" href="/api-reference/page/overview">
    Page automation methods
  </Card>

  <Card title="Client" icon="plug" href="/api-reference/client">
    Launching browsers
  </Card>

  <Card title="ClientWorker" icon="mobile" href="/api-reference/client-worker">
    Device-level browser operations
  </Card>

  <Card title="Core concepts" icon="book" href="/fundamentals/core-concepts">
    Architecture overview
  </Card>
</CardGroup>
