Secure, Decentralized & Collaborative Notes App powered by GenosDB
WebAuthn passkeys, P2P sync, granular permissions — in a single HTML file with no backend

Full Stack Developer - dWEB R&D
Search for a command to run...
WebAuthn passkeys, P2P sync, granular permissions — in a single HTML file with no backend

Full Stack Developer - dWEB R&D
No comments yet. Be the first to comment.
Weighing GunDB for production, or looking for an alternative? Its supply-chain report, itemized — and GenosDB's zero-trust model and serverless design.

A live Polygon NFT marketplace with no backend and no MetaMask, mirrored into GenosDB — a peer-to-peer graph database with real-time, offline-capable reads.

Engineering Excellence vs. Architectural Innovation in Browser P2P

How I turned a single-player Godot game into real-time co-op with zero servers — two browser tabs, one shared world, powered by GenosDB.

How OVGrid runs an entire real-time 3D world — peer-to-peer, offline-capable — on GenosDB.


A decentralized notes app with WebAuthn passkeys, real-time P2P collaboration, granular permissions, and full-text search — built in a single HTML file with no backend.
Building collaborative applications usually means assembling a stack: frontend framework, backend server, database, WebSocket service, authentication provider. Each piece adds complexity and points of failure. What if you could eliminate the entire backend and build a secure, real-time, multi-user notes app with just GenosDB?
To prove it's not just possible but surprisingly straightforward, we created NotesDev. This fully-featured notes application was built in a single HTML file, and its power comes from a fundamentally different approach to application architecture, all enabled by GenosDB.
Let's break down how we built the core features of NotesDev, moving from a simple concept to a powerful collaborative tool, using only the GenosDB API.
The first challenge in any application is user management. Instead of building user tables, password-hashing logic, and session management, we leveraged GenosDB's built-in Security Manager (SM).
By simply initializing GenosDB with the sm module enabled, we instantly gained a complete identity management system. The user registration flow follows the best practices outlined in the documentation:
db.sm.startNewUserRegistration(). This creates a temporary, in-memory Ethereum identity. The UI then displays the mnemonic phrase, which is the user's permanent key to their account, and prompts them to save it securely.db.sm.loginOrRecoverUserWithMnemonic() to log in by pasting their saved phrase. Even better, if they've previously secured their account on the device, a "Login with Passkey" button appears, allowing them to authenticate instantly and securely using biometrics via db.sm.loginCurrentUserWithWebAuthn().The crucial takeaway is that at no point did we write code to store user credentials on a server. Identity is cryptographic, user-owned, and managed entirely on the client side.
A great notes app feels alive. Notes should appear, update, and be searchable instantly. Traditionally, this requires fetching initial data via REST/GraphQL and then opening a WebSocket connection to listen for updates.
With GenosDB, this entire pattern is condensed into a single, elegant method: db.map().
fetchNotes() and subscribeToUpdates() functions. We simply called db.map() with a query to find all nodes of type: 'note' and provided a callback function. GenosDB immediately streams all existing notes to this callback (action: 'initial') and then continues to send any new events ('added', 'updated', 'removed') as they happen across the P2P network. The UI simply re-renders based on these events.db.map(). As the user types, we dynamically update the query with the $text operator. GenosDB's reactive engine automatically re-evaluates the query and streams the new, filtered results to our callback in real-time. The result is a powerful, instant search feature with zero backend indexing servers.This declarative approach dramatically simplifies state management. The UI becomes a direct reflection of the database state, which is always kept in sync automatically.
This is where the magic of GenosDB truly comes to life. How can you enforce that only authorized users can edit a shared note in a decentralized system without a central server to validate permissions?
The answer is node-level Access Control Lists (ACLs), built into the Security Manager and enforced by every peer.
When a user creates a note, it is saved with db.sm.acls.set(...), which registers the creator as the note's owner with full rights. To collaborate, the owner grants access to another user's Ethereum address with db.sm.acls.grant(noteId, address, 'write') — and can revoke it with db.sm.acls.revoke(...). The real security comes from how every peer enforces these grants:
Since v0.14.0 these checks are enforced against malicious peers: because the signer is verified cryptographically on every node, a modified client cannot write a note it does not own. It's like having a tiny, trusted validator running inside every user's browser, enforcing your rules without any central point of failure.
NotesDev demonstrates that the tools now exist to build applications that are not only powerful but also more resilient, private, and respectful of user ownership. By providing integrated solutions for identity, real-time data, and P2P security, GenosDB allows developers to bypass backend development entirely and focus on what truly matters: creating incredible user experiences.
The future of the web is collaborative, real-time, and decentralized. And it's easier to build than you think.
This article is part of the official documentation of GenosDB (GDB). GenosDB is a distributed, modular, peer-to-peer graph database built with a Zero-Trust Security Model, created by Esteban Fuster Pozzi (estebanrfp).
📄 Whitepaper | overview of GenosDB design and architecture
🛠 Roadmap | planned features and future updates
💡 Examples | code snippets and usage demos
📖 Documentation | full reference guide
🔍 API Reference | detailed API methods
📚 Wiki | additional notes and guides
💬 GitHub Discussions | community questions and feedback
🗂 Repository | Minified production-ready files
📦 Install via npm | quick setup instructions