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

# openMiniApp

> Open another Mini App

Opens another Mini App from within your Mini App.

## Usage

```ts theme={"system"}
import { sdk } from '@farcaster/miniapp-sdk'
 
// Open a Mini App using an embed URL
await sdk.actions.openMiniApp({
  url: 'https://www.bountycaster.xyz/bounty/0x983ad3e340fbfef785e0705ff87c0e63c22bebc4'
})
 
// Open a Mini App using a launch URL
await sdk.actions.openMiniApp({
  url: 'https://farcaster.xyz/miniapps/WoLihpyQDh7w/farville'
})
```

## Parameters

### domain

* **Type:** `string`

The domain of the Mini App to open.

### path (optional)

* **Type:** `string`

An optional path to append to the Mini App's home URL.

\##Options

```ts theme={"system"}
type OpenMiniAppOptions = {
  url: string
}
```

* `url`: The URL of the Mini App to open. This can be either:
  * A Mini App embed URL (e.g., `https://example.com/specific-page`)
  * A Mini App launch URL (e.g., `https://farcaster.xyz/miniapps/[id]/[name]`)

## Return Value

`Promise<void>`
The promise resolves when navigation is successful. If navigation fails, the promise will be rejected with an error.

## Error Handling

Always await the `openMiniApp` call and handle potential errors:

```ts theme={"system"}
import { sdk } from '@farcaster/miniapp-sdk'
 
try {
  await sdk.actions.openMiniApp({
    url: 'https://example.com/miniapp'
  })
  // Navigation successful - your app will close
} catch (error) {
  console.error('Failed to open Mini App:', error)
  // Handle the error - your app remains open
}
```

## Referrer Information

When a Mini App is opened using `openMiniApp`, the target app receives a special location context with referrer information:

```ts theme={"system"}
// In the target Mini App:
if (sdk.context.location?.type === 'open_miniapp') {
 console.log('Referred by:', sdk.context.location.referrerDomain)
 // e.g., "Referred by: yourminiapp.com"
}
```

## Use Cases

### Hub or Portfolio Apps

Create a central hub that showcases multiple Mini Apps:

```ts theme={"system"}
const miniApps = [
  { name: 'Farville', url: 'https://farcaster.xyz/miniapps/WoLihpyQDh7w/farville' },
  { name: 'Bountycaster', url: 'https://www.bountycaster.xyz' },
  { name: 'Yoink', url: 'https://yoink.party/framesV2/' }
]
 
function MiniAppHub() {
  const handleOpenApp = async (url: string) => {
    try {
      await sdk.actions.openMiniApp({ url })
    } catch (error) {
      console.error('Failed to open app:', error)
    }
  }
 
  return (
    <div>
      {miniApps.map(app => (
        <button key={app.name} onClick={() => handleOpenApp(app.url)}>
          Open {app.name}
        </button>
      ))}
    </div>
  )
}
```

## Referral Systems

Implement referral tracking between Mini Apps:

```ts theme={"system"}
// In the source Mini App
const referralUrl = 'https://partner-app.com/campaign?ref=myapp'
await sdk.actions.openMiniApp({ url: referralUrl })
 
// In the target Mini App
if (sdk.context.location?.type === 'open_miniapp') {
  // Track the referral
  analytics.track('referral_received', {
    referrer: sdk.context.location.referrerDomain,
    campaign: new URL(window.location.href).searchParams.get('ref')
  })
}
```

## Notes

* This will prompt the user to open the new app
* The current Mini App will be closed when the new app is opened
* There is no way to navigate back to the original app
* The opened Mini App will receive a `location.type` of `'open_miniapp'` with a `referrerDomain` indicating where the user came from
