NostrDVM is a free, MIT-licensed Python framework for developers who want to build or run Nostr NIP-90 Data Vending Machines, usually called DVMs. A DVM is a service that accepts a job request over the Nostr network, performs some work and returns the result, sometimes in exchange for a payment. The project suits Python developers and hobbyists who want to host their own DVMs instead of relying on a hosted service.
NostrDVM is not a point-and-click desktop app. You work with a project folder, a configuration file and a terminal. The last code update landed in September 2026, so the project is still in active development. Windows is mentioned in the documentation, but expect to do some setup yourself and test carefully before running anything important.
What Is a Data Vending Machine on Nostr?
A Data Vending Machine, or DVM, is a service that answers requests on the Nostr network. Under NIP-90, a customer publishes a job request to one or more relays. A DVM listens for requests it can handle, processes the input and publishes a result that the customer can read.
The model is simple but flexible. A DVM might summarize a long post, transcribe audio, translate text or run a search. Because requests and results travel as ordinary Nostr events, any client that understands the protocol can take part. Nobody needs a central server controlled by a single company to accept the job.
This open design is why developers are interested in frameworks like NostrDVM. Instead of writing the relay handling, event signing and discovery logic from zero, you start from shared code and focus on the actual task your service performs.
Who Is NostrDVM For?
NostrDVM is aimed at developers who already write Python and want to publish a service on Nostr. A typical user might have a script that generates images, cleans up text or runs a small AI model. Wrapping that script in a DVM lets other Nostr users send it requests.
Hobbyists running their own relay-connected services also fit the profile. If you want to experiment with decentralized services without signing up for a platform, the framework gives you a practical starting point. You control the code, the keys and the place where the service runs.
The tool is less suitable for people who expect a graphical interface or a finished consumer app. It assumes you are comfortable editing configuration files, activating environments and reading logs when something fails.
How Relays, Keys and Payments Fit Together
Three parts of a DVM setup work together. Keys identify your service and sign the events it publishes. Relays carry job requests and results between customers and providers. Payments, when you use them, connect the work to money through Lightning.
Suppose a customer sends a request to a relay that your DVM watches. Your service reads the request, performs the task and posts the result. If the job requires payment, the customer pays an invoice or zaps your Lightning address before the result is delivered or shortly after.
Understanding this flow helps you debug problems. If jobs never arrive, check your relay connection first. If payments fail, look at the wallet configuration. Each layer has its own failure modes, and separating them makes troubleshooting faster.
Key features
Automatic key and tag setup
Lightning addresses through LNbits
Isolated Python environment
Supported coins
The documentation names the Lightning Network and Nostr as the networks the framework works with. Lightning payments are handled through LNbits when that integration is configured. Nostr is the messaging layer where requests, results and discovery tags are exchanged.
How to install NostrDVM on Windows
- 1
Download the project
Download only from the official website or GitHub. The source code is hosted at github.com/believethehype/nostrdvm, and the Releases page is the best place to pick a tagged version. Save the project to a folder you can easily reach from the terminal, such as a folder in your user directory.
- 2
Create your environment file
Find the example environment file in the project and copy it to a new file named .env in the main folder. Open the new file in a text editor and fill in the values for your setup. The framework uses this file to create keys, NIP-89 tags and, if you use LNbits, Lightning addresses.
- 3
Create and activate a virtual environment
Open a terminal in the project folder and create a Python virtual environment named .venv. Activate it on Windows by typing .venv\Scripts\activate. When the prompt shows the environment name, any packages you install stay inside this project and do not affect the rest of your system.
-
Install dependencies and start a DVM
Install the project dependencies as described in the repository's README, then start one of the example DVMs included with the framework. Watch the terminal output on first run. It shows whether the keys and tags were created and whether the service connected to its relays.
System requirements
- Windows, as mentioned in the project documentation; test your setup before running a service publicly
- A working internet connection with DNS resolution and access to Nostr relays, which DVMs need to receive jobs and publish results
- An LNbits instance with its admin key and host configured, only if you want Lightning payments and zappable addresses
How to use NostrDVM
NostrDVM works best when you start small. Run one example service, confirm that it connects to relays and then add your own logic. Doing it in this order makes it easier to tell configuration problems from code problems.
- Open the .env file in the main project folder and fill in the values for your setup, including relay addresses if you want to change the defaults.
- Activate the virtual environment by typing .venv\Scripts\activate in the terminal.
- Start one of the example DVMs from the terminal and read the startup messages carefully.
- Confirm that the framework created keys and NIP-89 tags for your service. Keep a copy of the generated values in a secure place.
- Send a test job from a Nostr client that supports NIP-90 requests, or from a simple script you write yourself.
- Check the terminal output for errors after each job. Failed requests usually point to a relay, input format or configuration issue.
- If you plan to accept payments, set up LNbits and test a small Lightning payment before opening the service to other users.
- Once everything works, replace the example logic with your own task and repeat the tests.
Pros & cons
- Free and MIT-licensed, so you can use, modify and study the code
- Automates key creation and NIP-89 tag setup
- Optional Lightning addresses through LNbits for zappable services
- Written in Python, which many developers already know
- Recent code update in September 2026 shows active maintenance
- Docker is listed among supported platforms for containerized deployment
- Built for developers and has no graphical interface
- Windows support is documented, but you should verify it on your own machine
- Payment features require LNbits configuration and careful handling of admin keys
- Setup involves editing configuration files and using the terminal
- Some optional features depend on specific library versions, which can complicate upgrades
Is NostrDVM safe?
NostrDVM creates keys and can connect to a Lightning wallet, so treat it as software that handles money. Download the project only from the official GitHub repository or its Releases page. If a release provides a SHA-256 checksum or a signature, verify the file before you run it. Compare the hash with the published value and do not proceed if they differ.
Keep your .env file private. It can contain LNbits admin credentials, and anyone with those values may control your wallet. Never enter a seed phrase on a third-party website, and never share wallet keys with anyone who asks for them. Review the code you run, especially if you modify example services, and test with small amounts first. Before deploying, check the latest version on the official website.
- Official source only. Download from github.com/believethehype/nostrdvm. Ignore ads and lookalike domains.
- Check the SHA-256. Compare the installer hash with the value the developer publishes before running it.
- Never share your seed phrase. No developer, support agent or website — including CryptApps — will ever ask for it.
Alternatives
Most Nostr software you may have seen is a client, meaning an app for reading, posting and following people. Amethyst, Vega, Nostr console client and Notedeck fall into this group, though they differ in platform and design. They are the tools you use to interact with Nostr as a person.
NostrDVM is a different kind of tool. It is a framework for building services that run on Nostr and respond to job requests. You would use it to publish an automated service, not to browse your feed. If you want to test a DVM you have built, a client such as Amethyst or Vega can send requests and display the results.
In practice, the two categories complement each other. A developer might use NostrDVM to run a service and a Nostr client to act as the customer during testing.
Specifications
- Price
- Free
- Type
- Open source
- License
- MIT
- Latest version
- 1.1.8
- Last update
- 12 Sept 2026
- Windows support
- Unverified (Windows mentioned in docs)
- Source code
- github.com/believethehype/nostrdvm
Frequently asked questions
NostrDVM is used to build and run Nostr NIP-90 Data Vending Machines in Python. A DVM listens for job requests on Nostr relays, processes them and returns results. Developers use the framework to publish services such as text processing or other automated tasks without writing all the networking code themselves.
Yes. NostrDVM is free and released under the MIT license, which allows you to use, modify and redistribute the code under its terms. Any costs you encounter will come from your own infrastructure, such as hosting or running a Lightning wallet through LNbits.
The project documentation mentions Windows, and the framework includes a Windows activation command for its virtual environment. However, support has not been broadly tested on every Windows setup. Plan to run a test DVM locally and check relay connections before you rely on it for a public service.
The code is open source, so you can review it, and it should only be downloaded from the official GitHub repository. Verify a SHA-256 checksum or signature when one is provided. Keep your .env file and wallet credentials private, and never enter a seed phrase on third-party websites.
Copy the included example environment file, rename the copy to .env and place it in the main project folder. Open it in a text editor and fill in the values for your setup. The framework then uses it to generate keys, NIP-89 tags and, if you use LNbits, Lightning addresses for each DVM.
Yes, through LNbits. When the integration is configured, the framework can create zappable NIP-57 Lightning addresses for your DVMs. This lets users send zaps for your services. You need an LNbits instance with the correct admin key and host settings before payments will work.
Verdict
NostrDVM for Windows suits Python developers who want to publish their own Nostr Data Vending Machines. It is free, MIT-licensed and actively maintained, and it automates the key and tag work that would otherwise slow down a first project. It is not a consumer app, and the Windows path needs your own testing. If you prefer to browse Nostr rather than build services, a client may be a better fit. If you are ready to write a little code and handle wallet settings carefully, NostrDVM is a sensible starting point.