Walty is a self-custodial crypto payment platform for EVM networks. It supports personal wallets and business payment operations without a backend signer.
- Generate payment requests with a USD amount, payable in
USDCon Polygon - Share QR codes or payment links with customers
- Track payment status with on-chain reconciliation
- Support split payments with multiple contributions
- Invite cashiers with expiring invite links
- Assign HD-derived cashier wallets and collect funds back to the owner wallet
- Create and execute refund flows through transaction intents
- Keep an audit trail for business actions
- Create or recover a non-custodial wallet
- Send native tokens and ERC-20 tokens
- Pay business payment requests
- View a multichain portfolio
- Manage contacts and username-based recipients
- Track wallet activity
The codebase supports:
- Ethereum
- Arbitrum
- Base
- Optimism
- Polygon
What users see in the UI is filtered by NEXT_PUBLIC_ENABLED_CHAINS. The
default .env.example currently exposes Polygon only.
- seed phrase generated locally in the browser
- local wallet stored as an encrypted V3 payload
- optional server-side backup stores the same encrypted payload shape
- transaction signing happens client-side
- JWT session stored in an
HttpOnlycookie - CSP nonce and basic hardening headers set in
middleware.ts
Recommended local setup:
git clone https://github.com/ignaciogarcia-dev/walty.git
cd walty
cp .env.example .env
docker compose -f compose.dev.yml up -d
pnpm install
pnpm db:migrate
pnpm devOpen http://localhost:3000.
Notes:
compose.dev.ymlstarts only PostgreSQL for local development.docker-compose.ymlis a production-style app container and expects an external PostgreSQL database.
Required:
DATABASE_URLJWT_SECRET
Required for blockchain-enabled usage:
ALCHEMY_API_KEYNEXT_PUBLIC_ALCHEMY_API_KEY
Required for payment reconciliation:
PAYMENTS_RECONCILE_SECRET
Optional:
ANKR_API_KEYCOINGECKO_API_KEYNEXT_PUBLIC_ENABLED_CHAINSCOOKIE_SECURE
| File | Purpose |
|---|---|
| docs/README.md | Public documentation index |
| docs/getting-started.md | Setup and local run guide |
| docs/development.md | Development workflow and scripts |
| docs/architecture.md | High-level architecture summary |
| docs/repository-map.md | Compact repository map |
| docs/roadmap.md | Current priorities |
Common commands:
pnpm dev
pnpm lint
pnpm test:run
pnpm build
pnpm db:migrate
pnpm db:studioFor the detailed workflow, read docs/development.md.
Walty uses an issue-first contribution model.
Core rules:
- non-trivial changes should start with an issue
- one issue should map to one PR whenever possible
- PRs should include scope, validation, and linked issue
- structural changes should update the relevant docs
Start here: