Make Web3 unseen

Seamlessly onboard Web2-native users.

Web2 sign-in

Users see social login, a username/password, passcode, or magic link.
You create a wallet for them behind the scenes.

No signing popups

No more context switching to read a confusing message.

Powering top apps on Sui

Powering innovative crypto teams


import { KeyClient, WalletClient } from "@shinami/clients";

const keyClient = new KeyClient({{walletServicesAccessKey}});
const walletClient = new WalletClient({{walletServicesAccessKey}});

const sessionToken = await keyClient.createSession({{walletSecret}});

// Execute a Sui transaction and cover the small gas fee for your user. For example,
// upgrading a NFT that represents an in-game item as they level it up.
const response = await walletClient.executeGaslessTransactionBlock(
  {{walletId}},
  sessionToken,
  gaslessTransactionBytesBase64,
  {{gasBudget}}
);
  
 

import { ZkProverClient, ZkWalletClient } from "@shinami/clients";

const zkw = new ZkWalletClient({{walletServicesAccessKey}});
const zkp = new ZkProverClient({{walletServicesAccessKey}});

// Prepare a nonce according to the zkLogin requirements.
// Obtain a valid jwt with that nonce from a supported OpenID provider.

const { salt, address } = await zkw.getOrCreateZkLoginWallet({{jwt}});

const { zkProof } = await zkp.createZkLoginProof(
  {{jwt}},
  {{maxEpoch}},
  {{ephemeralPublicKey}},
  {{jwtRandomness}},
  salt
);

// Now you can sign transaction blocks with the ephemeralPrivateKey, 
// and assemble the zkLogin signature using the zkProof.