@chipi-stack/starknet-connector is a starknet-react /
get-starknet connector. It opens the user’s
Chipi wallet, a passkey smart account that signs gasless through the paymaster, in a popup.
No browser extension, no WalletConnect, and no whitelisting on our side: any Starknet dApp can
add it. It works next to injected wallets such as Bramble, Ready and Braavos.
Install
Add it with starknet-react
Offer Chipi next to Bramble, Ready and Braavos:useConnect / useAccount flow now offers all four. With Chipi, account.execute(...)
and account.signMessage(...) go to the user’s Chipi wallet: gasless, signed with their passkey.
With @starknet-react/core 5:
- List every wallet yourself.
useInjectedConnectorsonly picks up objects with the legacy keys (provider,isConnected,enable,isPreauthorized). Neitherwindow.starknet_chipinorwindow.starknet_bramblehas all of them, so it finds neither. injected({ id: "bramble" })also works, but in 5.0.3injected()takes onlyid: the label is Bramble’s own name once it has injected, and"bramble"before that.argent()is an alias ofready(). Useready().InjectedConnectorlooks upwindow.starknet_brambleeach time it is used, so Bramble’s late injection is fine.autoConnectruns once on mount: if Bramble has not injected by then, its last session is not restored.
Add it with get-starknet v4
get-starknet v4 lists everywindow.starknet* object that has id, name, version, icon,
request, on and off. Chipi and Bramble both qualify. Bramble injects late, so scan after
its starknet#initialized event:
Works next to Bramble
- No id collision. Chipi is
window.starknet_chipiwith id"chipi". Bramble iswindow.starknet_bramblewith id"bramble". get-starknet v4 and starknet-react key wallets by id, so both are listed. - Neither writes
window.starknet. - When each object exists.
window.starknet_chipiexists only after aChipiConnectoris created (unlessregister: false).disconnect()removes it until the nextconnect().window.starknet_brambleappears after page load, followed bystarknet#initialized. - A wallet scan never opens Chipi. get-starknet v4’s
getAuthorizedWallets()andgetLastConnectedWallet()sendwallet_getPermissionsto every wallet at page load. Since 0.5.0, Chipi answers that and the other passive calls itself ([]before the user connects) and does not try to open its popup. - Bramble’s rules apply to Bramble. Prompts only from a click, at most 5 pending prompts per
site, strict params (an extra key fails with
114), a typed-datachainIdequal to its active network, nowallet_disconnect(114), one account per site. starknet-react’sInjectedConnector.disconnect()does not sendwallet_disconnect. Signatures are[r, s]for OpenZeppelin and Braavos accounts and["1", "0", pub, r, s]for Argent accounts: verify them with the account’sis_valid_signature(or Sign in with Starknet), not by length. Full list: Bramble rules to follow.
How it works
ChipiConnectoronly carries messages. It opens the hosted wallet in a popup and forwards get-starknetwallet_*calls overpostMessage. It holds no keys and signs nothing.- The hosted wallet (
/connect) signs the user in, shows an approval for each connect, sign and execute, then runs the passkey + paymaster path and posts the result back. connector.account(provider)wraps the channel in a starknet.jsWalletAccount, so the dApp gets a standardAccountInterface.
ready() is true only after connect() succeeded on the same
page. Call connect() from a click, since it opens a popup.
Also on the extension
The same hosted-wallet approval path is reachable from the Chipi Wallet browser extension, which injects a get-starknet provider so dApps that scan for installed wallets list Chipi. See the Chrome Web Store listing. Both paths end in the same hosted wallet and the same security model.Try the example
A runnable starknet-react example lives inbuild-with-chipi → Tutorial 03.
It puts Chipi in the same connectors array as any other connector, then connects, signs typed
data and runs a gasless execute.
✅ Verified against the SDK source on 2026-10-12.
