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

# Link Mode

AppKit Link Mode is a low latency mechanism for transporting One-Click Auth requests and session requests over universal links, reducing the need for a WebSocket connection with the Relay. This significantly enhances the user experience when connecting native dApps to native wallets by reducing the latency associated with networking connections, especially when the user has an unstable internet connection.

<Frame>
  <video controls autoPlay src="https://mintcdn.com/reown-5552f0bb/EKbxEvu_zecC7Jp2/images/link-mode.mp4?fit=max&auto=format&n=EKbxEvu_zecC7Jp2&q=85&s=f77b6cc0aabaf88c859f789b41409760" height="400" width="300" data-path="images/link-mode.mp4" />
</Frame>

<Warning>
  For Link Mode to fully work, you also need to enable the [One-Click Auth (SIWE)](./1ca) feature.

  This feature is compatible only with EVM blockchains, so if you decide to include non-EVM blockchains Link Mode mechanism is going to be disabled internally.
</Warning>

### How to enable it:

To support link mode, configure your Metadata with a **valid universal link** and set the `linkMode` property to `true`:

```ts {8,9} theme={null}
const metadata = {
  name: "AppKit App",
  description: "AppKit for React Native",
  url: "https://reown.com",
  icons: ["https://avatars.githubusercontent.com/u/179229932"],
  redirect: {
    native: "YOUR_APP_SCHEME://",
    universal: "https://example.com/example_dapp",
    linkMode: true,
  },
};
```

### How does it look without Link Mode?

<Frame>
  <video controls autoPlay src="https://mintcdn.com/reown-5552f0bb/pFjT1B7UtTo7EOJK/images/without-link-mode.mp4?fit=max&auto=format&n=pFjT1B7UtTo7EOJK&q=85&s=abbf84408a8bd3c57b63fd05e230aefa" height="400" width="300" data-path="images/without-link-mode.mp4" />
</Frame>

### Platform specifics:

<Tabs>
  <Tab title="iOS">
    To enable universal links for your app, refer to [React Native Documentation](https://reactnative.dev/docs/linking?syntax=ios#enabling-deep-links).<br />

    After following the steps provided in the official guide:

    1. Ensure that you handle incoming Universal Links in the your `AppDelegate.mm` file.

    ```swift theme={null}
    #import <React/RCTLinkingManager.h>

    // Enable deeplinks
    - (BOOL)application:(UIApplication *)application
       openURL:(NSURL *)url
       options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
    {
      return [RCTLinkingManager application:application openURL:url options:options];
    }

    // Enable Universal Links
    - (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity
     restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
    {
     return [RCTLinkingManager application:application
                      continueUserActivity:userActivity
                        restorationHandler:restorationHandler];
    }
    ```

    2. Open your project in XCode and go to `Settings/Signing & Capabilities/Associated Domains` to add the new domain. After this, `your_project.entitlement` should look like this:

    ```xml theme={null}
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
      <key>com.apple.developer.associated-domains</key>
      <array>
        <string>applinks:example.com</string>
      </array>
    </dict>
    </plist>
    ```

    3. Update/Create your domain's `.well-known/apple-app-site-association` file accordingly.

    For more information about supporting universal links, visit the [Supporting associated domains](https://developer.apple.com/documentation/xcode/supporting-associated-domains?language=objc) page

    For a debugging guide, visit the [Debugging Universal Links](https://developer.apple.com/documentation/technotes/tn3155-debugging-universal-links) page.<br />
  </Tab>

  <Tab title="Android">
    Android Studio provides a tool to configure Universal Links easily, you can read the guide in [Android Documentation](https://developer.android.com/studio/write/app-link-indexing)

    After following the steps provided in the guide:

    1. Ensure that your Universal Link is properly configured in your app's `AndroidManifest.xml` file with the `autoVerify` set to `true`. It should look similar to this:

    ```xml theme={null}
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />

      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />

      <data android:scheme="https" />
      <data android:host="example.com" />
      <data android:pathPattern="/example_wallet" />
    </intent-filter>
    ```

    2. Update/Create your domains's `.well-known/assetlinks.json` file accordingly

    For more information on how to configure universal links for your app, refer to [Android Documentation](https://developer.android.com/studio/write/app-link-indexing).<br />
    For testing the configured universal link to app content check [this](https://developer.android.com/training/app-links/deep-linking#testing-filters) documentation page.<br />
  </Tab>
</Tabs>

Once everything is properly configured, and the user connects with a Link Mode-supporting wallet using One-Click Auth, your dapp will send requests through it.
