---
title: "1. Radix dApp Toolkit"
url: "https://radix.wiki/developers/frontend/01-radix-dapp-toolkit"
version: "1.4.1"
updated: 2026-08-11
last_verified: 2026-08-11
license: CC-BY-4.0
license_url: "https://creativecommons.org/licenses/by/4.0/"
---

# 1. Radix dApp Toolkit

|  |  |
| --- | --- |
| Key Library | [@radixdlt/radix-dapp-toolkit](https://www.npmjs.com/package/@radixdlt/radix-dapp-toolkit) |
| Scaffolding | `npx create-radix-app@latest` |

## Introduction

A Radix dApp consists of two layers: on-ledger [blueprints](/contents/tech/core-concepts/blueprints-and-packages) deployed as [Scrypto](/developers/scrypto/01-fundamentals) packages, and an off-ledger frontend that connects to the user's [Radix Wallet](/contents/tech/core-protocols/radix-wallet) to sign and submit transactions. The [Radix dApp Toolkit (RDT)](https://github.com/radixdlt/radix-dapp-toolkit) is the official TypeScript library that handles wallet connection, session management, data requests, and transaction submission. This guide covers integrating RDT into a web application.

## Project Setup

The fastest way to start is the official scaffolding tool:

```
npx create-radix-app@latest
```

This generates a project with RDT pre-configured, the Connect Button wired up, and example transaction code. Alternatively, add RDT to an existing project:

```
npm install @radixdlt/radix-dapp-toolkit
```

### Initialising the Toolkit

Create an RDT instance with your dApp's configuration:

```
import { RadixDappToolkit, RadixNetwork } from '@radixdlt/radix-dapp-toolkit'

const rdt = RadixDappToolkit({
  dAppDefinitionAddress: 'account_rdx...', // your dApp definition account
  networkId: RadixNetwork.Stokenet,         // or RadixNetwork.Mainnet
  applicationName: 'My dApp',
  applicationVersion: '1.0.0',
})
```

The `dAppDefinitionAddress` is a Radix account that you own, registered as your dApp's identity through the [Developer Console](https://console.radixdlt.com/) metadata settings. This is how the wallet identifies your application to the user.

## Wallet Connection & Authentication

RDT provides the **√ Connect Button**, a framework-agnostic web component that handles the full wallet connection flow:

```

```

When a user clicks the button, RDT coordinates with the [Radix Wallet Connector](https://chromewebstore.google.com/detail/radix-wallet-connector/bfeplaecgkoeckiidkgkmlllfbaanlkl) browser extension to establish a connection to the user's mobile wallet. The user authenticates using a **Persona** – a reusable identity that can share selected accounts and personal data with your dApp.

### Requesting Account Data

Configure what data your dApp needs at connection time:

```
import { DataRequestBuilder } from '@radixdlt/radix-dapp-toolkit'

rdt.walletApi.setRequestData(
  DataRequestBuilder.accounts().atLeast(1),
  DataRequestBuilder.persona().withProof(),
)
```

This asks the user to share at least one account address and a cryptographic proof of Persona ownership. For [ROLA (Radix Off-Ledger Authentication)](/developers/frontend/03-rola-authentication), provide a challenge generator that fetches a 32-byte hex challenge from your backend:

```
rdt.walletApi.provideChallengeGenerator(async () => {
  const res = await fetch('/api/auth/challenge')
  return (await res.json()).challenge
})
```

## Submitting Transactions

Radix transactions are built using [transaction manifests](/contents/tech/core-protocols/transaction-manifests) – a declarative syntax that describes what the transaction should do. Your dApp sends a manifest _stub_ to the wallet; the wallet completes it by adding fee payment and any user-specified assertions.

```
const result = await rdt.walletApi.sendTransaction({
  transactionManifest: `
    CALL_METHOD
      Address("component_rdx...")
      "buy_token"
      Decimal("100")
    ;
    CALL_METHOD
      Address("${accountAddress}")
      "deposit_batch"
      Expression("ENTIRE_WORKTOP")
    ;
  `,
})
```

The user reviews the transaction in their wallet – seeing exactly which assets move where – signs it, and the wallet submits it to the network. Your dApp receives a transaction hash that you can track via the [Gateway API](/contents/tech/core-protocols/radix-gateway-api).

### Reacting to Wallet Data

Subscribe to wallet state changes to update your UI in real time:

```
rdt.walletApi.walletData$.subscribe((walletData) => {
  const accounts = walletData.accounts
  // Update UI with connected accounts
})
```

## Maintenance Status (checked August 2026)

RDT is stable and still the correct library to build against, but it is no longer under active development. The last commit on [the toolkit's `main` branch](https://github.com/radixdlt/radix-dapp-toolkit/commits/main) and its most recent release, [v2.3.0](https://github.com/radixdlt/radix-dapp-toolkit/releases/tag/v2.3.0), are both dated 2 March 2026, and [npm `latest`](https://www.npmjs.com/package/@radixdlt/radix-dapp-toolkit) has not moved since. The repository is not archived and remains Apache-2.0. Frozen is not unused: the package drew [48,555 downloads](https://www.npmjs.com/package/@radixdlt/radix-dapp-toolkit) in the month to 9 August 2026, close to 12,000 a week, so the library every Radix front end depends on is being installed at scale while nobody is shipping to it. The stall is visible in the queue as well as the log — [pull request #326](https://github.com/radixdlt/radix-dapp-toolkit/pull/326), a community patch making the Radix Connect Relay server URL configurable, was opened on 24 March 2026 and has neither been reviewed nor closed since, which makes an unmerged contribution the most recent thing to happen to the repository. On 7 August 2026 the position was [stated directly in the Radix Developers channel](https://t.me/RadixDevelopers/65908): the [Radix Wallet](/contents/tech/core-protocols/radix-wallet) and [Gateway](/contents/tech/core-protocols/radix-gateway-api) are maintained on a volunteer basis with bug fixes only, pending a community decision on direction — the same maintenance mode the [Radix Foundation](/ecosystem/radix-foundation) entered in April 2026. The surrounding pieces are on the same footing: the [Wallet Connector extension](https://github.com/radixdlt/connector-extension) last took a commit on 17 April 2026, and the Gateway service itself released [v1.10.6](https://github.com/radixdlt/babylon-gateway/releases) on 7 April 2026. Which of these the community DAO picks up is one of the open [stewardship questions](/ideas/dao-steward-radix-wallet).

### What this means for the scaffolding

`npx create-radix-app@latest` still works, but it is older than it looks. The [package](https://www.npmjs.com/package/create-radix-app) was last published in December 2024; it does not contain the templates itself, but clones them with [degit](https://github.com/Rich-Harris/degit) from [radixdlt/official-examples](https://github.com/radixdlt/official-examples), whose last commit is January 2025. The dependency ranges are caret ranges (`@radixdlt/radix-dapp-toolkit: ^2.1.1`), so a fresh scaffold does install the current 2.3.0 — what is dated is the example code, not the version you get. In particular the templates predate the [subintent and pre-authorization](/contents/tech/core-concepts/subintents-and-pre-authorizations) support that landed in 2.3.0, so `sendPreAuthorizationRequest` appears in no generated project. Scaffold for the wiring, then read the current library API rather than the template's.

## Next Steps

- [Gateway SDK: Reading Ledger State](/developers/frontend/02-gateway-sdk) – read balances, component state, and transaction status from your front end

## External Links

- [Radix dApp Toolkit – GitHub](https://github.com/radixdlt/radix-dapp-toolkit)
- [@radixdlt/radix-dapp-toolkit – npm](https://www.npmjs.com/package/@radixdlt/radix-dapp-toolkit)
- [Building a Frontend dApp – Official Docs](https://docs.radixdlt.com/docs/building-a-frontend-dapp)
- [Run Your First Frontend dApp – Official Docs](https://docs.radixdlt.com/docs/learning-to-run-your-first-front-end-dapp)
- [Radix Wallet SDK – GitHub](https://github.com/radixdlt/wallet-sdk) (archived August 2024 – superseded by the [Radix dApp Toolkit](https://github.com/radixdlt/radix-dapp-toolkit); kept for historical reference)
