> ## 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.

# What is Uplink?

> A mobile device automation platform for testing, AI agents, and browser automation on real mobile devices

Uplink is a **mobile device automation platform** that enables you to control and automate real mobile browsers programmatically. Similar to how tools like Puppeteer and Playwright automate Chrome browsers, Uplink brings that same level of control to mobile devices.

## How it works

Uplink provides a familiar API interface similar to Puppeteer and Playwright, but instead of controlling Chrome on a desktop, you're controlling real mobile browsers on iOS and Android devices.

```typescript theme={null}
import uplink from '@uplink-code/uplink'

// Connect to an Uplink server
const session = await uplink.session('<project-api-key>', {
  include: { ecdsa: true, ecdh: true }
})
const client = await uplink.client.fromSession(session)

// Launch a browser on a mobile device
const browser = await client.launch()
const page = await browser.newPage()

// Automate like you would with Puppeteer
await page.goto('https://example.com')
await page.click('#submit-button')
const title = await page.evaluate(() => document.title)
```

### AI-Powered Automation

Uplink also supports AI-powered browser automation with natural language instructions:

```typescript theme={null}
import uplink from '@uplink-code/uplink'
import ai from '@uplink-code/ai'

const agent = ai.createAgent({
  provider: 'anthropic',
  options: { apiKey: process.env.ANTHROPIC_API_KEY }
})

const session = await uplink.session('<project-api-key>', {
  include: { ecdsa: true, ecdh: true }
})
const client = await uplink.client.fromSession(session, { agent })
const browser = await client.launch()
const page = await browser.newPage()

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

// Use natural language to control the browser
await page.act('Click the sign up button')
await page.act('Fill in the email field with john@example.com')

// Extract structured data with type safety
import { z } from 'zod'

const result = await page.extract(
  'Get the product name and price',
  z.object({
    name: z.string(),
    price: z.number()
  })
)
```

## Why Uplink?

### Real mobile browsers

Test on actual mobile devices, not emulators or simulators. Get authentic behavior, accurate rendering, and real-world performance.

### Familiar API

If you've used Puppeteer or Playwright, you already know how to use Uplink. The API is designed to feel familiar while providing mobile-specific capabilities.

### Real device automation

Real users on real devices mean authentic browser behavior. Users handle their own authentication.

### Flexible integration

Choose the integration method that works for your use case:

* **SDK integration**: Add Uplink to your own mobile app
* **Connect app**: Use our ready-made app with QR code access

### AI automation (optional)

Use AI to control browsers with natural language instructions. Perfect for dynamic UIs, complex workflows, and rapid prototyping without writing selectors.

## Use cases

<CardGroup cols={2}>
  <Card title="AI Agents" icon="brain">
    Build autonomous agents that interact with mobile apps and websites using natural language instructions
  </Card>

  <Card title="Automated testing" icon="vial">
    Test your mobile web applications on real devices with automated workflows
  </Card>

  <Card title="Data extraction" icon="database">
    Extract and process data from mobile-optimized websites with type-safe AI extraction
  </Card>

  <Card title="Post-authentication automation" icon="shield-check">
    Wait for users to authenticate themselves, then automate complex workflows in authenticated sessions
  </Card>

  <Card title="Form automation" icon="file-lines">
    Fill out complex forms intelligently using AI to understand field labels and requirements
  </Card>

  <Card title="Dynamic UI testing" icon="wand-magic-sparkles">
    Test apps with changing selectors and dynamic content using AI-powered interactions
  </Card>
</CardGroup>

## Next steps

<CardGroup cols={2}>
  <Card title="Integration options" icon="puzzle-piece" href="/introduction/integration-options">
    Learn about SDK integration vs. the Connect app
  </Card>

  <Card title="Quickstart" icon="rocket" href="/introduction/quickstart">
    Get started with Uplink in minutes
  </Card>
</CardGroup>
