<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Esteban Fuster Pozzi</title>
    <description>The latest articles on DEV Community by Esteban Fuster Pozzi (@estebanrfp).</description>
    <link>https://dev.to/estebanrfp</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2934186%2F79c95f8d-8996-4696-a11f-a8bfef73dd00.jpeg</url>
      <title>DEV Community: Esteban Fuster Pozzi</title>
      <link>https://dev.to/estebanrfp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/estebanrfp"/>
    <language>en</language>
    <item>
      <title>GenosDB + GenosRTC: A Scalable Browser-Native P2P Graph Database with Cellular Mesh WebRTC Architecture</title>
      <dc:creator>Esteban Fuster Pozzi</dc:creator>
      <pubDate>Fri, 17 Jul 2026 11:22:34 +0000</pubDate>
      <link>https://dev.to/estebanrfp/genosdb-genosrtc-a-scalable-browser-native-p2p-graph-database-with-cellular-mesh-webrtc-2hhb</link>
      <guid>https://dev.to/estebanrfp/genosdb-genosrtc-a-scalable-browser-native-p2p-graph-database-with-cellular-mesh-webrtc-2hhb</guid>
      <description>&lt;p&gt;When comparing &lt;strong&gt;GenosDB + GenosRTC&lt;/strong&gt; against the current browser-P2P ecosystem — Gun, PeerJS, simple-peer, Trystero, y-webrtc — it is important to distinguish between two very different things: &lt;strong&gt;exceptional execution of existing technologies&lt;/strong&gt; and &lt;strong&gt;genuine architectural innovation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;GenosDB delivers both. This article breaks down exactly where each one lives, with architecture diagrams and links to the full technical documentation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📦 &lt;strong&gt;npm:&lt;/strong&gt; &lt;a href="https://www.npmjs.com/package/genosdb" rel="noopener noreferrer"&gt;genosdb&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🗂 &lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/estebanrfp/gdb" rel="noopener noreferrer"&gt;github.com/estebanrfp/gdb&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📖 &lt;strong&gt;Documentation index:&lt;/strong&gt; &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/index.md" rel="noopener noreferrer"&gt;docs/index.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📄 &lt;strong&gt;Whitepaper:&lt;/strong&gt; &lt;a href="https://github.com/estebanrfp/gdb/blob/main/WHITEPAPER.md" rel="noopener noreferrer"&gt;WHITEPAPER.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🧠 &lt;strong&gt;Wiki:&lt;/strong&gt; &lt;a href="https://github.com/estebanrfp/gdb/wiki" rel="noopener noreferrer"&gt;GitHub Wiki&lt;/a&gt; · &lt;a href="https://deepwiki.com/estebanrfp/gdb" rel="noopener noreferrer"&gt;DeepWiki&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;What is GenosDB?&lt;/li&gt;
&lt;li&gt;The Full Stack at a Glance&lt;/li&gt;
&lt;li&gt;Layer 1 — Production-Grade P2P Signaling (GenosRTC)&lt;/li&gt;
&lt;li&gt;Layer 2 — The Real Innovation: Cellular Mesh&lt;/li&gt;
&lt;li&gt;Layer 3 — The Database Engine: Delta Sync, HLC, CRDTs&lt;/li&gt;
&lt;li&gt;Layer 4 — Zero-Trust Security: RBAC, ACLs, Governance&lt;/li&gt;
&lt;li&gt;Market Comparison&lt;/li&gt;
&lt;li&gt;Why the Combination Is the Moat&lt;/li&gt;
&lt;li&gt;Getting Started in 30 Seconds&lt;/li&gt;
&lt;li&gt;FAQ&lt;/li&gt;
&lt;li&gt;Documentation Map&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  What is GenosDB?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/estebanrfp/gdb" rel="noopener noreferrer"&gt;GenosDB (GDB)&lt;/a&gt; is a &lt;strong&gt;distributed, modular, peer-to-peer graph database&lt;/strong&gt; that runs entirely in the browser — no servers, no backend, no infrastructure. It combines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;graph data model&lt;/strong&gt; (nodes + directed edges) with a rich query engine — see the &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-api-reference.md" rel="noopener noreferrer"&gt;GDB API Reference&lt;/a&gt; and &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-features.md" rel="noopener noreferrer"&gt;Features overview&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time P2P synchronization&lt;/strong&gt; over WebRTC via &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosrtc-api-reference.md" rel="noopener noreferrer"&gt;GenosRTC&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;&lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/zero-trust-security-model.md" rel="noopener noreferrer"&gt;Zero-Trust Security Model&lt;/a&gt;&lt;/strong&gt; with cryptographic identities, WebAuthn, RBAC, node-level ACLs, and rule-based governance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero runtime dependencies&lt;/strong&gt; and lazy-loaded optional modules (&lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/geo-module.md" rel="noopener noreferrer"&gt;geo&lt;/a&gt;, &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/nlq-module.md" rel="noopener noreferrer"&gt;natural-language queries&lt;/a&gt;, &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/audit.md" rel="noopener noreferrer"&gt;audit&lt;/a&gt;)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your Web App
    │
    │ await gdb("my-db", { rtc: true })
    ▼
GenosDB
│
├─► Query Engine      (20+ operators, $edge)
│
├─► Security Manager  (RBAC · ACLs · WebAuthn)
│
├─► Optional Modules  (geo · nlq · audit)
│
└─► Sync Core         (HLC · oplog · LWW)
     │
     ├─► Persistence Worker  (OPFS → IndexedDB)
     │
     └─► GenosRTC            (WebRTC + Nostr + Cells)
          │
          ▼
     Other Peers (P2P)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Full Stack at a Glance
&lt;/h2&gt;

&lt;p&gt;The platform is built as four independent layers. The first one is &lt;em&gt;excellent engineering on known ideas&lt;/em&gt;. The other three are where the architectural differentiation lives.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;th&gt;Status vs. market&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Signaling &amp;amp; transport&lt;/td&gt;
&lt;td&gt;WebRTC + Nostr relays&lt;/td&gt;
&lt;td&gt;Production-grade execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Network topology&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Cellular Mesh overlay&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No browser-native equivalent&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data consistency&lt;/td&gt;
&lt;td&gt;HLC + oplog delta sync + LWW CRDT&lt;/td&gt;
&lt;td&gt;Rare in browser P2P&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Zero-trust RBAC + ACLs + signed governance&lt;/td&gt;
&lt;td&gt;Unique vertical integration&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Layer 1 — Production-Grade P2P Signaling (GenosRTC)
&lt;/h2&gt;

