-
Morphit v1.12.9
StableAll checks were successfulmorphit-ci / TypeScript typecheck (sweep all workspaces) (push) Successful in 47smorphit-ci / apps/web svelte-check (svelte-kit sync + svelte-aware tsc) (push) Successful in 38smorphit-ci / Integration tests (real Postgres 16) (push) Successful in 40smorphit-ci / ansible-lint (playbook quality gate) (push) Successful in 15smorphit-ci / Smoke suite (run-smokes.sh, triple-pulse) (push) Successful in 29m44smorphit-release / Build + publish release tarball (push) Successful in 36m13sreleased this
2026-08-18 15:35:12 +00:00 | 65 commits to main since this releaseMorphit v1.12.9
Theme: a tighter tor-only node. This release stops a tor-only indexer from reaching clearnet Blurt RPC (which would reveal the node's real IP to those RPC operators), fixes web-push configuration on tor-only nodes so the relay never crash-loops over an invalid VAPID subject, and makes the warrant-canary restore itself automatically on upgrade for appliance/Ansible installs.
Fixed
Tor-only indexers now read the chain over hidden services only. A tor-only node was still reaching six clearnet Blurt RPC endpoints, exposing its real IP to those operators — the exact exposure tor-only exists to prevent. The indexer now empties its clearnet RPC pool on tor-only and reads purely over the hidden-service (.onion / .b32.i2p) pool; the "at least one chain source" requirement is now enforced over the combined local + clearnet + hidden pool, so a hidden-only configuration is valid while a truly source-less one is still rejected. Clearnet nodes are unchanged.
Web push no longer misconfigures itself on tor-only nodes. The VAPID subject was derived as
https://<domain>, which is a domain-less, invalidhttps://on a tor-only node. It now derives amailto:from the operator's contact URL when that is amailto:, and otherwise stays empty — which cleanly disables push instead of producing an invalid subject. Clearnet nodes still derivehttps://<domain>as before. (The always-on in-tab ambient notifications — tab title and favicon unread badge — already work on tor-only regardless of push.)The warrant canary restores itself on upgrade for appliance/Ansible installs. An upgrade could leave the canary missing until the next weekly refresh on boxes provisioned with a system
morphit-canary.service(rather than a~/.morphitrefresh script). The upgrade now triggers that service directly — the exact unit the weekly timer fires — and falls back to the home-directory refresh script for interactive installs. Either path restores the canary immediately with no manual step.Build-integrity manifests are now byte-identical regardless of deploy path. The
.shippedbuild marker is excluded from/verify.jsonhashing (it's a build-system signal, not a served asset), so an instance that re-ran the manifest step and one that kept the shipped manifest now produce identicalverify.jsonfiles.Small UI fix. On the "about this instance" page, a 56-character .onion origin now wraps instead of overflowing its cell.
The warrant-canary refresh no longer reaches clearnet on a tor-only node. The weekly canary's freshness-proof fetches (Blurt chain-head, Bitcoin head, news headline) were going directly to clearnet endpoints on a tor-only node, which could reveal the node's real IP to those third parties — the same class of exposure this release closes for the indexer. On tor-only, all three now route through the co-located Tor SOCKS proxy (DNS resolved proxy-side, so nothing leaks), reaching the same freshness sources through a Tor exit. It is fail-safe: if the Tor proxy is down the canary degrades or holds rather than ever falling back to a direct clearnet connection. Clearnet nodes are byte-identical to before.
Notes
- No database migration in this release.
- The tor-only privacy work in this release (indexer hidden-only RPC + the canary routing over Tor) is code-complete but its live Tor routing was validated by shape/smoke, not end-to-end in CI — confirm on a real tor-only box that the canary's
route = tor-only (SOCKS …)and the indexer reads only over hidden endpoints. Details indocs/AUDIT-cp760-v1.12.9-DELTA-DEEP-DEEP.md. - Everything from v1.12.8 (the build-integrity banner bootstrap fix) is included.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Morphit v1.12.8
StableAll checks were successfulmorphit-ci / TypeScript typecheck (sweep all workspaces) (push) Successful in 47smorphit-ci / apps/web svelte-check (svelte-kit sync + svelte-aware tsc) (push) Successful in 39smorphit-ci / Integration tests (real Postgres 16) (push) Successful in 40smorphit-ci / ansible-lint (playbook quality gate) (push) Successful in 16smorphit-ci / Smoke suite (run-smokes.sh, triple-pulse) (push) Successful in 29m4smorphit-release / Build + publish release tarball (push) Successful in 35m12sreleased this
2026-08-18 00:45:08 +00:00 | 66 commits to main since this releaseMorphit v1.12.8
Theme: the fix that stops the false "Build integrity check failed" banner now actually takes effect. v1.12.7 shipped the prebuilt frontend but couldn't deploy it on the same upgrade that delivered it (an upgrade runs the previous version's code); this release closes that gap at the build-script level, so it works on every upgrade from here on — from any prior version.
Fixed
The prebuilt frontend is now used no matter how old the upgrading node is. v1.12.7 made instances deploy the canonical prebuilt frontend instead of rebuilding it locally — but because
morphit-ops upgraderuns the code of the version you're upgrading from, the v1.12.7 upgrade itself still rebuilt. The decision now lives in the build script (apps/web), which always comes from the new release, so upgrading to this version (and every version after) deploys the shipped, byte-identical frontend that matches the on-chain hashes — regardless of which version the node is coming from. Instances that were tripping the tamper banner will stop once they're on this release and re-registered.Notes
- No database migration in this release.
- After upgrading, a federated instance serves byte-for-byte the same frontend as the canonical build, so its
/verify.jsonmatches the on-chain-pinned hashes and the build-integrity check passes. - Everything from v1.12.7 (hidden-only RPC on tor-only sites, honest RPC-connectivity reporting, self-healing first backup, 15-second offline register timeout) is included.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
Morphit v1.12.7
StableAll checks were successfulmorphit-ci / TypeScript typecheck (sweep all workspaces) (push) Successful in 47smorphit-ci / apps/web svelte-check (svelte-kit sync + svelte-aware tsc) (push) Successful in 39smorphit-ci / Integration tests (real Postgres 16) (push) Successful in 41smorphit-ci / ansible-lint (playbook quality gate) (push) Successful in 16smorphit-ci / Smoke suite (run-smokes.sh, triple-pulse) (push) Successful in 29m10smorphit-release / Build + publish release tarball (push) Successful in 35m19sreleased this
2026-08-17 22:48:16 +00:00 | 67 commits to main since this releaseMorphit v1.12.7
Theme: federated instances stop showing a false "Build integrity check failed" banner, tor-only visitors never touch the clear net, and health/backup reporting on a fresh node is honest and self-healing.
Fixed
Federated instances no longer show a false "Build integrity check failed" banner. Until now, each operator rebuilt the web frontend locally during install/upgrade, and because those builds aren't byte-reproducible across machines, an honest instance's assets didn't match the hashes published on-chain — tripping the tamper banner on every federated node. The release now ships one canonical, prebuilt frontend, and instances deploy those exact bytes instead of rebuilding (falling back to a local build only if the prebuilt is ever absent). Every instance now serves identical assets that match the on-chain pin. The frontend is generic — each instance still loads its own identity (name, addresses) at runtime — so one build serves the whole federation.
A visitor on a tor-only site never opens a clearnet connection. When a page is served from a
.onion/.i2paddress, the app now uses a hidden-service-only RPC pool with no clearnet fall-through at all — a Tor/I2P visitor's browser can never reach out to the clear net, not even as a fallback. Clearnet instances are unchanged (they still try hidden nodes first for Tor-Browser visitors, then clearnet)."Blurt RPC connectivity" is reported honestly on a fresh/offline node. The indexer counted an RPC endpoint as healthy merely because it wasn't in a cooldown — which is true of every endpoint the instant the node starts, before any probe has run. So a fresh or offline node briefly claimed RPC connectivity it didn't have. An endpoint now counts as healthy only after a real success, so a not-yet-connected node honestly reports zero.
A fresh node's first backup now lands on its own. On a fresh (especially offline) node the indexer can take a couple of minutes to finish migrating its schema; the first backup would fire before the schema existed, correctly skip, and then wait until the next daily run — leaving the operator at "no backup yet." The install now retries the first backup until a real dump lands.
morphit-ops registerrun offline fails fast instead of hanging. The registration broadcast now times out after 15 seconds with a clear message rather than blocking on an unreachable RPC.Notes
- No database migration in this release.
- Instances install/upgrade faster now (no local frontend rebuild in the common case).
- If you operate an instance: after upgrading, your served
/verify.jsonwill match the canonical on-chain hashes, so the build-integrity check passes.
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
1 download
-
Morphit v1.12.6
StableAll checks were successfulmorphit-ci / TypeScript typecheck (sweep all workspaces) (push) Successful in 47smorphit-ci / apps/web svelte-check (svelte-kit sync + svelte-aware tsc) (push) Successful in 39smorphit-ci / Integration tests (real Postgres 16) (push) Successful in 39smorphit-ci / ansible-lint (playbook quality gate) (push) Successful in 16smorphit-ci / Smoke suite (run-smokes.sh, triple-pulse) (push) Successful in 29m57smorphit-release / Build + publish release tarball (push) Successful in 35m9sreleased this
2026-08-17 17:12:26 +00:00 | 68 commits to main since this releaseMorphit v1.12.6
Theme: the guided install never hangs, online or offline. The "list your instance" step now completes instantly on an offline/air-gapped install instead of blocking on a chain broadcast that has no network to reach.
Fixed
The install's "list your instance on the federated directory" step no longer hangs offline. On an offline or air-gapped install, that step signs your registration and tries to broadcast it to the chain — but with no network, the broadcast RPC calls had nothing to answer them and blocked until the operator pressed Ctrl-C. The step now checks whether the box can actually reach the chain first: if it can't, it skips the live attempt and relies on the deferred registration (which was already armed), so the install finishes cleanly and publishes your instance automatically the moment the box comes online. Nothing about the behavior on an online install changes — it still lists immediately.
morphit-ops registerrun offline fails fast instead of hanging. The registration broadcast now times out after 30 seconds with a clear message ("this box may not be online yet") rather than blocking indefinitely, so a manual registration on a not-yet-connected box returns control to you instead of appearing frozen.Notes
- No database migration in this release.
- These changes only affect the offline/air-gapped install and manual-registration paths; an online install and normal registration are unchanged.
- A registration that couldn't be broadcast (offline) is never lost — the deferred first-online registration publishes it automatically once the box has connectivity.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
Morphit v1.12.5
StableAll checks were successfulmorphit-ci / TypeScript typecheck (sweep all workspaces) (push) Successful in 50smorphit-ci / apps/web svelte-check (svelte-kit sync + svelte-aware tsc) (push) Successful in 39smorphit-ci / Integration tests (real Postgres 16) (push) Successful in 41smorphit-ci / ansible-lint (playbook quality gate) (push) Successful in 17smorphit-ci / Smoke suite (run-smokes.sh, triple-pulse) (push) Successful in 30m14smorphit-release / Build + publish release tarball (push) Successful in 36m3sreleased this
2026-08-17 06:49:15 +00:00 | 69 commits to main since this releaseMorphit v1.12.5
Theme: the tor-only relay comes up on its own. This release closes the last crashes on the hidden-service install path — a fresh tor-only node now boots every service, unattended, with no manual steps. Plus honest reporting fixes and a backup safeguard.
Fixed
The relay no longer crash-loops on a tor-only node. A tor-only node has no clearnet domain, so its Web Push (VAPID) subject rendered as a domain-less
https://, which the relay rejected — taking the whole relay down over an optional feature. The relay now treats an unusable VAPID subject as "web push disabled" and boots normally (web push is a clearnet-only browser feature and doesn't apply to a tor-only node anyway). The operator gets a clear, non-alarming log line explaining push is off.Dynamic DNS is no longer set up — or flagged — on a tor-only node. A tor-only node has no clearnet domain for dynamic DNS to update, so the ddns role is now skipped entirely and the install summary no longer expects or reports the
morphit-ddns.timer. No more spurious "dynamic DNS ✗" on a hidden-service install.The relay is no longer mislabeled "answered, but not as the relay." The health command's classifier was treating the relay's
/v1/health(which has no chain-head field, because it isn't an indexer) as an indexer that hadn't synced. A healthy relay now reports correctly.Backups never keep a schemaless fragment. If a backup runs before the indexer has migrated its schema (a race possible on a fresh node), it now skips cleanly instead of keeping a tiny, useless dump that health would flag as "failing." The next run captures a real backup once the schema exists.
Notes
- No database migration in this release.
- All fixes are on the tor-only install path or in operational reporting; clearnet nodes are unaffected (a clearnet relay with a valid VAPID subject still has web push enabled exactly as before).
- With this release, a fully air-gapped tor-only install brings up every service — indexer, relay, transports, canary, backups — on its own after first connectivity.
Downloads
-
Source code (ZIP)
4 downloads
-
Source code (TAR.GZ)
2 downloads
-
Morphit v1.12.4
StableAll checks were successfulmorphit-ci / TypeScript typecheck (sweep all workspaces) (push) Successful in 50smorphit-ci / apps/web svelte-check (svelte-kit sync + svelte-aware tsc) (push) Successful in 40smorphit-ci / Integration tests (real Postgres 16) (push) Successful in 41smorphit-ci / ansible-lint (playbook quality gate) (push) Successful in 17smorphit-ci / Smoke suite (run-smokes.sh, triple-pulse) (push) Successful in 29m45smorphit-release / Build + publish release tarball (push) Successful in 35m35sreleased this
2026-08-17 01:25:00 +00:00 | 70 commits to main since this releaseMorphit v1.12.4
Theme: tor-only nodes work end to end, and operators can move between clearnet and tor. A node installed with no clearnet — no domain, no TLS — now boots cleanly, reports its health honestly, and (once you re-register) advertises its .onion to the federation. Plus: relay keys are always encrypted, and the stats page gained the RPC-endpoints view.
Fixed
Tor-only nodes now boot. A node installed in tor-only mode previously crash-looped: the relay rejected its own
http://…onionorigin (demanding https), and the indexer had no public origin set (the template assumed a clearnet domain). Both are fixed —.onion/.i2porigins are recognized as self-authenticating and served over http, and the tor-only install now points the indexer's public origin at the onion.The .b32.i2p address is written correctly. The i2p-address derivation split the address across two lines, corrupting the value and printing a harmless-but-alarming shell error at every service start. It's now a single clean line. This affected every install with i2p enabled, clearnet included.
Health tells the truth when it can't see the chain. A node that hasn't established a chain head yet — just restarted, or offline — no longer reports a false "synced" with a bogus zero-block lag. It reports "unknown" until it has a real chain head to compare against.
Changed
Operators can update their registration — and move between clearnet and tor. Re-registering now updates your instance's origin, display name, and contact URL instead of being refused as "already registered." This is how you switch a node from a clearnet domain to a
.onion(or back) and have the federation follow you. Your tag stays permanent (first-come-first-served, so nobody can take a name that's yours), and only the account that owns the registration can change it.Relay keys are always stored encrypted. The setup wizard and key-rotation no longer offer a plaintext option. The relay unlocks an encrypted key automatically at boot from a host-bound sealed credential — no prompt, and a stolen disk can't decrypt it — so plaintext storage carried real risk for no benefit.
Stats page: RPC endpoints and the data note now live here. The "updated / building an aggregator" note is on its own card, and the RPC-endpoints list moved from settings to the stats page, where it's public transparency about which nodes an instance syncs from.
Notes
- No database migration in this release.
- The registration change is consensus-level: every indexer applies the same upsert, so the federation converges. It's backward-compatible — a first-time registration behaves exactly as before.
- Existing clearnet nodes are unaffected by the tor-only fixes.
Downloads
-
Source code (ZIP)
4 downloads
-
Source code (TAR.GZ)
2 downloads
-
Morphit v1.12.3
StableAll checks were successfulmorphit-ci / TypeScript typecheck (sweep all workspaces) (push) Successful in 48smorphit-ci / apps/web svelte-check (svelte-kit sync + svelte-aware tsc) (push) Successful in 41smorphit-ci / Integration tests (real Postgres 16) (push) Successful in 42smorphit-ci / ansible-lint (playbook quality gate) (push) Successful in 16smorphit-ci / Smoke suite (run-smokes.sh, triple-pulse) (push) Successful in 32m8smorphit-release / Build + publish release tarball (push) Successful in 37m21sreleased this
2026-08-16 04:04:17 +00:00 | 71 commits to main since this releaseMorphit v1.12.3
Theme: the offline-appliance path finishes itself, completely. A node installed with no internet now — the moment it first connects — brings up its Tor/I2P transports, publishes its warrant canary, and registers itself on-chain, all unattended and with the active key kept encrypted the whole time. Plus honest health reporting and safer key defaults.
Fixed
On-chain registration now completes automatically on an offline install — without ever storing your passphrase in plaintext. When you opt into "list my instance" during setup, first-online now unlocks your encrypted active key the same way the relay does — from the host-bound sealed credential (decrypted only in RAM, for the one registration call) — and publishes the registration the moment the box is online. Previously this silently failed for encrypted keys, leaving you to register by hand.
The warrant canary now actually publishes on first-online. The publish step was invoking the refresh script with the wrong shell, so it exited before doing anything. It now runs correctly, so a fresh install signs and serves its canary on its own once it can fetch the freshness proofs.
Tor and i2pd reseed/bootstrap on first connection. A node installed offline starts these daemons with no network; first-online now restarts them when connectivity appears, so i2pd actually reseeds instead of sitting with an empty database, and the hidden nodes come up on their own.
Health: the reachable-node count and the "catching up from N nodes" line both match the list shown. No more "9/10" or "9 nodes" when all ten are green — both are counted from the same per-node list.
Changed
The relay active key is always stored encrypted. The setup wizard and the key-rotation command no longer offer a plaintext option. Since the relay unlocks an encrypted key automatically at boot (from a host-bound sealed credential, with no prompt to hang on and no way for a stolen disk to decrypt it), plaintext storage carried real risk for no operational benefit. Encrypted is now simply the way keys are stored.
Clearer, accurate wording throughout the key-setup flow and operator docs. Corrected stale text that claimed the relay "prompts for the passphrase at startup" (it unlocks automatically), including an operations-guide warning that wrongly said a reboot could leave the relay waiting for a passphrase indefinitely.
Small wording: a fresh install's i2pd warm-up note now says "~10 minutes," and the registration-permanence prompt reads "only superseded by a fresh register op."
Notes
- No database migration in this release.
- Existing installs are unaffected; the automation and key-default changes apply to fresh and re-run setups.
- Nothing here touches trading, fees, or on-chain formats.
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
1 download
-
Morphit v1.12.2
StableAll checks were successfulmorphit-ci / TypeScript typecheck (sweep all workspaces) (push) Successful in 50smorphit-ci / apps/web svelte-check (svelte-kit sync + svelte-aware tsc) (push) Successful in 42smorphit-ci / Integration tests (real Postgres 16) (push) Successful in 43smorphit-ci / ansible-lint (playbook quality gate) (push) Successful in 17smorphit-ci / Smoke suite (run-smokes.sh, triple-pulse) (push) Successful in 30m31smorphit-release / Build + publish release tarball (push) Successful in 35m39sreleased this
2026-08-15 22:57:54 +00:00 | 72 commits to main since this releaseMorphit v1.12.2
Theme: finish the offline-appliance story and make the node's own health report tell the truth. A node installed with no internet now completes itself the moment it comes online — TLS, on-chain registration, the warrant canary, and the Tor/I2P transports — with no manual steps. The health command reports sync state, node counts, backups, and the canary honestly.
Fixed
A node installed offline now finishes itself when it first gets internet — including the hidden transports and the canary. The "first-online" completion step already handled TLS and registration; it now also restarts Tor and i2pd (which, started with no network during an air-gapped install, would otherwise sit forever without bootstrapping) and publishes the warrant canary (whose freshness proofs need network). So a fully air-gapped install comes up complete the moment a link appears — no manual restart, no manual canary setup.
The warrant canary sets itself up on an offline install instead of silently failing. The canary setup aborted early on an air-gapped box because of a preflight check for a tool it only needs when actually publishing. It now arms the refresh script and weekly timer offline and defers only the network-dependent first publish — which first-online then does automatically once the box is online.
Health: sync state reads "unknown" when the node can't reach any RPC, instead of a false "synced." If every Blurt RPC endpoint is unreachable, the node genuinely can't see the chain head, so the health command now reports the sync state, chain head, and lag as "unknown" rather than showing a misleading "synced / 0 blocks behind."
Health: the reachable-node count matches the list of nodes shown. The "N/10 reachable" header is now counted from the same per-node list printed below it, so it can't disagree with the ✓/✗ rows (e.g. showing "9/10" when all ten are green).
Health: the first database backup happens right after install, not up to half an hour later. A fresh node now takes its first backup as soon as the indexer is up, instead of waiting on the backup timer's randomized delay — so the health command shows a real dump promptly.
Health: layout + wording polish. The TLS and AIDE lines align with the Services block above them, and a not-yet-published canary reads as a calm "not published yet — it needs network for its freshness proofs" rather than an alarming "missing."
Notes
- No database migration in this release.
- Everything here is about install-time and operational reporting; there are no changes to trading, fees, or on-chain formats.
- Existing healthy nodes are unaffected; the fixes matter most for fresh and air-gapped installs.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
Morphit v1.12.1
StableAll checks were successfulmorphit-ci / TypeScript typecheck (sweep all workspaces) (push) Successful in 51smorphit-ci / apps/web svelte-check (svelte-kit sync + svelte-aware tsc) (push) Successful in 41smorphit-ci / Integration tests (real Postgres 16) (push) Successful in 44smorphit-ci / ansible-lint (playbook quality gate) (push) Successful in 17smorphit-ci / Smoke suite (run-smokes.sh, triple-pulse) (push) Successful in 32m15smorphit-release / Build + publish release tarball (push) Successful in 37m48sreleased this
2026-08-15 07:01:52 +00:00 | 73 commits to main since this releaseMorphit v1.12.1
Theme: make the hidden RPC layer robust and honest. A stable i2pd that installs itself correctly and self-heals, a node card that shows real latency for the Tor/I2P nodes and reads calmly when a transport isn't enabled, and automatic use of a Blurt node running on the same box.
Added
Automatically uses a Blurt node running on the same machine. If you run a Blurt RPC node (for example the hidden-rpc package) on the same server as your Morphit instance, the indexer now detects it on the standard loopback port at startup and reads the chain from it directly — instant, private, and the read never leaves the machine — with no configuration at all. It shows on the RPC endpoints card as a Local node at near-zero latency. Opt out with
MORPHIT_INDEXER_LOCAL_RPC_AUTODETECT=false.The node card fills in Tor/I2P latency on its own. The RPC endpoints card now runs a quiet check right after it loads, so the hidden nodes show their real latency without you having to press refresh.
Changed
i2pd now installs from the maintained upstream build — not the crash-prone distro one. The version of i2pd in Ubuntu's default repositories crash-loops on startup on some systems (a corrupt-database abort a few seconds in). Both the standard install and the offline bundle now use the maintained purplei2p build instead, and an install will upgrade a node that's already stuck on the broken version. This is why some nodes' I2P addresses were unreachable; they now come up and stay up.
Clearer wording on the RPC endpoints card: "The nodes that this Morphit site talks to for syncing blockchain data, trying them in order of privacy and fastest response."
Fixed
Hidden nodes read calmly when a transport isn't enabled — no scary red errors. If your instance doesn't have Tor or I2P running, the baked-in hidden nodes now show a muted "Requires Tor/I2P (not enabled on this instance)" instead of an alarming red "connection refused." A node that's genuinely down still shows a normal error; this only softens the "this instance simply hasn't turned that transport on" case, so the layer reads as intentional rather than broken.
Tor and i2pd recover on their own if they crash. Both now install with a restart-on-failure policy (with a bounded retry budget so a persistent problem doesn't spin), so a transient daemon crash no longer silently takes the hidden layer down until someone notices.
Notes
- No database migration in this release.
- The i2pd change means a node that was on the broken build gets upgraded on the next install/upgrade; existing healthy nodes are unaffected.
- Everything hidden-service related remains fail-safe: an instance without Tor/i2pd falls back to clearnet, and the local/auto-detect behavior is opt-out.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
1 download
-
Morphit v1.12.0
StableAll checks were successfulmorphit-ci / TypeScript typecheck (sweep all workspaces) (push) Successful in 50smorphit-ci / apps/web svelte-check (svelte-kit sync + svelte-aware tsc) (push) Successful in 42smorphit-ci / Integration tests (real Postgres 16) (push) Successful in 44smorphit-ci / ansible-lint (playbook quality gate) (push) Successful in 17smorphit-ci / Smoke suite (run-smokes.sh, triple-pulse) (push) Successful in 31m29smorphit-release / Build + publish release tarball (push) Successful in 36m37sreleased this
2026-08-15 01:59:26 +00:00 | 74 commits to main since this releaseMorphit v1.12.0
Theme: the privacy RPC layer grows up. Your node can now read the chain from a node running on the same box (instant, and the read never leaves the machine), the network of censorship-resistant RPC nodes publishes itself on-chain so every instance adopts new ones automatically, and
morphit-opsshows the health of every RPC node — not just a count. Plus a round of install fixes from a real from-scratch field test.Added
Read the chain from a node on the same machine — instant, and it never leaves the box. If you run a Blurt RPC node (for example the hidden-rpc package) on the same server as your Morphit instance, point the indexer at it over loopback (
MORPHIT_INDEXER_LOCAL_RPC_ENDPOINTS=http://127.0.0.1:8091) and it becomes your fastest, most private chain source: no network hop, no IP exposure, near-zero latency. Clearnet and hidden nodes stay as fallback. Only loopback addresses are accepted, so the setting can never be pointed at an outside host.An on-chain directory of privacy RPC nodes — self-adopted, no config edit. The project publishes the canonical list of public hidden-service (
.onion/.b32.i2p) RPC nodes as a signed on-chain record; every trusting indexer reads it and merges those nodes into its pool automatically. A vetted node added to the directory reaches the whole network with no code change and no per-operator edit, and the directory now persists across restarts. The record is only honoured when its signer and on-chain key match the pinned project values, so a forged directory can't inject hostile nodes.The public hidden nodes now show on every instance. The Settings → RPC endpoints card shows the project's public hidden-service nodes — badged Tor / I2P — on every install, not just Ansible ones, so the censorship-resistant layer is visible everywhere. An instance without Tor/i2pd simply shows them unreachable; clearnet still carries all traffic.
morphit-opshealth now breaks out every RPC endpoint. Under theBlurt RPC: N/M reachableline it now lists each node with its transport (clearnet / Tor / I2P / local), a shortened address, latency, and reachability — so you can see at a glance which nodes are up, including the hidden ones, instead of just a count.Fixed
The first backup actually runs on a fresh Ansible install. Two stacked bugs stopped it: the backup service's writable-path setting didn't match the install's data directory (failing with a mount-namespace error before the script even ran), and the backup authenticated to Postgres the wrong way for the Ansible layout. Both are fixed — a fresh node now writes its first dump a couple of minutes after setup, and
morphit-opsshows a real backup.The warrant canary sets itself up on a root install. The canary setup only tried a per-user timer, which a root (sudo) install can't use, so it silently fell back to a manual step that was easy to miss. It now installs a proper system timer when run as root, so the canary publishes and refreshes itself automatically.
The install wizard reads like a smooth success — no scary words. On a normal (and especially an offline) install, a few things looked alarming even though nothing was wrong: a couple of internal task names contained the word "Fail," the post-install checklist showed red
✗marks for pieces that were merely still starting (RPC connectivity, the HTTPS certificate, the canary), and a firewall reminder said a setting was "wrong." All reframed — task names say "Verify…," pending items show a calm "still starting" rather than a failure, and the reminder is now an optional "if you ever notice…" note./v1/healthandmorphit-ops healthnow agree about the relay. On a containerized deployment the public health endpoint could report the relay down while the local check saw it up. The indexer now probes the relay at the container's gateway address (where a containerized relay actually binds), so the two agree.Hidden RPC nodes are no longer undercounted while they warm up. The health probe used one short timeout for every node, which is fine for clearnet but too short for Tor and I2P (which take longer to connect, especially on a fresh node). Tor and I2P nodes now get a longer, transport-appropriate window, so healthy-but-slow hidden nodes are counted correctly.
Notes
- New database migration (adds a small table to persist the RPC directory). No breaking changes.
- Everything hidden-service related is fail-safe: an instance without Tor/i2pd simply falls back to clearnet, and the local/loopback and hidden-node settings are opt-in and overridable.
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
2 downloads