Thanks for your interest in contributing to ForgeKey! Whether it's bug reports, feature requests, or code contributions, we appreciate your help.
# Clone the repository
git clone https://github.com/ForgeKey/ForgeKey.git
cd ForgeKey
# Install dependencies
pnpm install
# Run in development mode
pnpm tauri-devForgeKey/
├── src/ # Next.js frontend
│ ├── api/ # Tauri command wrappers
│ ├── components/ # React components
│ ├── hooks/ # Custom hooks (wallet operations, routing)
│ ├── stores/ # Zustand state management
│ └── router/ # Custom router implementation
├── src-tauri/ # Rust backend
│ └── src/commands/ # Tauri commands (Foundry CLI wrappers)
└── docs/ # Documentation
ForgeKey is a Tauri app with a Next.js frontend and Rust backend:
- Frontend: React with Zustand for state management. Custom router (not file-based). UI built with Radix primitives and Tailwind CSS.
- Backend: Rust commands that wrap Foundry's
cast walletCLI. No direct cryptographic operations — all key management goes through Foundry. - Security: Passwords and private keys use
ZeroizedStringwrappers that clear memory after use.
- Run
pnpm lintbefore submitting - Follow existing patterns in the codebase
- Use TypeScript strictly — avoid
anytypes
This is critical. ForgeKey handles sensitive data:
- Never log passwords or private keys
- Always use
ZeroizedStringfor sensitive data - Call
zeroize()infinallyblocks to ensure cleanup - Don't store decrypted keys longer than necessary
Use clear, descriptive messages:
feat: add vanity address generation
fix: prevent password from persisting after dialog close
refactor: extract FormField component
docs: update installation instructions
- Keep changes focused — one feature or fix per PR
- Include a clear description of what and why
- Update documentation if needed
- Ensure
pnpm lintpasses
Open an issue with:
- Steps to reproduce
- Expected vs actual behavior
- Platform and version info
- Screenshots if applicable
Open an issue describing:
- The problem you're trying to solve
- Your proposed solution
- Any alternatives you've considered
Do not open public issues for security vulnerabilities.
See SECURITY.md for how to report security issues.
By contributing, you agree that your contributions will be licensed under the GPL-3.0 License.
