1AM NightKit

One button.
Every wallet on Midnight.

Your users connect 1AM, or open a Midnight account with the wallet they already have. Their keys stay in a vault your app cannot read.

Paste it into your coding agent. It reads the NightKit guide and adds NightKit to your app. Works with
  • Claude
  • ChatGPT
  • Codex
  • Cursor
  • Hermes
  • Grok
The NightKit connect modal, offering 1AM, an Ethereum wallet or a Solana wallet

The 1AM NightKit connect modal, as your users see it.

NightKit in one minute.

What it is, what your users see, and where their keys stay.

What your users see.

One signature opens a real Midnight account. Pick a step, or watch them cycle.

connect flow
The NightKit connect modal: 1AM, Ethereum wallet and Solana wallet

The real interface, captured from the starter app with a stand-in browser wallet.

Meet users where they already are.

Most people who would try your Midnight app do not have a Midnight wallet yet. They do have one of these.

Midnight1AM
EthereumMetaMask
EthereumCoinbase Wallet
Ethereum · SolanaPhantom
EthereumRabby
EthereumRainbow
EthereumBrave Wallet
EthereumOKX Wallet
EthereumTrust Wallet
SolanaSolflare
SolanaBackpack
MidnightOther Midnight wallets

Ethereum wallets are found the standard way (EIP-6963) and Solana wallets through the Wallet Standard, so a wallet does not need to be on this list to work. If a wallet does not show itself inside your app, NightKit opens a secure window where it does. 1AM and other Midnight wallets connect directly. Smart-contract, passkey and MPC wallets cannot open an account, and NightKit says so plainly. Mobile wallets over WalletConnect are not supported yet.

Like RainbowKit, for Midnight.

Wrap your app, drop in the button. You get the standard DApp Connector API back, so midnight-js works unchanged, whichever wallet connected.

  • @1am/nightkitThe core. No keys, no dependencies.
  • @1am/nightkit-reactThe button, the modal and the account menu.
  • @1am/nightkit-vaultA static page you host on its own origin.
  • Starter appVite and React, with RainbowKit side by side.
  • agent.mdThe guide for coding agents.
App.tsx
import { NightKitProvider, ConnectButton, useNightKit } from "@1am/nightkit-react";

export function App() {
  return (
    <NightKitProvider config={{
      networkId: "stagenet",
      vaultUrl: "https://vault.yourapp.com",
    }}>
      <ConnectButton />
      <Wallet />
    </NightKitProvider>
  );
}

function Wallet() {
  const { session } = useNightKit();
  if (!session) return null;
  // The same API for 1AM, MetaMask, Phantom…
  session.api.getShieldedBalances();
  session.api.makeTransfer([{ kind, type, value, recipient }]);
}

Your app never holds a key.

The account's keys are made, kept and used in the NightKit vault: a small page on its own web address, shown inside your app. Browsers do not let one site read another, so nothing running in your app can reach them.

Your app

yourapp.com
  • Has
  • Addresses and balances
  • The right to ask for a send or a signature
  • Never has
  • Keys
  • The recovery phrase
  • The wallet's signature
Separate
web address
request
answer
Enforced by
the browser

The vault

vault.yourapp.com
  • Does
  • Holds the keys, in memory only
  • Shows the user every request
  • Acts only on a real, visible click
  • Never does
  • Store anything secret
  • Talk to anything but the Midnight network
IfNo keys

Someone injects code into your app, or ships a bad package

They can ask. The user still sees and approves every spend in the vault.

IfNothing

Someone covers or fades the vault to steal a click

The approve button works only while the browser reports the whole request as visible.

IfNothing useful

Someone reads your app's browser storage

It holds only which wallet was used last.

IfExposed if signed

Someone copies the sign-in message onto a fake site

The wallet warns that the site does not match. If the user signs anyway, the account is exposed. This is why 1AM is offered first.

Open your app to every wallet.

Hand the prompt to your agent. Your app never holds a key.

Built by 1AM