Granary is a free, open-source Python library for developers, bloggers and community operators who need Nostr content in the formats other platforms read. It takes content from Nostr and converts it into feeds and structured data such as RSS, Atom, JSON Feed, ActivityStreams, microformats2 and ActivityPub, so the same material can reach feed readers, fediverse servers and Bluesky-compatible tools.
The project is open source and free, and it sits in the Nostr and decentralized social category. The current release is v12.0, and the most recent code update is dated October 30, 2026. The project documentation mentions Windows, but Granary is a code library rather than a standard Windows application, so on a PC you run it through Python. If you want a visual app for posting or reading Nostr, the client programs listed below are a better match.
What Is Granary and How Does Conversion Work?
Every social network stores posts in its own structure. A post has an author, a timestamp, text, attachments and sometimes references to a parent post or a reaction. A converter reads the source record, pulls out those pieces, and writes them into the structure a target format expects.
In practice, this means a Nostr event can become an Atom entry, an RSS item or an ActivityStreams object. Each target has its own rules for dates, identifiers and media, so good converters handle edge cases such as missing fields rather than failing. Granary's job is this translation step, and it leaves publishing and hosting to you.
The result is only as good as the source data. Fields that exist in one network but have no counterpart in another may be dropped or simplified. Testing a few representative posts before you convert a full archive is a sensible habit.
Who Is Granary For?
Granary fits people who already work with code or publishing workflows. A common case is a blogger who wants Nostr posts to appear on a personal site as a feed. Another is an IndieWeb enthusiast who wants microformats2 markup for posts that originate on Nostr.
Developers building bridges between networks are the second main audience. Someone maintaining a service that mirrors content between the fediverse, Bluesky and Nostr can use a single library instead of writing three converters. Researchers comparing decentralized protocols can also use it to examine how the same post looks in different schemas.
It is less suited to readers who want an everyday app. Without a graphical interface, you will work with commands, code or the web demo. That trade-off is intentional for a library, and it is worth understanding before you invest time in a project.
Why Convert Nostr Posts into Feed Formats?
Nostr is built around relays and signed events, which is powerful but not what most readers expect. Feed formats such as RSS and Atom are familiar to anyone who has subscribed to a blog. Publishing Nostr content in those formats lets people follow it with tools they already use.
Interoperability is the other reason. Fediverse servers speak ActivityPub, while Bluesky uses the AT Protocol. A conversion layer lets the same material travel between these worlds without requiring every reader to adopt a new protocol. This is one of the core ideas of decentralized social software: the content should not be trapped in a single app.
There are trade-offs. A converted post may lose details that only exist on the original network, such as certain interaction types. Reviewing the output before you publish it at scale helps you catch these gaps early.
Developer Notes on Recent Changes
Recent releases include several changes that matter if you already use the library in a project:
- Set createdat to the current time when converting. Some relays require it, so the input object's published value is no longer used for this purpose.
- Always include the alt element in imeta tags for images and videos, even when it is blank. NIP-92 requires at least one field besides url.
- The create method now signs activities before sending them to relays. You must set the privkey member attribute.
- A new raise keyword argument raises ValueError when a required object, such as the target of a like or repost, cannot be fetched via ATProto.
- For fediverse actors with the unlisted audience, add misskey requireSigninToViewContents, which mirrors Bluesky's no-unauthenticated label.
Test these changes in a staging environment before updating production code.
Key features
Nostr input with broad NIP support
Atom, RSS 2.0 and JSON Feed output
ActivityStreams and ActivityPub output
Microformats2 HTML for the IndieWeb
Bluesky and AT Protocol support
Web API, demo app and PyPI package
Supported coins
The project documentation names Dash and Nostr as the coins and networks it relates to. Granary is built around content conversion rather than wallets or transactions, so its connection to the crypto space runs through decentralized networks like Nostr. Treat these references as context rather than a list of supported assets.
How to install Granary on Windows
- 1
Check your Python environment
Granary is a Python package, so you need a working Python installation with pip, the package installer included with most Python distributions. Open PowerShell or Command Prompt and confirm that pip runs before you continue.
- 2
Download from the official source
Get the package from PyPI or the source code in the official GitHub repository at github.com/snarfed/granary. Download only from the official website or GitHub, and avoid mirror sites, forum uploads and bundled installers.
- 3
Verify the file
Compare the SHA-256 checksum of the downloaded file with the value published on the release page, and check signatures where they are provided. If the checksum does not match, stop and download again from the official source.
-
Install with pip
Run pip install granary in your terminal. Pip fetches the package and its dependencies. To use the REST API or the demo app locally, follow the setup steps in the project's reference docs.
System requirements
- Python with pip available in PowerShell or Command Prompt
- A Windows PC, as mentioned in the project documentation
- An internet connection to fetch the package from PyPI
How to use Granary
Granary works best when you start small and test before automating. Once it is installed, a typical workflow looks like this:
- Install the package with pip install granary and confirm that it imports in a Python session.
- Pick a single Nostr event or post that you know well, so you can judge the output.
- Choose the target format you need, such as RSS 2.0, Atom, JSON Feed, ActivityPub or Bluesky.
- Run the conversion on that one item, either in code or through the web demo at granary.io.
- Compare the output with the original post, checking the author, time, text and media.
- Once the result looks right, add the conversion to your script or site build, and schedule it to run on the content you publish.
- Keep a copy of the converted output so you can roll back if a later release changes how fields are mapped.
Pros & cons
- Free and open source
- Converts Nostr content into many feed and social formats
- Covers ActivityPub, AT Protocol and microformats2 in one library
- Installs with a single pip command
- Offers a REST API and a demo app for quick tests
- Recent release v12.0 with a code update dated October 30, 2026
- Not a Nostr client, so you cannot post or browse through it as an app
- Windows is mentioned in the docs, but it runs as a Python package and needs a Python setup
- Built for developers, so most real workflows involve some coding
- Upgrades can require code changes in existing integrations, which costs time for teams with older code
- Converted output may lose details that exist only on the original network
Is Granary safe?
Granary is open source, and its code is published on GitHub at github.com/snarfed/granary. Download only from the official website or the official GitHub repository, and verify the SHA-256 checksum or signature before installing. Because recent versions sign activities with a private key, never enter a Nostr private key or seed phrase on third-party websites, including online demos or conversion tools you did not build yourself. Store keys in local environment variables or secure storage, and never commit them to a repository. Since the code is actively updated, check the latest version on the official website before you upgrade.
- Official source only. Download from github.com/snarfed/granary. 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 programs in this Nostr group are clients. Amethyst, Coop, Gossip and Vega let you read and post in a graphical interface, while NAK and Nostr Commander RS are command-line tools for working with Nostr directly. Granary is different because it is a conversion layer. It turns Nostr content into RSS, Atom, JSON Feed, ActivityPub and Bluesky-compatible formats instead of providing a messaging interface. Choose Granary if your goal is publishing or bridging content, and choose a client if you want to follow people and send messages.
Specifications
- Price
- Free
- Type
- Open source
- License
- —
- Latest version
- v12.0
- Last update
- 30 Oct 2026
- Windows support
- Unverified (Windows mentioned in docs)
- Source code
- github.com/snarfed/granary
Frequently asked questions
Granary is a free, open-source Python library that converts Nostr content into formats such as RSS, Atom, JSON Feed, ActivityStreams, microformats2 and ActivityPub. It is aimed at developers and site owners who want the same posts available in several standard formats. It is not a standalone Nostr client.
Yes, the project documentation mentions Windows, and you can run Granary there through Python. Install it with pip install granary in PowerShell or Command Prompt. Because it is a library rather than a standard Windows application, there is no installer window to open and no graphical interface to launch.
Yes. Granary is listed as free and open source, and you can install the package from PyPI without buying anything. The current release is v12.0, and the source code is available on GitHub for anyone who wants to inspect or modify it.
Install Python with pip, then run pip install granary in a terminal. Download the package only from the official source and verify its checksum first, as described in the installation steps above. After installation, follow the reference docs to run your first conversion.
Granary can be used safely when you get it from official sources and verify the file. Because signing requires a private key, keep your Nostr keys out of third-party websites and demo tools. The safety section above explains the checks in more detail.
Yes. Granary supports RSS 2.0 output alongside Atom and JSON Feed, so Nostr content can be published as a feed that standard readers can subscribe to. You can run the conversion in code or through the REST API, depending on how your site is built.
No. It does not provide an interface for posting, following or sending private messages. It is a conversion tool for developers and publishers. If you need those everyday tasks, a client such as Amethyst or Coop covers them better.
Verdict
Granary suits developers, bloggers and bridge operators who need Nostr content in feed and fediverse formats. It is free, open source and installs with a single pip command, and the REST API and demo app make it easy to test first. It is not a good fit if you want a visual app for everyday Nostr messaging, and a client from the list below will serve that purpose better. Plan for some coding and for code changes when you upgrade, since recent versions changed how timestamps, media alt text and signing work.