---
title: Kryard vs Turnkey — a wire-compatible, gasless alternative
description: How Kryard compares to Turnkey. Kryard is a Turnkey-wire-compatible EVM signer plus a managed EIP-7702 relay — migrate with a single TURNKEY_BASE_URL swap and add gasless, sponsored transactions where users can pay gas in any token.
---

# Kryard vs Turnkey

**TL;DR — Kryard is a Turnkey-wire-compatible signer *plus* a managed EIP-7702
relay.** You migrate the signing side with a single `TURNKEY_BASE_URL` swap (zero
client changes), and you gain gasless, sponsored transactions where users can pay
gas in any ERC-20 token — something Turnkey's signer doesn't bundle. Kryard's SDK,
signer, and CLI are open source. The trade-off: Kryard is newer (live on testnets),
where Turnkey is a mature, production platform with broader auth (passkeys, OAuth,
OTP) and sub-organizations.

## At a glance

| | **Kryard** | **Turnkey** |
|---|---|---|
| EVM secp256k1 signing | ✅ Wire-identical API (paths, activity envelope, `X-Stamp` auth) | ✅ The original API |
| Migration effort | **One env-var swap** (`TURNKEY_BASE_URL`), no client changes | — |
| Key custody | KMS envelope encryption; the API never decrypts; keys never leave an isolated signer | HSM/secure-enclave key management |
| **Managed EIP-7702 relay** (sponsored, gasless, batched execution) | ✅ Built in — no 4337 bundler | ❌ Not a relay/paymaster |
| **Pay gas in any ERC-20** | ✅ On-chain `KryardDelegate` reimburses an exact, user-signed fee | ❌ |
| Auth methods | API key (`X-Stamp`) + device/session JWT; passkeys/OAuth/OTP on the roadmap | Passkeys, OAuth, OTP, email — mature |
| Sub-organizations | Organizations + projects | Mature sub-org model |
| SDK / signer / CLI | **Open source** (`@kryard/sdk`, MIT X-Stamp signer, `kryard` CLI) | Proprietary SDK |
| Maturity | Live on testnets (Sepolia + Base/Arbitrum/Optimism/Polygon/BSC testnets) | Production, mainnet, broad adoption |

## When Kryard is the better fit

- **You want gasless UX, not just signing.** Kryard is a signer *and* a managed
  relay: a user signs a 7702 authorization + a batch digest, and Kryard signs,
  fronts gas, and broadcasts the type-4 transaction. Smart-wallet UX with no ERC-4337
  bundler to run. See [Gasless transactions, explained](/concepts/gasless-transactions).
- **You want users to pay gas in a token they already hold** (USDC, your app token).
  Kryard settles gas in any ERC-20 via an exact, user-signed fee that can't be
  inflated. See [Pay gas in any token](/relay/erc20-gas).
- **You're already on Turnkey and want the relay without a rewrite.** Keep your
  Turnkey client; swap the base URL for the signing calls and add the relay SDK for
  sponsorship. See [Turnkey compatibility](/signing/turnkey-compatibility).
- **You value open, self-hostable infrastructure.** The SDK, the X-Stamp signer, the
  reference 7702 delegate, and the CLI are open source.

## When Turnkey is the better fit today

- You need **production/mainnet** guarantees and a track record right now. Kryard is
  proven end-to-end on testnets; mainnet is gated behind a hardening milestone.
- You need **rich end-user auth** out of the box (passkeys, OAuth, OTP, email) — that
  is Kryard's roadmap, not its current surface for the public tier.
- You rely on Turnkey's **mature sub-organization** model at scale.

We keep this page honest: match the wire, don't overclaim status. If a row here is
out of date, it's a bug — the source of truth is the [docs](/introduction) and the
public repos.

## Migrate the signing side in one line

```diff
- TURNKEY_BASE_URL=https://api.turnkey.com
+ TURNKEY_BASE_URL=https://api.kryard.com
```

No client code changes: the public API is Turnkey-shaped (same endpoint paths, the
nested `activity.result.<type>Result` envelope, `X-Stamp` auth). Full details:
[Turnkey compatibility](/signing/turnkey-compatibility).

## Add gasless transactions

```ts
import { KryardRelayClient, createApiKeyStamper } from "@kryard/sdk";

const client = new KryardRelayClient({
  baseUrl: "https://api.kryard.com",
  organizationId: process.env.KRYARD_ORG!,
  stamper: createApiKeyStamper({
    apiPublicKey: process.env.KRYARD_API_PUBLIC_KEY!,
    apiPrivateKey: process.env.KRYARD_API_PRIVATE_KEY!,
  }),
});
// The user signs a 7702 authorization + batch digest; Kryard fronts gas and
// broadcasts the type-4 transaction.
```

Start with the [Quickstart](/relay/quickstart), or read
[7702 vs 4337](/concepts/7702-vs-4337) to see why Kryard needs no bundler.