&lt;p&gt;Decentralized WebRTC signaling over &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosrtc-architecture.md" rel="noopener noreferrer"&gt;Nostr&lt;/a&gt; is not new. &lt;strong&gt;The implementation details are what matter&lt;/strong&gt; — and GenosRTC's details are production-grade (&lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosrtc-architecture.md" rel="noopener noreferrer"&gt;full architecture breakdown&lt;/a&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pool of 5 pre-generated WebRTC offers&lt;/strong&gt; for near-instant connection establishment — no offer-generation latency on peer discovery&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intelligent relay management&lt;/strong&gt;: primary relays plus adaptive fallback strategies with dynamic scheduling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic detection and exclusion of relays demanding Proof-of-Work&lt;/strong&gt;, keeping signaling latency predictable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connectivity-aware reconnection&lt;/strong&gt; driven by browser &lt;code&gt;online&lt;/code&gt;/&lt;code&gt;visibility&lt;/code&gt; events with exponential backoff&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AES-GCM SDP encryption&lt;/strong&gt; with &lt;code&gt;SHA-256(secret:appId:roomId)&lt;/code&gt; key derivation — signaling metadata is never readable by relays&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;16KB chunked transfers&lt;/strong&gt; with binary metadata and per-chunk progress tracking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audio/video streaming&lt;/strong&gt; with track replacement and per-stream metadata (&lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosrtc-guide.md" rel="noopener noreferrer"&gt;GenosRTC guide&lt;/a&gt;)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Nostr Relays
    │
    │ peer discovery only
    ▼
Peer A announces topic
    │
    ▼
Peer B discovers Peer A
    │
    ├─► OFFER    (pooled, AES-GCM SDP)
    │
    └─► ANSWER   (encrypted)
         │
         ▼
Direct WebRTC channel   (E2E, no relays)
│
├─► named channels
│
├─► 16KB chunks + progress
│
└─► audio/video streams
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Libraries such as PeerJS or simple-peer do not even address the signaling problem — they assume you run your own signaling server. Finding &lt;strong&gt;all&lt;/strong&gt; of these concerns solved together, in a dependency-free package, is rare.&lt;/p&gt;

&lt;p&gt;However, the true differentiation is &lt;strong&gt;not&lt;/strong&gt; the signaling layer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Layer 2 — The Real Innovation: Cellular Mesh
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosrtc-cells.md" rel="noopener noreferrer"&gt;Cellular Mesh&lt;/a&gt; was designed to solve the fundamental scalability problem of every traditional WebRTC full-mesh architecture: O(N²) connection growth.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Solutions such as Trystero, PeerJS, Gun, and y-webrtc all ultimately rely on topologies that become increasingly inefficient as peer counts grow. In practice, these architectures hit serious performance and stability limitations once networks reach &lt;strong&gt;dozens of simultaneous participants&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FULL MESH (market standard)
    │
    │ N·(N-1)/2 connections
    ▼
  8 peers  →    28 links
 50 peers  → 1,225 links
100 peers  → 4,950 links  💥

CELLULAR MESH (GenosRTC)
    │
    │ ~O(N) connections
    ▼
Peers
│
├─► Cell A   ● ● ● ◉
│
├─► Cell B   ● ● ● ◉
│
└─► Cell C   ● ● ● ◉

◉ bridge peer   (deterministically elected)
│
└─► forwards to neighbor cells
     (cell → bridge → cell, TTL-bounded)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GenosRTC addresses this with a &lt;strong&gt;self-organizing Cellular Mesh overlay&lt;/strong&gt; that currently has &lt;strong&gt;no direct equivalent in the browser-P2P market&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic cell assignment&lt;/strong&gt; — nodes are mapped to cells with no coordinator and no negotiation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adaptive cell sizing&lt;/strong&gt; — with &lt;code&gt;cellSize: 'auto'&lt;/code&gt;, cell size recalculates dynamically toward a configurable &lt;code&gt;targetCells&lt;/code&gt;, clamped between min and max bounds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic bridge election&lt;/strong&gt; — inter-cell bridges are chosen by a per-edge hash of the shared roster, with no coordinator and no negotiation, so every peer independently elects the same bridges&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-peer health metrics (monitoring)&lt;/strong&gt; — a composite &lt;code&gt;healthScore&lt;/code&gt; is tracked for diagnostics and exposed via the mesh API, independent of bridge election:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;healthScore  (monitoring / diagnostics)
│
├─► 0.25 · RTT             (ping window)
│
├─► 0.25 · uptime          (time in mesh)
│
├─► 0.30 · stability       (reconnections)
│
└─► 0.20 · responsiveness  (recent pings)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic TTL&lt;/strong&gt; — message propagation uses &lt;code&gt;TTL = min(150, ceil(log2(cells + 1)) * 2 + 3)&lt;/code&gt;, so flood depth adapts to the actual topology instead of being a magic number&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ring-buffer deduplication&lt;/strong&gt; — duplicate suppression over the last 5,000 message IDs, preventing routing loops at near-zero memory cost&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2-second heartbeat with stale-peer cleanup&lt;/strong&gt; — peers silent for 30s are evicted and bridges are re-elected automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is a &lt;strong&gt;structured, self-organizing overlay network running entirely on pure browser WebRTC&lt;/strong&gt;. Live visualizations are available in the repository: &lt;a href="https://github.com/estebanrfp/gdb/blob/main/examples/mesh-cells-monitor-d3.html" rel="noopener noreferrer"&gt;D3 mesh monitor&lt;/a&gt;, &lt;a href="https://github.com/estebanrfp/gdb/blob/main/examples/mesh-cells-monitor-lite.html" rel="noopener noreferrer"&gt;Canvas lite&lt;/a&gt;, &lt;a href="https://github.com/estebanrfp/gdb/blob/main/examples/mesh-cells-monitor-particles.html" rel="noopener noreferrer"&gt;3D particles&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Conceptually, the closest comparison is &lt;strong&gt;libp2p + gossipsub&lt;/strong&gt;. But that approach requires substantially more infrastructure, a significantly heavier stack, and far greater operational complexity. No existing browser-native solution provides a comparable architecture as a lightweight, transparent overlay enabled with a single flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;gdb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my-app&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;rtc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;cells&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To the best of our knowledge, &lt;strong&gt;Cellular Mesh is not an evolution of an existing browser-P2P pattern — it is a fundamentally different networking model&lt;/strong&gt;, and today it remains unique to GenosRTC.&lt;/p&gt;




&lt;h2&gt;
  
  
  Layer 3 — The Database Engine: Delta Sync, HLC, CRDTs
&lt;/h2&gt;

&lt;p&gt;A scalable transport is useless without a consistency model that survives it. GenosDB pairs Cellular Mesh with a sync engine designed for hostile network conditions:&lt;/p&gt;

&lt;h3&gt;
  
  
  Hybrid Delta Protocol
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-hybrid-delta-protocol.md" rel="noopener noreferrer"&gt;Hybrid Delta Protocol&lt;/a&gt; is a dual-mode engine: &lt;strong&gt;delta updates&lt;/strong&gt; for speed, &lt;strong&gt;full-state fallback&lt;/strong&gt; for reliability.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Peer reconnects (watermark T)
    │
    ▼
does the oplog still cover T?
│
├─► YES → DELTA SYNC
│    │
│    └─► only ops newer than T
│        (MessagePack + compressed)
│
└─► NO → FULL-STATE SYNC
     │
     ├─► compressed graph snapshot
     │
     └─► reset oplog + watermark
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Hybrid Logical Clocks + LWW
&lt;/h3&gt;

&lt;p&gt;Every operation carries an &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-hybrid-logical-clock.md" rel="noopener noreferrer"&gt;HLC timestamp&lt;/a&gt; &lt;code&gt;{physical, logical}&lt;/code&gt; guaranteeing &lt;strong&gt;causal ordering without trusting wall clocks&lt;/strong&gt;. Conflicts resolve deterministically via Last-Write-Wins, with clock-skew capping so a peer with a broken clock cannot poison the graph.&lt;/p&gt;

&lt;h3&gt;
  
  
  Non-Blocking Persistence
&lt;/h3&gt;

&lt;p&gt;A dedicated &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-worker-architecture.md" rel="noopener noreferrer"&gt;persistence worker&lt;/a&gt; writes through a tiered storage strategy — synchronous OPFS → async OPFS → IndexedDB — with cross-tab safety via the Web Locks API. Large graph saves never block the UI.&lt;/p&gt;

&lt;h3&gt;
  
  
  Query Engine
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/map-guide.md" rel="noopener noreferrer"&gt;map() query engine&lt;/a&gt; supports 20+ operators — comparison, logical, text/regex/like, &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/cursor-based-pagination.md" rel="noopener noreferrer"&gt;cursor-based pagination&lt;/a&gt; (&lt;code&gt;$after&lt;/code&gt; / &lt;code&gt;$before&lt;/code&gt; / &lt;code&gt;$limit&lt;/code&gt;), and the recursive &lt;strong&gt;&lt;code&gt;$edge&lt;/code&gt; graph-traversal operator&lt;/strong&gt; — all with real-time subscriptions. Full CRUD docs: &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/put-guide.md" rel="noopener noreferrer"&gt;put&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/get-guide.md" rel="noopener noreferrer"&gt;get&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/link-guide.md" rel="noopener noreferrer"&gt;link&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/remove-guide.md" rel="noopener noreferrer"&gt;remove&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/crud-operations-guide.md" rel="noopener noreferrer"&gt;overview&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Layer 4 — Zero-Trust Security: RBAC, ACLs, Governance
&lt;/h2&gt;

&lt;p&gt;This is where vertical integration becomes a moat. In a P2P network &lt;strong&gt;you cannot trust any peer&lt;/strong&gt; — so GenosDB assumes none of them (&lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-distributed-trust-model.md" rel="noopener noreferrer"&gt;Distributed Trust Model&lt;/a&gt;, &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/zero-trust-security-model.md" rel="noopener noreferrer"&gt;Zero-Trust Security Model&lt;/a&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;op arrives from the network
    │
    │ every peer verifies it
    ▼
verify ECDSA signature      ✗ reject
    │ (recover the signer)
    ▼
check RBAC role + expiry    ✗ reject
    │ (guest → superadmin)
    ▼
check node-level ACLs       ✗ reject
    │ (verified signer only)
    ▼
apply to graph
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cryptographic identity&lt;/strong&gt;: every user is an ECDSA keypair, protected by &lt;strong&gt;WebAuthn passkeys&lt;/strong&gt; or recoverable via &lt;strong&gt;BIP39 mnemonic&lt;/strong&gt; (&lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/sm-api-reference.md" rel="noopener noreferrer"&gt;SM API Reference&lt;/a&gt;, &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/sm-architecture.md" rel="noopener noreferrer"&gt;SM Architecture&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hierarchical RBAC&lt;/strong&gt; with role expiry — &lt;code&gt;guest → user → manager → admin → superadmin&lt;/code&gt;, every grant signed by an authorized signer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node-level ACLs&lt;/strong&gt; — owner/collaborator permissions per node, &lt;strong&gt;enforced against malicious peers&lt;/strong&gt;: the permission check uses the cryptographically verified signer, never a claimed identity (&lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/sm-acls-module.md" rel="noopener noreferrer"&gt;ACLs Module&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rule-based governance&lt;/strong&gt; — automatic role promotion/demotion where rule conditions are native GenosDB queries, evaluated last-match-wins and signed by an online superadmin (&lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/governance.md" rel="noopener noreferrer"&gt;Governance Guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Async content moderation&lt;/strong&gt; of the oplog via the &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/audit.md" rel="noopener noreferrer"&gt;Audit module&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every operation can be cryptographically validated. Every identity can be independently verified. Every node enforces ACL policy &lt;strong&gt;without centralized infrastructure and without assuming any other peer is trustworthy&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Market Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;GenosDB + GenosRTC&lt;/th&gt;
&lt;th&gt;Gun&lt;/th&gt;
&lt;th&gt;Trystero&lt;/th&gt;
&lt;th&gt;PeerJS / simple-peer&lt;/th&gt;
&lt;th&gt;y-webrtc&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Serverless signaling&lt;/td&gt;
&lt;td&gt;✅ Nostr&lt;/td&gt;
&lt;td&gt;⚠️ needs relays&lt;/td&gt;
&lt;td&gt;✅ Nostr et al.&lt;/td&gt;
&lt;td&gt;❌ own server&lt;/td&gt;
&lt;td&gt;⚠️ signaling server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scalable topology (&amp;gt;100 peers)&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Cellular Mesh&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌ full mesh&lt;/td&gt;
&lt;td&gt;❌ full mesh&lt;/td&gt;
&lt;td&gt;❌ full mesh&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Graph data model + queries&lt;/td&gt;
&lt;td&gt;✅ 20+ operators, &lt;code&gt;$edge&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;⚠️ graph, limited queries&lt;/td&gt;
&lt;td&gt;❌ transport only&lt;/td&gt;
&lt;td&gt;❌ transport only&lt;/td&gt;
&lt;td&gt;❌ (Yjs CRDT docs)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delta sync + full-state fallback&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;⚠️&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;⚠️ Yjs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Causal ordering (HLC)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;⚠️ vector-ish&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero-trust RBAC + role expiry&lt;/td&gt;
&lt;td&gt;✅ signed, enforced&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Node-level ACLs vs malicious peers&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;⚠️ SEA (different model)&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rule-based governance&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Runtime dependencies&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;several&lt;/td&gt;
&lt;td&gt;minimal&lt;/td&gt;
&lt;td&gt;several&lt;/td&gt;
&lt;td&gt;Yjs stack&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A note on Gun: its SEA layer provides cryptographic identity and encryption, but it has &lt;strong&gt;no equivalent to a zero-trust RBAC model with signed role grants, role expiry, rule-based governance, and node-level ACLs that remain enforced in the presence of malicious peers&lt;/strong&gt; across the network.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why the Combination Is the Moat
&lt;/h2&gt;

&lt;p&gt;GenosDB's competitive advantage is not WebRTC itself. It is not Nostr. It is not decentralized signaling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The defensible innovation is Cellular Mesh and its native integration with GenosDB's consistency, synchronization, and security model:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cellular Mesh         (scale)
    +
Hybrid Delta + HLC    (consistency)
    +
Signed RBAC + ACLs    (trust)
    │
    ▼
a fully distributed, zero-trust,
browser-native data platform —
beyond the full-mesh ceiling,
with no servers at all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each layer alone is valuable. Together they represent a &lt;strong&gt;unique architectural approach to browser-native distributed systems&lt;/strong&gt; — one that, as of today, has no direct equivalent in the browser-P2P market.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started in 30 Seconds
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;gdb&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;genosdb&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;// P2P database with cellular mesh, no servers&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;gdb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my-app&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;rtc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;cells&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;// Write&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;builder&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;// Real-time reactive query&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;unsubscribe&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;builder&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="na"&gt;realtime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;action&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;// Graph edges&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;link&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bob&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;📦 Install: &lt;code&gt;npm install genosdb&lt;/code&gt; — &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/bundler-configuration.md" rel="noopener noreferrer"&gt;bundler configuration&lt;/a&gt; for Vite, Webpack, Bun, esbuild, and CDN&lt;/li&gt;
&lt;li&gt;🧪 50+ live examples: &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-examples.md" rel="noopener noreferrer"&gt;examples catalog&lt;/a&gt; — chat, kanban, whiteboard, collaborative editors, video rooms, geolocation&lt;/li&gt;
&lt;li&gt;🧯 Optional high-availability superpeer: &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-fallback-server.md" rel="noopener noreferrer"&gt;Fallback Server&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is GenosDB really serverless?&lt;/strong&gt;&lt;br&gt;
Yes. Peer discovery uses public Nostr relays (or &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-fallback-server.md" rel="noopener noreferrer"&gt;your own&lt;/a&gt;); all data flows peer-to-peer over encrypted WebRTC channels. An optional &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-fallback-server.md" rel="noopener noreferrer"&gt;fallback superpeer&lt;/a&gt; can improve availability, but nothing requires it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How many peers can a room handle?&lt;/strong&gt;&lt;br&gt;
Standard mesh is comfortable for small rooms; with &lt;code&gt;{ cells: true }&lt;/code&gt; the &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosrtc-cells.md" rel="noopener noreferrer"&gt;Cellular Mesh overlay&lt;/a&gt; replaces O(N²) connection growth with cell-local connectivity plus health-elected bridges, designed to scale to very large peer counts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens when a peer goes offline and comes back?&lt;/strong&gt;&lt;br&gt;
The &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-hybrid-delta-protocol.md" rel="noopener noreferrer"&gt;Hybrid Delta Protocol&lt;/a&gt; sends only the missed operations; if the peer is too far behind, it transparently falls back to a compressed full-state snapshot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How are conflicts resolved?&lt;/strong&gt;&lt;br&gt;
Deterministic Last-Write-Wins ordered by &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-hybrid-logical-clock.md" rel="noopener noreferrer"&gt;Hybrid Logical Clocks&lt;/a&gt;, with clock-skew capping.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can untrusted users join?&lt;/strong&gt;&lt;br&gt;
That is the default assumption. The &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/zero-trust-security-model.md" rel="noopener noreferrer"&gt;Zero-Trust Security Model&lt;/a&gt; starts everyone as a write-blocked guest; promotion happens through signed &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/sm-api-reference.md" rel="noopener noreferrer"&gt;role grants&lt;/a&gt; or automatic &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/governance.md" rel="noopener noreferrer"&gt;governance rules&lt;/a&gt;, and &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/sm-acls-module.md" rel="noopener noreferrer"&gt;node-level ACLs&lt;/a&gt; hold even against malicious peers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it work offline?&lt;/strong&gt;&lt;br&gt;
Yes — local-first by design. Data persists in OPFS/IndexedDB via a &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-worker-architecture.md" rel="noopener noreferrer"&gt;non-blocking worker&lt;/a&gt; and syncs when connectivity returns.&lt;/p&gt;




&lt;h2&gt;
  
  
  Documentation Map
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Links&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Core API&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-api-reference.md" rel="noopener noreferrer"&gt;API Reference&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-features.md" rel="noopener noreferrer"&gt;Features&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/crud-operations-guide.md" rel="noopener noreferrer"&gt;CRUD&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/put-guide.md" rel="noopener noreferrer"&gt;put&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/get-guide.md" rel="noopener noreferrer"&gt;get&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/map-guide.md" rel="noopener noreferrer"&gt;map&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/link-guide.md" rel="noopener noreferrer"&gt;link&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/remove-guide.md" rel="noopener noreferrer"&gt;remove&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/cursor-based-pagination.md" rel="noopener noreferrer"&gt;pagination&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GenosRTC&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosrtc-api-reference.md" rel="noopener noreferrer"&gt;API Reference&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosrtc-architecture.md" rel="noopener noreferrer"&gt;Architecture&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosrtc-guide.md" rel="noopener noreferrer"&gt;Guide&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosrtc-cells.md" rel="noopener noreferrer"&gt;Cellular Mesh&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-fallback-server.md" rel="noopener noreferrer"&gt;Nostr relay deployment&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/zero-trust-security-model.md" rel="noopener noreferrer"&gt;Zero-Trust Model&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-distributed-trust-model.md" rel="noopener noreferrer"&gt;Distributed Trust&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/sm-api-reference.md" rel="noopener noreferrer"&gt;SM API&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/sm-architecture.md" rel="noopener noreferrer"&gt;SM Architecture&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/sm-acls-module.md" rel="noopener noreferrer"&gt;ACLs&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/governance.md" rel="noopener noreferrer"&gt;Governance&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Internals&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-worker-architecture.md" rel="noopener noreferrer"&gt;Worker Architecture&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-hybrid-delta-protocol.md" rel="noopener noreferrer"&gt;Hybrid Delta Protocol&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-hybrid-logical-clock.md" rel="noopener noreferrer"&gt;Hybrid Logical Clock&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-fallback-server.md" rel="noopener noreferrer"&gt;Fallback Server&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Modules&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/geo-module.md" rel="noopener noreferrer"&gt;Geo&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/nlq-module.md" rel="noopener noreferrer"&gt;NLQ&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/audit.md" rel="noopener noreferrer"&gt;Audit&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Project&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com/estebanrfp/gdb#readme" rel="noopener noreferrer"&gt;README&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/WHITEPAPER.md" rel="noopener noreferrer"&gt;Whitepaper&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-examples.md" rel="noopener noreferrer"&gt;Examples&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-resources.md" rel="noopener noreferrer"&gt;Resources&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/wiki" rel="noopener noreferrer"&gt;Wiki&lt;/a&gt; · &lt;a href="https://deepwiki.com/estebanrfp/gdb" rel="noopener noreferrer"&gt;DeepWiki&lt;/a&gt; · &lt;a href="https://www.npmjs.com/package/genosdb" rel="noopener noreferrer"&gt;npm&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Keywords:&lt;/strong&gt; GenosDB, GenosRTC, P2P database, WebRTC mesh, decentralized database, browser database, Nostr signaling, CRDT, distributed systems, zero-trust security, real-time sync, serverless, local-first, offline-first, graph database, JavaScript P2P&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Author
&lt;/h2&gt;

&lt;p&gt;Esteban Fuster Pozzi (&lt;a href="https://github.com/estebanrfp" rel="noopener noreferrer"&gt;@estebanrfp&lt;/a&gt;) — Full Stack JavaScript Developer&lt;/p&gt;

&lt;p&gt;🌐 &lt;a href="https://estebanrfp.com/" rel="noopener noreferrer"&gt;estebanrfp.com&lt;/a&gt; · &lt;a href="https://www.linkedin.com/in/estebanrfp/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · Creator of &lt;a href="https://github.com/estebanrfp/gdb" rel="noopener noreferrer"&gt;GenosDB&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webrtc</category>
      <category>javascript</category>
      <category>database</category>
      <category>architecture</category>
    </item>
    <item>
      <title>A Live WebGPU Planet With No Backend — Powered by GenosDB</title>
      <dc:creator>Esteban Fuster Pozzi</dc:creator>
      <pubDate>Fri, 17 Jul 2026 11:22:33 +0000</pubDate>
      <link>https://dev.to/estebanrfp/a-live-webgpu-planet-with-no-backend-powered-by-genosdb-4mnj</link>
      <guid>https://dev.to/estebanrfp/a-live-webgpu-planet-with-no-backend-powered-by-genosdb-4mnj</guid>
      <description>&lt;p&gt;Most database demos are to-do lists. I wanted to find out what happens when you&lt;br&gt;
put one under &lt;em&gt;real&lt;/em&gt; load — so I built a planet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OVGrid&lt;/strong&gt; is a cube-sphere planet you explore as an avatar, right in your&lt;br&gt;
browser: procedural terrain, weather, vegetation, day/night, real-time&lt;br&gt;
multiplayer presence, and land you can own and trade on-chain. It runs at&lt;br&gt;
real scale on &lt;strong&gt;WebGPU&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;▶ Play it live (no install, no account): &lt;a href="https://world.ovgrid.com" rel="noopener noreferrer"&gt;https://world.ovgrid.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But the rendering isn't the interesting part. The interesting part is that&lt;br&gt;
&lt;strong&gt;there is no backend.&lt;/strong&gt; No game server, no API, no socket server. A single&lt;br&gt;
distributed database — &lt;a href="https://github.com/estebanrfp/gdb" rel="noopener noreferrer"&gt;GenosDB&lt;/a&gt; — drives the&lt;br&gt;
entire live state of the world. This post is about how that works.&lt;/p&gt;


&lt;h2&gt;
  
  
  First, the planet: Floating Origin
&lt;/h2&gt;

&lt;p&gt;A planet is 795 km in radius. GPUs work in 32-bit floats, which run out of&lt;br&gt;
precision long before you get that big — geometry jitters, z-fighting explodes,&lt;br&gt;
the avatar shakes. The fix is &lt;strong&gt;Floating Origin&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The CPU holds every world coordinate in &lt;strong&gt;Float64&lt;/strong&gt; (full precision).&lt;/li&gt;
&lt;li&gt;Each frame, positions are rebased &lt;strong&gt;relative to the camera&lt;/strong&gt; and only the
small camera-relative deltas are handed to the GPU as &lt;strong&gt;Float32&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The camera is effectively always at the origin, so the numbers the GPU sees stay&lt;br&gt;
tiny and precise — jitter-free all the way down to street-level LOD. A dynamic&lt;br&gt;
quadtree on the cube-sphere subdivides terrain near you, and a GPU-baked height&lt;br&gt;
grid gives exact ground for collision and physics. (Full write-up:&lt;br&gt;
&lt;a href="https://github.com/estebanrfp/ovgrid/blob/main/docs/floating-origin-guide.md" rel="noopener noreferrer"&gt;floating-origin-guide.md&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;That's the foundation. Now the twist.&lt;/p&gt;


&lt;h2&gt;
  
  
  The twist: a database is the backend
&lt;/h2&gt;

&lt;p&gt;Live multiplayer worlds usually need a server: something authoritative that&lt;br&gt;
clients connect to, that holds state and relays updates. OVGrid has none. Instead,&lt;br&gt;
every client runs &lt;strong&gt;GenosDB&lt;/strong&gt;, a serverless, peer-to-peer, real-time graph&lt;br&gt;
database, and the world &lt;em&gt;is&lt;/em&gt; the database.&lt;/p&gt;

&lt;p&gt;Here's the capability map:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What you see in the world&lt;/th&gt;
&lt;th&gt;What GenosDB is doing&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Other players appear as animated avatars at the right position, altitude and animation&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;P2P presence&lt;/strong&gt; over WebRTC (&lt;code&gt;GenosRTC&lt;/code&gt;), synced ~12 times a second — no game server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The land map and the marketplace update live as data changes&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Reactive reads&lt;/strong&gt; (&lt;code&gt;db.map&lt;/code&gt;) — the UI subscribes to a query and re-renders on every change&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Land and assets you own, read instantly even offline&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;On-chain mirror&lt;/strong&gt; — Polygon is the source of truth, GenosDB caches it for fast, offline, reactive reads&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sign in with biometrics or a seed phrase; actions are signed&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Decentralized identity + RBAC&lt;/strong&gt; via the Security Manager (WebAuthn / BIP39)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Reactive reads: the UI never polls
&lt;/h3&gt;

&lt;p&gt;The land map and the on-chain marketplace are &lt;em&gt;different frontends&lt;/em&gt; that read the&lt;br&gt;
&lt;em&gt;same database the same way&lt;/em&gt; — a live query with a callback that fires on every&lt;br&gt;
change, whether the change came from this peer or another:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Subscribe once. The callback re-fires whenever matching data changes —&lt;/span&gt;
&lt;span class="c1"&gt;// locally OR from a remote peer. No polling, no manual refresh.&lt;/span&gt;
&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;parcel&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;action&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;renderLandMap&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;   &lt;span class="c1"&gt;// re-render the 3D world on each change&lt;/span&gt;
  &lt;span class="c1"&gt;// ...and the marketplace subscribes to the very same data&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Broadcasting your avatar is just a write:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Position, yaw and animation, ~12 Hz. Peers receive it and animate your avatar.&lt;/span&gt;
&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;presence&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;yaw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;anim&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="s2"&gt;`presence_&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;myId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The pattern I'm proudest of: the read layer never changes
&lt;/h3&gt;

&lt;p&gt;A parcel of land might be &lt;strong&gt;claimed locally&lt;/strong&gt; (instant, optimistic) or &lt;strong&gt;minted&lt;br&gt;
on-chain&lt;/strong&gt; (an ERC-1155 token on Polygon). Two completely different write paths —&lt;br&gt;
one is a local DB op, the other is a blockchain transaction confirmed over&lt;br&gt;
minutes.&lt;/p&gt;

&lt;p&gt;And yet the world reads &lt;strong&gt;both the same way&lt;/strong&gt;: a &lt;code&gt;db.map&lt;/code&gt; subscription. A sync&lt;br&gt;
layer mirrors the chain into GenosDB, so the 3D client never waits on an RPC, never&lt;br&gt;
hits the chain on the render path, and works offline. The blockchain is the source&lt;br&gt;
of truth; &lt;strong&gt;GenosDB is the abstraction that makes it feel instant.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What "no server" actually means
&lt;/h2&gt;

&lt;p&gt;The honest question is: if there's no backend, how do peers find each other?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Transport:&lt;/strong&gt; WebRTC data channels, peer-to-peer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Signaling:&lt;/strong&gt; &lt;a href="https://nostr.com" rel="noopener noreferrer"&gt;Nostr&lt;/a&gt; relays — a decentralized signaling
layer, so there's no central matchmaking server either.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conflict resolution:&lt;/strong&gt; a Hybrid Logical Clock orders concurrent writes
deterministically, so peers converge without a coordinator.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result: open two browser tabs, walk around in one, and your avatar appears and&lt;br&gt;
moves in the other — with nothing running in between but the open internet.&lt;/p&gt;




&lt;h2&gt;
  
  
  It's open source — and it documents itself
&lt;/h2&gt;

&lt;p&gt;OVGrid is fully public:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;→ &lt;a href="https://github.com/estebanrfp/ovgrid" rel="noopener noreferrer"&gt;https://github.com/estebanrfp/ovgrid&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A couple of things worth a look:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every tunable in the world — terrain noise, cloud layers, ocean, lighting,
weather, vegetation — is documented parameter-by-parameter in
&lt;a href="https://github.com/estebanrfp/ovgrid/tree/main/docs/configuration" rel="noopener noreferrer"&gt;&lt;code&gt;docs/configuration/&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The repo is indexed by &lt;a href="https://deepwiki.com/estebanrfp/ovgrid" rel="noopener noreferrer"&gt;DeepWiki&lt;/a&gt;, so you
can &lt;em&gt;ask the codebase questions&lt;/em&gt; in natural language.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you've ever wanted to see a serverless, P2P, real-time database do something&lt;br&gt;
harder than a to-do list — go fly around a planet, then read how a single DB holds&lt;br&gt;
it all together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Play:&lt;/strong&gt; &lt;a href="https://world.ovgrid.com" rel="noopener noreferrer"&gt;https://world.ovgrid.com&lt;/a&gt; · &lt;strong&gt;Code:&lt;/strong&gt; &lt;a href="https://github.com/estebanrfp/ovgrid" rel="noopener noreferrer"&gt;https://github.com/estebanrfp/ovgrid&lt;/a&gt; · &lt;strong&gt;Database:&lt;/strong&gt; &lt;a href="https://github.com/estebanrfp/gdb" rel="noopener noreferrer"&gt;https://github.com/estebanrfp/gdb&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webgpu</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>Serverless P2P Multiplayer in Godot — No Backend, Just GenosDB</title>
      <dc:creator>Esteban Fuster Pozzi</dc:creator>
      <pubDate>Fri, 17 Jul 2026 11:21:14 +0000</pubDate>
      <link>https://dev.to/estebanrfp/serverless-p2p-multiplayer-in-godot-no-backend-just-genosdb-1cho</link>
      <guid>https://dev.to/estebanrfp/serverless-p2p-multiplayer-in-godot-no-backend-just-genosdb-1cho</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Try it first:&lt;/strong&gt; open the live demo in &lt;strong&gt;two browser tabs&lt;/strong&gt; → &lt;a href="https://estebanrfp.github.io/godot-genosdb/" rel="noopener noreferrer"&gt;https://estebanrfp.github.io/godot-genosdb/&lt;/a&gt; Each tab is a different player. Walk around, chop a tree — it falls in &lt;em&gt;every&lt;/em&gt; window. Say hi in the chat. No server is running. Anywhere.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpsvn20o1fxi0cakv4xsy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpsvn20o1fxi0cakv4xsy.gif" alt="GenosDB Farm — two browser windows, one shared world, no backend" width="599" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The challenge
&lt;/h2&gt;

&lt;p&gt;Multiplayer usually means servers: a backend, sockets, authoritative state, deployment, scaling, cost. For a small game — or just a prototype — that's a lot of plumbing before the &lt;em&gt;fun&lt;/em&gt; part.&lt;/p&gt;

&lt;p&gt;What if the players' browsers just talked &lt;strong&gt;directly to each other&lt;/strong&gt;, and the shared world simply… persisted, on its own?&lt;/p&gt;

&lt;p&gt;That's what this demo does: a top-down, Stardew-style co-op farm built in &lt;strong&gt;Godot 4&lt;/strong&gt;, exported to the Web, where every connected browser is another farmer in the same world — running on &lt;strong&gt;no backend at all&lt;/strong&gt;. The secret is &lt;a href="https://github.com/estebanrfp/gdb" rel="noopener noreferrer"&gt;&lt;strong&gt;GenosDB&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is GenosDB?
&lt;/h2&gt;

&lt;p&gt;GenosDB is a &lt;strong&gt;decentralized graph database that runs entirely in the browser&lt;/strong&gt;. Two parts matter here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GenosRTC&lt;/strong&gt; — peer-to-peer transport over &lt;strong&gt;WebRTC&lt;/strong&gt;, with &lt;strong&gt;decentralized signaling via Nostr relays&lt;/strong&gt; (no signaling server &lt;em&gt;you&lt;/em&gt; run). Peers find each other and open direct data channels.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A reactive, persistent graph&lt;/strong&gt; — you &lt;code&gt;put&lt;/code&gt; nodes and &lt;code&gt;map&lt;/code&gt; queries, and changes &lt;strong&gt;sync to every peer and persist&lt;/strong&gt; (OPFS). New peers automatically receive the current state.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No backend. No database server. No signaling server. It's all client-side.&lt;/p&gt;

&lt;h2&gt;
  
  
  The key idea: a hybrid model
&lt;/h2&gt;

&lt;p&gt;Not all multiplayer state is equal, and GenosDB lets you treat it accordingly. The demo splits the world into two layers — and this is the pattern worth stealing:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;State&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;How&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ephemeral&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Player positions &lt;strong&gt;&amp;amp; chat messages&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;a data channel (&lt;code&gt;channel.send&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;fast, ~16 Hz, throwaway&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Persistent&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Chopped trees + the shared wood total&lt;/td&gt;
&lt;td&gt;the graph (&lt;code&gt;db.put&lt;/code&gt; / &lt;code&gt;db.map&lt;/code&gt; / &lt;code&gt;db.remove&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;synced &lt;strong&gt;and&lt;/strong&gt; stored; late-joiners see the world as it &lt;em&gt;is&lt;/em&gt;, and &lt;strong&gt;Reset&lt;/strong&gt; wipes it for everyone&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That second row is the magic. When you chop a tree you don't &lt;em&gt;shout&lt;/em&gt; "I chopped tree 3!" (only people currently listening hear it). You &lt;strong&gt;write it into a shared graph&lt;/strong&gt; — and anyone who opens a new tab later gets the already-chopped world via GenosDB's &lt;code&gt;initial&lt;/code&gt; event. Chops survive reloads. That's a database, working P2P, for free.&lt;/p&gt;

&lt;h2&gt;
  
  
  It's a real little game now — and every feature is a GenosDB call
&lt;/h2&gt;

&lt;p&gt;The demo grew from a tech sketch into a cozy co-op game, and each mechanic still maps cleanly to GenosDB:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;🪓 &lt;strong&gt;Chop trees with an axe&lt;/strong&gt; — a 4-directional animated farmer. Felled trees &lt;strong&gt;regrow&lt;/strong&gt;, and the &lt;strong&gt;shared wood counter&lt;/strong&gt; (real felled trees, race-free) reads the same for everyone, derived straight from the synced graph.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;💬 &lt;strong&gt;P2P chat&lt;/strong&gt; — type a message and it pops as a &lt;strong&gt;speech bubble&lt;/strong&gt; over your farmer in &lt;em&gt;every&lt;/em&gt; window (the ephemeral data channel again).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;♻️ &lt;strong&gt;Reset&lt;/strong&gt; — one button wipes the shared world for all peers. That's &lt;code&gt;db.remove&lt;/code&gt;, propagated P2P.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🎨 &lt;strong&gt;Cozy pixel-art world&lt;/strong&gt;, sound effects and ambient music — and all art &amp;amp; audio are &lt;strong&gt;CC0&lt;/strong&gt; (credits in the repo).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of it serverless. All of it P2P.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting Godot to GenosDB
&lt;/h2&gt;

&lt;p&gt;GenosDB is browser-only, and Godot reaches the browser through its &lt;strong&gt;Web (HTML5) export&lt;/strong&gt; + &lt;code&gt;JavaScriptBridge&lt;/code&gt;. So I built a small bridge and packaged it as a plugin — &lt;a href="https://github.com/estebanrfp/godot-genosdb" rel="noopener noreferrer"&gt;&lt;strong&gt;godot-genosdb&lt;/strong&gt;&lt;/a&gt; — that &lt;strong&gt;auto-injects&lt;/strong&gt; the JS bridge into your exported &lt;code&gt;index.html&lt;/code&gt;. Enable it, export to Web, done. Nothing to bundle, no HTML to edit.&lt;/p&gt;

&lt;h2&gt;
  
  
  The API mirrors GenosDB
&lt;/h2&gt;

&lt;p&gt;On purpose: learn the plugin and you've learned GenosDB.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gdscript"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;_ready&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;Net&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;peer_join&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;spawn_farmer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;Net&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_on_remote_state&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;      &lt;span class="c1"&gt;# ephemeral (positions + chat)&lt;/span&gt;
    &lt;span class="n"&gt;Net&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;graph_changed&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_on_world&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;       &lt;span class="c1"&gt;# persistent&lt;/span&gt;
    &lt;span class="n"&gt;Net&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"my-room"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                         &lt;span class="c1"&gt;# = gdb("my-room", {rtc:true})&lt;/span&gt;
    &lt;span class="n"&gt;Net&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;({})&lt;/span&gt;                                 &lt;span class="c1"&gt;# = db.map({}, cb)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;_physics_process&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_d&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;Net&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="s2"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;position&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;position&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;   &lt;span class="c1"&gt;# = channel.send(...)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;chop_tree&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;Net&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;put&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="s2"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"tree"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"hp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="s2"&gt;"tree_3"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# = db.put(node, id)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;reset_world&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;Net&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"tree_3"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                              &lt;span class="c1"&gt;# = db.remove(id)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;GenosDB (JS)&lt;/th&gt;
&lt;th&gt;Godot (&lt;code&gt;Net&lt;/code&gt;)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gdb(name, {rtc:true})&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Net.join(name)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;channel.send(data)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Net.send(data)&lt;/code&gt; → signal &lt;code&gt;message&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;db.put(node, id)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Net.put(data, id)&lt;/code&gt; → signal &lt;code&gt;graph_changed&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;db.map(query, cb)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Net.map(query)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;db.remove(id)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Net.remove(id)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;room.on('peer:join' / 'leave')&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;signals &lt;code&gt;peer_join&lt;/code&gt; / &lt;code&gt;peer_leave&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Try it / use it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;▶ Live demo (two tabs!):&lt;/strong&gt; &lt;a href="https://estebanrfp.github.io/godot-genosdb/" rel="noopener noreferrer"&gt;https://estebanrfp.github.io/godot-genosdb/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugin + full source (MIT, assets CC0):&lt;/strong&gt; &lt;a href="https://github.com/estebanrfp/godot-genosdb" rel="noopener noreferrer"&gt;https://github.com/estebanrfp/godot-genosdb&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GenosDB:&lt;/strong&gt; &lt;a href="https://github.com/estebanrfp/gdb" rel="noopener noreferrer"&gt;https://github.com/estebanrfp/gdb&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install is three steps: copy &lt;code&gt;addons/godot_genosdb/&lt;/code&gt;, enable it in &lt;em&gt;Project Settings → Plugins&lt;/em&gt;, export to Web. P2P is Web-only; on desktop the API is a safe no-op, so the same code runs as single-player in the editor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;For jams, prototypes, collaborative toys, or "presence" features, &lt;strong&gt;serverless P2P removes an entire category of work&lt;/strong&gt;. And because GenosDB gives you a &lt;em&gt;persistent reactive graph&lt;/em&gt; — not just a raw WebRTC pipe — your shared world is consistent, survives reconnects, and welcomes late-joiners with zero extra code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two browser tabs. One shared world. No backend. Just GenosDB.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>godot</category>
      <category>gamedev</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Serverless P2P NFT Marketplace on Polygon — Powered by GenosDB</title>
      <dc:creator>Esteban Fuster Pozzi</dc:creator>
      <pubDate>Fri, 17 Jul 2026 11:21:12 +0000</pubDate>
      <link>https://dev.to/estebanrfp/serverless-p2p-nft-marketplace-on-polygon-powered-by-genosdb-2ki9</link>
      <guid>https://dev.to/estebanrfp/serverless-p2p-nft-marketplace-on-polygon-powered-by-genosdb-2ki9</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Most dapps hammer an RPC and shove a wallet extension in your face. I took the on-chain marketplace from OVGrid and rebuilt it as a ~1,600-line example where the database is the read layer — and your identity is your wallet.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Open two browser tabs at &lt;a href="https://estebanrfp.github.io/dMarket/" rel="noopener noreferrer"&gt;&lt;strong&gt;dMarket&lt;/strong&gt;&lt;/a&gt;. Browse the marketplace in both — no wallet, no sign-up, no spinner waiting on an RPC. The items are just &lt;em&gt;there&lt;/em&gt;, and a change in one tab shows up in the other. That isn't a backend doing the work. It's a peer-to-peer graph database.&lt;/p&gt;

&lt;p&gt;dMarket is a small, faithful slice of the marketplace that runs inside &lt;a href="https://github.com/estebanrfp/ovgrid" rel="noopener noreferrer"&gt;OVGrid&lt;/a&gt; — the WebGPU planet I &lt;a href="https://genosdb.com/webgpu-planet" rel="noopener noreferrer"&gt;wrote about here&lt;/a&gt;. I pulled the blockchain layer out, trimmed it to ~1,600 readable lines of vanilla JavaScript with no build step, and kept it pointed at the &lt;em&gt;same real contracts&lt;/em&gt; OVGrid uses on Polygon. It exists so you can copy a pattern that actually works instead of reinventing it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with most blockchain front-ends
&lt;/h2&gt;

&lt;p&gt;Every wallet, every render, every visitor hits the same RPC for the same data. There's no real-time sync between users unless you stand up an indexer and a websocket server — a backend, the very thing crypto was supposed to get rid of. And before anyone can even &lt;em&gt;look&lt;/em&gt;, you make them install MetaMask.&lt;/p&gt;

&lt;p&gt;I wanted to show a different shape.&lt;/p&gt;

&lt;h2&gt;
  
  
  First, what GenosDB is
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/estebanrfp/gdb" rel="noopener noreferrer"&gt;GenosDB&lt;/a&gt; is a peer-to-peer graph database that runs entirely in the browser. No central server: data lives locally (OPFS), replicates between peers over WebRTC, and every operation is signed by your own key. You read it reactively with &lt;code&gt;db.map(query, cb)&lt;/code&gt;. (More in the &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-examples.md" rel="noopener noreferrer"&gt;examples&lt;/a&gt;.)&lt;/p&gt;

&lt;h2&gt;
  
  
  The key idea: the chain is the truth, GenosDB is the mirror
&lt;/h2&gt;

&lt;p&gt;Polygon stays the source of truth for ownership — money is money. But you don't read &lt;em&gt;from&lt;/em&gt; the chain on every render. You read it once, write the result into GenosDB, and from then on everyone reads the database:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Read the chain (authoritative) once, mirror it into GenosDB:&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;listings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getActiveListings&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;        &lt;span class="c1"&gt;// 2 Multicall3 calls&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;listings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;l&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;listing&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;l&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="s2"&gt;`listing_&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;listingId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;// Everywhere else, read reactively — never the RPC again:&lt;/span&gt;
&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(({&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;action&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;repaint&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;            &lt;span class="c1"&gt;// the ONE reactive read&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After a buy or a listing confirms on-chain, the same thing happens: &lt;code&gt;db.put&lt;/code&gt; the new state, and &lt;code&gt;db.map&lt;/code&gt; streams it to every connected peer. The read layer never changes whether an item was just discovered on-chain or just created by someone two seconds ago. The database &lt;em&gt;is&lt;/em&gt; the abstraction — fast, offline-capable, peer-to-peer, with no indexer in the middle.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part I'm proudest of: your identity is your wallet
&lt;/h2&gt;

&lt;p&gt;GenosDB's Security Manager already gives every user a cryptographic identity — an address and a private key derived from a recovery phrase. Here's the thing nobody points out: &lt;strong&gt;that's an Ethereum account.&lt;/strong&gt; The same key that signs your peer-to-peer database operations signs your Polygon transactions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// A GenosDB login hands you a usable wallet. One key, two worlds.&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loginOrRecoverUserWithMnemonic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;phrase&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// { address, privateKey }&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;wallet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Wallet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;privateKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;     &lt;span class="c1"&gt;// signs on-chain txs&lt;/span&gt;
&lt;span class="c1"&gt;// wallet.address === db.sm.getActiveEthAddress()   ✓  no MetaMask&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No extension, no second wallet, no bridging. You log in once and you can both sync P2P and transact on-chain with the exact same identity. dMarket even asserts the two match before it ever signs. See the &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/sm-api-reference.md" rel="noopener noreferrer"&gt;Security Manager docs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What GenosDB actually buys you here
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What a marketplace needs&lt;/th&gt;
&lt;th&gt;How dMarket does it with GenosDB&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Live updates between users&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;db.map()&lt;/code&gt; over WebRTC — no indexer, no websocket backend&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browse instantly, even offline&lt;/td&gt;
&lt;td&gt;local-first reads from GenosDB (OPFS)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A wallet&lt;/td&gt;
&lt;td&gt;the GenosDB identity &lt;em&gt;is&lt;/em&gt; the wallet — no MetaMask&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Who owns what"&lt;/td&gt;
&lt;td&gt;mirrored P2P, re-derivable from the chain anytime&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Simplified, but real
&lt;/h2&gt;

&lt;p&gt;dMarket is deliberately a &lt;em&gt;reference example&lt;/em&gt;, not the full product. It does mint, list, buy and offer — and stops there. No auctions, bundles, rentals, royalties, analytics or a 3-D world; that breadth lives in OVGrid. But what's here is the real, battle-tested integration: real ABIs, real contracts on Polygon Amoy, the real identity bridge. Read dMarket to learn the pattern; study &lt;a href="https://github.com/estebanrfp/ovgrid" rel="noopener noreferrer"&gt;OVGrid&lt;/a&gt; to see it at full scale.&lt;/p&gt;

&lt;p&gt;Browsing works for anyone with no wallet — that's the GenosDB showcase. To actually transact you connect an identity and grab free test POL from the &lt;a href="https://faucet.polygon.technology/" rel="noopener noreferrer"&gt;Amoy faucet&lt;/a&gt;; the README is honest about the prerequisites.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it / read it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;▶ &lt;strong&gt;Play it live&lt;/strong&gt; — &lt;a href="https://estebanrfp.github.io/dMarket/" rel="noopener noreferrer"&gt;estebanrfp.github.io/dMarket&lt;/a&gt; (open two tabs)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;💻 &lt;strong&gt;Read the code&lt;/strong&gt; — &lt;a href="https://github.com/estebanrfp/dMarket" rel="noopener noreferrer"&gt;github.com/estebanrfp/dMarket&lt;/a&gt; (~1,600 lines, no build)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🌍 &lt;strong&gt;The full world it came from&lt;/strong&gt; — &lt;a href="https://github.com/estebanrfp/ovgrid" rel="noopener noreferrer"&gt;OVGrid&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🗄️ &lt;strong&gt;The database&lt;/strong&gt; — &lt;a href="https://github.com/estebanrfp/gdb" rel="noopener noreferrer"&gt;GenosDB&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/map-guide.md" rel="noopener noreferrer"&gt;reactive reads&lt;/a&gt; · &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/sm-api-reference.md" rel="noopener noreferrer"&gt;identity &amp;amp; security&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;We keep rebuilding the same backend — an indexer here, a websocket there, a wallet popup in front — to do things a &lt;a href="https://genosdb.com/popular-p2p-distributed-databases" rel="noopener noreferrer"&gt;peer-to-peer database&lt;/a&gt; can just &lt;em&gt;do&lt;/em&gt;. dMarket is a small proof that you can put a real blockchain behind a real-time, offline-capable, serverless front end, and have the whole thing be readable in an afternoon.&lt;/p&gt;

&lt;p&gt;The chain is the truth. The database is the mirror. Your identity is your wallet. No backend.&lt;/p&gt;




</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>javascript</category>
      <category>database</category>
    </item>
    <item>
      <title>What Socket.dev Shows About GunDB's Supply Chain in 2026 — and How GenosDB Answers It</title>
      <dc:creator>Esteban Fuster Pozzi</dc:creator>
      <pubDate>Thu, 16 Jul 2026 18:50:43 +0000</pubDate>
      <link>https://dev.to/estebanrfp/what-socketdev-shows-about-gundbs-supply-chain-in-2026-and-how-genosdb-answers-it-3cnb</link>
      <guid>https://dev.to/estebanrfp/what-socketdev-shows-about-gundbs-supply-chain-in-2026-and-how-genosdb-answers-it-3cnb</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;A technical, source-cited comparison of the install-time supply-chain surface of &lt;code&gt;gun&lt;/code&gt; (GunDB) as reported by Socket.dev, and how &lt;strong&gt;GenosDB&lt;/strong&gt; — a zero-dependency, zero-trust, real-time peer-to-peer graph database — is designed to keep that surface empty. If you are weighing GunDB for production, or looking for a maintained GunDB alternative, this is the security-and-architecture comparison in full.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Reading time: ~18 min. Written by&lt;/em&gt; &lt;a href="https://github.com/estebanrfp" rel="noopener noreferrer"&gt;&lt;em&gt;Esteban Fuster Pozzi&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, maintainer of GenosDB.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Context
&lt;/h2&gt;

&lt;p&gt;Full disclosure: I built GenosDB, so I have a stake in this comparison — read it knowing that. Here's the rest of the context, so you can weigh it for yourself.&lt;/p&gt;

&lt;p&gt;I spent years working with GunDB — building on it, building its documentation platform, and getting to know genuinely talented developers along the way. GunDB made real-time, offline-first, peer-to-peer data feel possible years before the rest of the ecosystem caught up, and it shaped how I think about decentralized systems.&lt;/p&gt;

&lt;p&gt;GunDB defined a category: a real-time, offline-first, peer-to-peer graph database that runs in the browser. It is a reference point for decentralized, serverless data on the web, alongside projects like OrbitDB, Scuttlebutt and RxDB. GenosDB works in the same category — a distributed graph database with real-time P2P sync — and this post compares it with GunDB on one specific axis: &lt;strong&gt;the security and supply-chain posture of the data/sync layer&lt;/strong&gt;, as measured by an external tool that scans npm packages statically, &lt;a href="https://socket.dev" rel="noopener noreferrer"&gt;Socket.dev&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Socket now provides a complete, itemized report of GunDB's install-time surface. This is the value of the exercise: what used to be described informally ("Gun's dependency tree is heavy") is now a set of concrete, countable facts. This post presents those facts, explains what each alert measures, traces the architectural pattern behind them, and describes how GenosDB's design produces a different report.&lt;/p&gt;

&lt;p&gt;Everything here is verifiable. Every count comes straight from Socket's public pages, quoted as reported.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Socket.dev measures
&lt;/h2&gt;

&lt;p&gt;Socket statically analyzes the &lt;em&gt;behavior&lt;/em&gt; of every package in a dependency graph — whether it spawns a shell, reads environment variables, runs an install script, ships obfuscated or minified blobs, or contacts external URLs — and it does this &lt;strong&gt;transitively&lt;/strong&gt;, across the full tree that an install would resolve.&lt;/p&gt;

&lt;p&gt;Two properties of the method matter for reading the report:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;It is transitive.&lt;/strong&gt; The counts below aggregate GunDB's entire dependency graph — every package Gun pulls in, directly and indirectly. A single &lt;code&gt;npm install gun&lt;/code&gt; resolves this whole tree onto your machine.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;It is behavioral, not just CVE-based.&lt;/strong&gt; Socket flags capabilities and code patterns (install scripts, &lt;code&gt;eval&lt;/code&gt;, native binaries, obfuscation) because these are the primitives that supply-chain attacks use. The &lt;a href="https://socket.dev" rel="noopener noreferrer"&gt;jscrambler npm compromise Socket documented on July 11, 2026&lt;/a&gt; — a malicious &lt;code&gt;preinstall&lt;/code&gt; hook running hidden native binaries across Linux, macOS and Windows — is a recent example of this exact shape.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With that method in mind, here is the report.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F6924809544867700748ef043%2F656dab93-596a-4598-86d3-e3cf0f68e0be.png%2520align%3D" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F6924809544867700748ef043%2F656dab93-596a-4598-86d3-e3cf0f68e0be.png%2520align%3D" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The report: every Socket alert on &lt;code&gt;gun@0.2020.1241&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Source: &lt;code&gt;socket.dev/npm/package/gun/alerts/0.2020.1241?tab=dependencies&lt;/code&gt;. Counts are "instances / packages affected" across Gun's dependency tree, quoted as Socket reports them.&lt;/p&gt;

&lt;h3&gt;
  
  
  A. Known vulnerabilities (CVEs)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Alert&lt;/th&gt;
&lt;th&gt;Severity&lt;/th&gt;
&lt;th&gt;Reach&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Critical CVE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;🔴 Vulnerability&lt;/td&gt;
&lt;td&gt;4 instances in 4 packages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;High CVE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;🟠 Vulnerability&lt;/td&gt;
&lt;td&gt;24 instances in 16 packages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Medium CVE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;🟡 Vulnerability&lt;/td&gt;
&lt;td&gt;16 instances in 14 packages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Low CVE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vulnerability&lt;/td&gt;
&lt;td&gt;5 instances in 4 packages&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The dependency tree carries published, catalogued CVEs at every severity tier, including four critical ones. Each is a documented compromise path with an identifier, present in a package Gun depends on. The path to remediation for a dependency CVE is a version bump upstream; as section C shows, that upstream cadence has stopped, so these fixes are not arriving.&lt;/p&gt;

&lt;p&gt;The mechanism is timing: Gun's last release is from 2020, which froze its dependency ranges. Every CVE disclosed in those dependencies since then resolves into a fresh &lt;code&gt;npm install gun&lt;/code&gt; today.&lt;/p&gt;

&lt;h3&gt;
  
  
  B. Supply-chain behavior
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Obfuscated code&lt;/strong&gt; — &lt;em&gt;2 instances in 2 packages.&lt;/em&gt; Files packaged to conceal their behavior. Socket's classification: a potential malware indicator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Uses&lt;/strong&gt; &lt;code&gt;eval&lt;/code&gt; &lt;strong&gt;/ dynamic code execution&lt;/strong&gt; — &lt;em&gt;38 instances in 38 packages.&lt;/em&gt; Runtime &lt;code&gt;eval()&lt;/code&gt; constructs and executes code that is absent from the audited source. It bypasses static analysis and requires relaxed CSP to run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install scripts&lt;/strong&gt; — &lt;em&gt;2 instances in 2 packages.&lt;/em&gt; &lt;code&gt;preinstall&lt;/code&gt;/&lt;code&gt;postinstall&lt;/code&gt; hooks execute automatically during &lt;code&gt;npm install&lt;/code&gt;, with access to the shell, environment variables, and CI tokens. Two packages in Gun's tree run code at install time — the jscrambler vector.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shell access&lt;/strong&gt; — &lt;em&gt;20 instances in 20 packages.&lt;/em&gt; Twenty packages can spawn a system shell, i.e. execute arbitrary commands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Network access&lt;/strong&gt; — &lt;em&gt;22 instances in 22 packages.&lt;/em&gt; Twenty-two packages can open network connections. Combined with the environment and filesystem access below, this is the full read-secrets-and-transmit capability set.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Filesystem access&lt;/strong&gt; — &lt;em&gt;78 instances in 78 packages.&lt;/em&gt; Seventy-eight packages can read the disk, and therefore any sensitive data on it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Environment-variable access&lt;/strong&gt; — &lt;em&gt;75 instances in 75 packages.&lt;/em&gt; Seventy-five packages read &lt;code&gt;process.env&lt;/code&gt;, where credentials and tokens live. Socket's classification associates this with credential harvesting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;URL strings&lt;/strong&gt; — &lt;em&gt;78 instances in 77 packages.&lt;/em&gt; Hardcoded URLs / external IPs the package may contact at runtime — the potential destinations for data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dynamic requires&lt;/strong&gt; — &lt;em&gt;19 instances in 19 packages.&lt;/em&gt; Modules resolved at runtime rather than statically, which loads code a scanner cannot see in advance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Debug / reflection access&lt;/strong&gt; — &lt;em&gt;15 instances in 15 packages.&lt;/em&gt; Debug, reflection and dynamic-execution features that expand runtime self-modification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Native code&lt;/strong&gt; — &lt;em&gt;2 instances in 2 packages.&lt;/em&gt; Compiled binaries / shared libraries, which are opaque to source review.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI-detected potential code anomaly&lt;/strong&gt; — &lt;em&gt;52 instances in 50 packages.&lt;/em&gt; Socket's ML flagged unusual behavior across fifty packages for human review.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trivial package&lt;/strong&gt; — &lt;em&gt;23 instances in 23 packages.&lt;/em&gt; Twenty-three dependencies under ~10 lines of code. Each is a full third-party trust relationship, and an independent takeover target, for logic that could be inlined.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI-detected potential typosquats&lt;/strong&gt; — names in the tree close to far more popular packages (Socket names &lt;code&gt;camelcase&lt;/code&gt; and &lt;code&gt;babel-plugin-transform-react-jsx&lt;/code&gt; as the likely targets). Typosquatting is a primary malware-delivery technique.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nonexistent author / New author&lt;/strong&gt; — packages published by an npm account that no longer exists, and (&lt;em&gt;36 instances in 36 packages&lt;/em&gt;) first-time publishers. Both correlate with account-takeover and namespace-hijack events.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Potential vulnerability&lt;/strong&gt; — flagged by initial human review, pending confirmation.&lt;/p&gt;

&lt;h3&gt;
  
  
  C. Maintenance
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Unmaintained&lt;/strong&gt; — &lt;em&gt;201 instances in 201 packages.&lt;/em&gt; Two hundred and one packages in the tree have gone more than five years without an update. This is the majority of the tree, and it is the reason the CVEs in section A stay open: the upstream cadence that would ship fixes has stopped.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deprecated&lt;/strong&gt; — &lt;em&gt;23 instances in 23 packages.&lt;/em&gt; Twenty-three dependencies the maintainers themselves marked as superseded.&lt;/p&gt;

&lt;h3&gt;
  
  
  D. Quality
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Minified code&lt;/strong&gt; — &lt;em&gt;12 instances in 9 packages.&lt;/em&gt; Source shipped minified, which reduces auditability. &lt;strong&gt;Unpopular package&lt;/strong&gt; — &lt;em&gt;2 instances in 2 packages.&lt;/em&gt; Low-usage dependencies, with fewer reviewers. &lt;strong&gt;Floating dependency&lt;/strong&gt; — a dependency on a floating range that can pull a breaking major without notice.&lt;/p&gt;

&lt;h3&gt;
  
  
  E. License
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Multiple license problems&lt;/strong&gt;, &lt;strong&gt;unidentified license&lt;/strong&gt;, &lt;strong&gt;copyleft license&lt;/strong&gt;, &lt;strong&gt;non-permissive license.&lt;/strong&gt; For commercial software, the tree introduces license ambiguity and copyleft/non-permissive terms that carry legal obligations.&lt;/p&gt;




&lt;h2&gt;
  
  
  The pattern behind the numbers
&lt;/h2&gt;

&lt;p&gt;The counts aggregate GunDB's transitive tree, and read together they describe one coherent architectural situation:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A large dependency graph — hundreds of packages, the majority unmaintained for five-plus years — carrying four critical CVEs (plus dozens of high and medium) with no upstream path to a fix, alongside install scripts, native binaries, obfuscated files, and typosquat-adjacent names.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This describes the &lt;strong&gt;architecture of trust&lt;/strong&gt; the design asks you to accept: a broad, deep dependency tree, taken on faith, frozen since 2020. Two design choices produce it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A broad runtime dependency tree.&lt;/strong&gt; Every convenience pulled from npm is a permanent, transitively-multiplied trust relationship. Gun's tree grew the way most 2018-era JavaScript libraries' trees grew.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A dormant maintenance cadence.&lt;/strong&gt; With the last release in 2020, the tree accumulates CVEs over time and sheds none, because remediation depends on upstream updates that have stopped.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;npm audit fix&lt;/code&gt; operates on this tree; it cannot restructure it. The path to a different report is a different architecture — one that keeps the tree empty from the start. That architecture is the design goal of GenosDB.&lt;/p&gt;




&lt;h2&gt;
  
  
  The maintainer's own account
&lt;/h2&gt;

&lt;p&gt;The maintenance status is also on the record from the source. GunDB's creator, Mark Nadal, characterizes Gun as "actively used and in production" and scalable to millions of monthly users. In the same statement he describes the current maintenance cadence directly: he reached "about 70%" through fixing known bugs, has stepped back from day-to-day upkeep since around 2020, and frames the reduced-support period as running with "no promised timeline" until the next Gun release, pointing users to community forks for prioritized fixes in the meantime.&lt;/p&gt;

&lt;p&gt;These are the maintainer's own words: a production claim on one side, and a paused upstream maintenance cadence with unresolved known bugs on the other. When you choose a foundation to build on for the long term, the useful question is not which claim to believe — it is what you can run and confirm yourself. That is the axis where GenosDB is designed to be checked.&lt;/p&gt;




&lt;h2&gt;
  
  
  How GenosDB produces a different report
&lt;/h2&gt;

&lt;p&gt;GenosDB (GDB) is a distributed, real-time, peer-to-peer graph database — the same category as GunDB. The comparison here is on the same axis: the security and supply-chain posture of the data/sync layer, measured by the same tool.&lt;/p&gt;

&lt;p&gt;Here is &lt;a href="https://socket.dev/npm/package/genosdb" rel="noopener noreferrer"&gt;GenosDB's Socket.dev report&lt;/a&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;GenosDB&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dependencies&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A self-contained package; the audit target is the package itself.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vulnerability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100 / 100&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Clean.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Supply-chain security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;79&lt;/td&gt;
&lt;td&gt;Strong, and rising as the package ages.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Quality&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;99&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maintenance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;96&lt;/td&gt;
&lt;td&gt;100+ versions on a weekly release cadence held since inception.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td&gt;A single, declared license.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Mapped back to Gun's report, class by class:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Zero dependencies
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F6924809544867700748ef043%2F58e2e605-88ca-457b-a00e-6d63e07d46b8.png%2520align%3D" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F6924809544867700748ef043%2F58e2e605-88ca-457b-a00e-6d63e07d46b8.png%2520align%3D" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GenosDB ships zero runtime dependencies, which Socket confirms: &lt;code&gt;Dependencies: 0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Every alert in sections B, C, D and E is an alert &lt;em&gt;about a dependency&lt;/em&gt;. A self-contained package resolves the entire category structurally: the audit target is one package, and it is the exact artifact a scanner analyzes, because what ships on npm is the whole product.&lt;/p&gt;

&lt;p&gt;The primitives GenosDB builds on — Ethereum key/signature handling, MessagePack serialization, Pako compression — are pinned to exact versions, reviewed on each bump, and bundled into the published &lt;code&gt;dist&lt;/code&gt; at build time. They live in &lt;code&gt;devDependencies&lt;/code&gt; and travel inside the artifact rather than resolving fresh from npm on each install. This vendored-and-pinned model is why Socket reports &lt;code&gt;0&lt;/code&gt;: at install time, the package is complete on its own.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Clean vulnerability score
&lt;/h3&gt;

&lt;p&gt;With a self-contained package, section A's dependency CVEs are absent, and GenosDB's own code carries a clean vulnerability score (Socket: 100). The active release cadence (section 4) means a future finding has a channel to a fix.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. A minimal install-time footprint
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Install runs files only.&lt;/strong&gt; GenosDB's &lt;code&gt;package.json&lt;/code&gt; defines no &lt;code&gt;preinstall&lt;/code&gt;/&lt;code&gt;postinstall&lt;/code&gt; hooks, so &lt;code&gt;npm install genosdb&lt;/code&gt; copies the package and stops there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pure JavaScript, pure ESM&lt;/strong&gt; (&lt;code&gt;"type": "module"&lt;/code&gt;). The artifact is readable source, transparent to review.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The sync and security layers are built from static code&lt;/strong&gt;, keeping runtime dynamic execution out of the architecture.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Active maintenance
&lt;/h3&gt;

&lt;p&gt;GenosDB has more than 100 published versions on a weekly release cadence held since the project began, and a maintenance score of 96. Development runs on a &lt;strong&gt;Spec-Driven Development&lt;/strong&gt; method: Esteban Fuster Pozzi as architect and accountable owner, supported by qualified developers and a cluster of audited AI systems whose output is verified against written specifications before it ships. A self-contained base plus a specification-first cadence is what holds the report above stable as the project grows.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. A single declared license
&lt;/h3&gt;

&lt;p&gt;GenosDB ships under one declared license (Socket: License 80), with a &lt;code&gt;THIRD_PARTY_LICENSES.md&lt;/code&gt; accounting for the bundled primitives. A self-contained package keeps license terms singular and explicit.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Bundle, license, and governance
&lt;/h3&gt;

&lt;p&gt;GenosDB's published bundle is free, public, and licensed for commercial use — free to install, inspect, run in production, and ship commercially. Its source is curated on a &lt;strong&gt;Spec-Driven Development&lt;/strong&gt; method — Esteban Fuster Pozzi as accountable architect, qualified developers, and a cluster of audited AI systems working against written specifications — and that process is what keeps the dependency surface at zero: dependencies are chosen deliberately, primitives are pinned and reviewed on each bump, and every change is validated against a spec before it ships. The properties in sections 1–5 are the direct output of that model.&lt;/p&gt;

&lt;p&gt;Auditability tracks the artifact you run. The published bundle is complete JavaScript on npm, and it is exactly what Socket.dev — and you — analyze. You audit the code that executes on your machine.&lt;/p&gt;

&lt;p&gt;A door stays open for the future. As the project matures, additional developers qualified in Spec-Driven Development may be incorporated — selected by consensus — to secure continuity over the very long term, extending the same specification-first discipline that produces the report above.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. The feature surface is demonstrated, not asserted
&lt;/h3&gt;

&lt;p&gt;A database is worth what you can run. GenosDB ships its entire feature surface as self-contained, runnable example apps — more than fifty of them in the repository, each a single HTML file you open and use on the same engine you would deploy. The set spans the whole surface: CRUD and cursor pagination; real-time chat, kanban, collaborative whiteboard and rich-text editors, live cursors and presence; peer-to-peer audio, video and file streaming; geo-spatial queries; the full security suite — RBAC, WebAuthn, node-level ACLs, governance, client-side encryption; and cellular-mesh scaling monitors. Every capability described in this post has a working demo behind it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F6924809544867700748ef043%2F3eb5a2f5-d599-41f3-884b-ce3891d7b98e.png%2520align%3D" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F6924809544867700748ef043%2F3eb5a2f5-d599-41f3-884b-ce3891d7b98e.png%2520align%3D" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the falsifiable form of a database claim. Rather than "trust that it works," the standing invitation is "open these and watch them work" — the same way you would evaluate any foundation before you build on it. Verification, not belief, is the design stance, from the install-time report down to each example.&lt;/p&gt;




&lt;h2&gt;
  
  
  The data plane: cryptographic enforcement at runtime
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F6924809544867700748ef043%2F4f2d6499-028b-44cf-8068-9bfc613e232a.png%2520align%3D" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F6924809544867700748ef043%2F4f2d6499-028b-44cf-8068-9bfc613e232a.png%2520align%3D" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sections 1–6 concern the install-time surface. A peer-to-peer database also governs a second axis at runtime: once peers are connected, who is authorized to change what. With no server to enforce rules, GenosDB enforces them cryptographically, and each peer verifies every operation independently. From the &lt;a href="https://github.com/estebanrfp/gdb" rel="noopener noreferrer"&gt;distributed trust model&lt;/a&gt; and the source:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Signed operations.&lt;/strong&gt; Every write is signed by the author's Ethereum key (&lt;code&gt;signOutgoingOperations&lt;/code&gt;) and verified by each receiving peer (&lt;code&gt;verifyIncomingOperations&lt;/code&gt;) before it applies. Identity is cryptographic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zero-trust default.&lt;/strong&gt; A new identity is a write-blocked &lt;code&gt;guest&lt;/code&gt; with a single welcome exception — creating its own user node — where the engine forces the role to &lt;code&gt;guest&lt;/code&gt;, so first-message self-promotion resolves to guest. Higher permissions arrive when a &lt;code&gt;superadmin&lt;/code&gt; signs a promotion.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;RBAC.&lt;/strong&gt; A &lt;code&gt;guest → user → manager → admin → superadmin&lt;/code&gt; hierarchy, enforced locally by each peer's Security Manager. A peer verifies the signed role that authorizes each operation, so a locally-edited client acts within its actual granted role on the network.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Node-level ACLs, enforced across peers.&lt;/strong&gt; Since v0.14.0, per-node &lt;code&gt;read&lt;/code&gt;/&lt;code&gt;write&lt;/code&gt;/&lt;code&gt;delete&lt;/code&gt; grants are checked against the cryptographically-verified author of each incoming operation, on every peer. A node accepts writes from its owner and collaborators.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Governance.&lt;/strong&gt; A superadmin declares promotion/demotion rules as native GenosDB queries; the engine resolves each user's role by last-match-wins and signs every change for peers to verify — optionally 24/7 via an always-on &lt;a href="https://github.com/estebanrfp/gdb" rel="noopener noreferrer"&gt;Fallback Server&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Decentralized signaling.&lt;/strong&gt; The real-time layer (GenosRTC) discovers peers over &lt;strong&gt;Nostr relays&lt;/strong&gt; with its own audited crypto/codec, and can encrypt the signaling channel with a shared password.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Client-side encryption.&lt;/strong&gt; &lt;code&gt;db.sm.put()&lt;/code&gt; / &lt;code&gt;db.sm.get()&lt;/code&gt; store data end-to-end encrypted, readable by the user who wrote it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The two axes share one design principle: replace trust with verification. Peers verify every operation cryptographically; the package stays self-contained.&lt;/p&gt;




&lt;h2&gt;
  
  
  Downloads, and the last word
&lt;/h2&gt;

&lt;p&gt;A download is a trial, not an outcome. npm counts package fetches — installs, CI runs, mirrors, reinstalls — not developers who shipped a system and kept it running. Popularity measures how many people arrive at a technology, not how many build something durable on it and stay. For a foundational dependency, that gap is where the risk lives: reputation brings developers in the door, and a paused maintenance cadence with unpatchable issues is what some of them find on the other side.&lt;/p&gt;

&lt;p&gt;No download count settles that. A clean install-time report, a self-contained package, and a feature surface you can run exist to put the decision where it belongs — with the developer who tries it. Build the same small thing on each, and let the result speak. The last word is the developer's.&lt;/p&gt;




&lt;h2&gt;
  
  
  The ask
&lt;/h2&gt;

&lt;p&gt;I want help spreading GenosDB, and I'm asking for it directly.&lt;/p&gt;

&lt;p&gt;The value an independent maintainer benefits from most is reach and scrutiny:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;If the architecture makes sense to you, say so where developers will see it.&lt;/strong&gt; A star on &lt;a href="https://github.com/estebanrfp/gdb" rel="noopener noreferrer"&gt;github.com/estebanrfp/gdb&lt;/a&gt;, a reshare, or a mention in a thread where someone is choosing a real-time P2P database moves an independent project forward.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Test it adversarially.&lt;/strong&gt; The public bundle and the live demos are enough: run two browsers, try to forge a signed operation or promote past the zero-trust guard, and report what you find via &lt;code&gt;SECURITY.md&lt;/code&gt;. Black-box scrutiny is the highest-value contribution to a security-adjacent project.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Port one feature from GunDB.&lt;/strong&gt; A single slice is enough to feel the zero-dependency, zero-trust version and to tell me where it can improve.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;If you align with this approach and you're strong technically, introduce yourself.&lt;/strong&gt; Contribution opens progressively to a small, vetted, aligned team chosen by consensus, and I'm keeping a list for when that starts.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GunDB defined this category. The goal here is to give it a foundation that a 2026 supply-chain scanner reports clean — and to invite the people who care about that to help prove it, or test it, in public.&lt;/p&gt;

&lt;p&gt;The surface is measured now. Let's build on the one that stays empty.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is GunDB still maintained in 2026?&lt;/strong&gt; GunDB remains widely installed and is used in production. Active upstream maintenance of the current line, though, is paused by the maintainer's own account since around 2020 — known bugs remain, there is no committed timeline for the next release, and users are pointed to community forks for prioritized fixes. Socket.dev's scan reflects it: the majority of Gun's dependency tree is flagged as unmaintained.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is GunDB safe to use in production?&lt;/strong&gt; It depends on your risk tolerance. GunDB has real production deployments and a decade of decentralized-data work in its own source. On the supply-chain axis, Socket.dev reports its dependency tree carries four critical CVEs (plus dozens of high and medium), install scripts, obfuscated code and native binaries, with most of the tree unmaintained for five-plus years — issues without an upstream path to a fix while maintenance is paused. Weigh that install-time surface against your use case.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is a maintained alternative to GunDB?&lt;/strong&gt; GenosDB is a maintained, actively-released alternative in the same category — a distributed, real-time, peer-to-peer graph database in pure JavaScript, reporting zero dependencies and a clean vulnerability score on Socket.dev. Other decentralized options include OrbitDB (on IPFS/libp2p), Scuttlebutt and RxDB; see this &lt;a href="https://genosdb.com/popular-p2p-distributed-databases" rel="noopener noreferrer"&gt;P2P &amp;amp; CRDT database comparison&lt;/a&gt; for the wider landscape.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does GenosDB compare to GunDB?&lt;/strong&gt; Both are real-time, offline-first, peer-to-peer graph databases. GenosDB ships zero runtime dependencies (versus GunDB's flagged transitive tree), a zero-trust security model with signed operations, RBAC, node-level ACLs and governance, and OPFS + Web Worker persistence that keeps the main thread non-blocking (GunDB's default persistence is commonly localStorage, a synchronous ~5 MB store on the main thread). Its real-time layer, GenosRTC, pairs WebRTC with decentralized Nostr signaling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does GenosDB compare to OrbitDB, Scuttlebutt or RxDB?&lt;/strong&gt; OrbitDB builds on IPFS/libp2p; Scuttlebutt is a log-based social protocol; RxDB is a local-first database with pluggable replication. GenosDB is browser-native and serverless, with integrated WebRTC transport and Nostr signaling, a MongoDB-style query layer with recursive graph traversal, and a built-in zero-trust security model — at zero runtime dependencies. Full landscape: &lt;a href="https://genosdb.com/popular-p2p-distributed-databases" rel="noopener noreferrer"&gt;Best P2P &amp;amp; CRDT databases in 2026&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does GenosDB have dependencies?&lt;/strong&gt; Zero, at install time — Socket.dev reports &lt;code&gt;Dependencies: 0&lt;/code&gt;. The primitives it builds on (Ethereum signatures, MessagePack, Pako) are pinned, reviewed and bundled into the published artifact at build time, rather than resolved from npm as a transitive tree.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is GenosDB free and open source?&lt;/strong&gt; The GenosDB bundle is free, public and licensed for commercial use — free to install, inspect, run in production and ship commercially. The source is curated under a Spec-Driven Development method, and contribution opens progressively to qualified, consensus-selected developers to secure continuity over the long term.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;GenosDB&lt;/strong&gt; — distributed, real-time, peer-to-peer graph database. Zero dependencies, zero-trust, serverless. 🔗 &lt;a href="https://github.com/estebanrfp/gdb" rel="noopener noreferrer"&gt;github.com/estebanrfp/gdb&lt;/a&gt; · &lt;a href="https://www.npmjs.com/package/genosdb" rel="noopener noreferrer"&gt;npm: genosdb&lt;/a&gt; · &lt;a href="https://socket.dev/npm/package/genosdb" rel="noopener noreferrer"&gt;Socket report&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Author
&lt;/h2&gt;

&lt;p&gt;Esteban Fuster Pozzi (&lt;a class="mentioned-user" href="https://dev.to/estebanrfp"&gt;@estebanrfp&lt;/a&gt;) - Full Stack JavaScript Developer&lt;/p&gt;




&lt;h3&gt;
  
  
  Sources &amp;amp; verification
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;GunDB Socket report: &lt;code&gt;socket.dev/npm/package/gun/alerts/0.2020.1241?tab=dependencies&lt;/code&gt; (all alert counts quoted verbatim).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GenosDB Socket report: &lt;code&gt;socket.dev/npm/package/genosdb&lt;/code&gt; (scores; 0 dependencies).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GenosDB security model: &lt;code&gt;SECURITY.md&lt;/code&gt;, &lt;code&gt;docs/zero-trust-security-model.md&lt;/code&gt;, &lt;code&gt;docs/genosdb-distributed-trust-model.md&lt;/code&gt;, &lt;code&gt;docs/genosdb-features.md&lt;/code&gt; in the GenosDB repository.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Architecture claims (signing/verification, ACLs, governance, Nostr signaling) verified against the GenosDB, GenosRTC and GenosSRV source.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  My personal take
&lt;/h3&gt;

&lt;p&gt;These figures are a snapshot: CVE counts, unmaintained packages and Socket scores all shift as the community patches, so re-run the scan whenever you read this and let today's numbers speak.&lt;/p&gt;

&lt;p&gt;GunDB stays a solid choice for prototypes, internal tools and many wonderful production apps.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;This article is part of the official documentation of GenosDB (GDB).&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
GenosDB is a distributed, modular, peer-to-peer graph database built with a Zero-Trust Security Model, created by &lt;strong&gt;Esteban Fuster Pozzi (&lt;/strong&gt;&lt;a href="https://github.com/estebanrfp" rel="noopener noreferrer"&gt;&lt;strong&gt;estebanrfp&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;)&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;📄 &lt;a href="https://github.com/estebanrfp/gdb/blob/main/WHITEPAPER.md" rel="noopener noreferrer"&gt;Whitepaper&lt;/a&gt; | overview of GenosDB design and architecture&lt;/p&gt;

&lt;p&gt;🛠 &lt;a href="https://github.com/estebanrfp/gdb/blob/main/ROADMAP.md" rel="noopener noreferrer"&gt;Roadmap&lt;/a&gt; | planned features and future updates&lt;/p&gt;

&lt;p&gt;💡 &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-examples.md" rel="noopener noreferrer"&gt;Examples&lt;/a&gt; | code snippets and usage demos&lt;/p&gt;

&lt;p&gt;📖 &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/index.md" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt; | full reference guide&lt;/p&gt;

&lt;p&gt;🔍 &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-api-reference.md" rel="noopener noreferrer"&gt;API Reference&lt;/a&gt; | detailed API methods&lt;/p&gt;

&lt;p&gt;📚 &lt;a href="https://github.com/estebanrfp/gdb/wiki" rel="noopener noreferrer"&gt;Wiki&lt;/a&gt; | additional notes and guides&lt;/p&gt;

&lt;p&gt;💬 &lt;a href="https://github.com/estebanrfp/gdb/discussions" rel="noopener noreferrer"&gt;GitHub Discussions&lt;/a&gt; | community questions and feedback&lt;/p&gt;

&lt;p&gt;🗂 &lt;a href="https://github.com/estebanrfp/gdb" rel="noopener noreferrer"&gt;Repository&lt;/a&gt; | Minified production-ready files&lt;/p&gt;

&lt;p&gt;📦 &lt;a href="https://www.npmjs.com/package/genosdb" rel="noopener noreferrer"&gt;Install via npm&lt;/a&gt; | quick setup instructions&lt;/p&gt;

&lt;p&gt;🌐 &lt;a href="https://estebanrfp.com/" rel="noopener noreferrer"&gt;Website&lt;/a&gt; | &lt;a href="https://github.com/estebanrfp" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://www.linkedin.com/in/estebanrfp/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>javascript</category>
      <category>database</category>
      <category>webdev</category>
    </item>
    <item>
      <title>From Babylon.js to Native WebGPU: How OVGrid Migrated to a Framework-Free Engine</title>
      <dc:creator>Esteban Fuster Pozzi</dc:creator>
      <pubDate>Tue, 17 Feb 2026 17:43:37 +0000</pubDate>
      <link>https://dev.to/estebanrfp/from-babylonjs-to-native-webgpu-how-ovgrid-migrated-to-a-framework-free-engine-58md</link>
      <guid>https://dev.to/estebanrfp/from-babylonjs-to-native-webgpu-how-ovgrid-migrated-to-a-framework-free-engine-58md</guid>
      <description>&lt;p&gt;In 2020, OVGrid started as an experiment in building dynamic 3D virtual worlds using &lt;strong&gt;Babylon.js&lt;/strong&gt; — one of the most mature WebGL frameworks available. We explored terraforming, dynamic textures, height maps, and real-time rendering. The results were promising.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffgv1hjy98nfyefw2ua1n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffgv1hjy98nfyefw2ua1n.png" alt="OVGrid development 2020" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;OVGrid's first 3D environment tests with Babylon.js (2020)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs3xtekg0cfej2ae0849k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs3xtekg0cfej2ae0849k.png" alt="Exploring Virtual Worlds" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Early terrain generation and texture mapping experiments&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;%[&lt;a href="https://www.youtube.com/watch?v=_hfYsrHMAeI" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=_hfYsrHMAeI&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;Babylon.js gave us a solid foundation: a scene graph, a physics engine, material system, and a large community. For a prototype, it was the right choice. But as OVGrid's ambitions grew — planetary-scale terrain, atmospheric scattering, thousands of instanced objects — the framework started showing its limits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why We Left Babylon.js
&lt;/h2&gt;

&lt;p&gt;Babylon.js is an excellent framework. It even added WebGPU support. So why leave?&lt;/p&gt;

&lt;p&gt;The answer isn't about Babylon.js being bad. It's about what happens when you need &lt;strong&gt;total control&lt;/strong&gt; over every GPU instruction.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bundle Size and Dependencies
&lt;/h3&gt;

&lt;p&gt;A full Babylon.js build adds significant weight to your application. For a project that targets instant browser access with zero downloads, every kilobyte matters. OVGrid needed to be lean — a PWA that loads in seconds, even on mobile.&lt;/p&gt;

&lt;h3&gt;
  
  
  GPU Pipeline Control
&lt;/h3&gt;

&lt;p&gt;When you're writing custom atmospheric scattering shaders, cascaded shadow maps with 4 layers, and GPU-driven terrain instancing, you need direct access to the WebGPU pipeline. Working through a framework's abstraction layer means fighting against it when your needs diverge from its assumptions.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Abstraction Tax
&lt;/h3&gt;

&lt;p&gt;Every abstraction has a cost. Babylon.js manages its own render loop, its own resource lifecycle, its own state. When you need a &lt;strong&gt;Floating Origin&lt;/strong&gt; system that keeps the camera at (0,0,0) and offsets the entire world in Float64 — or when you need to reduce terrain draw calls to &lt;strong&gt;one single call per frame&lt;/strong&gt; — you need the GPU to do exactly what you tell it. No middleware.&lt;/p&gt;

&lt;h3&gt;
  
  
  Philosophy: Pure JavaScript, Zero Frameworks
&lt;/h3&gt;

&lt;p&gt;OVGrid's philosophy aligns with a broader conviction: the best code is the code you fully understand and control. No framework updates breaking your build. No dependency chains. No black boxes. Just JavaScript, WGSL shaders, and the WebGPU API.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Migration
&lt;/h2&gt;

&lt;p&gt;The transition wasn't a weekend refactor. It was a deliberate, incremental process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 1 — Custom Render Pipeline.&lt;/strong&gt; We replaced Babylon.js's render loop with a direct WebGPU pipeline. This alone gave us the ability to control exactly which compute and render passes execute per frame.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 2 — Shader Rewrite.&lt;/strong&gt; Every shader was rewritten in WGSL from scratch. Atmospheric scattering, terrain rendering, vegetation instancing — all hand-tuned for OVGrid's specific needs. No generic material system overhead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 3 — Floating Origin.&lt;/strong&gt; The camera stays at (0,0,0) in GPU space. World coordinates use Float64 on the CPU, and only relative offsets are sent to the GPU. This eliminates the floating-point jitter that plagues every large-scale WebGL application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 4 — GPU-Driven Instancing.&lt;/strong&gt; Terrain chunks, vegetation, and objects are rendered with a single instanced draw call per category. The GPU decides visibility, LOD, and placement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 5 — Modular Architecture.&lt;/strong&gt; Using Bun as the bundler, we split the UI into lazy-loaded modules. Configuration panels load on first interaction. The main bundle stays minimal.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Results
&lt;/h2&gt;

&lt;p&gt;The numbers speak for themselves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;120 FPS&lt;/strong&gt; sustained during planetary traversal — from ground level to orbit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One draw call&lt;/strong&gt; for all terrain chunks per frame&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sub-second&lt;/strong&gt; initial page load as a PWA&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero dependencies&lt;/strong&gt; — no node_modules, no framework updates, no breaking changes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full mobile support&lt;/strong&gt; — the same codebase runs on desktop and mobile browsers with WebGPU&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When Frameworks Make Sense
&lt;/h2&gt;

&lt;p&gt;This isn't an anti-framework manifesto. Babylon.js is the right choice for many projects — games, product configurators, architectural visualization. If your project fits within a framework's model, use it.&lt;/p&gt;

&lt;p&gt;But when you're building a &lt;strong&gt;planetary-scale virtual world&lt;/strong&gt; that needs to push every boundary of what the browser can do, the framework becomes the ceiling. Removing it becomes the unlock.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;OVGrid continues to evolve. The migration to native WebGPU was the foundation. On top of it, we're building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://genosdb.com" rel="noopener noreferrer"&gt;GenosDB&lt;/a&gt;&lt;/strong&gt; integration for P2P identity and real-time world state&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Polygon blockchain&lt;/strong&gt; for OVG tokens and ERC-1155 metaverse assets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ready Player Me&lt;/strong&gt; avatars for cross-platform identity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cascaded Shadow Maps&lt;/strong&gt; with 4-layer precision up to 10km&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The browser is no longer the limitation. It's the platform.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written by Esteban Fuster Pozzi (&lt;a href="https://github.com/estebanrfp" rel="noopener noreferrer"&gt;estebanrfp&lt;/a&gt;), creator of &lt;a href="https://genosdb.com" rel="noopener noreferrer"&gt;GenosDB&lt;/a&gt; and &lt;a href="https://ovgrid.com" rel="noopener noreferrer"&gt;OVGrid&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webgpu</category>
      <category>javascript</category>
      <category>gamedev</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Scaling the Metaverse: Building a Planetary-Scale Engine with WebGPU</title>
      <dc:creator>Esteban Fuster Pozzi</dc:creator>
      <pubDate>Tue, 17 Feb 2026 16:37:58 +0000</pubDate>
      <link>https://dev.to/estebanrfp/scaling-the-metaverse-building-a-planetary-scale-engine-with-webgpu-58mh</link>
      <guid>https://dev.to/estebanrfp/scaling-the-metaverse-building-a-planetary-scale-engine-with-webgpu-58mh</guid>
      <description>&lt;p&gt;How OVGrid is pushing the boundaries of the mobile and desktop web with deep modularization, blockchain integration, and high-precision rendering.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F90e6aaf8q6ofc86io3wa.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F90e6aaf8q6ofc86io3wa.jpeg" alt="OVGrid WebGPU Engine" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the rapidly evolving landscape of web-based graphics, the leap from WebGL to &lt;strong&gt;WebGPU&lt;/strong&gt; isn't just an upgrade — it's a paradigm shift. Today, I'm thrilled to share a deep dive into &lt;strong&gt;OVGrid&lt;/strong&gt;, a project designed to prove that the browser can handle massive, planetary-scale environments with the fidelity and performance of native applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Objective: Zero-Latency Exploration
&lt;/h2&gt;

&lt;p&gt;The goal of OVGrid was simple yet ambitious: to create a seamless planetary traversal experience. Whether you are walking on the grass of a procedurally generated biome or orbiting at 500km altitude, the transition should be fluid, and the performance should remain at a solid 120 FPS.&lt;/p&gt;

&lt;p&gt;To achieve this, we've implemented an architecture that prioritizes the "Single Source of Truth" rule:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CPU (JavaScript)&lt;/strong&gt;: Decides what exists. It handles the high-precision world coordinates (Float64), Level of Detail (LOD) logic, and physics state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPU (WGSL)&lt;/strong&gt;: Decides how it looks. It handles the heavy lifting of ray-tracing, atmospheric scattering, and instanced geometry.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Deep Modularization: The Phase 6 Milestone
&lt;/h2&gt;

&lt;p&gt;Our latest engineering milestone, &lt;strong&gt;Phase 6: Granular UI Lazy Loading&lt;/strong&gt;, addresses one of the most significant challenges in web apps: the initial payload.&lt;/p&gt;

&lt;p&gt;By splitting our monolithic UI into independent modules — such as &lt;code&gt;EnvironmentUI&lt;/code&gt; and &lt;code&gt;TerrainUI&lt;/code&gt; — we've achieved a state where the browser only downloads and executes the code you actually use.&lt;/p&gt;

&lt;p&gt;Using &lt;strong&gt;Bun&lt;/strong&gt; as our bundler, we've reduced the main bundle size significantly. Now, configuration panels are triggered by fast keyboard shortcuts (&lt;code&gt;T&lt;/code&gt; for Terrain, &lt;code&gt;V&lt;/code&gt; for Environment), loading their specific HTML and logic only on first interaction. This "pay-as-you-go" script execution ensures that the experience remains snappy from the first second of the page load.&lt;/p&gt;

&lt;h2&gt;
  
  
  Engineering the Planet
&lt;/h2&gt;

&lt;p&gt;At the core of the visual experience is a high-precision &lt;strong&gt;Floating Origin&lt;/strong&gt; system. By keeping the camera at (0,0,0) in the shader and passing only relative offsets, we eliminate the floating-point "jitter" that typically plagues large-scale environments.&lt;/p&gt;

&lt;p&gt;Other key technical pillars include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cascaded Shadow Maps (CSM)&lt;/strong&gt;: 4-layer cascades that provide razor-sharp shadows for your avatar while covering terrain up to 10km away.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nervland-style LOD Rings&lt;/strong&gt;: An adaptive subdivision system that maintains a highly detailed central block while progressively simplifying the periphery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPU-Driven Instancing&lt;/strong&gt;: We've reduced terrain draw calls from hundreds to &lt;strong&gt;one single call per frame&lt;/strong&gt;, maximizing the efficiency of the WebGPU pipeline.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A Sovereign Economy
&lt;/h2&gt;

&lt;p&gt;OVGrid isn't just a technical showcase; it's a foundation for a decentralized economy. We have successfully integrated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Polygon Blockchain&lt;/strong&gt;: Live connectivity to the Amoy testnet for &lt;strong&gt;OVG Tokens&lt;/strong&gt; and ERC-1155 metaverse assets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Digital Identity&lt;/strong&gt;: Using &lt;strong&gt;&lt;a href="https://genosdb.com" rel="noopener noreferrer"&gt;GenosDB&lt;/a&gt;&lt;/strong&gt;, we implement WebAuthn biometrics and BIP39 mnemonic recovery, giving users true ownership of their data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global Avatars&lt;/strong&gt;: Full integration with &lt;strong&gt;Ready Player Me&lt;/strong&gt;, allowing users to hot-swap their cross-game identities in real-time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Future of Web Graphics
&lt;/h2&gt;

&lt;p&gt;The combination of WebGPU's raw power and modern JavaScript tools like Bun and &lt;a href="https://genosdb.com" rel="noopener noreferrer"&gt;GenosDB&lt;/a&gt; is opening doors that were previously closed to web developers. OVGrid is a testament to what is possible when you combine low-level optimization with a modular, scalable mindset.&lt;/p&gt;

&lt;p&gt;The horizon is wider than ever.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written by Esteban Fuster Pozzi (&lt;a href="https://github.com/estebanrfp" rel="noopener noreferrer"&gt;estebanrfp&lt;/a&gt;), creator of &lt;a href="https://genosdb.com" rel="noopener noreferrer"&gt;GenosDB&lt;/a&gt; and &lt;a href="https://ovgrid.com" rel="noopener noreferrer"&gt;OVGrid&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webgpu</category>
      <category>javascript</category>
      <category>metaverse</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>OVGrid is an Open Virtual Grid Metaverse</title>
      <dc:creator>Esteban Fuster Pozzi</dc:creator>
      <pubDate>Tue, 17 Feb 2026 16:37:42 +0000</pubDate>
      <link>https://dev.to/estebanrfp/ovgrid-is-an-open-virtual-grid-metaverse-2f17</link>
      <guid>https://dev.to/estebanrfp/ovgrid-is-an-open-virtual-grid-metaverse-2f17</guid>
      <description>&lt;p&gt;The first true metaverse experience built in a decentralized and open virtual grid.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fimn7l98yxufql8dguwql.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fimn7l98yxufql8dguwql.png" alt="OVGrid" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Explore the decentralized, infinitely scalable, browser-based metaverse built on WebXR and a peer-to-peer architecture.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"Metaverse" is the reigning buzzword in tech. It promises an immersive digital future, but much of the conversation is dominated by closed, centralized ecosystems that replicate the limitations of today's internet. They demand expensive hardware, impose unilateral rules, and are ultimately owned by a single entity.&lt;/p&gt;

&lt;p&gt;But what if the future of the metaverse wasn't a walled garden, but an open, limitless universe?&lt;/p&gt;

&lt;p&gt;Introducing &lt;strong&gt;OVGrid&lt;/strong&gt;, the &lt;strong&gt;Open Virtual Grid&lt;/strong&gt; — a project that reimagines the metaverse from the ground up. It's not just another platform; it's a decentralized ecosystem designed to be truly open, scalable, and accessible to everyone.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is OVGrid and Why is it Different?
&lt;/h2&gt;

&lt;p&gt;OVGrid is a distributed metaverse where users can create and share real-time experiences. The key difference lies in its fundamental architecture, which moves away from the traditional client-server model to fully embrace decentralization.&lt;/p&gt;

&lt;p&gt;This isn't just a technical choice; it's a philosophy. We believe that users should be the true owners of their digital assets and their experiences.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Technological Engine of OVGrid
&lt;/h2&gt;

&lt;p&gt;To achieve this vision, OVGrid is built on a stack of disruptive technologies that set it apart from anything else on the market:&lt;/p&gt;

&lt;h3&gt;
  
  
  True Decentralization with GenosDB
&lt;/h3&gt;

&lt;p&gt;At the heart of OVGrid lies &lt;strong&gt;&lt;a href="https://genosdb.com" rel="noopener noreferrer"&gt;GenosDB&lt;/a&gt;&lt;/strong&gt;, an innovative graph database that enables true peer-to-peer (P2P) communication. Instead of connecting to a central server, each user (or node) connects directly with others within a parcel, forming a dynamic and resilient &lt;strong&gt;Cellular Mesh network&lt;/strong&gt;. This means lower latency, greater privacy, and no central entity with the power to pull the plug on the world.&lt;/p&gt;

&lt;h3&gt;
  
  
  Infinite Scalability: Incremental Coordinates
&lt;/h3&gt;

&lt;p&gt;Most virtual worlds have a finite map, creating artificial scarcity and limiting growth. OVGrid solves this with a revolutionary concept: &lt;strong&gt;incremental coordinates&lt;/strong&gt;. This allows for a universe with &lt;strong&gt;infinite lands&lt;/strong&gt;. The grid can expand organically without limits, offering boundless potential for creation, exploration, and the digital economy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Universal Accessibility through WebXR
&lt;/h3&gt;

&lt;p&gt;The biggest barrier to entry for the metaverse? Hardware and downloads. OVGrid eliminates this obstacle by being built on &lt;strong&gt;WebXR&lt;/strong&gt;, the web standard for immersive experiences.&lt;/p&gt;

&lt;p&gt;This means you can access OVGrid:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;From any modern browser&lt;/strong&gt; on your PC or Mac.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On standalone VR headsets&lt;/strong&gt; (like Meta Quest) without needing a PC.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;With no heavy downloads or installations&lt;/strong&gt;. Just click a link, and you're in.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This accessibility makes it inherently social and shareable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Resilience and Flexibility: Offline First and PWA
&lt;/h3&gt;

&lt;p&gt;OVGrid is designed for the real world. Thanks to its &lt;strong&gt;"Offline First"&lt;/strong&gt; architecture, you can continue to interact and create even if you lose your internet connection. Changes sync automatically when you're back online. Furthermore, it operates as a &lt;strong&gt;Progressive Web App (PWA)&lt;/strong&gt;, allowing you to "install" it to your desktop or mobile device for instant access, just like a native app.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Can You Do in the Open Virtual Grid?
&lt;/h2&gt;

&lt;p&gt;OVGrid's architecture unlocks a universe of possibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;True Digital Ownership:&lt;/strong&gt; Buy, sell, and lease land and assets as NFTs, secured by a distributed system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Immersive Events and Meetings:&lt;/strong&gt; Host conferences, concerts, team meetings, or social hangouts in custom virtual spaces.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Training and Education:&lt;/strong&gt; Create simulations and interactive learning environments that transcend physical barriers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Digital Art and Galleries:&lt;/strong&gt; Exhibit and trade digital art in immersive galleries where creators have full control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brand Engagement:&lt;/strong&gt; Brands can build unique, interactive experiences to connect with their audiences in a completely new way.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Future is an Open Grid
&lt;/h2&gt;

&lt;p&gt;OVGrid is currently in the Pre-Alpha stage, laying the foundation for this ambitious project. We are not building another game or a closed social network. We are building the infrastructure for a truly open metaverse — a digital canvas for a global community of creators, developers, and dreamers to build the future of the internet.&lt;/p&gt;

&lt;p&gt;The metaverse shouldn't be a product you consume, but a universe you co-create. And that universe begins with an &lt;strong&gt;Open Virtual Grid&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written by Esteban Fuster Pozzi (&lt;a href="https://github.com/estebanrfp" rel="noopener noreferrer"&gt;estebanrfp&lt;/a&gt;), creator of &lt;a href="https://genosdb.com" rel="noopener noreferrer"&gt;GenosDB&lt;/a&gt; and &lt;a href="https://ovgrid.com" rel="noopener noreferrer"&gt;OVGrid&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>metaverse</category>
      <category>webxr</category>
      <category>decentralization</category>
      <category>webgpu</category>
    </item>
    <item>
      <title>Summary of Progress in 2021 Working at OVGrid</title>
      <dc:creator>Esteban Fuster Pozzi</dc:creator>
      <pubDate>Tue, 17 Feb 2026 16:36:53 +0000</pubDate>
      <link>https://dev.to/estebanrfp/summary-of-progress-in-2021-working-at-ovgrid-1ge9</link>
      <guid>https://dev.to/estebanrfp/summary-of-progress-in-2021-working-at-ovgrid-1ge9</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff2tfs8jpg95rlg91fh2d.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff2tfs8jpg95rlg91fh2d.jpeg" alt="Testing Multiuser Land Channel" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Testing Multiuser Land Channel&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;%[&lt;a href="https://www.youtube.com/watch?v=-zHgE82w5yQ" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=-zHgE82w5yQ&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;In 2021, OVGrid made remarkable progress in developing its metaverse, enhancing the user experience and expanding available functionalities. New virtual reality features were implemented, improving interactivity and immersion. In addition, the platform's performance was optimized, and the capabilities for creating and customizing virtual environments were expanded. These achievements reflect OVGrid's commitment to innovation and leadership in the metaverse space.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written by Esteban Fuster Pozzi (&lt;a href="https://github.com/estebanrfp" rel="noopener noreferrer"&gt;estebanrfp&lt;/a&gt;), creator of &lt;a href="https://genosdb.com" rel="noopener noreferrer"&gt;GenosDB&lt;/a&gt; and &lt;a href="https://ovgrid.com" rel="noopener noreferrer"&gt;OVGrid&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>metaverse</category>
      <category>webxr</category>
      <category>javascript</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>OVGrid (Open Virtual Grid)</title>
      <dc:creator>Esteban Fuster Pozzi</dc:creator>
      <pubDate>Tue, 17 Feb 2026 16:36:52 +0000</pubDate>
      <link>https://dev.to/estebanrfp/ovgrid-open-virtual-grid-21mn</link>
      <guid>https://dev.to/estebanrfp/ovgrid-open-virtual-grid-21mn</guid>
      <description>&lt;p&gt;An Open, Decentralized Metaverse with Infinite Lands.&lt;/p&gt;

&lt;p&gt;In recent years, metaverses have stopped being just a futuristic vision to become a key part of the digital ecosystem. Big names like Decentraland and other virtual worlds have dominated the space, but now comes OVGrid (Open Virtual Grid), a project that not only aims to compete, but to revolutionize the virtual experience.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3bkbc413r0o8tnnxvdnt.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3bkbc413r0o8tnnxvdnt.jpeg" alt="OVGrid" width="670" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OVGrid is more than a metaverse.&lt;/strong&gt; It is an open and distributed space, created with pure JavaScript, offering infinite lands, true decentralization, and an experience optimized for WebXR directly in the browser. Below, we explore why OVGrid is a unique proposal that redefines the rules of the game.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Heart of OVGrid: A Truly Unlimited Experience
&lt;/h2&gt;

&lt;p&gt;Unlike many other metaverses that limit the extension of their digital lands, OVGrid introduces the concept of infinite lands. What does this mean? That there are no barriers or restrictions for creation, exploration, and expansion within the virtual world.&lt;/p&gt;

&lt;p&gt;In OVGrid, any user can own, build, and inhabit a space without worrying about the limitations imposed by a finite land model or speculative markets. This democratizes access and allows creativity to flow without restrictions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decentralized Technology: The P2P Metaverse
&lt;/h2&gt;

&lt;p&gt;While other projects depend on centralized servers to function, OVGrid adopts a completely decentralized approach, based on a peer-to-peer (P2P) model. This means that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No central servers:&lt;/strong&gt; The virtual world is not controlled by a centralized entity, but distributed among users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guaranteed resilience:&lt;/strong&gt; Decentralization protects the metaverse from interruptions and problems associated with centralized servers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total freedom:&lt;/strong&gt; Users have true control over their spaces and data within the virtual world.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OVGrid not only adopts decentralization as a philosophy, but makes it the core of its functioning.&lt;/p&gt;

&lt;h2&gt;
  
  
  WebXR Optimization: The Metaverse in Your Browser
&lt;/h2&gt;

&lt;p&gt;One of the biggest challenges of current metaverses is accessibility. Many require complex installations, specialized equipment, or dedicated applications to function. OVGrid breaks with these limitations by being designed specifically for the browser, offering an optimized experience with WebXR.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key benefits of WebXR in OVGrid:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Total accessibility:&lt;/strong&gt; You do not need downloads or expensive hardware. A modern browser is all you need to explore OVGrid.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exceptional performance:&lt;/strong&gt; Thanks to pure JavaScript optimization, OVGrid offers impressive graphics and minimal loading times, even on mid-range devices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Universal compatibility:&lt;/strong&gt; It works perfectly on a wide variety of devices, from desktop computers to mobile phones and virtual reality headsets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With OVGrid, the metaverse is literally one click away.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shareable Coordinates: Connect Instantly
&lt;/h2&gt;

&lt;p&gt;Each location within OVGrid has a unique coordinate that can be easily shared as a link. By clicking, anyone can instantly join the exact position in the metaverse, without complications or complex processes.&lt;/p&gt;

&lt;p&gt;Imagine organizing a virtual meeting or showing your latest creation in OVGrid and simply sending a link for others to join. It is that easy and powerful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Competing with Giants: Why OVGrid?
&lt;/h2&gt;

&lt;p&gt;In a landscape where names like Decentraland lead, OVGrid stands out for its unique and disruptive approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Land model:&lt;/strong&gt; Infinite lands vs. limited lands.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decentralization:&lt;/strong&gt; 100% P2P vs. partial.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility:&lt;/strong&gt; Browser-based (WebXR) vs. requires installation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimization:&lt;/strong&gt; Smooth on modest devices vs. higher demands.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sharing:&lt;/strong&gt; Direct links to coordinates vs. limited.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OVGrid not only offers an alternative, but a better experience in terms of accessibility, freedom, and creative potential.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Future of the Metaverse is OVGrid
&lt;/h2&gt;

&lt;p&gt;In OVGrid, we believe that the metaverse should be a free, accessible, and infinite place. Our commitment to decentralization, technological optimization, and unlimited creativity allows us to offer a unique experience that empowers users.&lt;/p&gt;

&lt;p&gt;Whether you want to build your own world, explore new frontiers, or simply connect with others, OVGrid has a space for you.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written by Esteban Fuster Pozzi (&lt;a href="https://github.com/estebanrfp" rel="noopener noreferrer"&gt;estebanrfp&lt;/a&gt;), creator of &lt;a href="https://genosdb.com" rel="noopener noreferrer"&gt;GenosDB&lt;/a&gt; and &lt;a href="https://ovgrid.com" rel="noopener noreferrer"&gt;OVGrid&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webxr</category>
      <category>metaverse</category>
      <category>decentralization</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Building a P2P Collaborative Whiteboard with GenosDB in a Single HTML File</title>
      <dc:creator>Esteban Fuster Pozzi</dc:creator>
      <pubDate>Tue, 17 Feb 2026 14:15:27 +0000</pubDate>
      <link>https://dev.to/estebanrfp/building-a-p2p-collaborative-whiteboard-with-genosdb-in-a-single-html-file-1p17</link>
      <guid>https://dev.to/estebanrfp/building-a-p2p-collaborative-whiteboard-with-genosdb-in-a-single-html-file-1p17</guid>
      <description>&lt;p&gt;Build complex real-time apps without a backend. This collaborative whiteboard runs entirely peer-to-peer, powered by the simplicity of GenosDB.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GenosBoard&lt;/strong&gt; is a feature-rich, real-time collaborative whiteboard designed to showcase the power and simplicity of &lt;a href="https://genosdb.com/building-genosdb-p2p-database" rel="noopener noreferrer"&gt;GenosDB&lt;/a&gt;. It's a complete demonstration of how to build sophisticated, decentralized applications without writing a single line of backend code. All communication, data synchronization, and state persistence happens directly between browsers in a peer-to-peer network.&lt;/p&gt;

&lt;p&gt;This isn't just a simple demo; it's a blueprint for the next generation of collaborative tools. The magic lies in GenosDB's hybrid communication model, which this application leverages perfectly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Persistent State&lt;/strong&gt; (&lt;code&gt;db.put&lt;/code&gt;, &lt;code&gt;db.map&lt;/code&gt;): Shapes created, moved, or deleted are saved to the graph database. This state is automatically synchronized across all peers and persists through page reloads, providing a reliable, shared source of truth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ephemeral Events&lt;/strong&gt; (&lt;code&gt;db.room.channel&lt;/code&gt;): High-frequency data like live cursor positions and in-progress drag movements are sent through a separate, lightweight messaging channel. This data is never written to the database, ensuring peak performance and preventing unnecessary storage writes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Core Code
&lt;/h2&gt;

&lt;p&gt;The entire P2P whiteboard works with just a few lines of GenosDB:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;gdb&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://cdn.jsdelivr.net/npm/genosdb@latest/dist/index.min.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;gdb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;collab-board&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;rtc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Persistent state — shapes sync across all peers and survive reloads&lt;/span&gt;
&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;shape/circle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#646cff&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;35&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Reactive rendering — UI updates automatically when any peer changes data&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;unsubscribe&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;$regex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;^shape&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;action&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;added&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;action&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;updated&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;shapes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;removed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;shapes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Ephemeral channels — high-frequency data without touching the database&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cursorChannel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;room&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cursor-pos&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;cursorChannel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;peerId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;drawRemoteCursor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;peerId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dragChannel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;room&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;shape-drag&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;dragChannel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;updateShapePosition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This hybrid model — persistent graph data combined with ephemeral real-time channels — is what makes GenosDB uniquely suited for collaborative applications. No WebSocket server, no Firebase, no backend at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real-Time Collaboration:&lt;/strong&gt; Draw, drag, and delete shapes, and see changes from other users instantly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Cursors:&lt;/strong&gt; See where other connected users are pointing on the canvas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persistent State:&lt;/strong&gt; Your drawings are automatically saved in the browser and will be there when you return.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Serverless P2P Architecture:&lt;/strong&gt; No central server, no websockets to manage, no database hosting fees.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern &amp;amp; Responsive UI:&lt;/strong&gt; A clean, beautiful interface that's a pleasure to use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Dependencies, Single File:&lt;/strong&gt; The entire application runs from a single HTML file, demonstrating extreme portability and simplicity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  GenosDB Concepts Showcased
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;P2P Initialization:&lt;/strong&gt; Setting up a room with &lt;code&gt;gdb("room-name", { rtc: true })&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reactive State Syncing:&lt;/strong&gt; Using &lt;code&gt;db.map()&lt;/code&gt; to reactively render the UI from database changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atomic Operations:&lt;/strong&gt; Modifying the shared state with &lt;code&gt;db.put()&lt;/code&gt; and &lt;code&gt;db.remove()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ephemeral Messaging:&lt;/strong&gt; Using &lt;code&gt;db.room.channel()&lt;/code&gt; for high-frequency, non-persistent data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hybrid Data Strategy:&lt;/strong&gt; The core architectural pattern of combining persistent and ephemeral communication for maximum efficiency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern JavaScript Best Practices:&lt;/strong&gt; Leveraging top-level await, object destructuring, and efficient event handling.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Build More with GenosDB
&lt;/h2&gt;

&lt;p&gt;If this whiteboard inspires you, explore other real-time applications built with GenosDB:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://genosdb.com/genosdb-realtime-chat" rel="noopener noreferrer"&gt;Build a Realtime Chat App in 7 Lines of JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genosdb.com/genosdb-p2p-video-streaming" rel="noopener noreferrer"&gt;Real-Time P2P Video Streaming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genosdb.com/genosdb-decentralized-notes-app" rel="noopener noreferrer"&gt;Secure, Decentralized Notes App&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genosdb.com/genosdb-kanban-board" rel="noopener noreferrer"&gt;Build a Kanban Board in Minutes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dive into the code to see just how few lines it takes to build something this powerful. Start building your own decentralized, real-time application today with GenosDB.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://estebanrfp.github.io/gdb/examples/whiteboard.html" rel="noopener noreferrer"&gt;&lt;strong&gt;Try the Live Demo →&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/estebanrfp/gdb/blob/main/examples/whiteboard.html" rel="noopener noreferrer"&gt;&lt;strong&gt;View Source Code →&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;This article is part of the official documentation of GenosDB (GDB).&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
GenosDB is a distributed, modular, peer-to-peer graph database built with a Zero-Trust Security Model, created by &lt;strong&gt;Esteban Fuster Pozzi (&lt;a href="https://github.com/estebanrfp" rel="noopener noreferrer"&gt;estebanrfp&lt;/a&gt;)&lt;/strong&gt;. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;📄 &lt;a href="https://github.com/estebanrfp/gdb/blob/main/WHITEPAPER.md" rel="noopener noreferrer"&gt;Whitepaper&lt;/a&gt; | overview of GenosDB design and architecture &lt;/p&gt;

&lt;p&gt;🛠 &lt;a href="https://github.com/estebanrfp/gdb/blob/main/ROADMAP.md" rel="noopener noreferrer"&gt;Roadmap&lt;/a&gt; | planned features and future updates&lt;/p&gt;

&lt;p&gt;💡 &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-examples.md" rel="noopener noreferrer"&gt;Examples&lt;/a&gt; | code snippets and usage demos&lt;/p&gt;

&lt;p&gt;📖 &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/index.md" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt; | full reference guide&lt;/p&gt;

&lt;p&gt;🔍 &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-api-reference.md" rel="noopener noreferrer"&gt;API Reference&lt;/a&gt; | detailed API methods&lt;/p&gt;

&lt;p&gt;📚 &lt;a href="https://github.com/estebanrfp/gdb/wiki" rel="noopener noreferrer"&gt;Wiki&lt;/a&gt; | additional notes and guides&lt;/p&gt;

&lt;p&gt;💬 &lt;a href="https://github.com/estebanrfp/gdb/discussions" rel="noopener noreferrer"&gt;GitHub Discussions&lt;/a&gt; | community questions and feedback&lt;/p&gt;

&lt;p&gt;🗂 &lt;a href="https://github.com/estebanrfp/gdb" rel="noopener noreferrer"&gt;Repository&lt;/a&gt; | Minified production-ready files&lt;/p&gt;

&lt;p&gt;📦 &lt;a href="https://www.npmjs.com/package/genosdb" rel="noopener noreferrer"&gt;Install via npm&lt;/a&gt; | quick setup instructions&lt;/p&gt;

&lt;p&gt;🌐 &lt;a href="https://estebanrfp.com/" rel="noopener noreferrer"&gt;Website&lt;/a&gt; | &lt;a href="https://github.com/estebanrfp" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://www.linkedin.com/in/estebanrfp/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>p2p</category>
      <category>webrtc</category>
      <category>collaboration</category>
    </item>
    <item>
      <title>GunDB Explained: Features, SEA Crypto &amp; a Modern P2P Alternative</title>
      <dc:creator>Esteban Fuster Pozzi</dc:creator>
      <pubDate>Tue, 17 Feb 2026 01:32:45 +0000</pubDate>
      <link>https://dev.to/estebanrfp/gun-an-ecosystem-of-tools-for-distributed-applications-4eke</link>
      <guid>https://dev.to/estebanrfp/gun-an-ecosystem-of-tools-for-distributed-applications-4eke</guid>
      <description>&lt;h2&gt;
  
  
  What Is GunDB?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GunDB&lt;/strong&gt; (also known as Gun.js) is an open-source, real-time, distributed graph database written in JavaScript. Designed with an &lt;em&gt;Offline-First&lt;/em&gt; approach and a &lt;em&gt;keep-it-simple&lt;/em&gt; philosophy, it enables developers to build encrypted, community-run, peer-to-peer applications directly in the browser.&lt;/p&gt;

&lt;p&gt;GunDB is used in production by &lt;strong&gt;Internet Archive&lt;/strong&gt; and &lt;strong&gt;HackerNoon&lt;/strong&gt;, and decentralized alternatives to platforms like Reddit, YouTube, and Wikipedia push terabytes of daily P2P traffic through the GUN network.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Real-time data synchronization&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decentralized and distributed architecture&lt;/strong&gt; with cryptographically secure data replication&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt; without relying on central servers or a continuous internet connection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Default servers act as backup and propagation checkpoints. Among available adapters, you can use &lt;strong&gt;Amazon S3&lt;/strong&gt;, among others.&lt;/p&gt;

&lt;p&gt;When a client-side app (browser) requests data, it merges responses with its local state using a &lt;strong&gt;CRDT&lt;/strong&gt;, then caches the result.&lt;/p&gt;

&lt;p&gt;This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next time, the data loads instantly — even offline.&lt;/li&gt;
&lt;li&gt;Data is replicated across all browsers that requested it.&lt;/li&gt;
&lt;li&gt;If your server goes down, data can still be recovered from other peers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Losing important information becomes nearly impossible, since all copies would have to disappear simultaneously.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/b09pXG_wiVQ"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Core Concepts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Real-Time synchronization across peers&lt;/li&gt;
&lt;li&gt;Distributed peer-to-peer architecture&lt;/li&gt;
&lt;li&gt;Decentralized — no single point of failure&lt;/li&gt;
&lt;li&gt;Offline-First with local state merge&lt;/li&gt;
&lt;li&gt;Graph Database with CRDT conflict resolution&lt;/li&gt;
&lt;li&gt;Radix Storage Engine (RAD)&lt;/li&gt;
&lt;li&gt;Standalone JavaScript — no external dependencies&lt;/li&gt;
&lt;li&gt;Small bundle size&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  SEA: Security, Encryption, and Authorization
&lt;/h2&gt;

&lt;p&gt;GunDB's cryptographic layer is called &lt;strong&gt;SEA&lt;/strong&gt; (Security, Encryption, Authorization). It provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;User authentication&lt;/strong&gt; with public/private key pairs generated via the Web Crypto API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data signing&lt;/strong&gt; — every write operation can be cryptographically signed by its author&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data encryption&lt;/strong&gt; — end-to-end encryption between users using ECDH key exchange&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proof of work&lt;/strong&gt; — optional computational proof for rate limiting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SEA is the foundation for building trusted, authenticated applications on top of GunDB. It uses browser-native cryptographic primitives (ECDSA for signing, ECDH for shared secrets, AES-GCM for encryption) rather than external libraries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Known Limitations
&lt;/h2&gt;

&lt;p&gt;GunDB has been in development for many years — a remarkable achievement for an open-source P2P project. But with that longevity comes accumulated technical debt, which is natural in any long-lived codebase. Some areas where this is most visible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;localStorage as default storage&lt;/strong&gt; — The default persistence layer uses &lt;code&gt;localStorage&lt;/code&gt;, a synchronous API with a ~5MB cap that blocks the main thread. Modern alternatives like OPFS and IndexedDB offer significantly better performance. The RAD (Radix) adapter improves this but adds complexity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HAM conflict resolution&lt;/strong&gt; — GunDB uses a Hypothetical Amnesia Machine based on wall-clock timestamps. In distributed systems, clock drift between devices can lead to unpredictable conflict resolution. Newer approaches like Hybrid Logical Clocks (HLC) solve this without relying on synchronized clocks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sync after extended disconnections&lt;/strong&gt; — Prolonged offline periods can result in difficult-to-debug synchronization states, as there is no operation log to replay missed mutations. Without an oplog, there is no way to send only the delta of what changed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relay infrastructure&lt;/strong&gt; — While GunDB is decentralized, it relies on relay servers for peer discovery and data propagation. The default public relays can become bottlenecks under heavy load.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codebase complexity&lt;/strong&gt; — Years of incremental development have resulted in a codebase that can be challenging for new contributors to navigate. This is a common pattern in projects that have evolved organically over a long period.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependency surface&lt;/strong&gt; — Gun's install-time dependency tree is large, and with upstream releases paused since 2020 it accumulates unpatched CVEs over time. We itemize the full report — and how a zero-dependency design answers it — in &lt;a href="https://genosdb.com/gundb-supply-chain-security" rel="noopener noreferrer"&gt;GunDB's supply chain in 2026&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are engineering trade-offs, not defects — every distributed system makes them. For projects that need different trade-offs (OPFS storage, hybrid delta sync, Cellular Mesh topology), next-generation alternatives like &lt;a href="https://genosdb.com/building-genosdb-p2p-database" rel="noopener noreferrer"&gt;GenosDB&lt;/a&gt; were designed from scratch to address these specific challenges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Plugins and Modules
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Users (SEA)&lt;/strong&gt; — Security, Encryption, Authorization&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage adapters&lt;/strong&gt; — file, LevelDB, RAD, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration&lt;/strong&gt; — Vue.js, React, and community adapters&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Gun Recommended Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gun.eco/docs" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/amark/gun" rel="noopener noreferrer"&gt;Gun on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gun.eco/docs/Whitepaper.pdf" rel="noopener noreferrer"&gt;Whitepaper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gun.eco/docs/Distributed-Matters" rel="noopener noreferrer"&gt;Distributed Matters&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Beyond GunDB: The Next Generation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GenosDB&lt;/strong&gt; is a next-generation P2P graph database, engineered from the ground up to solve exactly the trade-offs above. It's real-time, serverless and offline-first — like GunDB — but built on a fundamentally stronger foundation: a modular plugin architecture, a Zero-Trust security model with RBAC, &lt;a href="https://genosdb.com/genosdb-cellular-mesh-p2p-scalability" rel="noopener noreferrer"&gt;&lt;strong&gt;Cellular Mesh&lt;/strong&gt;&lt;/a&gt; networking that avoids the O(n²) full-mesh bottleneck, &lt;strong&gt;Hybrid Logical Clocks&lt;/strong&gt; instead of wall-clock conflict resolution, an &lt;strong&gt;operation log&lt;/strong&gt; for true delta sync, and &lt;strong&gt;OPFS&lt;/strong&gt;-based persistent storage. If you're weighing your options, see how it compares across &lt;a href="https://genosdb.com/popular-p2p-distributed-databases" rel="noopener noreferrer"&gt;other P2P and distributed databases&lt;/a&gt;, or &lt;a href="https://genosdb.com" rel="noopener noreferrer"&gt;explore GenosDB directly&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Relationship with GunDB
&lt;/h2&gt;

&lt;p&gt;This guide comes from years spent inside the GunDB ecosystem. &lt;strong&gt;Esteban Fuster Pozzi (&lt;a href="https://github.com/estebanrfp" rel="noopener noreferrer"&gt;@estebanrfp&lt;/a&gt;)&lt;/strong&gt; built the &lt;a href="https://gun.eco/docs" rel="noopener noreferrer"&gt;official GUN documentation platform&lt;/a&gt; — &lt;em&gt;"made with love for the Gun community"&lt;/em&gt; — and contributed to the &lt;a href="https://github.com/amark/gun" rel="noopener noreferrer"&gt;GUN codebase&lt;/a&gt; itself, including its vanilla-JS real-time P2P video examples. GunDB's founder, &lt;strong&gt;Mark Nadal&lt;/strong&gt;, is a friend and collaborator.&lt;/p&gt;

&lt;p&gt;Pushing GunDB to its limits in real projects is exactly what led to &lt;strong&gt;GenosDB&lt;/strong&gt;. It's not a fork or a reskin — it's engineered from the ground up to keep what makes browser P2P great while solving the trade-offs described above. As the docs put it, &lt;em&gt;"GunDB and GenosDB belong to the same research effort in distributed systems"&lt;/em&gt; — GenosDB is where that research goes next.&lt;/p&gt;

&lt;p&gt;One of my earliest exchanges with GUN's creator, &lt;strong&gt;Mark Nadal&lt;/strong&gt;, is a story I still like to tell. I'd built an interactive 3D world with &lt;strong&gt;Babylon.js&lt;/strong&gt;, synced over GUN, and we tried to share a 9 MB screen recording of it — but Discord, Telegram and the anonymous file hosts all choked on it. So instead of hunting for another host, I coded a drag-and-drop uploader and a real-time &lt;em&gt;"video sinker"&lt;/em&gt; on the spot, and we streamed the clip directly computer-to-computer over GUN — faster than it had taken us to fail with the centralized services. Mark recorded the whole session and posted it on his own channel:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/VkxYHsgfT5U"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;⭐ Found this useful? &lt;strong&gt;&lt;a href="https://github.com/estebanrfp/gdb" rel="noopener noreferrer"&gt;Star GenosDB on GitHub&lt;/a&gt;&lt;/strong&gt; — or spin it up in seconds: &lt;code&gt;npm i genosdb&lt;/code&gt;.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;This article is part of the official documentation of GenosDB (GDB).&lt;/strong&gt;&lt;br&gt;
GenosDB is a distributed, modular, peer-to-peer graph database built with a Zero-Trust Security Model, created by &lt;strong&gt;Esteban Fuster Pozzi (&lt;a href="https://github.com/estebanrfp" rel="noopener noreferrer"&gt;estebanrfp&lt;/a&gt;)&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;📄 &lt;a href="https://github.com/estebanrfp/gdb/blob/main/WHITEPAPER.md" rel="noopener noreferrer"&gt;Whitepaper&lt;/a&gt; | overview of GenosDB design and architecture&lt;/p&gt;

&lt;p&gt;🛠 &lt;a href="https://github.com/estebanrfp/gdb/blob/main/ROADMAP.md" rel="noopener noreferrer"&gt;Roadmap&lt;/a&gt; | planned features and future updates&lt;/p&gt;

&lt;p&gt;💡 &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-examples.md" rel="noopener noreferrer"&gt;Examples&lt;/a&gt; | code snippets and usage demos&lt;/p&gt;

&lt;p&gt;📖 &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/index.md" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt; | full reference guide&lt;/p&gt;

&lt;p&gt;🔍 &lt;a href="https://github.com/estebanrfp/gdb/blob/main/docs/genosdb-api-reference.md" rel="noopener noreferrer"&gt;API Reference&lt;/a&gt; | detailed API methods&lt;/p&gt;

&lt;p&gt;📚 &lt;a href="https://github.com/estebanrfp/gdb/wiki" rel="noopener noreferrer"&gt;Wiki&lt;/a&gt; | additional notes and guides&lt;/p&gt;

&lt;p&gt;💬 &lt;a href="https://github.com/estebanrfp/gdb/discussions" rel="noopener noreferrer"&gt;GitHub Discussions&lt;/a&gt; | community questions and feedback&lt;/p&gt;

&lt;p&gt;🗂 &lt;a href="https://github.com/estebanrfp/gdb" rel="noopener noreferrer"&gt;Repository&lt;/a&gt; | Minified production-ready files&lt;/p&gt;

&lt;p&gt;📦 &lt;a href="https://www.npmjs.com/package/genosdb" rel="noopener noreferrer"&gt;Install via npm&lt;/a&gt; | quick setup instructions&lt;/p&gt;

&lt;p&gt;🌐 &lt;a href="https://estebanrfp.com/" rel="noopener noreferrer"&gt;Website&lt;/a&gt; | &lt;a href="https://github.com/estebanrfp" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://www.linkedin.com/in/estebanrfp/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gundb</category>
      <category>p2p</category>
      <category>database</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
