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
<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>
variant
string
No
default
Button style variant: default, destructive, outline, secondary, ghost, or link.
<tl-siwe-button>
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>
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>
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>
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>
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>
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>
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>
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