Dev Tooling·EVM
Rhinestone
Modular smart account toolkit. ModuleKit (Solidity) for building ERC-7579 modules and ModuleSDK (TypeScript) for installing/using them across Safe, Kernel, Nexus, and other ERC-7579 accounts.
- 01ERC-7579 module development
- 02session keys & permissions
- 03modular smart accounts
- 04cross-account module portability
- 05intent-based account flows
- pnpm add @rhinestone/modulekit --shamefully-hoist
- cp node_modules/@rhinestone/modulekit/remappings.txt remappings.txt
- pnpm add @rhinestone/module-sdk
| Variable | Scope | Description |
|---|---|---|
| RHINESTONE_API_KEY | Server | API key for the Rhinestone Orchestrator (intents, deposit service). |
Use Rhinestone to build and consume ERC-7579 modules. For Solidity development install ModuleKit (`pnpm add @rhinestone/modulekit --shamefully-hoist`), copy its remappings, and inherit `RhinestoneModuleKit` in tests, calling `makeAccountInstance("acct")` to get a fresh modular account against Safe/Kernel/Nexus. For frontend/backend use `@rhinestone/module-sdk`: import installer helpers like `getOwnableValidator({ owners })` and pass them to your account SDK's `installModule`. For chain-abstracted UX, use the Orchestrator (`@rhinestone/sdk`) to get cross-chain intents.
- ⚑ModuleKit requires `pnpm install --shamefully-hoist` (or equivalent) so Foundry can resolve nested deps — plain `pnpm install` produces missing import errors.
- ⚑ERC-7579 is implemented slightly differently across Safe / Kernel / Nexus (hook ordering, fallback dispatch). Always run ModuleKit's integration tests against every target account type.
- ⚑Modules are not portable to ERC-4337-only accounts that lack 7579 support — confirm the account interface before publishing a module.
- ⚑Module-SDK installer helpers encode init data with specific module versions — pinning the SDK without pinning the on-chain module address can produce incompatible install calldata after an upgrade.
- ⚑ModuleKit is in active development with breaking changes between minor versions; pin exact versions in package.json and remappings.