NFT / Marketplace·Immutable zkEVM · Immutable X (StarkEx) · EVM
Immutable
Gaming-focused L2 stack. Immutable zkEVM is a Polygon-CDK-powered zkEVM L2 with gas-free player UX and a built-in orderbook; Passport is the SDK that wraps OAuth-style identity, an embedded MPC wallet, and a transaction relayer. TypeScript, Unity, and Unreal SDKs share the same Passport identity.
- 01web3 games (Unity / Unreal / web)
- 02gas-free player wallets via Passport
- 03global orderbook listings/bids
- 04ERC-721 / ERC-1155 minting at scale via the Minting API
- 05social login + embedded MPC wallets
- pnpm add @imtbl/sdk
| Variable | Scope | Description |
|---|---|---|
| NEXT_PUBLIC_IMMUTABLE_PUBLISHABLE_KEY | Client | Publishable API key from Immutable Hub (client-safe). |
| NEXT_PUBLIC_IMMUTABLE_CLIENT_ID | Client | Passport OAuth client ID registered in Immutable Hub for your app. |
| IMMUTABLE_API_KEY | Server | Server-side API key for Minting API and other privileged endpoints. |
Install `@imtbl/sdk` and configure `config.Environment.PRODUCTION` (or SANDBOX). Initialise Passport with `new passport.Passport({ baseConfig, clientId, redirectUri, audience: 'platform_api', scope: 'openid offline_access email transact' })`, then call `passport.login()` and `passport.connectEvm()` to get a viem-compatible provider. Read orderbook state with `orderbookClient.listListings()` / `createListing()`, and mint via the server-side Minting API (queued, gasless for the player). For Unity/Unreal, use `unity-immutable-sdk` / `unreal-immutable-sdk` — same Passport session bridges across.
- ⚑Passport requires the OAuth `transact` scope to send transactions — apps that only request `openid email` get a wallet that can read but not sign, with confusing 'unauthorized' errors at signTime.
- ⚑zkEVM enforces a global royalty allowlist (Operator Allowlist) — your marketplace contract must be allowlisted, otherwise NFT transfers from it revert. This is the inverse of OpenSea's Operator Filter and trips up devs porting Ethereum L1 marketplaces.
- ⚑Immutable X (StarkEx) and Immutable zkEVM are different chains with different SDKs and asset registries; an NFT minted on IMX is not on zkEVM and vice versa. Migration tooling exists but is not automatic.
- ⚑Minting API is asynchronous and queued — the API returns immediately with a reference ID; poll `getMintRequest` for completion before showing the NFT in UI.
- ⚑Passport uses Auth0-hosted login flows; mobile webviews and embedded browsers (Discord, Twitter in-app) often block the OAuth redirect — recommend external browser or native deep links.
- ⚑Unity SDK requires git-lfs to clone (`.dll` files via Git Large File Storage); skipping this leaves you with broken stub binaries.