For the complete documentation index, see llms.txt. This page is also available as Markdown.

Embeddable Components

Drop-in Web3 building blocks for any website.

Drop-in Web3 building blocks for any website.

These are small, ready-made HTML elements (web components) that add blockchain features โ€” connecting a wallet, running an auction, minting an NFT, redeeming tokens โ€” to any web page. You add two lines to your page's <head>, then place the elements you want in the page like regular HTML tags. No React or build step required: they work in plain HTML and inside any framework (React, Vue, Svelte, WordPress, Webflow, etc.). Latest Version: 1.9.0

What's included

Element
What it does

<tl-connect-button>

A "Connect Wallet" button.

<tl-siwe-button>

"Sign in with Ethereum" โ€” proves a user owns their wallet.

<tl-auction>

A live NFT auction (bid, buy now, settle).

<tl-mint-page-721>

A mint page for a 1-of-1 / ERC-721 NFT collection.

<tl-mint-page-1155>

A mint page for an edition / ERC-1155 token.

<tl-snr-erc1155tl-raffle>

"Send and receive" raffle: send tokens in, get a raffle entry.

<tl-snr-erc1155tl>

Send tokens in, receive a fixed ERC-1155 token back.

<tl-snr-erc721tl>

Send tokens in, receive a freshly minted ERC-721 NFT back (with a reveal).

<tl-snr-currency>

Send currency in, redeem according to the contract's rules.

Usage

Use in any webpage!

1. Configure and load (in the <head>)

window.tlConfig is optional โ€” every field has a sensible default โ€” but setting appName and a walletConnectProjectId is recommended for a polished wallet flow.

2. Add the elements you want (in the <body>)

Each element is configured with HTML attributes (chain-id, contract-address, etc.). Use only the elements you need โ€” you don't have to include all of them.

Component Inputs

Use kebab-case attributes in HTML. For example, the React prop chainId is the HTML attribute chain-id, and contractAddress is contract-address.

Boolean attributes should be set explicitly, for example view-on-transient="false". Number inputs are parsed from their attribute values.

<tl-connect-button>

Attribute
Type
Required
Default
Description

variant

string

No

default

Button style variant: default, destructive, outline, secondary, ghost, or link.

<tl-siwe-button>

Attribute
Type
Required
Default
Description

chain-id

number

Yes

-

Chain ID to use for the SIWE message and signature flow.

site-name

string

Yes

-

Site name shown in the SIWE message.

terms-url

string

Yes

-

Terms URL included in the SIWE message.

nonce-source

string

No

block hash nonce

Set to transient to fetch a nonce from the Transient API. Otherwise the nonce is derived locally from the latest block and wallet address.

<tl-auction>

Attribute
Type
Required
Default
Description

chain-id

number

Yes

-

Chain ID where the auction contracts live.

contract-address

address

Yes

-

NFT contract address.

token-id

number

Yes

-

Token ID being auctioned.

auction-house-address

address

Yes

-

Auction house contract address.

refresh-interval

number

Yes

-

Polling interval in milliseconds.

view-on-transient

boolean

No

true

Whether to show the "View on Transient" link.

<tl-mint-page-721>

Attribute
Type
Required
Default
Description

chain-id

number

Yes

-

Chain ID where the mint contracts live.

contract-address

address

Yes

-

ERC-721 collection contract address.

mint-contract-address

address

Yes

-

Mint contract address.

allowlist-url

string

Yes

-

URL for allowlist data used during presale checks.

slug

string

Yes

-

Transient collection or drop slug used for external links.

refresh-interval

number

Yes

-

Polling interval in milliseconds.

view-on-transient

boolean

No

true

Whether to show the "View on Transient" link.

<tl-mint-page-1155>

Attribute
Type
Required
Default
Description

chain-id

number

Yes

-

Chain ID where the mint contracts live.

contract-address

address

Yes

-

ERC-1155 collection contract address.

token-id

number

Yes

-

ERC-1155 token ID to mint.

mint-contract-address

address

Yes

-

Mint contract address.

allowlist-url

string

Yes

-

URL for allowlist data used during presale checks.

slug

string

Yes

-

Transient collection or drop slug used for external links.

refresh-interval

number

Yes

-

Polling interval in milliseconds.

view-on-transient

boolean

No

true

Whether to show the "View on Transient" link.

<tl-snr-erc1155tl-raffle>

Attribute
Type
Required
Default
Description

chain-id

