@chipi-stack/starknet-connector is a starknet-react /
get-starknet connector. A dApp adds
one line and its users can connect with their Chipi wallet — a passkey
smart-account that signs gasless through the paymaster. No browser extension,
no WalletConnect; the same hosted-wallet model Argent/Ready’s “Web Wallet” and
Cartridge Controller use.
This is how Starknet dApps actually connect — via the get-starknet / starknet-react
connector interface, not WalletConnect (which is draft/unused on Starknet).
Install
Add the connector
useConnect / useAccount flow now offers Connect with Chipi,
and account.signMessage(...) / account.execute(...) route to the user’s Chipi
wallet — gasless, signed with their passkey.
How it works
ChipiConnectoris transport only — it opens the hosted wallet in a popup and forwards get-starknetwallet_*RPC calls overpostMessage. It holds no keys and signs nothing itself.- The hosted wallet (
/connect) authenticates the user, renders a decoded approval for every connect / sign / execute, then runs the real passkey + paymaster path and posts the result back. connector.account(provider)wraps the channel in astarknet.jsWalletAccount, so the dApp sees a standardAccountInterface.
The approval & security model
The hosted wallet — not the dApp — owns approval, and it decodes what’s being signed so the user is never blind-signing:- Connect shows the dApp’s origin + the address being shared, and the user must approve (never automatic).
- Execute decodes calls against known tokens into human intent — “Approve spending 10 USDC to 0x…” with a loud UNLIMITED badge over the threshold, “Send 5 USDC to 0x…”, or an explicit “Unrecognized contract” warning (it never invents intent). Gas reads “Free · covered by Chipi”.
- signTypedData decodes the SNIP-12 message into labeled fields and highlights spend-authorization keys (spender / amount / deadline). Typed data it can’t read is hard-blocked — the user can’t blind-sign it. (Research attributes 56.7% of 2024’s $494M in wallet drains to blind-signed permit-style typed data; this discipline closes that vector.)
Try the example
A runnable starknet-react example lives in the repo:examples/connect-with-chipi.
It connects, signs typed data, and runs a gasless execute against a local Chipi
wallet — the full round-trip.
Options
Compatibility & limits
@starknet-react/core>= 3 (peer) ·starknet>= 8.1.2 (peer).- Starknet mainnet — pass a mainnet
provider. - Popup-based (external dApps). An in-app-browser (“parent”) mode is in the transport but not yet exposed.
- One approval at a time; a dApp that fires two prompts truly simultaneously has its second request rejected (most dApps serialize).
