Repository navigation
Releases: NETFORY/netfory-releases
Release list
v1.135.203 NETFORY WEB4.0 Network
dVPN (PQ Web), in‑app browser, storage & memory fixes

Companion components: pq-web 0.3.0 · pq-relay 0.2.0 · ntfry-tracker 1.7.0 (renamed from smartnet-tracker).
Highlights
- PQ Web / dVPN - P2P HTTPS tunnelling through
pq-webegress nodes over Iroh QUIC (ALPNnetfory/pqweb/1). One‑click dVPN toggle in the address bar routes all browser traffic through the mesh; Auto mode tunnels only blocked domain bundles. - In‑app browser for regular
https://sites in isolated native web‑tabs (no Web3 bridge), with downloads, SPA URL tracking, bookmarks and a branded error page on all platforms. - Node API over Iroh only - HTTPS RPC removed from the hot path; requests fan out across the Iroh node group with rotation.
- Storage/memory - fixed a blob‑store leak (hundreds of GB), ~400 MB/h heap growth, and temp‑file accumulation.
- Wallet - BIP‑44 sub‑accounts from one seed (
m/44'/255'/N'/0/0, Core‑Wallet compatible), extension‑style dashboard, address book, live history. - Settings -> Network rebuilt as a no‑scroll cockpit with a sticky status strip and sectioned side‑nav.
PQ Web (dVPN)
Client (src-tauri/src/webproxy.rs, websites.rs)
- Local SOCKS5 router on
127.0.0.1:<port>; Windows: process‑wide PAC viaWEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS=--proxy-pac-url=data:…(DIRECT fallback); Linux/macOS:WebviewBuilder::proxy_url(socks5://…). - Domain bundles (
youtube,x,telegram,iptest, …) with modesauto | relay | direct(sledcfg:webproxy:bundles). Direct‑path probe ≤ 2.5 s: DNS poisoning, RST, timeout, TLS ClientHello/SNI stall; per‑bundle route cache (ok 10 min / blocked 2 min). - dVPN total mode : every host outside bundles -> relay via nodes announced with
open;autobundles -> relay without probe;directbundles stay direct. Route cache is flushed on toggle. - Tunnel:
NF1 CONNECT host:portover Iroh (no MITM), fallback across the 3 best nodes, per‑node health (PING, RTT) 10 s after start and every 30 min. - Keep‑alive: pings cached connections / warms the best node so the first cold CONNECT through TLS‑443 relays succeeds when UDP is dropped by the ISP.
- HUD: cyberpunk Connecting to NETFORY Relay · region · id · rtt page with up to 3 auto‑retries (
relay-failed), then an honestPQ_TUNNEL_FAILED/PQ_NO_NODESerror page. Browser error on a bundle host ->mark_blocked-> bundle switched to relay. - Node list from trackers:
GET /pqwebwith operator ECDSA signature (secp256k1, TOFU pin of/operator-pubkey, hard overrideSMARTNET_OPERATOR_PUBKEY); signed/unsigned/cached badges in UI; allow‑list nodes marked verified; manual nodes byEndpointId. - Commands:
webproxy_status | set_mode | set_nodes | set_enabled | set_total | recheck; eventswebproxy-route,webproxy-relays,webproxy-total.
Server - pq-web 0.3.0 (/app/pq/pq-web)
- Iroh
Endpoint+Router/ProtocolHandleron ALPNnetfory/pqweb/1; protocolNF1 CONNECT | PING | BENCH | INFO. --open/--allow-all(envPQ_WEB_OPEN): any HTTPS host on allowed ports; otherwise allow‑list bundles (allow.rs, wildcards).- Per‑
EndpointIdstream & bandwidth limits (token bucket), SSRF filter, idle timeout,/metrics+/healthz, node key file (0600). - Tracker announce v3 (
…|addrs|relay|open), Ed25519‑signed with the node key; CLIserve | id | check | bundles-example; systemd unit.
Relay - pq-relay 0.2.0 (/app/pq/pq-relay)
- Modes: A
DOMAIN-> built‑in ACME (TLS‑ALPN‑01) on 443 + QUIC/QAD 7842; B certbot PEM behind nginx; C legacy. Landing page “NETFORY Relay”. EnvPQ_RELAY_*(legacySMARTNET_RELAY_*accepted).
Tracker - ntfry-tracker 1.7.0 (/app/tracker)
- Crate/binary renamed
smartnet-tracker->ntfry-tracker.GET /pqweb(live announces +PQWEB_NODESallow‑list, canon v3/v2/v1),POST /pqweb/announcewith signature check,GET /operator-pubkey.OPERATOR_SECRETnow signs both/seeders-dhtand/pqweb.
In‑app browser (websites.rs, tabs.ts, AppLayout.vue)
- Native child webview per tab, no
initialization_script, outsideembed-*capabilities.https://only;http://auto‑upgraded; SmartNet schemes -> host shell;window.open/_blank-> new tab. - Events
site-nav,site-title,site-url(SPA pushState viaSourceChanged/HistoryChangedon Windows,notify::urion Linux),site-download(unique path in Downloads, reveal viasite_reveal_download). - Branded error page (WebView2
NavigationCompleted), Linux (load_failed+ TLS errors,webkit2gtk 2.0/v2_40), macOS (DNS+TCP:443 pre‑flight). Pre‑flight also inopen_site_webview/site_navigateto avoid blank flashes. - Bookmarks (
sth_web_bookmarks) on the dashboard; ★ in the address bar. Tray/get_window("main")fixes for multi‑webview windows.
Network core
sth_node.rs:pool_all()= Iroh only;iroh_order()/p2p_group(); custom clearnet node -> fallback to Iroh; tx/nonce mirroring to first Iroh node.clearnet_order,p2p_with_backup,iroh_backup,legacy_onlyremoved.- Peerbook (
peerbook.rs,p2p:peerbook:<nodeId>): cached relay/IP paths per peer (TTL 30 d, ≤ 8 addrs, ≤ 4 000 entries), rolesWallet|Api|Chat|Seed|Ai, used as IrohAddressLookupfor every connect (API, wallet stream, chat, blobs, AI); stealth relay allow‑list preserved. build_default_endpoint: parallel TLS‑443 probe of ownn1relays ->RelayMode::Customif alive, else n0 fallback (syslognet). Gossip watchdog: isolation counter/cooldown fixes, softjoin_peerseach cycle.poll_trackers_parallel(3 s) for/seedersand/network/storage; network‑map snapshot cache (sth_netmap_snapshot), 30 s auto‑refresh, “MY NODE” row, Cloud Seeders tab.- Desktop seeding on by default for new installs (3 GB cap); parallel heartbeat with per‑tracker status (
heartbeat_status).
Storage & memory
- Blob store leak:
add_path().awaitimpliedwith_tag()-> permanent GC roots. Nowimport_path()viatemp_tag()+SEED_HASHES;drop_legacy_tags()on open; GC every 120 s;purge_stale_temp(> 24 h) on start. - Heap growth:
txindex::for_eachstreaming +seqchange counter;sync_graphskipped when unchanged;history()cached by(addr, seq);txindex::all()removed. - Incremental social graph (
subs:g:*, cursors per epoch) and full owner tx index (txi:<A>:t:*, pending settxi:<A>:p:*, TTL 15 min) insled, fed live by thesth/events/1stream; consumers: history, subscriptions, name recovery, chat key lookup. - Wallet dashboard snapshot (
sth_wallet_snap:<identity>) + skeleton on cold start.
Wallet
crypto.rs: BIP‑39 seed (PBKDF2‑HMAC‑SHA512 × 2048) -> BIP‑32m/44'/255'/N'/0/0; index 0 unchanged;hex:<privkey>signing path.- Dashboard redesign (balance modes STH ⇄ USDT ⇄ hidden, 7‑day sparkline via
get_rate_history, pending cards, theme accents), networks store withprobe_network_api(view‑only for non‑mainnet). - Send: address book (recent + messenger contacts),
@name-> address viaresolveUsername, keyboard navigation. Live updates from stream per involved address; optimistic pending;ERR_BAD_NONCEauto‑retry; first‑tx fix for fresh wallets.
Messenger
- Avatar tap in group -> DM (
openDmWith);@mentionsuggestions; onboarding + balance pre‑check;publish_chat_keysyslogchat+ result toast; reconnect banner / instant resync; 50‑message history window with lazy load.
Settings
- Network tab (1.135.202): sticky status strip (dVPN, SOCKS5 port, pq‑web nodes ok/total, active node, online N/M, DHT nodes, trackers, relay‑only) -> click jumps to section; side‑nav sections PQ Web · SmartHoldem Nodes · Discovery · Relays & Privacy · Seeding & Downloads · Diagnostics (persisted in
sth_settings_net_section). Advanced items (trackers, seeders, n1 relays, DHT diag, Network Doctor, manual pq‑web nodes) hidden in User mode. - Header toolbar (1.135.203): version pill with status dot, Check for updates and Crash log moved to the
// SETTINGS_header, visible on every tab. - Dashboard: manual “add site” form removed (bookmarks via ★ only); Network Map table styling.
Breaking / behaviour changes
smartnet-trackerbinary and crate renamed tontfry-tracker; update systemd units and paths.- Node RPC over HTTPS is no longer used in P2P builds (Iroh only); HTTPS pool remains only in builds without the
p2pfeature. - Desktop seeding defaults to enabled for installations without an explicit
cfg:desktop_seeding_enabledsetting. - Once a client has pinned an operator pubkey, unsigned or differently‑signed tracker lists are rejected - roll
OPERATOR_SECRETout to every tracker at once.
Known issues
- Cold first CONNECT on UDP‑blocked networks may still show the HUD for one retry cycle before the page loads (keep‑alive mitigates after ~25 s of uptime).
- Gossip topic isolation (“online 0”) is under observation after relay‑priority changes; a relay health‑watch is planned.
- Linux/macOS error page and download hooks rely on engine‑specific hooks; edge cases may fall back to the engine default.
Additional tools:
- NetDrop (fast file exchange) https://github.com/NETFORY/NetDrop/releases/tag/0.6.7
- DEV Hub protocol tool (dev:// decentralized "github") https://github.com/NETFORY/git-remote-dev/releases/tag/1.55.47
v1.135.180 NETFORY WEB4.0 Network
Additional tools:
- NetDrop (fast file exchange) https://github.com/NETFORY/NetDrop/releases/tag/0.6.7
- DEV Hub protocol tool (dev:// decentralized "github") https://github.com/NETFORY/git-remote-dev/releases/tag/1.55.47
Release Notes
Wallet API over P2P network
RAM Fixes
Wallet transport moved to iroh (SHIP-44). The wallet now talks to sth-core nodes directly over the iroh QUIC mesh instead of HTTPS RPC. Three built-in api://…/sth-core nodes form the primary pool; the legacy HTTPS pool is kept only as a fallback when no iroh node is reachable. Every response is signed by the node's key (pdata, Ed25519 = EndpointId) and verified client-side. Failover goes iroh -> next iroh node -> clearnet; 429/503 switch nodes immediately. Node auto-selection prefers iroh nodes by latency and skips any node lagging more than 5 blocks.
Live push events instead of polling. A single persistent stream (sth/events/1) delivers balance, tx, mempoolTx and block frames as they happen. Balance updates and incoming-transfer notifications are instant, pending transactions appear in history right away, and the dashboard shows a pulsing LIVE badge with the current network height. Background polling drops to a 2-minute safety check while the stream is up; on reconnect the node replays anything missed since the last seen height.
Nonce fixes. First transaction from a brand-new wallet no longer fails (a 404 wallet not on chain from the active node was being masked by a DNS error from the backup node). The wallet now also accounts for the node's unconfirmed pool (/transactions/unconfirmed?senderId=) and, if a node still rejects with ERR_BAD_NONCE, re-signs once with the nonce the node expects.
SHIP-14 token balances. Non-zero token balances (symbol, name, logo, amount by decimals) are shown on the wallet dashboard and update live from the balance stream.
Nodes screen. P2P tab is now first and lists the iroh pool with an iroh badge, latency, height and stream status (LIVE/reconnecting/legacy). Automatic detection of a local localhost:4003 node has been removed - add it manually under "Custom nodes" if you still need it.
Fixes. Moving the data folder no longer fails on the locked smartnet_db (os error 33) - the database stays in place and locked cache files are skipped instead of aborting the transfer.
This release moves the wallet, naming and social layers onto the Iroh P2P mesh end‑to‑end, adds a local blockchain index for instant offline history, and fixes a storage leak in the blob store.
Highlights
Local blockchain index (instant history, offline)
- Every transaction of your wallet addresses (main + BIP‑44 sub‑accounts) is now synced into the local database in the background and kept fresh by the live
sth/events/1stream - no more polling. - Wallet history, your registered
@name, subscriptions/subscribers and messenger encryption keys are all read from the local index in microseconds. The network is only touched for deltas. - Sync progress is shown under the LIVE badge; up to 1,000 transactions per address are kept ready for the UI.
Incremental subscription graph
- Followers/following are stored as an on‑device graph with per‑address cursors. First run does a full scan (the node filters by
vendorField), after that onlytimestamp.fromdeltas are fetched. - New
sub:transactions arriving over the stream update the graph immediately and refresh the profile view. - Fixed: subscriptions older than the last 100 transactions were invisible ("not following" for addresses with 1,000+ txs).
Peer address book (Iroh)
- New persistent peer book in the local database: relay URLs and direct IP:port of every peer you have talked to (30‑day TTL, up to 8 addresses per peer, 4,000 peers with LRU eviction).
- Plugged into Iroh as an
AddressLookupservice, so every connect by NodeID - sth‑core API, wallet stream, chat DMs, blob downloads, AI nodes - gets known addresses instantly while DHT/DNS/mDNS discovery runs in parallel. - Peers are typed by role:
wallet,api,chat,seed,ai. Roles accumulate per peer and are exposed viapeerbook_listfor diagnostics. - Stealth mode keeps strict relay isolation: only the operator's n1 relays are ever suggested from the book.
- Peer identity is still verified by QUIC/TLS against the ed25519 NodeID - cached addresses are a transport hint only.
Blob storage leak fixed
- Every blob import created a permanent auto‑tag, which pinned old dApp archives, files and logos forever - GC could never free them (up to 170+ GB observed).
- Imports now use temporary tags with the seed keep‑set as the single source of truth; legacy tags are removed on startup so GC reclaims orphaned blobs automatically within minutes.
Wallet
- Outgoing transactions appear immediately as pending with a real 8‑second countdown ring; confirmed by the block, expired ones (>15 min) are dropped.
- Switching accounts is instant: history is cached per address in memory and served from the local index.
- Transactions are shown strictly for the active address; transfers between your own accounts render as
−Xon the sender and+Xon the recipient. - Fixed "eternal pending" on historical transactions (confirmation is derived from
blockId). - Node list badge:
IROH->PQ(post‑quantum P2P).
Names & Profile
- Fixed lost
@names: paid registrations confirmed on chain before the reserved‑list cutoff (2026‑08‑09) are honoured even if the word was later reserved. Silent rejections are now logged. - Names from
reserved.txtare reported to users simply as "taken"; registration is refused with the same message. - Fresh installs recover the name from chain within seconds via Iroh (
recover_my_username), also triggered from the top bar and profile. - New Resync registry button in the Security panel: rescans names, subscribers and the full transaction index from chain.
- Registered name shown as a tooltip on the avatar.
Messenger
- Minimum fee for publishing a message key / inbox price raised to 0.10 STH (max of minimum, node's dynamic size‑aware fee and manual override) - fixes
ERR_LOW_FEErejections.
v1.135.178 NETFORY WEB4.0 Network
Additional tools:
- NetDrop (fast file exchange) https://github.com/NETFORY/NetDrop/releases/tag/0.6.7
- DEV Hub protocol tool (dev:// decentralized "github") https://github.com/NETFORY/git-remote-dev/releases/tag/1.55.47
Release Notes
NETFORY Wallet over iroh
Wallet transport moved to iroh (SHIP-44). The wallet now talks to sth-core nodes directly over the iroh QUIC mesh instead of HTTPS RPC. Three built-in api://…/sth-core nodes form the primary pool; the legacy HTTPS pool is kept only as a fallback when no iroh node is reachable. Every response is signed by the node's key (pdata, Ed25519 = EndpointId) and verified client-side. Failover goes iroh -> next iroh node -> clearnet; 429/503 switch nodes immediately. Node auto-selection prefers iroh nodes by latency and skips any node lagging more than 5 blocks.
Live push events instead of polling. A single persistent stream (sth/events/1) delivers balance, tx, mempoolTx and block frames as they happen. Balance updates and incoming-transfer notifications are instant, pending transactions appear in history right away, and the dashboard shows a pulsing LIVE badge with the current network height. Background polling drops to a 2-minute safety check while the stream is up; on reconnect the node replays anything missed since the last seen height.
Nonce fixes. First transaction from a brand-new wallet no longer fails (a 404 wallet not on chain from the active node was being masked by a DNS error from the backup node). The wallet now also accounts for the node's unconfirmed pool (/transactions/unconfirmed?senderId=) and, if a node still rejects with ERR_BAD_NONCE, re-signs once with the nonce the node expects.
SHIP-14 token balances. Non-zero token balances (symbol, name, logo, amount by decimals) are shown on the wallet dashboard and update live from the balance stream.
Nodes screen. P2P tab is now first and lists the iroh pool with an iroh badge, latency, height and stream status (LIVE/reconnecting/legacy). Automatic detection of a local localhost:4003 node has been removed - add it manually under "Custom nodes" if you still need it.
Fixes. Moving the data folder no longer fails on the locked smartnet_db (os error 33) - the database stays in place and locked cache files are skipped instead of aborting the transfer.
This release moves the wallet, naming and social layers onto the Iroh P2P mesh end‑to‑end, adds a local blockchain index for instant offline history, and fixes a storage leak in the blob store.
🚀 Highlights
Local blockchain index (instant history, offline)
- Every transaction of your wallet addresses (main + BIP‑44 sub‑accounts) is now synced into the local database in the background and kept fresh by the live
sth/events/1stream - no more polling. - Wallet history, your registered
@name, subscriptions/subscribers and messenger encryption keys are all read from the local index in microseconds. The network is only touched for deltas. - Sync progress is shown under the LIVE badge; up to 1,000 transactions per address are kept ready for the UI.
Incremental subscription graph
- Followers/following are stored as an on‑device graph with per‑address cursors. First run does a full scan (the node filters by
vendorField), after that onlytimestamp.fromdeltas are fetched. - New
sub:transactions arriving over the stream update the graph immediately and refresh the profile view. - Fixed: subscriptions older than the last 100 transactions were invisible ("not following" for addresses with 1,000+ txs).
Peer address book (Iroh)
- New persistent peer book in the local database: relay URLs and direct IP:port of every peer you have talked to (30‑day TTL, up to 8 addresses per peer, 4,000 peers with LRU eviction).
- Plugged into Iroh as an
AddressLookupservice, so every connect by NodeID - sth‑core API, wallet stream, chat DMs, blob downloads, AI nodes - gets known addresses instantly while DHT/DNS/mDNS discovery runs in parallel. - Peers are typed by role:
wallet,api,chat,seed,ai. Roles accumulate per peer and are exposed viapeerbook_listfor diagnostics. - Stealth mode keeps strict relay isolation: only the operator's n1 relays are ever suggested from the book.
- Peer identity is still verified by QUIC/TLS against the ed25519 NodeID - cached addresses are a transport hint only.
Blob storage leak fixed
- Every blob import created a permanent auto‑tag, which pinned old dApp archives, files and logos forever - GC could never free them (up to 170+ GB observed).
- Imports now use temporary tags with the seed keep‑set as the single source of truth; legacy tags are removed on startup so GC reclaims orphaned blobs automatically within minutes.
💳 Wallet
- Outgoing transactions appear immediately as pending with a real 8‑second countdown ring; confirmed by the block, expired ones (>15 min) are dropped.
- Switching accounts is instant: history is cached per address in memory and served from the local index.
- Transactions are shown strictly for the active address; transfers between your own accounts render as
−Xon the sender and+Xon the recipient. - Fixed "eternal pending" on historical transactions (confirmation is derived from
blockId). - Node list badge:
IROH->PQ(post‑quantum P2P).
👤 Names & Profile
- Fixed lost
@names: paid registrations confirmed on chain before the reserved‑list cutoff (2026‑08‑09) are honoured even if the word was later reserved. Silent rejections are now logged. - Names from
reserved.txtare reported to users simply as "taken"; registration is refused with the same message. - Fresh installs recover the name from chain within seconds via Iroh (
recover_my_username), also triggered from the top bar and profile. - New Resync registry button in the Security panel: rescans names, subscribers and the full transaction index from chain.
- Registered name shown as a tooltip on the avatar.
💬 Messenger
- Minimum fee for publishing a message key / inbox price raised to 0.10 STH (max of minimum, node's dynamic size‑aware fee and manual override) - fixes
ERR_LOW_FEErejections.
🔧 Under the hood
- Historical queries (
/transactions?...) go through Iroh only; the legacy HTTPS pool and client‑side result filtering are gone (nodes apply filters correctly). Multipayment recipients are resolved fromasset.payments. - Restored
https_postfor user‑configured clearnet nodes. - New
docs/FEES.md: complete registry of all STH fees, payments and sink addresses across NETFORY. - Version bumped to 1.135.176.
v1.135.170 NETFORY WEB4.0 Network
NETFORY Wallet over iroh
Wallet transport moved to iroh (SHIP-44). The wallet now talks to sth-core nodes directly over the iroh QUIC mesh instead of HTTPS RPC. Three built-in api://…/sth-core nodes form the primary pool; the legacy HTTPS pool is kept only as a fallback when no iroh node is reachable. Every response is signed by the node's key (pdata, Ed25519 = EndpointId) and verified client-side. Failover goes iroh -> next iroh node -> clearnet; 429/503 switch nodes immediately. Node auto-selection prefers iroh nodes by latency and skips any node lagging more than 5 blocks.
Live push events instead of polling. A single persistent stream (sth/events/1) delivers balance, tx, mempoolTx and block frames as they happen. Balance updates and incoming-transfer notifications are instant, pending transactions appear in history right away, and the dashboard shows a pulsing LIVE badge with the current network height. Background polling drops to a 2-minute safety check while the stream is up; on reconnect the node replays anything missed since the last seen height.
Nonce fixes. First transaction from a brand-new wallet no longer fails (a 404 wallet not on chain from the active node was being masked by a DNS error from the backup node). The wallet now also accounts for the node's unconfirmed pool (/transactions/unconfirmed?senderId=) and, if a node still rejects with ERR_BAD_NONCE, re-signs once with the nonce the node expects.
SHIP-14 token balances. Non-zero token balances (symbol, name, logo, amount by decimals) are shown on the wallet dashboard and update live from the balance stream.
Nodes screen. P2P tab is now first and lists the iroh pool with an iroh badge, latency, height and stream status (LIVE/reconnecting/legacy). Automatic detection of a local localhost:4003 node has been removed - add it manually under "Custom nodes" if you still need it.
Fixes. Moving the data folder no longer fails on the locked smartnet_db (os error 33) - the database stays in place and locked cache files are skipped instead of aborting the transfer.
Additional tools:
- NetDrop (fast file exchange) https://github.com/NETFORY/NetDrop/releases/tag/0.6.7
- DEV Hub protocol tool (dev:// decentralized "github") https://github.com/NETFORY/git-remote-dev/releases/tag/1.55.47
v1.135.158 NETFORY WEB4.0 Network
Wallet fixes
-
Fixed: first transaction from a fresh wallet failed (name registration, first send). For a wallet with no outgoing transactions the node replies
404("wallet not yet on chain"), which the client should read as nonce 0. Instead, the REST client treated any HTTP status as a failure and failed over to a backup node - alwaysnode0.smartholdem.io. If that host didn't resolve (Windows DNS error 11001), the original404was lost and the wallet surfaced "Dns Failed" and refused to sign. Now a4xxresponse (except429) is treated as a final answer with no failover, so a new wallet correctly starts at nonce 0 and signs its first tx with nonce 1. -
Node failover no longer pinned to node0. The backup node is now the next node in the pool after the active one, so a single unreachable host can't break every fallback.
-
Fixed ERR_BAD_NONCE on send. The in-flight nonce cache used to live forever and advance on every "accept" from any node (including a local pool whose tx the network later rejected), so the wallet could sign with a stale, overshooting nonce (e.g. 1255 while the chain was at 1250). The cache is now time-limited (60 s), is cleared whenever a broadcast is rejected, and the chain nonce is authoritative again after the window - the next attempt always starts from the node's current nonce.
Additional tools:
- NetDrop (fast file exchange) https://github.com/NETFORY/NetDrop/releases/tag/0.6.7
- DEV Hub protocol tool (dev:// decentralized "github") https://github.com/NETFORY/git-remote-dev/releases/tag/1.55.47
v1.135.157 NETFORY WEB4.0 Network
Release Notes
Messenger
- Onboarding "You are in the new internet" - new accounts get a 4-step guide: top up balance -> get a
u://name -> publish encryption key -> join the group. Steps light up as they complete; live balance, address copy, one-click "Top up" opens the wallet on Receive. - Name required to write - without a
u://name the composer is read-only and opens the setup; reading history still works. - Welcome message - finishing onboarding posts a one-time greeting in the SmartHoldem group.
- Name confirmation - you get a toast / OS notification the moment your
u://name is confirmed on-chain; the indexer polls faster while a registration is pending. - Mesh recovery after network loss - when the internet comes back, the iroh endpoint is notified and all gossip topics are force-resubscribed immediately (no more "ONLINE N" but silent chat). Queued outgoing messages are flushed and an anti-entropy sync runs ~4 s later instead of waiting up to 75 s.
- Reconnect banner - "Reconnecting mesh… (N)" strip while topics resubscribe, then "Mesh restored".
- Correct message order and time - incoming messages now use the sender’s timestamp, so late-arriving messages land in the right place with the real send time.
- Error bar fix - node errors are dismissible, auto-hide, and show a human-readable message instead of raw JSON (no more permanent red bar).
- Tray unread badge - the tray icon shows the total unread count.
Wallet
- Balance pre-check - transactions are refused locally with a clear "Insufficient STH: need X, have Y" before signing; the node is never hit with a doomed tx.
- Local Node Tx Guard - transactions via a custom/local node are mirrored to a pool node and signed with the freshest nonce; fixes silently stuck transfers.
- Fixed phantom "Received X STH" notifications - incoming alerts are now keyed by txid (once per transaction), not by balance jitter between nodes.
- Instant refresh - balance and recent operations update right after an incoming payment or a send (second pass ~9s later); balance glows green/amber on change.
- Nodes - custom clearnet nodes listed with a LOCAL tag;
localhostrouted via127.0.0.1(removes the ~2s IPv6 delay). - History - long memos wrap inside the card; click a memo to copy it.
Additional tools:
- NetDrop (fast file exchange) https://github.com/NETFORY/NetDrop/releases/tag/0.6.7
- DEV Hub protocol tool (dev:// decentralized "github") https://github.com/NETFORY/git-remote-dev/releases/tag/1.55.47
Decentralized network NETFORY WEB4.0 v1.135.156
Additional tools:
- NetDrop (fast file exchange) https://github.com/NETFORY/NetDrop/releases/tag/0.6.7
- DEV Hub protocol tool (dev:// decentralized github) https://github.com/NETFORY/git-remote-dev/releases/tag/1.55.47
NETFORY Release Notes
Wallet
- Local Node Tx Guard - transactions sent via a custom/local node (
localhost:4003) are now mirrored to a pool node and signed with the freshest nonce (max(local, pool)). Fixes silently "stuck" transfers when the local node lagged or had no peers. - Instant refresh - balance and recent operations update immediately after an incoming payment toast and after a successful send (plus a second pass ~9 s later, once the tx lands in a block). Failed rate lookups no longer block the refresh.
- Balance flash - the balance glows green on incoming funds and amber on outgoing.
- Nodes list - custom clearnet nodes (e.g. a local SmartHoldem node) are now listed with a LOCAL tag.
- Local node latency fix -
localhostis routed via127.0.0.1, removing the ~2 s IPv6 fallback delay on Windows. - History - long memos (vendorField) wrap inside the card; click a memo to copy it to the clipboard.
Messenger
- Tray unread badge - the tray icon shows the total number of unread chat messages; tooltip shows the count.
NETFORY Client UI Web4 v1.135.118
The first public implementation of a decentralized network NETFORY WEB4.0
[1.135.118 / ai-worker 0.13.0 / ntfry-ai 0.2.0] (native chat dialogs Msg::InferChat)
Main-app release marker rolling up the frontend
changes since the last app version: the AI console Speed Badge
(ai-worker 0.10.1), the pipeline slots badge (0.11.0) and the model
catalog marketplace badges live tok/s + token price (0.12.0).
Added
- Native multi-turn dialogs (
Msg::InferChat): the OpenAImessages[]
array now travels to the gateway as structuredVec<ChatTurn>instead of
a pre-flattened transcript. The gateway renders the history with the
model's canonical chat template (newFamily::render_chatin
chat_template.rs: ChatML / Llama 3 / Mistral / Zephyr / GLM-4, including
system prompts andthink=false> empty<think></think>block). - Free prefix caching for chat: reuse is decided by the token prefix
after rendering (prefix_best_matchinrun_batch), so the next turn of
the same dialog automatically hits the shard snapshot and only prefills the
tail no extra hashing needed, fast TTFT on follow-ups. - ntfry-ai 0.2.0 mapping: OpenAI
messages[]map toChatTurnwith no
string concatenation; multi-turn / system >InferChat, a single user
message > plainInfer(compatible with older workers). If the gateway is
old andInferChatfails, the proxy automatically falls back to a flat
transcriptInfer.docs/NTFRY-AI.mdupdated.
NETFORY Client UI Web4 v1.135.38
The first public implementation of a decentralized network NETFORY WEB4.0
[1.135.38] (Critical fix: update-ready modal never appeared - t shadowing from v1.135.33)
Fixed
- The “update downloaded - install?” modal stopped appearing after
v1.135.33. InstartProgressPolling()the torrent lookupconst t = list.find(...)shadowed the i18n translation functiont()introduced
by the localization pass; every status update then called the torrent
OBJECT as a function → TypeError → swallowed by the pollcatch→
the completion check (progress >= 1 || state === 'Seeding') was never
reached, soonDownloadComplete()never ran: no modal, status bar stuck
on “Connecting to torrent network…” while the progress value itself had
already hit 100% (it was assigned before the throw). Local renamed to
tor; a comment now warns against reusingtin that scope. - Versions bumped to 1.135.38 across
package.json,tauri.conf.json,
Cargo.tomlandCargo.lock.
[1.135.37] (Network Map: cloud provider badge inline before the pubkey)
Fixed
- YA / GD / MAIL badge wrapped to a new line and broke the Cloud Seeders
table layout. The badge moved from the TYPE cell (after the CLOUD
chip) into the NODE cell - it now sits on the SAME line, right before
the short author pubkey ([YA] 039d6f18…6ef35b), withwhite-space: nowrapso it never wraps. Provider tooltip and test ids unchanged. - Versions bumped to 1.135.37 across
package.json,tauri.conf.json,
Cargo.tomlandCargo.lock.
[1.135.36] (Torrent modals localized - en/ru/id)
Changed
TorrentMagnetModal(magnet download dialog) fully moved to i18n
(newtorrents.*section inen.ts/ru.ts/id.ts): title
fallback “Loading metadata…”, DHT fetch status, “Torrent files (N)”,
“Save folder”, “Sequential download (for video streaming)”,
“Selected: N / M”, START / STARTING… button, error strings (no source /
metadata failed / start failed).TorrentStreamModal(stream-while-downloading player) localized
too: stream errors (open failed / no media files / metadata not ready),
the playback hint line and size units (KB/MB/GB per locale).- Versions bumped to 1.135.36 across
package.json,tauri.conf.json,
Cargo.tomlandCargo.lock.
