ContextVM is a decentralized protocol that enables Model Context Protocol (MCP) servers and clients to communicate over the Nostr network. It uses Nostr as a secure, distributed transport layer—leveraging cryptographic keys for identity, decentralized discovery, and Bitcoin-powered micropayments. Rather than relying on centralized infrastructure like domains, OAuth, or cloud hosting, ContextVM allows anyone to run or access services using only Nostr and a internet-connected device. It transforms any computational service into a discoverable, accessible, and monetizable resource—while preserving privacy, security, and user sovereignty.
Public Key
npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm Profile Code
nprofile1qqsxkduqau5h9eeaxu9cfgl9rea2nt35haqjjwxul0vuta3myg2pdjqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqs6amnwvaz7tmwdaejumr0dsq3vamnwvaz7tmjv4kxz7fwwpexjmtpdshxuet5qyvhwumn8ghj7un9d3shjtnwdaehgunrdpjkx6ewd4jsz9thwden5te0wahhgu3wwfjkcct5wgh8s7t6knprx6
Show more details
Published at
2025-12-25T16:15:38+01:00 Event JSON
{
"id": "f5cb3adc527357ed59d75ad131f56f6291d91b07a81f100d22bb404aee73d297" ,
"pubkey": "6b3780ef2972e73d370b84a3e51e7aa9ae34bf412938dcfbd9c5f63b221416c8" ,
"created_at": 1766675738 ,
"kind": 0 ,
"tags": [],
"content": "{\"name\":\"ContextVM\",\"about\":\"ContextVM is a decentralized protocol that enables Model Context Protocol (MCP) servers and clients to communicate over the Nostr network. It uses Nostr as a secure, distributed transport layer—leveraging cryptographic keys for identity, decentralized discovery, and Bitcoin-powered micropayments.\\n\\nRather than relying on centralized infrastructure like domains, OAuth, or cloud hosting, ContextVM allows anyone to run or access services using only Nostr and a internet-connected device. It transforms any computational service into a discoverable, accessible, and monetizable resource—while preserving privacy, security, and user sovereignty.\",\"picture\":\"https://image.nostr.build/d7356fafce4dbac8436355e9eb1f77156d3429c47c96be31d18c9ff29f7669fb.jpg\",\"display_name\":\"ContextVM\",\"displayName\":\"ContextVM\",\"website\":\"https://contextvm.org/\",\"lud16\":\"[email protected] \",\"banner\":\"https://image.nostr.build/98c21918d6a4d4c26b9bfb98db71d988069b291e40f7440c030c7c766403808d.jpg\",\"nip05\":\"[email protected] \"}" ,
"sig": "62b079bbed54fcf3bb8d7957f3b2bb3b4141013658cee13f60e363d98be7c26f516eae1f5d20aa08b53c63e87801db5e3d050d32f92b293ec7bb9632307b22fc"
}
Last Notes npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Nostr == WS == CVM. Connecting to servers, calling tools, etc, everything has worked over WebSockets since day one with ContextVM 🚀 #nevent1q…xla3 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM A new issue of our biweekly newsletter is out! 🚀 "Ephemeral Is Better — The ContextVM World #3" Available in nostr and substack: https://contextvm.substack.com/p/ephemeral-is-better-the-contextvm #naddr1qv…8e0w npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Continuing with NIPs, we have just added a pr for CVM to the NIPs repository. We wrote this NIP to describe the conventions for transporting Model Context Protocol (MCP) messages over Nostr. We deliberately kept the NIP thin on details that already live in the full CVM spec; it exists to make CVM discoverable in the Nostr ecosystem and to show that CVM is just Nostr, using the same primitives any Nostr app uses. https://github.com/nostr-protocol/nips/pull/2246 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM We just opened a PR in the NIPs repo that includes this convention for ephemeral gift wraps. Perhaps other developers will find it a valuable building block https://github.com/nostr-protocol/nips/pull/2245 #nevent1q…c6mq npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Ephemeral giftwraps improve your privacy and hygiene on relays, as nothing is persisted there. CVM messages use ephemeral events when the traffic is not encrypted, but when encrypted, they wrap the ephemeral events in a gift wrap which uses a regular kind. So even if the wrapped event is ephemeral, its envelope isn't. Ephemeral gift wraps solve this; everything is encrypted end-to-end, relays just route blindly, nothing is persisted, no collect now, decrypt later 🥷🏼 #nevent1q…e26y npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM CEP-19 is live with ephemeral gift wraps 🚀 In plain terms, you can now send end-to-end encrypted MCP messages that do not have to be stored on relays. This is a significant upgrade for privacy, as your messages can travel through public infrastructure without becoming permanent data. The kind used by CVM is ephemeral (25910), and when you use encryption, this ephemeral kind is gift-wrapped (NIP-59) in a regular event kind that is persistent on relays (1059). With this update, servers and clients can use a new kind for ephemeral gift wraps (21059). It is exactly the same as the regular kind (1059) but is ephemeral, so it is not stored on relays. This also improves metadata hygiene: relays can forward messages without needing to retain payloads. How it works: CEP-19 introduces an ephemeral gift-wrap kind alongside the existing persistent kind. Both sides advertise their support, and when both do, the transport prefers ephemeral wrapping while maintaining backward compatibility with older clients. Configuration in the SDK: This feature is available from version v0.6.0. Just set the transport’s `GiftWrapMode` option to `EPHEMERAL` to always use ephemeral gift wraps, `PERSISTENT` to force legacy behavior, or `OPTIONAL` to negotiate ephemeral wrapping when supported. The default remains compatible with existing relays and clients, making this an opt-in privacy upgrade without being a breaking change. npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Hey Nostr! We're excited to share that we're working on getting more eyes on ContextVM and its development. We just published our first post on Hacker News. If you're on the platform, we'd love for you to check it out, share your thoughts, or help spread the word. Every bit helps, so please join us in growing ContextVM! 🚀 https://news.ycombinator.com/item?id=47151294 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Looks dope! npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Yes! npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM After a few days experimenting and receiving feedback around CEP‑8 payments, we enhanced their SDK implementation, making payments more reliable and consistent. We’ve just released a new feature that supports additional use cases, such as servers with prepaid balances, top‑up accounts, or separate payment management. This feature lets you waive a payment via the server’s resolve price callback. With this update, payment processing is far more powerful 🚀 Docs and skills have been updated accordingly. Happy building :) https://image.nostr.build/fbd347f5e537efc79947c1d91acb930cc32ba229624ec17b3380e8be5cf6469b.png Docs: https://docs.contextvm.org/ts-sdk/payments/overview/#waiving-payment-prepaid--subscription-models Skills: npx cvmi add --skill payments, or npx skills add contextvm/cvmi --skill payments npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM We are at speed now, and you can find our latest issue of the newsletter on our Substack! https://contextvm.substack.com/p/the-contextvm-world-2 #nevent1q…rlat npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Get it fresh in your inbox every two weeks! #nevent1q…c4ug npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM GM Nostr! Our newsletter, The ContextVM World 🌍, is now live on Substack: https://contextvm.substack.com/ While ContextVM is built on Nostr and will continue to publish natively on Nostr, our goal is to reach a larger audience outside of Nostr to have more builders leveraging our protocol! Feel free to subscribe to our Substack and to share our newsletter with the world! npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Let's keep building! 🚀 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Thanks Tim! appreciate your words 💛 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Thanks so much to openSats for this opportunity! We'll keep pushing the boundaries of this new paradigm 💛 #nevent1q…hxrk npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM https://lemonade.contextvm.org #nevent1q…rf53 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM These are badges are real, you can check them here as well: https://nostrsigil.com/badges/naddr1qvzqqqr48ypzpl0zzdglhjrqfsnaelea2plcaxc4gw8nh5zqj09rl4tu66ekckxsqy28wumn8ghj7un9d3shjtnyv9kh2uewd9hsqyrvv4kk7mnpv3jj6mr9vajkuernaqgdnx #nevent1q…y4t3 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM 🍋 Introducing Lemonade Legends, our newest teaching project that demonstrate how to use CEP-8 in a tangible and fun way! Do you want your lemonade legend badge? https://lemonade.contextvm.org This is a server that mints nostr badges with dynamic pricing: 21 sats on day 0, +21 sats each day after. A live experiment in paid capabilities, SQLite accountability, and dual APIs (humans via UI, agents via MCP). The idea behind this project was to create a new and fun educational resource for the CVM ecosystem. You can read our blog post here: https://contextvm.org/blog/lemonade-legends or in nostr. What we did for this project: ✨ Server + Svelte app, both open source ✨ Step-by-step blog post walking through the code ✨ Copy-paste ready patterns for your own paid tools Dive in → https://contextvm.org/blog/lemonade-legends Server → github.com/ContextVM/lemonade-legends Site → github.com/ContextVM/lemonade-legends-site What will you build with CEP-8? 💛 #lemonadelegends #contextvm #cep8 #nostr #bitcoin #lightning #opensource #naddr1qv…t8dw npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Just pushed a new payment processor for our SDK based on ZAPS!⚡️ It only requires an LN address to be used, it couldn't be easier⚡⚡️ https://image.nostr.build/986e254f2b9a960f1d6080be6b74b027bafe22e6619e302fc6837bfc3c84d22c.png With this new payment processor, our SDK now supports three payment processors based on Lightning BOLT11: NWC, LNbits, and now ZAPS⚡ To use it, simply update to the latest contextvm SDK. The only consideration regarding this payment method is that ZAPS can be faked by the provider of your LN address. If you trust the provider of the configured Lightning address, there is no problem, it could even be your own node. However, if you don’t trust the provider, the ZAP receipt alone is not sufficient to prove settlement. This is not a new issue; it has been discussed and is already covered in an appendix in nip-57 Hope you enjoy!⚡️⚡️⚡️ npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM LFG! 🔥 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM It takes you ~20 LOC to enable payments in your server. NWC + CVM = 🤯 https://image.nostr.build/808074d08ff8c4f5cb0f345ffc2cc89d10a22e156fd9248dd1915600ef32e4e3.png The code: https://github.com/ContextVM/dummy-paid-server/blob/main/index.ts #nevent1q…8du5 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Pro tip: get the CVM skills for payments `npx cvmi add --skill payments -y` Ask your agent to build something profitable, use an NWC connect string, and start monetizing. Quite easy. Additionally, there is an LNBits backend available in the SDK, and the skills come with documentation on how to build your custom payment rails if you need. Let's build! 🚀 #nevent1q…ad8v npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Payments Have Arrived! 🚀 ContextVM now supports payments with CEP-8! Your servers can finally become digital lemonade stands, paid, permissionless services that anyone can run and consume without asking for permission. This release packs everything you need. The new version of the SDK have everything you need, even ships with Lightning BOLT11 integrations (NWC and LNbits), the ContextVM site now supports payment discovery, cvmi and skills has been updated, and the docs cover the full flow. Want to see it in action? The dummy demo server (https://github.com/ContextVM/dummy-paid-server) shows you exactly how to price and monetize a capability. https://video.nostr.build/aaa0ef0bb44b55da525e2047b681b4fbd7aa4e5c603bb4fbbd682c5603b21ceb.mp4 Looking forward to hear your thoughts and see what you are building! Read the docs: https://docs.contextvm.org/spec/ceps/cep-8/ Build a stand. Price a capability. Let value flow. If you have any question just ask #naddr1qv…qt6c npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Payments are coming imminently 🚀 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Just shipped some clarity improvements to CEP-8 🎯 We are pretty close to getting this done; we just shipped some clarification to the payments spec so some concepts are less ambiguous. The spec now has well-defined PMI (payment method identifier) boundaries, clarifiying what goes in `pay_req`. We've added a recommended PMI registry with precise payload semantics, plus naming conventions to keep things unambiguous as the ecosystem grows. Also new: optional direct payments for bearer assets. When both parties support it, you can skip the roundtrip, just attach `["direct_payment", "<pmi>", "<payload>"]` to your request and you're done. Good for cashu 🥜 The ongoing implementation remains unchanged, this is all documentation and specification hardening. Current spec: https://github.com/ContextVM/contextvm-docs/blob/ed71abec7bd93ba1082e67dfc92f0b0bcf618a72/src/content/docs/spec/ceps/cep-8.md SDK progress: github.com/ContextVM/sdk/pull/24 Feedback welcome! #nevent1q…ppc5 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Great! can you open a pr? npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Well, there is no need to add methods for topping up the wallet/nutstash. We should assume the wallet is already plugged in and has funds. If you read CEP-8, the responsibilities of servers and clients are clarified there. tldr; Servers act as payment processors, emitting payment requests and then validating that the payment was done. Clients act as payment handlers, being responsible for paying the requests emitted by the server. The funds that the wallet has available are a separate matter and are better kept out of scope, so there is no need for deposit or withdraw methods. A way this could work is as follows: the server (payment processor) receives a request for a paid capability. It then goes to the mint it has configured, gets a quote, obtains the BOLT11 invoice from it, and sends the payment request. The client (payment handler) takes the BOLT11 invoice, gets a melt quote for it, and the mint handles the payment. At that point, the server can check its quote status and verify if it's fulfilled. Then the lifecycle is completed. Extra steps could include redeeming the tokens from the quote and storing them either locally or in the NIP-60 wallet. What do you think? If there are some concepts that are not clear, we have written a couple of guides and resources to understand how payments work in CVM: Payments, Paid Servers, and Clients https://github.com/ContextVM/sdk/blob/e2096b7c94658e1f7b5a3f06ad53738d1e3eacea/docs/payments-paid-servers-and-clients.md Payments Architecture https://github.com/ContextVM/sdk/blob/e2096b7c94658e1f7b5a3f06ad53738d1e3eacea/docs/payments-architecture.md There is also the spec CEP-8: https://github.com/ContextVM/contextvm-docs/blob/8d0dbfc95a929ac6dd49cab556b18874df758b73/src/content/docs/spec/ceps/cep-8.md Happy to solve any doubts if you have any! npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM I haven't checked the dependency tree to be honest. But if you feel comfortable with nostr-tools and there is no need for other new deps, it is preferable. If not, maybe the best option is to create a separate repo for extra payment processors and handlers. npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Sounds good! Do you feel proficient enough in TypeScript to contribute with a PR? Ideally without introducing more deps, we already have applesauce which it have nip-60 utils as well, If not, we can add it in a future iteration once our PR is finished. Ongoing PR: https://github.com/ContextVM/sdk/pull/24 Reference from the PR we just merged with the LNbits backend: https://github.com/ContextVM/sdk/pull/25 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM CVMI 0.1.9 is out. It includes two minor but necessary features: normalizing quoted command strings so you can pass commands to serve any MCP server inside quotes (e.g., `cvmi serve "npx -y …"`), and adding environment‑variable support to the spawned MCP server using flags such as `cvmi serve -e LOG_LEVEL=debug …`. They aren’t the flashiest features, but they are essential for real world scenarios. Thanks, @npub1ye5…knpr, for pointing them out 🚀 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Hey, yes, these servers are offline. We are not running them, is the operator, probably @npub1ye5…knpr Sorry for the inconvenience. We should add a function to dummy ping servers so they can display an 'offline' badge. I'm happy to assist further if you need help npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM A brief demo of the power of these new commands 👀 https://video.nostr.build/6b13b147fffa320ce95bc61c291cc4922a6d40b726edfc83c1e5c43d817ab4f9.mp4 #nevent1q…gw65 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM And this is not the only news we have for today 👀 more about this later, wait for it 🔥 #nevent1q…x2hg npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Hahaha ok, thought it was something new. We think that as enshittification continues extending its shadow through the internet and digital world, it is going to be more and more valuable for individuals to be able to fully, self organize, associate, collaborate and share their resources. We feel that the infrastructure as a service model that we are seeing more and more is going to be a huge bottleneck and more discriminatory since the heavy computations they offer will struggle with a more democratized demand for the resources. So, the more people, the worse that model scales without sacrificing a competitive environment and becoming a monopoly. At the same time, things are going to get cheaper to run at low scale and people will be able to share the resources they have to satisfy demand at their scale. This vision can be true or not in the future, but it is one of the fundamental whys behind CVM, high bandwidth collaboration between individuals. If you feel curious about our point of view and ethics you can check our blog, we have some nice articles like https://contextvm.org/blog/forging-a-new-frontier npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Thanks! Yes, Nostr is a whole paradigm shift, and CVM is another building block of Nostr that leverages as many of its inherent features as possible. Very powerful. We would love to know more about that concept of cognitive computing resources you mentioned. Would you mind explaining what it means? npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Thanks for your words! We are glad that more people are aware of CVM and the possibilities it brings. If you ever need to clear any doubt please just ping us, we are more than happy to assist. CVM is fully open source and community driven, we all build this together 💛 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM 🎇Meet CVMI: the Army knife we are building for ContextVM development🧑💻 https://image.nostr.build/c0c7c982104c053e185bcd9522c578233e818e4c2c3ad8668fc395c090e27926.png If you are building/vibing on Nostr, this is for you. We are shipping CVMI alongside a complete skill set that makes ContextVM development delightful. The skills cover the entire stack: protocol fundamentals, architecture concepts, client and server development, troubleshooting, SDK internals, and production deployment. Each skill includes working templates, reference documentation, and patterns distilled from real Nostr development. Everything you need to do is `npx cvmi`. Or grab the skills through CVMI with `npx cvmi add`, or through the skills CLI with `npx skills add contextvm/cvmi`. These commands will show you the list of available skills and guide you through their installation for any coding platform. Cool, right? You can also pick exactly what you need `npx cvmi add --skill overview` CVMI starts as a skills manager, but we are building toward the unified toolkit that ContextVM deserves. One CLI for skills, server interaction, dev tools, the works. For builders who want to ship. The skills are here now. https://github.com/contextvm/cvmi If you don't know what skills are: https://agentskills.io/home #ContextVM #Nostr #MCP #buildinpublic npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM As based as super 🔥 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Are you ready for what is comming? 👀 #nevent1q…xn88 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM This is a quite necessary project. The fact that it is fully based on permissionless technology that you can consume, run, and self-host makes it even more powerful 🚀 #nevent1q…2cqs npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM We're cooking up some very cool new features for Relatr and decided it's better to channel all communication and news through its pubkey (the same one used to address the server). One key, countless possibilities. Stay tuned, amazing news incoming 🍳 #nevent1q…72h5 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM 🚀 We're excited to announce the 0.2.x release series of the ContextVM SDK, a significant milestone focused on reliability, code quality, and architectural maturity. This release transforms ContextVM from a functional prototype into a hardened foundation ready for long-running servers. As well this release maintains backward compatibility while setting the stage for future enhancements. - What This Release Means for You and Key Improvements If you're running ContextVM servers that need to stay always up handling continuous client connections, this release is essential. We've eliminated critical failure modes, plugged memory leaks, and restructured the codebase to support future growth without accumulating technical debt. 🛡 Half-Open Connection Hardening (Applesauce Relay Handler) One of the most significant reliability improvement addresses how we handle half-open connections, those frustrating scenarios where a relay appears connected but silently stops responding. What we fixed: - Implemented proactive liveness checks that detect unresponsive relays before they impact clients - Added automatic relay pool rebuilding with subscription replay, so clients don't even notice when a relay hiccups - Enhanced error handling ensures cleanup happens correctly even when relays misbehave Why it matters: Previously, a relay could appear healthy while silently dropping messages, leading to client timeouts. Now, ContextVM detects these conditions and automatically recovers. 🧹 Memory Leak Elimination Through careful analysis, we identified and eliminated several memory leaks that could affect long-running servers, the result: Servers can now run indefinitely without requiring restarts to reclaim memory. 🏗 Transport Modularization We've completely restructured the Nostr transport layer from a monolithic design into focused, composable modules Why this matters: This modularization achieves several goals simultaneously: - Code clarity: Each module has a single, well-defined responsibility - Testability: Modules can be tested in isolation with clear boundaries - Extensibility: New features can be added without touching unrelated code - Performance: O(N) operations reduced to O(1) where it counts This architecture will let us add the new features that are coming without cluttering the core logic. 📦 Simple Pool Deprecation Notice We're officially deprecating the `SimpleRelayPool` implementation. The `ApplesauceRelayPool` is now our recommended and fully-supported relay pool. If you're still using `SimpleRelayPool`, we recommend migrating to `ApplesauceRelayPool` for production deployments. 🔧 Additional Reliability Improvements - Graceful shutdown: Task queue now waits for running tasks to complete with configurable timeout - Timeout handling: Added timeout wrappers to prevent hanging network operations - Error handling: Enhanced error context logging with stack traces and relevant identifiers - Session eviction protection: Prevent edge cases under heavy load removing sessions with active routes, eliminating data loss during in-flight requests - Dependency updates: Updated to latest stable versions of key dependencies 🧑💻 For Developers This release maintains backward compatibility while setting the stage for future enhancements. The modular architecture means you can expect: - Easier debugging: Clear separation makes issues easier to isolate - Faster iteration: New features can be developed without touching existing code - Better testing: Comprehensive test coverage for each module - Stable APIs: Internal refactoring won't break your integrations 🔭 Looking Ahead The 0.2.x series establishes the foundation for upcoming features that are already in our pipeline: - [CEP-15] Common Tool Schemas - [CEP-8] Capability Pricing And Payment Flow - CEP-XX Server reviews - CEP-XX Server profile metadata and socials - CEP-XX Ephemeral gift wraps With this hardened foundation, we can add these capabilities without coupling or cluttering the codebase. - Upgrade Recommendation All production deployments should upgrade to 0.2.x. The reliability improvements, especially around relay handling and memory management, are critical for long-running servers. The modular architecture also makes future upgrades smoother. As always, we welcome your feedback and contributions. The ContextVM project thrives on community input, and this release reflects many lessons learned from real-world usage. Happy building! 🚀 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Yes, the tricky part is replay attacks. But maybe you can mitigate them using something like NWT https://github.com/pippellia-btc/nostr-web-tokens npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM We think we found a good candidate for our Relatr plugin validation system 👀 https://elo-lang.org/ It would probably allow us to create a very portable, shareable, and customizable plugin design, so people can create them and share them, just plug them into their Relatr instances, and customize their algorithms as they prefer. More to come in the next releases, stay tuned 🚀 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Right, that's a good question. There are different factors at play to mitigate that issue. First, we implemented a preserve stale cache policy in case of failure when requesting a rank. This ensures that users who previously had their rank computed successfully maintain their rank, avoiding transient issues due to spam conditions. This is not a perfect solution, and we still have some edge cases to cover. However, addressing these will require, as you mentioned, some kind of prioritization, which is a more complex task. For now, the more harmful edge cases are covered, and we will continue to think about this to potentially find a better solution. npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Hey! Thanks for sharing. Yes, it's an interesting approach, but I have some questions about how Privacy Pass tokens have value or are accepted by different relays. There should be some notion of consensus around the entity emitting these tokens, right? Like bonds, in the case where the issues or the Privacy Pass tokens vouch with its reputation, and that's what makes the PP tokens be accepted. So relay operators should recognize that reputation and allow these tokens to be accepted. How do you imagine this relationship to work? I'm a PP token issuer, and my mission is to grow reputation among relay operators so they accept my PP tokens? On the other hand, I think that Cashu might be the best fit for this use case since it already can handle some spending conditions like time locks, pay-to-PK, refund paths, and as far as I know, there are some people working to bring zk-proofs to create arbitrary spending conditions. Do you imagine mints and PP token issuers being the same entity, or two separate things, like the mint is used as a 'third party' issuer of Cashu tokens, enforcing spending conditions, and the PP token issuer just issuing PP tokens based on the Cashu tokens you present? I think that other people who might be interested in this conversation are @npub12rv…85vg and @npub1klk…x3vt npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Yes, I think it is correct to say that, anyone can write if the bucket assigned to their pubkey is large enough. The publishing capability changes depending on the rank, users with high ranks get more events to publish per day. On the other hand, new npubs can only write one event per day, which must be of kind 1 and without urls in the content. If the reply guy spins new npubs each time, the relay will likely consume them. However, the key point is that this is the current policy we have on the wotr.relayr.xyz instance. You can run your own and tweak it to configure different thresholds and also to enable or disable publishing for users with no rank. You could also disallow anyone from writing below a certain threshold. Together with the ability to self-host your own relayr instance, makes it very customizable to each person's needs and communities. Also, remember that this is an experiment we are running, and so far, it is working great npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM With this release, Relatr can now function as a TA provider, publishing ranks directly to relays. If you enable a Relatr server to be in your trusted list of providers, it will display ranks in compatible clients like Amethyst. To do this, simply go to https://relatr.xyz/ta and add a server to your list. Once added, you can enable the server to keep your rank up to date. The process is quite simple and straightforward. I would love to receive any feedback you might have 👍 #nevent1q…7gpx npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Hey, that's very interesting. I'm curious to hear more about your approach. Are you basing your solution on something like Cashu, or just LN with hold invoices? In our case, the solution is much simpler. We use rate limiting to control the load between the relay and the upstream rank provider (Relatr), basically to avoid possible DDoS and load attacks. Initially, we based this rate limiting on IPs, but we noticed that it was penalizing legit users behind VPNs or IP groups. So now, we base the rate limiting on the number of requests per second that the relay can send to the rank provider. It's simpler, more effective, and users are not penalized for being behind an IP group npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Roughly 16 users, we are observing common relays to determine how many people have added wss://wotr.relatr.xyz to their relays list. To do this we are using nak with the following command, you can check it on your end as well. ''' nak req -t r=wss://wotr.relatr.xyz -k 10002 wss://relay.damus.io wss://nos.lol wss://relay.primal.net wss://bitcoiner.social wss://search.nos.today/ wss://nostr.mom/ wss://relay.snort.social/ wss://discovery.eu.nostria.app/ wss://nostr.wine wss://eden.nostr.land | wc -l ''' npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Well, the relay is not actively fetching posts from other relays. However, since the relay is open, anyone can broadcast events to it. Some clients will do this when users who have the relay in their list interact with someone else. Therefore, by simply having the relay configured in your list, some clients will rebroadcast certain events. In the end, events can arrive through different means, but there is no active fetching involved npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM In today's release of wotrlay, we included special treatment for these kinds plus 0, 3, and 10002s. This allows them to be accepted without rate limits, also, the current version of relatr already enables you to set extra relays for publishing the TA events it generates, which are 30382s. We have already configured our public instance to publish to your relay and the wotrlay instance we are running as well 🦾 plus user outboxes ofc npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM 🚀 wotrlay v0.2.x is here As wotrlay matures, we've identified and addressed edge cases where transient issues could temporarily affect user buckets. Timeouts, rate limits, and network conditions sometimes caused the relay to handle cache refreshes less gracefully than intended, which could result in users being downgraded when they shouldn't have been. v0.2.x resolves this. The relay now preserves cached rank data when encountering these edge cases, ensuring users can continue publishing without issues. We've also replaced IP-based rate limiting for rank lookups with an approach that no longer penalizes users behind VPNs, and improved response handling to be more robust under real-world conditions. We've also added a special condition for event kinds 0, 3, 10002, 10040, and 30382, which are now always accepted and are not affected by the rate limiting of the bucket algorithm. For operators: just upgrade. For users: your posting ability now stays consistent regardless of previously unhandled edge cases. Docker builds are leaner and faster too. Building reliable WoT infrastructure means continuously observing, fixing, and improving. v0.2.x represents that ongoing commitment 🫂 #nostr #wotrlay #wot npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Valid nip 05 addresses like [email protected] npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Fully free and open source. You can find it and use it at relatr.xyz , you can also integrate it in your client. npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM The only one 😎... for now at least #nevent1q…qksw npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Last week, when we introduced Wotrlay, we mentioned in our blog post that we were writing an article about how to call a CVM server 'The Nostr Way.' This new article is now available. In it, we explore the current landscape of 'RPC-nostr' with a technical approach, comparing DVMs and CVMs, and demonstrating how to call CVM servers without SDKs or other dependencies, just events, relays, and signatures. We hope you enjoy reading it and that it encourages you to build on top of ContextVM. If you have any doubts or need clarification, please let us know in the comments #naddr1qv…ht8w npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM 🎇 It has been an incredible year for ContextVM. 2025 marked the birth of this project, initially known as DVMCP, which we launched shortly after the MCP protocol was introduced. This year has been a whirlwind of experimentation, creation, innovation, new possibilities, and loads of fun. Developers are discovering a transformative way to work with ContextVM, thanks to its unique features, ease of use, expressiveness, flexibility, standardization, and seamless integration with new paradigms like AI, all while remaining fully permissionless and open source 🚀 Product managers and those looking to integrate their services on Nostr to leverage its benefits are finding that ContextVM offers a powerful way to architect their products and solutions. By using relays as message buses, you can decouple the business logic of your application from Nostr specific conventions while still benefiting from Nostr's security and censorship resistance. You can seamlessly integrate ContextVM with your existing stack without needing to rewrite everything to make it work over Nostr. This opens up possibilities for unified APIs, geographically distributed, composable, unstoppable apps, and more, the possibilities are endless and yet to be discovered. 2026 promises to be another amazing year. ContextVM is a community driven, fully open-source project that anyone can use, contribute to, or fork. Our vision is one where this technology liberates individuals, communities, businesses, and other entities from the control of gatekeepers and power structures. The future we envision is permissionless and full of collaboration between free individuals, positive-sum games, where the right to speak, associate, and the right to compute are equally important and transcendental. We have a lot of work ahead, and that makes us really happy 🦾 Powerful features and specifications are already in development, promising even more possibilities, integrations, and capabilities. We hope that 2026 will see more people adopting Nostr, Bitcoin, CVM, and other freedom technologies, bringing and solving problems through this lens. Without further ado, thank you to everyone who showed interest, contributed, integrated, and benefited from this project. We wish you all a great start to the new year 💛 Let's continue building! npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Thanks! I appreciate that you like what we are doing here. It is organic in the sense that any client can connect and subscribe or publish, as there is no NIP-42 auth requirement. Users don't need to sign challenges, and clients don't need to handle auth. However, writing is rate limited by the author signing the event and the bucket algo npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Not exactly, it's a WoT relay using relatr as an 'oracle' and a bucket algorithm for rate limiting and publishing policies. It is intentionally built without using NIP-42, all the accounting is based on the authors of the event. We recently published an article about this, you can read it here: https://contextvm.org/blog/wotrlay-moderation-as-a-bucket or as a long form. Do you have some feedback? We are just exploring this idea, and it's working fairly well. I haven't seen anything inappropriate in the feed npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Hey! #nevent1q…cqwh npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Just released! 🚀 Docker deployment of Wotrlay is now available. You can run this WoT relay using a single command 'docker run ghcr.io/contextvm/wotrlay:latest' You can also find more options and configurations in the docker documentation https://github.com/ContextVM/wotrlay/blob/master/DOCKER.md . We have just deployed using this at wss://wotr.relatr.xyz 🔥 #wot #wotrlay npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM You can add it to Amethyst as a public outbox or inbox. You can also set it for other categories, but these should be sufficient. Yes, Amethyst likely connects and publishes to it when replying to this note or if you follow a user who has the relay set in their relay list. I hope this clarifies things 👍 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Amazing! thanks :) npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM After running a public instance of Wotrlay for a couple of days already (wss://wotr.relatr.xyz), we discovered a fascinating synergy between Wotrlay and Relatr 👀 They complement each other perfectly. As more people use or include this relay in their lists, their interactions on Nostr organically prompt Relatr to validate profiles that might not already be in its database. This process helps Relatr validate and rank these new profiles, increasing the number of relations in its view of the network. Consequently, the more people who use our Wotrlay instance (or their own), the fewer blind spots a Relatr instance will have, creating a perfect tandem of openness and organic discovery. This synergy was not something we anticipated when we first conceived Wotrlay, but it works beautifully 💛 If you'd like to help us test this further, please add wss://wotr.relatr.xyz to your relay list. Soon, we will provide more options and documentation to make deploying Wotrlay easier, so running your own instance should be fairly straightforward. Relatr is already deployable in one click in umbrel through @npub1ye5…knpr 's community store and also is available as docker image npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Currently it is using the public instance of relatr which uses the @npub1der…xzpc 's pubkey as source. npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM I don't understand what you mean exactly. In this project, spam is mitigated by each one's bucket. By NPS, do you mean Net Promoter Score? npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM It is more a classic bucket, it adds tokens at a constant rate until capacity is reached. Requests consume tokens when available. There is a full analysis of the current implementation here https://github.com/ContextVM/wotrlay/blob/master/wotrlay-v2-analysis.md . Thanks for the suggestion anyways! npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM What if relay moderation looks like a bucket?🪣 We are exploring exactly that with Wotrlay, a new WoT relay we are introducing today! It treats moderation as resource allocation, where the web of trust determines your publishing capacity. Wotrlay gives each public key a 'bucket' of publishing capacity that refills at different rates based on their social graph rank. Low-rank identities can still participate, but at a measured pace. Higher-rank identities gain more capacity organically through network participation, no manual approval needed. Try the public instance at wss://wotr.relatr.xyz This proof-of-concept integrates Relatr for dynamic ranking and is built in Go using the great Rely framework from @npub176p…vgup. Kudos to him for it and the WoT example that inspired this project. If you want to dig deeper, we've published an article that walks through the bucket model, progressive rate limiting, newcomer onboarding, and why this approach avoids auth friction while keeping the relay permissionless in practice. All the code for this project, is open source and is made to be run by anyone 💛 https://www.contextvm.org/blog/wotrlay-moderation-as-a-bucket check out the code and more details at: https://github.com/ContextVM/wotrlay #naddr1qv…5adq npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Happy Christmas! Thank you to everyone for accompanying us this year 💛 We have a little, yet special gift for you. We revamped our website. It was functional, but lacked content and a better design. Now you can find much more information, contact details, and all the links to navigate the ContextVM ecosystem, learn more, build, or participate. We take advantage of this opportunity to also make a slight modification to our logo. We hope you like all of this. We want to make ContextVM a great ecosystem of freedom tech where everyone feels welcome and supported, and part of it is to make it beautiful. Committed to open source. Let's keep building! 🫡 Visit: https://www.contextvm.org/ If you have any feedback, we would love to hear it! https://image.nostr.build/fa63b7404873b76ca6775438228aa2b9c0256d60bfb55cba7294fa0bd968f6ce.png npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM 🚀 CVM SDK v0.1.47 has landed! 🌟 This release packs a punch with improved reconnection handling. Previously, if a relay used by a client and a server experienced a prolonged outage (minutes or hours), the apple-sauce relay handler would fail to publish new messages after the relay came back online. With this update, clients and servers automatically handle this, resubscribe and resume event sending as soon as the relay is back online. Server operators, don't miss out, update to the latest SDK version for a smoother, more reliable experience. npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Performing some maintenance on our public relatr instance, sorry for the inconvenience. npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM @npub1jss…fmzy is Super Based 🌩 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM BIG PLANS! #nevent1q…apnv npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM 🎇The awesome CVM repo is growing! Three new servers have been added in the past few days. They are: - Nanalytics (https://github.com/humansinstitute/nanalytics): Website analytics like your Nanna used to bake. Over Nostr, privacy-preserving, simple analytics, easy to host. - Earthly Geo Server (https://github.com/zeSchlausKwab/earthly/tree/master/contextvm): A server focused on geocoding and reverse geocoding via OpenStreetMap Nominatim. Features search_location for forward geocoding and reverse_lookup for coordinate-based place metadata. - Wavefunc Music Metadata Server (https://github.com/zeSchlausKwab/wavefunc/tree/main/contextvm): A server for radio stream metadata extraction and MusicBrainz lookups. Features extract_stream_metadata for Icecast/Shoutcast streams and musicbrainz_search for detailed track information. The Geo Server and the Music Metadata Server are also public and are already integrated into earthly.city and wavefunc.live. They are accessible and can be used through the Contextvm website as well. npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM 🚀ContextVM SDK version 0.1.41 is now available with significant improvements to transport integration, relay handling, and async architecture. Key new features include optional client public key injection in MCP requests, enabling better server integration and authentication capabilities. This feature, documented in CEP-16, allows server transports to inject client public keys into request metadata when configured with `injectClientPubkey: true`. Learn more at https://docs.contextvm.org/spec/ceps/informational/cep-16/ The release also brings robust relay reconnection for Nostr server transport, fixing relay restart issues in ApplesauceRelayPool with comprehensive reconnection tests. This ensures more robust operations in long lived servers. Performance improvements come from async architecture enhancements including a TaskQueue utility for non-blocking event processing, parallel transport startup operations, LRU caching for session management, optimized authorization lookups, and improved notification broadcasting with backpressure handling. These changes deliver better integration between transports and underlying servers, more reliable relay handling, and enhanced performance through optimized async operations. npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM 🚀 Exciting news! We're working on a new CEP for ContextVM: Common Tool Schemas! 🌐 https://github.com/ContextVM/contextvm-docs/issues/15 Imagine a marketplace where users can choose the best server for their specific needs, without being locked into a single provider. That's the vision behind our new CEP! With Common Tool Schemas, we're enabling interoperability between clients, allowing users to discover equivalent services, switch providers seamlessly, and compare offerings based on quality, cost, or trust. This is the original idea behind DVMs, where users announce a desired output and service providers compete to fulfill the job requirement in the best way possible. 🔧 Key features: - Reference server pattern for canonical tool schemas - RFC 8785 JCS for deterministic hashing - CEP-6 announcements for discovery We'd love to hear your thoughts and opinions on this proposal! Share your feedback and help us shape the future of ContextVM. You can just share your thoughts in the comments of this note, or in the issue #ContextVM #CEP npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Veo que ya has encontrado algo de informacion, no dudes en preguntar! npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Today, we are releasing Relatr v0.1, featuring significant architectural improvements powered by the new Nostr Social Duck library. This update addresses critical scaling challenges and makes running your own trust engine more accessible than ever. We have written an article that delves into the details of this new release and provides other useful resources. We hope you enjoy it as much as we do 💛 #naddr1qv…qanw npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM In Relatr, we use the relations within the following list as well, aka social graph distance. The difference is that we focus on a trust model that always starts from the perspective of a source pubkey. This is because in decentralized networks like Nostr, there is no global state or a way to compute a global trust score. Our approach is to embrace this and accept that trust is a social phenomenon that occurs between the relation of two profiles: a source and a target. This means that what might be trustworthy for you may not be for me, and this is the only feasible approach we found that might work, as the idea is that everyone can run their own Relatr instance setting yourselve as the source. In the other hand, the insight that led us to choose this approach is that if you trust the source pubkey from an specific Relatr instance, you can in some way extend your trust to what the source pubkey trusts. The analogy would be: if I trust you, I can trust what you trust. So, even though the trust is always computed from a source pubkey, if you trust the source, the score would still be meaningful for you. There is more information on the Relatr.xyz page in the About section. We also wrote an article when we introduced Relatr, going through the rationale behind our approach. Hope this helps! npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Hey! We just answered this a moment ago. Just keep in mind that Relatr is about relative trust score, so it's going to always be determined by the source pubkey. The idea is that the actual value of the trust score doesn't matter that much. It doesn't matter if you have 100, 95, or 50. The important part is that it's easy to determine if there are impersonators of you, so it's easy to determine who is the impersonator or the real one. #nevent1q…uu65 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM De nada ;) npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM This is another awesome example of the possibilities that bring contextvm. Easily deployable analytics for your page, with no more dependencies on evil corporations that harvest your data. Reclaim your sovereignty, and have fun along the way, it has never been this easy #nevent1q…8wrd npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM This is quite cool! Why limit yourself to a single WoT provider when you can use multiple and present the results? The more perspectives, the better. After testing Profilestr, we noticed that Profilestr, Vertex, and Relatr tend to output very similar scores, with only slight variations. This indicates that they are quite solid, even with different approaches to compute the trust scores. Relatr and Vertex can be used without leaving the nostr. Relatr uses CVM, Vertex uses a DVM-like API, Profilestr offers a REST API endpoint, so there's no excuse not to integrate some of these options into your client. Fight spam, protect your users from impersonators, and increase the value. #nevent1q…jdwt npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Further considering the pull vs. request/response (req/res) models, it is true that using already published trust assertion data can be convenient and easy to query with appropriate filters. However, one issue is that not all profiles are scored. For instance, a service provider might start publishing a large number of trust assertions, but the set will never be fully complete because it is dynamic, and it's impossible to anticipate which users need to be scored. Consider the example of a nostr feed we discussed: each profile should be complemented with trusted assertions. But what if one of the profiles in the feed doesn't have any trust assertion attached? In that case, the only solution is to request the trust computation from the service provider. We believe this might be the right balance. Relatr could publish trust assertion events for profiles that have already been computed and still rely on the req/res flow. In this scenario, a client could operate by first fetching already published trust assertions, and if a profile lacks one, request it. The advantage of this approach is that it can be perfectly integrated with the current Relatr model, as for each request, an event can be published. This way, client developers can choose to just fetch, fetch and request, or just request trust assertions. npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM Are you developing a client and want to add search capabilities and WOT scores? You can do it easily by using CtxCn to set up a full Relatr client with minimal hassle. Here’s how: 1. Navigate to your project (it should be in TypeScript) and execute: ```sh npx @contextvm/ctxcn init ``` This command sets up CtxCn in your project. It comes with sensible defaults, so you won't need to configure much. 2. Next, execute: ```sh npx @contextvm/ctxcn add 750682303c9f0ddad75941b49edc9d46e3ed306b9ee3335338a21a3e404c5fa3 ``` This public key corresponds to the default instance of Relatr we are running, which is available at https://relatr.xyz . If you are running your own instance or want to use a different one, simply replace the public key with the appropriate one. That's it! After executing the 'add' command, you will have a fully typed Relatr client in your code, that you can implement out of the box, you own it, and you can modify it to fit your needs. The generated client will also contain comments, making it clear what each method does, whether you or your LLM are reading them. You can search profiles easily with code like: ```ts const searchResults = await relatr.SearchProfiles({ query: "jack" }); ``` This setup allows you to create a web app, a CLI app, or any kind of service in TypeScript. It works in browsers and natively. We hope you enjoy this. The current service we are running is free to use, so if you find this useful, please consider supporting our work. 💛 npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm ContextVM So pumped to introduce Realtr, our shot at decentralized trust and Web of Trust. Trust is not an absolute quantity but a deeply personal and contextual phenomenon. Discover more about it at https://relatr.xyz. We are currently running a public instance, which is the default on the site. With it, you can search for and calculate trust for given public keys. Still in the early stages, but it's currently quite solid. Looking forward to hearing your thoughts and building this together! blog: https://www.contextvm.org/blog/yItckCkpmTq-owE5AgYtq #naddr1qv…vrfs