Kaspa Links turns Kaspa payments into shareable links.
Create a URL or QR for a tip, donation, invoice, transfer, fundraising goal, creator profile, or claimable Kaspa reward. Supporters can review the payment intent before opening a wallet, and funds move wallet-to-wallet without custody.
Kaspa Links never holds funds, never asks for seed phrases, and never stores wallet private keys. See Security for the complete trust model.
- Mobile-first public payment pages with QR, copy, Kaspium handoff, and KasWare support
- Tips, donations, invoices, transfers, and fundraising goals
- Closed-beta Telegram Agent for creator commands and payment notifications
- Public creator profiles with human-readable
/u/:username/:sluglinks - Creator dashboard, link management, receipts, conversion analytics, and supporter wall
- Claimable Kaspa links with one-time funding addresses, browser-side claim/refund signing, expiry, and server-authoritative on-chain status
- Branded social previews, downloadable QR codes, OBS overlay, embed helpers, and TypeScript SDK
- Optional Kaspa REST indexer integration for on-chain payment detection
- Self-hosted Docker Compose deployment with Caddy and PostgreSQL
Normal payments go directly from the supporter wallet to the recipient wallet. Kaspa Links creates and displays payment instructions but does not sign or forward those payments.
Claimable links lock KAS in a one-time on-chain script. The claim code stays in the browser-only URL fragment and claims are signed in the recipient's browser. If nobody claims in time, the script sends the KAS back to the wallet address committed at creation; that return needs no key, so the relay only ever handles signed or keyless transactions and cannot redirect funds. Links created before automatic returns use a browser-held refund key instead. See docs/claimable-links.md.
apps/web- Next.js UI and API routespackages/db- Prisma schema, client, and seedpackages/kaspa- Kaspa address, amount, URI, serialization, and Toccata helperspackages/kaspa-indexer- Kaspa REST indexer adapterpackages/wallet-adapter- client-only KasWare integrationpackages/sdk- public TypeScript clientpackages/embed-button- dependency-free link and button helpersdeploy- Caddy and database-backup configuration
Requirements: Node.js 22+, pnpm 11+, and PostgreSQL for database-backed flows.
pnpm install
pnpm devUseful commands:
pnpm lint
pnpm typecheck
pnpm test
pnpm build
pnpm db:validate
pnpm db:generate
pnpm db:migrate:dev
pnpm db:migrate:deploy
pnpm db:seedSee Local development for environment and database setup.
/- product home/try-it-out- guided walkthrough/u/:username- public creator profile/u/:username/:slug- human-readable payment link/a/:publicId- stable payment-link fallback/claim- claimable Kaspa link/overlay/:publicId- OBS-compatible overlay/stats- public network activity summary/faqand/roadmap- product guidance and public roadmap
/create-profileand/sign-in/my-profile/new-link/my-links/dashboard
/operator-stats- private, Caddy-protected traffic overview/admin- token-protected administrative tools/api/health- JSON health probe
| Topic | File |
|---|---|
| Security model | docs/security.md |
| Claimable links | docs/claimable-links.md |
| Public Action specification | docs/public-action-spec.md |
| API reference | docs/api.md |
| Creator tools | docs/creator-dashboard.md |
| Wallet compatibility | docs/wallet-compatibility.md |
| On-chain detection | docs/chain-detection.md |
| Telegram Agent | docs/agent.md |
| Operator analytics | docs/operator-analytics.md |
| Deployment | docs/deployment.md |
| Local development | docs/local-development.md |
| Product scope | docs/product-scope.md |
The supported deployment uses Docker Compose with Caddy as the only public ingress, an internal Next.js app, an internal PostgreSQL database, and an internal claimable transaction relay.
Copy .env.example to .env, replace every placeholder, and never commit the resulting .env.
Then follow Deployment.
- Website: kaspalinks.com
- X: @KaspaLinks
- Source: github.com/KaspaLinks/kaspalinks
Kaspa Links is an independent community project and is not an official Kaspa product.