No description
  • TypeScript 80.3%
  • Svelte 16%
  • Shell 1.8%
  • JavaScript 0.8%
  • Python 0.5%
  • Other 0.5%
Find a file
Morphit Team a6d0ec4018
Some checks failed
morphit-ci / TypeScript typecheck (sweep all workspaces) (push) Successful in 39s
morphit-ci / apps/web svelte-check (svelte-kit sync + svelte-aware tsc) (push) Successful in 32s
morphit-ci / ansible-lint (playbook quality gate) (push) Successful in 13s
morphit-ci / Smoke suite (run-smokes.sh, triple-pulse) (push) Failing after 6m25s
morphit-release / Build + publish release tarball (push) Failing after 7m13s
Release v1.0.0-beta.33
2026-06-26 13:47:37 -07:00
.forgejo morphit-cp197-beta5-handoff-FULL-STATE.tar.gz 2026-06-04 11:26:05 -07:00
apps Release v1.0.0-beta.33 2026-06-26 13:47:37 -07:00
docs Release v1.0.0-beta.33 2026-06-26 13:47:37 -07:00
node_modules Morphit v1.0.0-beta.16 2026-06-13 20:09:20 -07:00
ops Release v1.0.0-beta.31 (bundles cp338-cp348) 2026-06-25 16:42:41 -07:00
packages Release v1.0.0-beta.33 2026-06-26 13:47:37 -07:00
scripts Release v1.0.0-beta.33 2026-06-26 13:47:37 -07:00
.gitignore morphit-audit-2026-05-122-cp70-FULL-STATE.tar.gz 2026-05-20 10:57:03 -07:00
LICENSE Part 120 doc audit — 41 fix-groups across 40 docs 2026-05-13 08:44:42 -07:00
MORPHIT-BRAG-LIST.md Release v1.0.0-beta.31 (bundles cp338-cp348) 2026-06-25 16:42:41 -07:00
package-lock.json Release v1.0.0-beta.33 2026-06-26 13:47:37 -07:00
package.json Release v1.0.0-beta.33 2026-06-26 13:47:37 -07:00
README.md release: v1.0.0-beta.28 — account creation via direct account_create (cp329) 2026-06-22 23:36:03 -07:00
RELEASE-NOTES-v1.0.0-beta.1.md morphit-cp194-indexer-require-esm-fix-HANDOFF-FULL-STATE.tar.gz 2026-06-02 20:38:50 -07:00
RELEASE-NOTES-v1.0.0-beta.2.md morphit-cp194-indexer-require-esm-fix-HANDOFF-FULL-STATE.tar.gz 2026-06-02 20:38:50 -07:00
RELEASE-NOTES-v1.0.0-beta.3.md morphit-cp197-beta5-handoff-FULL-STATE.tar.gz 2026-06-04 11:26:05 -07:00
RELEASE-NOTES-v1.0.0-beta.4.md morphit-cp197-beta5-handoff-FULL-STATE.tar.gz 2026-06-04 11:26:05 -07:00
RELEASE-NOTES-v1.0.0-beta.5.md morphit-cp197-beta5-handoff-FULL-STATE.tar.gz 2026-06-04 11:26:05 -07:00
RELEASE-NOTES-v1.0.0-beta.6.md morphit-beta6-release-candidate-FULL-STATE.tar.gz 2026-06-05 17:54:57 -07:00
RELEASE-NOTES-v1.0.0-beta.7.md release: v1.0.0-beta.7 2026-06-06 20:44:20 -07:00
RELEASE-NOTES-v1.0.0-beta.8.md morphit-cp229-rss-3format-beta8-FULL-STATE.tar.gz 2026-06-08 22:49:10 -07:00
RELEASE-NOTES-v1.0.0-beta.9.md Release v1.0.0-beta.9 2026-06-10 00:15:11 -07:00
RELEASE-NOTES-v1.0.0-beta.10.md Release v1.0.0-beta.10 2026-06-10 10:09:58 -07:00
RELEASE-NOTES-v1.0.0-beta.11.md Release v1.0.0-beta.11 2026-06-10 15:44:41 -07:00
RELEASE-NOTES-v1.0.0-beta.12.md Morphit v1.0.0-beta.12 — systemd services + encrypted-credential relay unlock, polish, ceremony 2026-06-10 20:24:04 -07:00
RELEASE-NOTES-v1.0.0-beta.13.md Morphit v1.0.0-beta.13 2026-06-11 11:52:44 -07:00
RELEASE-NOTES-v1.0.0-beta.14.md Morphit v1.0.0-beta.14 2026-06-11 21:39:47 -07:00
RELEASE-NOTES-v1.0.0-beta.15.md Morphit v1.0.0-beta.15 2026-06-12 22:05:20 -07:00
RELEASE-NOTES-v1.0.0-beta.16.md Morphit v1.0.0-beta.16 2026-06-13 20:09:20 -07:00
RELEASE-NOTES-v1.0.0-beta.17.md Morphit v1.0.0-beta.17 — fix orderbook filter stacking + harden update prompt 2026-06-14 12:43:02 -07:00
RELEASE-NOTES-v1.0.0-beta.18.md Morphit v1.0.0-beta.18 — morphit-ops: auto-prune old backups + verify.json frontend check 2026-06-14 21:53:57 -07:00
RELEASE-NOTES-v1.0.0-beta.19.md Morphit v1.0.0-beta.19 — libsodium lazy-load, RPC CORS-clean curation, warmup-removal privacy fix, UpdateBanner loop fix, onboarding scroll, npm-audit review 2026-06-15 12:40:08 -07:00
RELEASE-NOTES-v1.0.0-beta.20.md Morphit v1.0.0-beta.20 2026-06-16 00:47:07 -07:00
RELEASE-NOTES-v1.0.0-beta.21.md Morphit v1.0.0-beta.21 2026-06-17 19:54:49 -07:00
RELEASE-NOTES-v1.0.0-beta.22.md Morphit v1.0.0-beta.22 2026-06-18 20:06:27 -07:00
RELEASE-NOTES-v1.0.0-beta.23.md Morphit v1.0.0-beta.23 2026-06-19 22:00:07 -07:00
RELEASE-NOTES-v1.0.0-beta.24.md Morphit v1.0.0-beta.24 2026-06-20 22:15:03 -07:00
RELEASE-NOTES-v1.0.0-beta.25.md Release v1.0.0-beta.25 2026-06-21 19:57:15 -07:00
RELEASE-NOTES-v1.0.0-beta.26.md release: v1.0.0-beta.26 2026-06-22 16:22:02 -07:00
RELEASE-NOTES-v1.0.0-beta.27.md release: v1.0.0-beta.27 — RPC-node failover (rpc-pool 52x), Ansible dead-node fix, regression guards 2026-06-22 20:10:43 -07:00
RELEASE-NOTES-v1.0.0-beta.28.md release: v1.0.0-beta.28 — account creation via direct account_create (cp329) 2026-06-22 23:36:03 -07:00
RELEASE-NOTES-v1.0.0-beta.29.md Release v1.0.0-beta.29 2026-06-23 20:11:14 -07:00
RELEASE-NOTES-v1.0.0-beta.30.md Release v1.0.0-beta.31 (bundles cp338-cp348) 2026-06-25 16:42:41 -07:00
RELEASE-NOTES-v1.0.0-beta.31.md Release v1.0.0-beta.31 (bundles cp338-cp348) 2026-06-25 16:42:41 -07:00
RELEASE-NOTES-v1.0.0-beta.32.md Release v1.0.0-beta.32 2026-06-25 22:46:13 -07:00
RELEASE-NOTES-v1.0.0-beta.33.md Release v1.0.0-beta.33 2026-06-26 13:47:37 -07:00
SECURITY.md morphit-audit-2026-05-122-cp138-FULL-STATE.tar.gz 2026-05-24 21:38:46 -07:00
TARBALL.md Release v1.0.0-beta.33 2026-06-26 13:47:37 -07:00
THIRD-PARTY-LICENSES.md Morphit v1.0.0-beta.20 2026-06-16 00:47:07 -07:00
tsconfig.smoke.json morphit-audit-2026-05-122-cp63-FULL-STATE.tar.gz 2026-05-19 21:42:58 -07:00

