Sign on any chain, only by your rules. Keys no one can extract. Not even us.

Deploy your code once and the Lit Protocol runs it in a sealed TEE, secured by the chain. No servers for you to run, no operator to trust.

$400M+ secured·1.6M+ wallets·$135M+ volume
READ
Any API, any chain.
DECIDE & SIGN
Your policy runs in the TEE. Keys sign only what it allows.
WRITE
Any EVM chain, Solana, Bitcoin, Cosmos.
Building on Lit
Emblem VaultBeacon ProtocolTriaGeniusGVNR
Don’t trust. Verify.

Control you can prove, not promise.

We operate the network, but operating it grants no access.

Blind

Keys are generated and used only inside sealed TEEs. No operator, including Lit, can see or extract them.

Bound

A key’s authority is on-chain state on Base. It signs only what an immutable, content-addressed policy permits. Code, not an admin switch.

Verifiable

Every signature is a hardware-attested record, hardened by Proof of Cloud. Confirm the exact code running in the enclave.

There is no trusted operator. We run the network. On-chain rules and sealed hardware enforce it, in the open where anyone can check.

What it looks like

One file. Reads, computes, signs across chains.

A Lit Action is JavaScript that runs inside the network’s TEE. Deploy it once. Sign with a wallet bound to the action code itself, or with one you control through your own on-chain governance.

rebalance.action.ts
// Inside a Lit Action — runs in a chain-secured TEE

// Read off-chain
const price = await fetch(
  "https://api.coinbase.com/v2/prices/ETH-USD/spot"
).then(r => r.json());

// Read on-chain (Base)
const base = new ethers.providers.JsonRpcProvider(BASE_RPC);
const vault = new ethers.Contract(vaultAddress, vaultAbi, base);
const ratio = await vault.currentRatio();

// Decide, then sign + broadcast on Arbitrum
if (Number(price.data.amount) * Number(ratio) < threshold) {
  const pk = await Lit.Actions.getLitActionPrivateKey();
  const arb = new ethers.providers.JsonRpcProvider(ARB_RPC);
  const wallet = new ethers.Wallet(pk, arb);
  const hook = new ethers.Contract(hookAddress, hookAbi, wallet);
  const tx = await hook.rebalance();
  Lit.Actions.setResponse({ response: tx.hash });
}
Encrypted hardware, governed on-chain

Speed of a backend, trust of a contract.

Your code runs in hardware, so it moves at backend speed. Its authority lives on-chain: smart contracts on Base decide which keys it can use and which code is allowed to run, with every change auditable on Basescan and impossible for any one party to push alone.

Latency
Sub-second signing
Auditability
Code hash on-chain
Pricing
$0.01/sec, less on annual plans
Surface
Any HTTP, any chain

Read. Compute. Write.
Anywhere.

One programmable runtime for everything that has to happen between an event and a signed action.