Netfory is the Web 4.0 operating system of the Decentralized Physical Internet (DePIN). Netfory replaces centralized cloud hosting (AWS, Vercel, Cloudflare) with a sovereign Peer-to-Peer network powered by user-owned hardware.
- Zero-Infrastructure Architecture: Apps deploy directly to the P2P network via
dev://andsn://protocols. No servers to seize, no domains to revoke. - Infrastructure Protection: Unlike legacy P2P networks, Netfory nodes don't expose direct IPs to the public internet. The network protects seeders from DDoS attacks, ensuring 24/7 uptime.
- Proof-of-Utility Economics: Native coin STH rewards participants for providing real storage and bandwidth. Block emission is halted; value is driven by utility.
- Reputation Over Censorship: A cryptographically verified two-tier catalog (
Official | All) ensures safety without centralized bans. Direct links always work. - High-Performance Transport: Built on Iroh (QUIC) for NAT traversal and BLAKE3 for instant content verification.
- E2EE Communication: Integrated messenger and mail client with X25519 encryption and economic anti-spam.
| Component | Technology | Purpose |
|---|---|---|
| Core Client | Tauri v2 (Rust) + Vue 3 | Desktop OS, Wallet, dApp Runner |
| Transport | Iroh (QUIC) | P2P connectivity, Hole Punching |
| Storage | BLAKE3 + Merkle Trees | Content-addressable, verifiable blobs |
| Discovery | Mainline DHT + mDNS | Trackerless peer discovery |
| Blockchain | SmartHoldem DPoS | Identity, Naming, Economic Anchor |
| Encryption | X25519 + AES-256-GCM | E2EE for mail and messaging |
- netfory-client: The main desktop application (Wallet, Store, Seeder).
- smartnet-relay: A lightweight, self-hosted relay server for the NETFORY P2P network.
- smartnet-sdk: TypeScript SDK for building dApps on Netfory.
- netfory-provider: API Bridge & Router (SmartNet / Web 4.0).
Netfory uses the STH coin as fuel and anti-spam shield.
- Deflationary by Design: Block emission is halted. Fees for names, dApps, and messages are burned or locked.
- Proof-of-Utility: Seeders earn STH based on uptime (
K_up), data volume, and active apps. - Anti-Spam: Economic barriers make mass spamming financially irrational.
- Read the Netfory 101 White Paper.
- Check out the DevHub for API references.
- Join our Telegram Community for technical discussions.
Netfory is licensed under the Business Source License 1.1 (BSL 1.1) - see the LICENSE file for details.
We believe in open collaboration but must protect the network from corporate extraction.
- Open for Community: You can fork, modify, and use Netfory for personal or internal business projects.
- Protected from Competitors: You cannot use Netfory code to build a competing centralized cloud or P2P hosting service (e.g., "AWS Netfory") without a commercial agreement.
- Future Freedom: On August 10, 2030, this license automatically converts to Apache 2.0, making the code fully free and open for any use forever.
This ensures that Netfory remains a sovereign, community-driven infrastructure while preventing large corporations from capturing the value we create together.
For commercial licensing inquiries (e.g., proprietary enterprise deployments), please contact us at contact@smartholdem.io.
True Web 4.0. Don't visit the web. Be the web.
Vue 3 + Vite frontend with a Tauri v2 (Rust + Sled) native shell and a full Web Fallback (Pinia + localStorage/sessionStorage). Tactical-minimalist cyberpunk UI, 3 themes, RU/EN, real SmartHoldem crypto.
yarn install
yarn dev # http://localhost:3000yarn tauri:dev # native dev window
yarn tauri:build # production bundle
yarn tauri:icons # regenerate icons from src-tauri/icons/icon.png (1024x1024)Requires the Rust toolchain + Tauri v2 prerequisites installed locally.
- BIP-39 mnemonic (12 words) → BIP-44 HD at
m/44'/111'/N'/0/0on secp256k1. - Address:
base58check( 0x3F ‖ RIPEMD160(compressedPubKey) )→S.... - Mnemonic AES-sealed with
SHA-256(PIN); raw PIN never persisted.
const isTauri = typeof window !== 'undefined' && '__TAURI_INTERNALS__' in window- Tauri → Rust IPC (Sled DB), decrypted seed kept in Rust process memory.
- Web → localStorage (
sth_vault) + sessionStorage (sth_session_pin, survives F5).
src/lib/crypto.ts · src/lib/bridge.ts · src/store/{auth,ui}.ts ·
src/layouts/AppLayout.vue · src/views/* · src/i18n/* · src-tauri/*
Question: can sth:// apps render in real Tauri child webviews embedded
under the tab UI (instead of iframes used by the web fallback)?
Answer: yes, via Tauri v2's multi-webview API, with caveats:
- It requires the
unstableCargo feature (tauri = { features = ["unstable"] }). This API (Window::add_child(WebviewBuilder, position, size)) is not part of the stable surface and can change between minor Tauri releases. - A child webview is a real OS webview attached to the main window - not a DOM
element. So it always paints on top of the Vue layer at absolute OS
coordinates. The frontend must therefore:
- measure the host
<div>'sgetBoundingClientRect()and push those bounds to the native side (open_embedded_webview/set_embedded_bounds), - re-sync on window resize, sidebar collapse, and tab switch,
hideinactive tabs andcloseremoved tabs,closeall on LOCK.
- measure the host
- Because it floats above the DOM, overlays/menus from the Vue shell will be hidden behind the webview unless explicitly accounted for. Modals should be rendered before opening, or the embedded webview hidden while a modal is up.
Implementation here:
- Rust commands in
src-tauri/src/lib.rs:open_embedded_webview,set_embedded_bounds,hide_embedded_webview,close_embedded_webview(labelsembed-<sanitized-address>), loadingsth://<id>/via the custom protocol - zero local HTTP server. AppLayout.vuedrives the lifecycle through aResizeObserver+ watchers on the active tab; the web fallback keeps the<iframe>placeholder.- Capabilities updated in
capabilities/default.json(webviews: ["main","embed-*"]+ webview position/size/show/hide/close perms).
On open, sth://<id> is verified before it is trusted:
- files re-hashed on disk (SHA-256) → recomputed Blake3 merkle must match
the manifest (native
verify_app); idmust equal the SmartHoldem address derived from the signing publicKey (the URL is the key);- the ECDSA signature over
sha256(id|name|merkle)must be valid. A✓ verified/⚠ unverifiedbadge is shown on the tab. Web fallback verifies the stored manifest signature (lib/crypto.ts → verifyAppManifest).
start_discovery / discovered_peers / stop_discovery register this node on
_smartnet._udp.local. (announcing node, iroh nodeId, and app_id:blobHash
pairs in TXT) and browse the LAN for other SmartNet nodes.
- Discover Apps page (
views/Discovered.vue, sidebarDISCOVER APPS): aggregates peer apps deduplicated by id, showing title, description (fallbackno title/no description) and a seeds count = number of distinct peers serving that app. An Install button is also in Settings → P2P DISCOVERY. - Real transit (
iroh-blobs) is OPTIONAL, behind the Cargop2pfeature (kept off by default so the desktop build always compiles while iroh's API stabilises). Build withcargo build --features p2p(or add"p2p"to[features].defaultinsrc-tauri/Cargo.toml). On discovery each local dApp folder is seeded into anFsStore→ its collection hash announced;install_appdownloads the collection from a serving node and exports it todata/dapps/<id>, thenverify_appproves integrity →✓badge.⚠️ Pin a mutually compatibleiroh/iroh-blobspair from crates.io and adjust the API in thep2p_implmodule (inlib.rs) if it drifted.
A title (name) and a short description are mandatory - publish_app
(native) and the web store both reject empty values. The description is part of
the signed digest (sha256(id|name|description|merkle)), so it is tamper-evident.
Native child webviews paint above the DOM, so the ui store tracks an
overlayOpen flag (incremented by modals, e.g. the QR backup). While an overlay
is open, AppLayout hides the active embedded webview and restores it on close.