Morphit

A federated, non-custodial, no-KYC peer-to-peer marketplace for trading fiat against Bitcoin, Monero, BLURT, USDT, USDC, DAI, Bitcoin Cash, Litecoin, Dash, Dogecoin, Zcash, Pirate Chain, Decred, Solana, Ethereum, and Ripple.

You hold your own keys. There are no deposits to make and no withdrawals to wait for; trades settle directly between counterparty wallets. There is no central server to subpoena and no central database to leak — the orderbook lives on a public blockchain, and any operator running a Morphit indexer sees the same data. If one operator goes dark, another's URL still works and the federation continues.

This repository carries the full source for the indexer, relay, frontend, operator CLI, Matrix incident bot, and MCP server, plus the ops material (Ansible role, systemd units, env templates, runbooks) to stand up an instance on a fresh Ubuntu 24.04 VPS in roughly 30 minutes.

Status

Pre-launch, currently in the v1.0.0-beta release series. The canonical public instance is morphit.io; community operators are welcome to launch their own nodes alongside. There are no production deployments yet — the codebase has been through an intensive multi-month pre-launch hardening campaign documented in docs/AUDIT-2026-05.md.

New here? Start here 👇

If you want to run a Morphit node (or upgrade one, or fix something), don't read this whole file — go straight to the plain-language navigation hub, which tells you exactly which guide to open for what you want to do:

