Overview
wative-core is a TypeScript library for encrypted, multi-workspace, multi-chain crypto wallet management across EVM and Solana, running in both Node and the browser.
wative-core is a TypeScript library for managing crypto wallets — encrypted at rest, organized into workspaces, and spanning EVM chains and Solana from one API. It runs unchanged in Node and in the browser: the same code creates accounts, derives wallets, and signs transactions, while the storage layer swaps between encrypted files on disk and IndexedDB underneath.
It was built for on-chain market makers who manage many keys across many chains, but nothing about it is specific to that use case. If you need to hold keys, derive addresses, and sign — safely, in more than one runtime — this is the surface for it.
The model
Everything nests inside a Workspace. Learn these four objects and the rest of the reference reads predictably:
Workspace one encrypted container, one password
│
├── Account an identity — HD (from a mnemonic) or PK (imported keys)
│ └── Wallet one slot in that account
│ └── Address one key on one chain — this is what signs
│
├── Network the chains you can reach (RPC, chain id)
└── Asset the tokens tracked on each networkWorkspace— the top-level container. Holds the password and your accounts, networks, and assets, plus a built-in logger.Account— either HD (one BIP-39 mnemonic that derives many wallets) or PK (raw private keys you import one at a time). Each account can share the workspace password or carry its own.Wallet— a unit inside an account, holding oneAddressper(vm, network)pair. Both kinds give you an EVM and a Solana address.Address— an on-chain identity. Sign messages, build transactions, transfer native coins or tokens, and send them.
14 networks and 29 tokens ship pre-loaded, and everything a workspace persists is encrypted under your workspace password.
Install
pnpm add wative-corenpm i wative-coreimport { Workspace } from "wative-core";
import "wative-core/node"; // Node only — see Node & Browser
const ws = await Workspace.open({ password: "your-workspace-password" });
const account = await ws.accounts.create("Trading Desk", "your-workspace-password", mnemonic);
await account.deriveWallets(4);
await ws.lock();