Skip to main content
Typed clients for all Immutable APIs and services.
Who is this for? Web developers and TypeScript developers looking to build web3 applications and integrate blockchain features seamlessly.

Packages

Install only what you need:
PackagePurposeInstall
@imtbl/authAuthentication & sessionsnpm i @imtbl/auth
@imtbl/walletEmbedded wallets & transactionsnpm i @imtbl/wallet
@imtbl/auth-nextjsNext.js integrationnpm i @imtbl/auth-nextjs
@imtbl/orderbookNFT tradingnpm i @imtbl/orderbook
@imtbl/blockchain-dataOn-chain data queries (Indexer)npm i @imtbl/blockchain-data
@imtbl/minting-backendServer-side mintingnpm i @imtbl/minting-backend
@imtbl/contractsSmart contract ABIs & typesnpm i @imtbl/contracts
@imtbl/webhookWebhook signature validationnpm i @imtbl/webhook
@imtbl/configEnvironment configurationnpm i @imtbl/config
Install individual packages instead of @imtbl/sdk for smaller bundles and better tree-shaking.

Installation

npm install @imtbl/sdk
Or install individual packages for smaller bundles:
npm install @imtbl/auth @imtbl/wallet @imtbl/config

Framework Setup

Use the @imtbl/auth-nextjs package for the simplest integration:
npm install @imtbl/auth-nextjs

Layout Setup

// app/layout.tsx
import { ImmutableProvider } from '@imtbl/auth-nextjs';

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="en">
      <body>
        <ImmutableProvider
          clientId={process.env.NEXT_PUBLIC_IMMUTABLE_CLIENT_ID!}
          redirectUri={`${process.env.NEXT_PUBLIC_URL}/callback`}
          logoutRedirectUri={process.env.NEXT_PUBLIC_URL!}
        >
          {children}
        </ImmutableProvider>
      </body>
    </html>
  );
}

Using the Hooks

// app/page.tsx
'use client';

import { useAuth, useWallet } from '@imtbl/auth-nextjs';

export default function Home() {
  const { user, login, logout, isLoading } = useAuth();
  const { address, connect } = useWallet();

  if (isLoading) return <div>Loading...</div>;

  if (!user) {
    return <button onClick={login}>Login with Passport</button>;
  }

  return (
    <div>
      <p>Welcome, {user.email}</p>
      {address ? (
        <p>Wallet: {address}</p>
      ) : (
        <button onClick={connect}>Connect Wallet</button>
      )}
      <button onClick={logout}>Logout</button>
    </div>
  );
}

Callback Route

// app/callback/page.tsx
'use client';

import { AuthCallback } from '@imtbl/auth-nextjs';

export default function Callback() {
  return <AuthCallback redirectTo="/" errorRedirectTo="/?error=auth" />;
}

Environment Variables

NEXT_PUBLIC_IMMUTABLE_CLIENT_ID=your_client_id
NEXT_PUBLIC_URL=http://localhost:3000

Environment Configuration

EnvironmentChainAPI Base
SANDBOXImmutable Testnetapi.sandbox.immutable.com
PRODUCTIONImmutable Mainnetapi.immutable.com

Next Steps

Getting Started

Additional Resources