👉 docs/start-here/

The two commands you'll use most, from your install directory: npx morphit-ops (opens a menu of everything) and npx morphit-ops upgrade (updates to the latest version). The rest of this README is a technical overview for people evaluating or building the software.

What this is, concretely

  • Federated orderbook. Orders are signed by the user's posting key and broadcast as custom-JSON ops on the underlying chain. Every Morphit indexer in the federation reads the same chain and surfaces the same orderbook.
  • Non-custodial. Trade settlement is wallet-to-wallet. There is no on-platform balance for an operator to mismanage. Listing fees are paid on-chain; the split is asymmetric and disclosed upfront: BLURT-paid listing fees split 90/10 — 90% to the operator running the instance the order was posted through, 10% to the project treasury (@morphit-fees). BTC- and XMR-paid listing fees go 100% to the project treasury (the canonical morphit.io devs' wallets) — not to individual operators. This asymmetry is deliberate (BLURT splits atomically on-chain; BTC/XMR would require off-chain custodial bookkeeping that breaks the non-custodial design), and it's why operators earn from BLURT-paid fees only. Users pay 50% less when paying in BLURT, so BLURT-paid is where most volume — and operator revenue — naturally lands. Full mechanics: docs/FEES-AND-REWARDS.md.
  • No KYC. Signup is a cryptographic public key and a username. The system has no place to store an ID even if a regulator demanded one.
  • Privacy first. No cookies, no analytics, no IP logging. XMR support hardens with subaddresses and per-payment view-key proofs (the operator's private view key never reaches the network). On every chain Morphit trades (BTC, BCH, LTC, DASH, DOGE, ZEC, ARRR, DCR, SOL, ETH, XRP, BLURT, XMR), the address-share modal offers default-ON amount randomization and address-reuse warnings; BTC also gets optional PayJoin (BIP-78) endpoint propagation; DASH gets a wallet-side PrivateSend pre-mix workflow explained in the per-asset guide. Stablecoin trades (USDT, USDC, DAI) get the same amount-randomization defense at 6-decimal precision (cp30 reversal of the cp26 USDT pass-through decision — Circle/Tether freeze power is a separate, independently-real threat documented in each per-asset privacy guide). Per-asset privacy guides live at /[lang]/privacy/{asset}.
  • Encrypted chat. Per-message ECIES (X25519 + ChaCha20-Poly1305-IETF) with sender ephemerals, stored on-chain as ciphertext — see docs/adr/0015-chat-crypto.md.
  • Reach. Public hostname, Tor .onion, I2P .b32, Lokinet, and Nostr-relay channels are all first-class operator-config surfaces.

For the long version, every claim is enumerated and source-anchored in MORPHIT-BRAG-LIST.md.

Repo layout

Directory What's in it
apps/web/ SvelteKit frontend, fully prerendered per locale (10 locales × dozens of indexable routes; the canonical list of routes is whatever apps/web/src/routes/[lang]/**/+page.svelte enumerates at build time)
apps/indexer/ Reads Blurt blocks, materializes orderbook + chat + reputation, exposes /v1/* HTTP API
apps/relay/ Holds the operator's relay active key; signup broadcasts, welcome-bonus payouts, Web Push delivery
apps/ops-cli/ morphit-ops init / edit / upgrade — operator setup wizard and release apply tool
apps/matrix-bot/ Optional Matrix incident-pager bot for operators who want push-to-phone alerting
packages/ Shared TypeScript packages: asset-registry, indexer-client, relay-client, operator-config, release-schema, net-defense, rpc-pool
docs/ ADRs (docs/adr/0001-… through 0046-…), audit logs, operator runbooks
ops/ Ansible role, systemd units, env templates, nginx + BunkerWeb configs, postgres init
scripts/ Build, smoke, mediakit, sitemap, llms.txt, and ceremony helpers

Running an instance

The complete walkthrough is in docs/RUN-A-MORPHIT-NODE.md. The short version:

  1. Provision a $5/mo Ubuntu 24.04 VPS with Postgres reachable.
  2. git clone this repo (or extract a signed release tarball — see docs/UPGRADING.md).
  3. npm ci from the repo root (workspace install — must be run from the root).
  4. npm run build --workspaces --if-present to build the artifacts: the static web app nginx serves, plus the morphit-ops and morphit-mcp bundles. (The relay and indexer run from TypeScript source and have no build step; the web app must be built before nginx has anything to serve.)
  5. npx morphit-ops init to walk the setup wizard (~23 prompts; configures treasury addresses, fee targets, explorer URLs, operator tag, VAPID keys for Web Push).
  6. bash scripts/run-smokes.sh to confirm the self-checks (~358 runners, several thousand scenarios) pass against your environment.
  7. Follow docs/PRE-LAUNCH-CHECKLIST.md and docs/LAUNCH-DAY.md before opening to traffic.

For developers

  • Architecture overview: docs/ARCHITECTURE.md
  • API reference: docs/API.md
  • ADR index: docs/adr/0001-… through docs/adr/0046-…
  • Audit log: docs/AUDIT-2026-05.md
  • Per-language translation guide: docs/CONTRIBUTING-TRANSLATIONS.md
  • Adding a workspace (apps/* or packages/*): docs/ADDING-A-WORKSPACE.md
  • Adding a tradable coin: docs/ADDING-A-COIN.md
  • Locale graduation (PLANNED → SUPPORTED): docs/LOCALE-GRADUATION.md

The smoke suite is the source of truth for behavior:

bash scripts/run-smokes.sh

Triple-pulse it (run three times back-to-back) to filter flakes before submitting changes.

Reporting bugs

Use Forgejo's New Issue form — the bug-report template auto-loads and walks you through the fields we need. Security-sensitive issues (anything involving keys, funds, fee bypass, or leaked private data) go to the operator's Matrix DM channel listed in §16 of the form — do NOT post them as a public issue or in the community chat room.

Offline alternative: docs/NEW-ISSUE-FOUND.md (plain Markdown copy of the bug-report fields you can email).

Community

  • Matrix room (public): #agorise:matrix.org — for questions, announcements, "is this a known bug?"
  • Security disclosures (private): @agorise:matrix.org direct message (E2EE) — see docs/SECURITY.md.

License

AGPL-3.0-only. Every operator running a modified instance must make their source available to their users. See LICENSE.

Third-party dependencies are used under their own licenses (overwhelmingly permissive — MIT/ISC/Apache-2.0/BSD); see THIRD-PARTY-LICENSES. Note that the Blurt client @beblurt/dblurt carries a BSD-3-Clause-No-Military-License (a no-military-use restriction) — disclosed there for operators and redistributors.


Don't trust the project's marketing — verify it. Every claim in MORPHIT-BRAG-LIST.md points at code, an ADR, or a smoke that proves it. If you find one that doesn't, open an issue.