number

Yes

-

Chain ID where the raffle contract lives.

raffle-contract-address

address

Yes

-

Send-and-receive raffle contract address.

refresh-interval

number

Yes

-

Polling interval in milliseconds.

<tl-snr-erc1155tl>

Attribute
Type
Required
Default
Description

chain-id

number

Yes

-

Chain ID where the redemption contract lives.

contract-address

address

Yes

-

Send-and-receive redemption contract address.

input-contract-address

address

Yes

-

ERC-1155 token contract users send in.

input-token-id

number

Yes

-

ERC-1155 token ID users send in.

refresh-interval

number

Yes

-

Polling interval in milliseconds.

<tl-snr-erc721tl>

Attribute
Type
Required
Default
Description

chain-id

number

Yes

-

Chain ID where the redemption contract lives.

contract-address

address

Yes

-

Send-and-receive redemption contract address.

input-contract-address

address

Yes

-

ERC-721 token contract users send in.

input-token-id

number

Yes

-

ERC-721 token ID users send in.

refresh-interval

number

Yes

-

Polling interval in milliseconds.

<tl-snr-currency>

Attribute
Type
Required
Default
Description

chain-id

number

Yes

-

Chain ID where the redemption contract lives.

contract-address

address

Yes

-

Send-and-receive currency redemption contract address.

refresh-interval

number

Yes

-

Polling interval in milliseconds.

Lazy Loading

Embeds lazy-mount by default. Each element first renders a lightweight placeholder, then mounts the full React/Web3 component when it enters the viewport. Blockchain reads and polling do not start until that mount happens.

After an embed mounts once, it stays mounted even if the user scrolls away. This keeps wallet state, open dialogs, form input, and cached query data stable. It also means polling continues for embeds that have already been viewed.

The bundled stylesheet sets all <tl-...> custom elements to display: block so they behave like normal page sections and reserve predictable layout space. Keep the stylesheet loaded, or add equivalent host-page CSS if you are replacing the default styles.

Style Overrides

You need to add the style overrides in the body

The components are built with tailwindcss v4 and Shadcn/ui. You'll override css variables for main colors and style. There are also classes that you can override for more control (advanced).

CSS Variables:

Custom Class Overrides:

Custom Events

The components dispatch events on document so you can hook in your own logic (analytics, confirmations, redirects, etc.). Each event carries its data on the standard event.detail field:

Wallet status is also exposed as a global snapshot for synchronous checks, including after page refresh/reconnect flows:

window.tlWallet is updated from the shared Wagmi account state whenever an embed with Web3 support mounts and whenever the wallet status, address, or chain changes. It is a snapshot, so read it again when you need the latest value.

The snapshot shape is:

For refresh-safe integrations, read the current snapshot once and then listen for future changes:

The legacy tl-wallet-connect and tl-wallet-disconnect events are still emitted for compatibility. Prefer window.tlWallet plus tl-wallet-status-change when your page needs to know the current wallet state after a refresh, reconnect, account switch, or chain switch.

Event

Fired when

event.detail contains

tl-wallet-connect

A wallet connects

address

tl-wallet-disconnect

A wallet disconnects

(none)

tl-wallet-status-change

Wallet status, address, or chain changes

status, isConnected, address?, chainId?

tl-auction-bid

A bid is placed

sender, chainId, contractAddress, tokenId, listing?

tl-buy-now

An item is bought now

sender, chainId, contractAddress, tokenId, listing?

tl-auction-settle

An auction is settled

sender, chainId, contractAddress, tokenId, listing?

tl-mint-721

An ERC-721 is minted

sender, chainId, contractAddress, logs

tl-mint-1155

An ERC-1155 is minted

sender, chainId, contractAddress, tokenId

tl-siwe

A user signs in with Ethereum

message, signature

tl-snr-erc1155tl-raffle-entry

A raffle entry is submitted

sender, chainId, raffleContractAddress

tl-snr-erc1155tl-raffle-claim

A raffle prize is claimed

sender, chainId, raffleContractAddress, isWinner

tl-snr-currency-redemption

A currency redemption succeeds

sender, chainId, contractAddress, numRedemptions

tl-snr-erc1155tl-redemption

An ERC-1155 redemption succeeds

sender, chainId, contractAddress, numRedemptions

tl-snr-erc721tl-redemption

An ERC-721 redemption succeeds

sender, chainId, contractAddress, numRedemptions, logs

Last updated