Ethernauta

Primitive-first TypeScript for Ethereum. Every wallet operation, also available without one.

Two consumer paths

Every signable operation can go through a wallet (eth_sendTransaction) or through a primitive pair the dapp composes itself (eth_signTransaction + eth_sendRawTransaction). The library refuses to pick for you.

Read about the paths →

Four resolver shapes

Readable<T>, Writable<T>, Signable<T>, Callable<T>. Three of them work without a wallet at all.

Read about the shapes →

Standards are folders

Every EIP / ERC lives under packages/eip/src/<n>/ or packages/erc/src/<n>/. Adding a new one is a folder-shaped operation. No hosted infra, no server coordination.

Read about the shape →

Schemas are the types

Valibot schemas first; v.InferOutput second. Every wire boundary validates with parse. No hand-rolled type X = { … }.

Read about the rule →

Browse everything