# DApp Provider Guide

This guide provides essential information for dApp providers seeking to integrate their applications with Ledger Enterprise.&#x20;

## 1. Ensure backend compatibility with Ledger Enterprise

To enable your Decentralized Application (dApp) to connect and interact with Ledger Enterprise wallets when accessed through the Ledger Enterprise Web app's built-in dApp browser, a specific implementation is required.

#### **What is the dApp Browser and why is it essential ?**

The dApp Browser acts as a crucial communication layer, allowing your dApp to interact directly with a user's Ledger hardware device via the Ledger Enterprise Web app. When your dApp runs within the dApp browser, it needs a standardized way to:

* **Discover and connect** 🤝 to the Ledger hardware wallet.
* **Request actions** ✍️ from the Ledger device, such as fetching account addresses or signing transactions.
* **Receive responses** and transaction confirmations securely from the Ledger device.

Most dApps communicate with wallets using the **EIP-1193** interface. The Ledger Enterprise dApp browser ensures that your dApp's EIP-1193 requests are correctly translated and routed to communicate with the Ledger device itself.

This integration is key to:

* Initiating secure connections with Ledger Enterprise wallets.
* Enabling a smooth and secure user experience for Ledger users.
* Prompting users for transaction confirmations directly on their Ledger device.

#### **Example repository**

For a practical implementation demonstrating the necessary setup for Ledger compatibility, especially when using popular libraries like `wagmi` or `viem` ,please refer to our example repositories:&#x20;

{% embed url="<https://github.com/LedgerHQ/iframe-provider-example-wagmi/blob/master/README.md>" %}

{% embed url="<https://github.com/LedgerHQ/iframe-provider-example-viem/blob/master/README.md>" %}

## 2. Ensure UX/UI compatibility with Ledger Enterprise

Since the dApp is embedded within the Ledger Enterprise web app, most often some UX adjustments are needed compared to the dApp provider’s standard dApp. Default guidelines:

* **Remove any button to connect wallet.** The Ledger Enterprise app already includes a button to connect wallet in the top-right corner, so an additional one isn’t needed.
* **Reduce top and bottom margins.** Since the dApp is embedded in a limited space, the large blank margins (especially at the top and bottom) are unnecessary. Please minimize them to optimize vertical space.
* **Remove fee estimations.** Fee estimates are already computed at the moment of request creation (with a built-in buffer). The dApp shouldn’t display its own estimations.
* **Hide network selection.** The Ledger Enterprise app only supports dApps on the Ethereum ecosystem, so network switching options should not be displayed.

## 3. Building your dApp manifest

After successfully implementing the dApp provider, you are ready to prepare your dApp for testing and integration within the Ledger Enterprise environment.

To facilitate testing and formal integration, you must provide a dApp Manifest file. This JSON-formatted file contains essential information about your dApp, its capabilities, and its integration requirements.

Please review and, if necessary, edit your manifest file as described below to ensure it meets Ledger Enterprise specifications.

**Example Manifest (JSON format) for the “kiln” dApp:**

```json
{
  "id": "kiln",
  "name": "kiln - ETH staking",
  "url": "https://dapp-browser.apps.ledger.com/",
  "params": {
    "dappUrl": "https://ledger-vault-eth-dapp.kiln.fi/",
    "networks": [
      {
       "currency": "ethereum",
       "chainID": 1,
       "nodeURL": "https://eth-dapps.api.live.ledger.com"
      }
    ]
  },
  "homepageUrl": "https://www.kiln.fi/",
  "icon": "https://cdn.live.ledger.com/icons/platform/kiln.png",
  "platform": "all",
  "apiVersion": "^2.0.0",
  "manifestVersion": "2",
  "branch": "stable",
  "categories": ["staking", "defi"],
  "currencies": ["ethereum"],   
  "content": {
    "shortDescription": {
        "en": "Stake 32 ETH multiples."
    },
    "description": {
      "en": "Stake 32 ETH multiples to earn rewards."
    }
  },
  "permissions": [],
  "domains": ["https://"]        
}
```

<table><thead><tr><th width="156">Field</th><th width="482">Description</th><th width="128">Type</th></tr></thead><tbody><tr><td><code>id</code></td><td>The identification of your dApp. Must be in lowercase.</td><td>String</td></tr><tr><td><code>name</code></td><td>The name of your dApp. Displayed in the UI</td><td>String</td></tr><tr><td><code>url</code></td><td>The Ledger dApp browser URL used. <br>Always “https://dapp-browser.apps.ledger.com/”.</td><td>String</td></tr><tr><td><code>params</code></td><td><code>dappURL</code> is the url of your dApp.<br><br><code>networks</code> is the list of networks supported by your dApp, Ethereum and all EVM-compatible networks supported by Ledger Enterprise can be addressed via dApp.<br>The nodeURL param will be set by Ledger in prod to use your node, for testing purposes, you can replace it with your own.</td><td>Object</td></tr><tr><td><code>homepageUrl</code></td><td>This is for information only. It is is non-critical.</td><td>String</td></tr><tr><td><code>icon</code></td><td>A link to the icon displayed in Ledger UI. Will be hosted on Ledger CDN before being released in production. Recommended format: PNG, 120x120 pixels.</td><td>URL</td></tr><tr><td><code>platform</code></td><td>To set the platform (desktop, mobile, iOS, Android) on which your service is available. Default value: “all”.</td><td>String</td></tr><tr><td><code>apiVersion</code></td><td>The API version. By default “^2.0.0”.</td><td>String</td></tr><tr><td><code>manifestVersion</code></td><td>The manifest version. By default should be “2”.</td><td>String</td></tr><tr><td><code>branch</code></td><td>The specific branch used by Ledger to deploy the changes.<br>Can take the values <code>stable</code> ,<code>experimental</code>, <code>debug</code>, <code>soon</code>.<br>By default, you should set it to <code>stable</code>. The value <code>soon</code> will mark your app as “Coming soon” and it won’t be usable.</td><td>String</td></tr><tr><td><code>categories</code></td><td>A JSON array of metadata information about your dApp. For instance: [“staking”,“defi” ]. You can add as many as you want. Will be used for filtering in the future.</td><td>List(String)</td></tr><tr><td><code>currencies</code></td><td>A JSON array of the currency/network used by your dDApp.<br>For instance [“ethereum”,”polygon”].<br>Leave blank if the App does not require any currency.</td><td>List(String)</td></tr><tr><td><code>content</code></td><td>A description of your service. It will be displayed on the entry card of your dApp.</td><td>L18n strings</td></tr><tr><td><code>permissions</code></td><td>Leave empty for now.</td><td>List(string)</td></tr><tr><td><code>domains</code></td><td>List of allowed domains to navigate to, if a domain doesn’t match it will open in the default browser.<br>By default [“http://”, “https://“]</td><td>List(string)</td></tr></tbody></table>

## 4. Clear signing your dApp

To ensure security and transparency for institutional clients, Ledger Enterprise requires Clear Signing for all dApp interactions. This allows users to verify transaction details in human-readable format on their Ledger device rather than "Blind Signing" raw data.

How to Enable It: Unlike the public Ledger consumer ecosystem (more details [here](https://developers.ledger.com/docs/clear-signing/overview)), Ledger Enterprise uses an internal registry. You must provide the Ledger Enterprise team with the following details to Clear sign your dApp:

* Smart Contract Addresses used by your dApp.
* Functions & methods used by your dApp.

Once communicated, our team will ensure all interactions are decoded and displayed clearly on the Ledger device.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.enterprise.ledger.com/help-center/web3-defi-and-nft/defi/ledger-enterprise-dapps/dapp-provider-guide.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
