npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@cardano-foundation/cardano-connect-with-wallet

v0.2.22

Published

This package aims to provide useful hooks and React components to simplify the cardano dapp integration

Readme

Cardano Connect with Wallet - React

React hooks and components for connecting Cardano wallets to dApps. Supports desktop browser extensions and mobile native wallets with built-in CIP-8, CIP-30, CIP-45, and CIP-158 support.

🚀 Getting Started

npm i @cardano-foundation/cardano-connect-with-wallet

For live examples see the storybook playground.

🎨 Components

ConnectWalletButton

A single button that opens a dropdown listing available wallets. On mobile it handles deep links and app store redirects automatically.

import { ConnectWalletButton } from '@cardano-foundation/cardano-connect-with-wallet';

<ConnectWalletButton
  supportedWallets={['Eternl', 'Nami', 'Yoroi', 'Vespr', 'Begin']}
  onConnect={(walletName) => console.log('connected:', walletName)}
  onDisconnect={() => console.log('disconnected')}
/>

Props

| Prop | Type | Default | Description | |---|---|---|---| | label | string \| ReactNode | 'Connect Wallet' | Button label when no wallet is connected | | supportedWallets | string[] | Eternl, Nami, Yoroi... | Wallets shown in the dropdown | | showUnavailableWallets | UnavailableWalletVisibility | SHOW_UNAVAILABLE_ON_MOBILE | Controls which wallets are listed | | alwaysVisibleWallets | string[] | [] | Wallets always shown regardless of install state | | primaryColor | string | '#0538AF' | Accent color for the button and menu | | borderRadius | number | 15 | Border radius in pixels | | showAccountBalance | boolean | false | Show ADA balance instead of stake address | | limitNetwork | NetworkType | — | Restrict to MAINNET or TESTNET | | peerConnectEnabled | boolean | true | Show the CIP-45 P2P QR option | | cip158Enabled | boolean | true | Use CIP-158 deep links for supported mobile wallets | | dAppName | string | 'Awesome DApp' | dApp name shown in the CIP-45 QR dialog | | dAppUrl | string | — | dApp URL used for CIP-45 peer identity | | extensions | number[] | — | CIP extension numbers to request on connect (e.g. [95]) | | message | string | — | If set, adds a "Sign message" action when connected | | customActions | Action[] | [] | Extra menu items shown when connected | | hideActionMenu | boolean | false | Hide the action dropdown when connected | | customCSS | string | — | Extra CSS applied to the outer wrapper | | onConnect | (walletName: string) => void | — | Called after a successful connection | | onDisconnect | () => void | — | Called after disconnect | | onSignMessage | (signature, key) => void | — | Called after a successful message signature | | onConnectError | (walletName, error, level) => void | alert | Called when connection fails |

ConnectWalletList

A flat list of wallet buttons, useful when you want to embed the wallet picker inline rather than inside a dropdown.

import { ConnectWalletList } from '@cardano-foundation/cardano-connect-with-wallet';

<ConnectWalletList
  borderRadius={15}
  gap={12}
  primaryColor="#0538AF"
  onConnect={onConnectWallet}
  customCSS={`
    font-family: Helvetica Light, sans-serif;
    font-size: 0.875rem;
    font-weight: 700;
    width: 164px;
    & > span { padding: 5px 16px; }
  `}
/>

Accepts the same props as ConnectWalletButton minus label, showAccountBalance, hideActionMenu, message, customActions, beforeComponent, and afterComponent.

🪝 useCardano Hook

useCardano is the low-level hook used by both components. Use it when you need direct access to wallet state or want to build a fully custom UI.

import { useCardano } from '@cardano-foundation/cardano-connect-with-wallet';

const { 
  isEnabled,
  isConnected,
  isConnecting,
  enabledWallet,
  stakeAddress,
  usedAddresses,
  unusedAddresses,
  accountBalance,
  installedExtensions,
  connect,
  disconnect,
  signMessage,
} = useCardano({ limitNetwork: NetworkType.MAINNET });

// Connect by wallet name
await connect('eternl', onSuccess, onError, [{ cip: 95 }]);

// Disconnect
disconnect();

// Sign a message (CIP-8)
signMessage('Hello Cardano', (signature, key) => console.log(signature));

📱 Mobile Wallets

On mobile devices the library automatically adapts its behavior:

Wallets with CIP-158 support (Eternl, Vespr): tapping the wallet fires a web+cardano://browse/v1?uri=<encoded_url> deep link. If the wallet app is installed it opens its in-app browser with the CIP-30 API already injected. If the app is not installed the user is redirected to the App Store or Play Store after a 2.5 s timeout.

Other mobile wallets (Begin, Yoroi, Flint): tapping redirects directly to the appropriate app store if the wallet is not already injected.

To opt out of CIP-158 deep links set cip158Enabled={false} on either component.

🔗 CIP-45: P2P Wallet Connection

CIP-45 lets a mobile wallet connect to a desktop dApp by scanning a QR code. Both components show a "P2P Wallet" entry in the wallet list when peerConnectEnabled is true (the default). Clicking it opens a modal with a QR code the user scans with their mobile wallet.

<ConnectWalletButton
  peerConnectEnabled={true}
  dAppName="My dApp"
  dAppUrl="https://my-dapp.io"
  peerConnectSubtitle="Scan with a CIP-45 compatible wallet such as Eternl"
/>

ℹ️ SSR with Next.js

This library accesses window and localStorage which are not available during server-side rendering. Use dynamic imports with ssr: false for both components and the hook.

const ConnectWalletButton = dynamic(
  () =>
    import('@cardano-foundation/cardano-connect-with-wallet').then(
      (mod) => mod.ConnectWalletButton
    ),
  { ssr: false }
);

💪 Contributing

Please have a look at our contributing infos to become familiar with our guidelines. There is also a short description for our development setup as we use Storybook for testing, playing around and for supporting the development process.