> For the complete documentation index, see [llms.txt](/llms.txt).

# Allow automatic connections

You can authorize specific dapps or Snaps to automatically connect to your Snap, skipping the need for users to manually confirm a connection when the dapp or Snap calls [wallet_requestSnaps](/snaps/reference/snaps-api/wallet%5Frequestsnaps/). This is useful, for example, for [Snaps used by multiple dapps](#snap-used-by-multiple-dapps) or [Snaps installed from the Snaps directory](#snap-installed-from-the-snaps-directory).

## Steps[​](#steps "Direct link to Steps")

### 1. Add authorized dapps in `initialConnections`[​](#1-add-authorized-dapps-in-initialconnections "Direct link to 1-add-authorized-dapps-in-initialconnections")

Add an [initialConnections](/snaps/reference/permissions/#initial-connections) field in the Snap manifest file, specifying each dapp you want to allow to automatically connect. For example:

snap.manifest.json

```
"initialConnections": {
  "https://voyager-snap.linea.build": {}
}

```

important

`initialConnections` is not a replacement for [endowment:rpc](/snaps/reference/permissions/#endowmentrpc). `endowment:rpc` is still required to allow dapps or Snaps to call RPC methods of your Snap.

When testing, you can specify the local site. For example:

snap.manifest.json

```
"initialConnections": {
  "http://localhost:8000": {}
}

```

We recommend removing local sites before deploying your Snap to production.

### 2. Connect to the Snap from an authorized dapp[​](#2-connect-to-the-snap-from-an-authorized-dapp "Direct link to 2. Connect to the Snap from an authorized dapp")

When you visit a dapp specified in the Snap's `initialConnections`, and the dapp calls [wallet_requestSnaps](/snaps/reference/snaps-api/wallet%5Frequestsnaps/), if the Snap is already installed, the dapp connects immediately and can make further calls to the Snap. If the Snap is not installed, you see a confirmation to install the Snap.

Additionally, since the connection between the Snap and a dapp listed in `initialConnections`is automatic, calling [wallet_getSnaps](/snaps/reference/snaps-api/wallet%5Fgetsnaps/) from the dapp returns the Snap even if the dapp never called [wallet_requestSnaps](/snaps/reference/snaps-api/wallet%5Frequestsnaps/). This makes the flow of using the Snap from an authorized dapp completely seamless.

## Example[​](#example "Direct link to Example")

The following sample code, adapted from the [Linea Voyager Snap](https://github.com/Consensys/linea-voyager-snap) companion dapp, shows the flow of connecting to a Snap from a dapp authorized in `initialConnections`.

While the code is exactly the same as it would be without the dapp being listed in `initialConnections`, the comments show how the flow is different from the user's perspective.

The key is that calling [wallet_getSnaps](/snaps/reference/snaps-api/wallet%5Fgetsnaps/)from an authorized dapp when the Snap is already installed returns that Snap even if the dapp never explicitly connected to it by calling [wallet_requestSnaps](/snaps/reference/snaps-api/wallet%5Frequestsnaps/).

script.js

```
const snapId = 'npm:@myorg/mysnap'

// This function is called when the EIP-6963 process of finding MetaMask is successful.
const MetaMaskFound = async providerDetail => {
  const { provider } = providerDetail

  // This call returns the Snap ID if it is already installed.
  const snaps = await provider.request({
    method: 'wallet_getSnaps',
  })

  if (Object.keys(snaps).includes(snapId)) {
    // If we're here, the Snap is installed. We're good to go.
    return
  }

  // If we're here, the Snap is not installed. Let's install it.
  // Since the Snap is not installed, the user still sees a confirmation to install the Snap.
  try {
    const result = await provider.request({
      method: 'wallet_requestSnaps',
      params: {
        [snapId]: {},
      },
    })

    // If we're here, the Snap is installed, and the dapp is successfully connected to it.
  } catch (err) {
    // If we're here, something went wrong. For example, the user might have declined the Snap
    // installation confirmation.
  }
}

```

## When to use initial connections[​](#when-to-use-initial-connections "Direct link to When to use initial connections")

The following scenarios showcase `initialConnection`'s usefulness, in order from most to least useful:

#### Snap used by multiple dapps[​](#snap-used-by-multiple-dapps "Direct link to Snap used by multiple dapps")

This flow is as follows:

1. You build a Snap that can be used by multiple dapps, for example, a protocol Snap. You authorize an automatic connection to your Snap's companion dapp by listing it in `initialConnections`.
2. A user installs your Snap while interacting with a dapp that uses it.
3. The user lands on your Snap's companion dapp.
4. **The user can interact with the companion dapp without having to manually connect to the Snap.**

For even greater benefit, consider authorizing an automatic connection for some known dapps that interact with your Snap.

#### Snap installed from the Snaps directory[​](#snap-installed-from-the-snaps-directory "Direct link to Snap installed from the Snaps directory")

This flow is as follows:

1. You build a Snap that is only useful for one dapp, its companion dapp. You authorize an automatic connection to the companion dapp by listing it in `initialConnections`.
2. A user finds your Snap through the [Snaps directory](https://snaps.metamask.io) and installs it.
3. The user lands on your Snap's companion dapp.
4. **The user can interact with the companion dapp without having to manually connect to the Snap.**

#### Snap installed from your companion dapp[​](#snap-installed-from-your-companion-dapp "Direct link to Snap installed from your companion dapp")

This flow is as follows:

1. You build a Snap, and authorize an automatic connection to its companion dapp by listing the dapp in `initialConnections`.
2. A user discovers your Snap through its companion dapp.
3. The user must install the Snap, going through the normal flow.

In this case, adding the companion dapp to `initialConnections` is not useful.
