A modern web application for managing Squads V4 multisig wallets across multiple SVM (Solana Virtual Machine) chains.
- π Ledger Hardware Wallet Support - Secure transaction signing with Ledger devices
- π Multi-Chain Support - Manage multisigs across Solana, Soon, Eclipse, SonicSVM, Solaxy, and more
- π Proposal Management - Create, approve, reject, and execute multisig proposals
- π Monitoring Dashboard - View and manage proposals across all multisigs in a single table view
- π Transaction Details - View detailed transaction data including instructions and account keys
- βοΈ Custom RPC Configuration - Configure custom RPC endpoints for each chain
- πΎ Local Storage - All data stored locally in your browser
- β‘ Smart Caching - Intelligent RPC response caching (30s TTL) to reduce network requests
- π Debounced Search - Optimized search with 300ms debounce for smooth filtering
- π Pagination - Handle large proposal lists with 20 items per page
- πͺ Optimistic Updates - Instant UI feedback during proposal actions
- π¨ Loading Skeletons - Beautiful loading states instead of spinners
- π Proposal Statistics - Real-time stats showing active, executed, and rejected proposals
- β Batch Operations - Approve or reject multiple proposals at once
- π·οΈ Tagging System - Organize multisigs with custom tags
- π·οΈ Address Labeling - Label wallet addresses with custom names, descriptions, and colors
- π€ CSV Export - Export proposals and multisig data to CSV
- π― Smart Filtering - Filter by status (π’ Active, β Executed, β Rejected, π« Cancelled), chain, and tags
- π Transaction History - View executed and cancelled proposals with default active filter
- π¦ Import/Export - Backup and restore multisig configurations
- π₯ Member Management - Propose changes to members and threshold via UI
βοΈ Pre-flight Checks - Transaction validation before execution- π€ User Highlighting - See your address highlighted in transaction details
- β¨οΈ Keyboard Shortcuts - Quick access with Cmd+K for search, Shift+? for shortcuts
- π Quick Search - Global search across multisigs and proposals
- Node.js 18+ and pnpm
- Ledger device (for signing transactions)
# Install dependencies
pnpm install
# Run development server
pnpm devOpen http://localhost:3000 to view the app.
# Production build
pnpm build
# Start production server
pnpm startClick "Connect Wallet" and connect your Ledger device with the Solana app installed.
- Create New: Set up a new multisig with custom threshold and members
- Import Existing: Import an existing multisig by address
- Select a multisig from the sidebar to view its proposals
- Approve, reject, or execute proposals inline
- View threshold status and approval/rejection counts
- Sidebar Metrics: See Members, Threshold, Active, and Executed counts in Alert badges
- View your connected wallet highlighted with "You" badge
- View all proposals across all multisigs in a single table
- Batch Operations: Select multiple proposals to approve/reject at once
- Smart Filtering: Filter by status with emoji indicators (π’ Active, β Executed, β Rejected, π« Cancelled)
- Search: Find proposals by multisig name or address with debounced search
- Pagination: Navigate through large proposal lists (20 items per page)
- Statistics: See real-time proposal counts and success rates
- Export: Download proposal data to CSV for external analysis
- Pre-flight Checks: Transactions are validated before execution
- View detailed transaction data with your wallet highlighted
- Open member management dialog from multisig options
- Add new members by entering their Solana address
- Remove existing members
- Update the approval threshold
- Preview changes before creating a configuration proposal
Cmd+K(orCtrl+K): Open quick searchShift+?: View all keyboard shortcuts- Navigate search results with arrow keys
- Press
Enterto select
Label wallet addresses for easier identification:
- Click the Tag icon in the header to open the Address Label Manager
- Add Label: Enter address, label name, optional description, and choose a color
- Search Labels: Filter through saved labels
- Edit/Delete: Manage existing labels from the list
- Quick Access: Add labels directly from member lists and transaction details
- Visual Display: Labeled addresses show colored badges with custom names
Click the Settings icon to:
- Edit RPC URLs
- Add custom chains
- Update program IDs
- Reset to defaults
The app implements an intelligent caching layer to optimize RPC requests:
- Automatic Caching: RPC responses are cached for 30 seconds by default
- Cache Invalidation: Cache is automatically cleared when:
- Manual refresh is triggered
- Proposals are approved, rejected, or executed
- Pattern-Based Invalidation: Supports invalidating related cache entries
- TTL Management: Configurable time-to-live for different data types
- Debounced Search: Search inputs wait 300ms before filtering to reduce unnecessary re-renders
- Pagination: Large lists are paginated (20 items/page) to maintain smooth scrolling
- Loading Skeletons: Skeleton loaders provide visual feedback during data fetching
- Optimistic Updates: UI updates immediately during actions, reverting only on error
These optimizations reduce unnecessary RPC calls, provide instant feedback, and ensure smooth performance even with 100+ proposals.
- Framework: Next.js 16 (App Router)
- Styling: Tailwind CSS + shadcn/ui
- State Management: Zustand
- Blockchain: @sqds/multisig, @solana/web3.js
- Hardware Wallet: @ledgerhq/device-management-kit
- Testing: Vitest + @testing-library/react
- Form Validation: Zod + React Hook Form
- Icons: Lucide React
squad/
βββ app/ # Next.js app router pages
β βββ page.tsx # Home page (multisig list)
β βββ monitoring/ # Monitoring dashboard
β βββ proposals/ # Proposals page
βββ components/ # React components
β βββ ui/ # shadcn/ui components (Button, Card, Alert, Badge, etc.)
β βββ skeletons.tsx # Loading skeleton components
β βββ monitoring-view.tsx # Main monitoring dashboard
β βββ proposal-list.tsx # Per-multisig proposal view
β βββ proposal-stats.tsx # Proposal statistics cards
β βββ multisig-stats-card.tsx # Alert/Badge based metrics
β βββ member-management-dialog.tsx # Member & threshold management
β βββ address-label-manager-dialog.tsx # Address labeling UI
β βββ address-with-label.tsx # Address display with labels
β βββ keyboard-shortcuts-dialog.tsx # Shortcuts reference
β βββ quick-search-dialog.tsx # Global search
β βββ ... # Feature components
βββ lib/ # Utility functions
β βββ hooks/ # Custom React hooks
β β βββ use-proposal-actions.ts # Shared proposal actions
β β βββ use-address-label.ts # Address label hooks
β β βββ use-debounce.ts # Debounce hook
β β βββ use-pagination.ts # Pagination hook
β β βββ use-local-storage.ts # localStorage hook
β β βββ use-clipboard.ts # Clipboard operations
β β βββ use-keyboard-shortcuts.ts # Keyboard shortcut manager
β βββ utils/ # Utility functions
β β βββ format-address.ts # Address formatting utilities
β βββ squad.ts # SquadService (blockchain interaction)
β βββ cache.ts # Smart caching layer
β βββ config.ts # Centralized configuration
β βββ export-csv.ts # CSV export utilities
β βββ transaction-simulator.ts # Pre-flight checks
β βββ storage.ts # localStorage abstractions
β βββ validation.ts # Zod schemas & validators
βββ stores/ # Zustand stores
β βββ chain-store.ts # Chain configuration
β βββ multisig-store.ts # Multisig management
β βββ address-label-store.ts # Address label management
β βββ wallet-store.ts # Wallet state
βββ types/ # TypeScript types
β βββ multisig.ts # Multisig & Proposal types
β βββ chain.ts # Chain types
β βββ address-label.ts # Address label types
β βββ wallet.ts # Wallet types
βββ __tests__/ # Test files (74 tests)
βββ lib/ # Library tests
βββ hooks/ # Hook tests
βββ cache.test.ts
βββ address-label.test.ts
βββ format-address.test.ts
βββ export-csv.test.ts
βββ validation.test.ts
# Run tests
pnpm test
# Run linter
pnpm lint
# Format code
pnpm formatMIT