Obsidian Nostr Writer
Obsidian Nostr Writer is not a timeline, not a social dashboard and not a replacement for a full Nostr client. It is a publishing instrument for people who already write in Markdown and want their vault to speak Nostr without opening a noisy web app.
A vault with a publish button
Obsidian Nostr Writer makes the most sense if your writing already starts in a vault. Not in a browser tab. Not in a platform editor that nags you with sidebars and metrics. A vault: folders, Markdown files, drafts that sit on your machine, half-finished paragraphs, links to old notes, little islands of research that only become public when you decide they are ready.
The plugin's public name inside the Obsidian registry is Nostr Writer, with the plugin id nostr-writer. The page in this archive uses the longer directory name because Nostr directories often call it Obsidian Nostr Writer. The useful point is simple: this is a desktop-only Obsidian Community plugin that lets you publish writing directly to Nostr. The manifest says version 2.2.0, minimum Obsidian app version 0.15.0, author jamesmagoo, MIT license through the GitHub repository and isDesktopOnly set to true. So if you were hoping to publish from Obsidian Mobile, this is not that tool.
That desktop-only detail is not a footnote. It tells you the product has chosen a writing-room workflow. You sit at the machine where your vault lives, open a note, click the upload ribbon icon or command, confirm title, summary, tags and optional banner image, then the plugin signs and sends a Nostr event to your configured relays. It is closer to a publishing plugin for a serious Markdown editor than to a social network client.
Quiet is the product
The README says the quiet part plainly: the plugin does not show you the public Nostr feed. It does not try to become a timeline. It does not ask you to check replies, scroll, follow drama or read whatever the network is currently excited about. It only publishes what you wrote. That restraint is the product.
For a writer, this is more important than it first sounds. Browser-based Nostr editors like Habla or other long-form clients are natural places to publish, but they also sit next to the social layer. You may open them with one essay in mind and leave an hour later with six notifications, a thread you did not need to read and the original paragraph still unfinished. Obsidian Nostr Writer takes the opposite side: stay in the tool where you think, then push out when the piece is ready.
Tony's Habla guide from September 2023 catches the appeal well. He describes using Obsidian for Nostr publishing because Markdown is already native there, previews are strong, drafts live locally and the plugin keeps a local record of published events. He also warns you to check the published post in a Nostr reader afterward, because formatting across clients can still have quirks. That is exactly the right level of confidence: the workflow is elegant, but Nostr long-form is still an ecosystem, not one controlled render engine.
What the plugin actually sends
The code is refreshingly legible. Long-form publishing creates a Nostr event with kind 30023, the kind defined by NIP-23 for articles or blog posts. The event content is the Markdown body of your note after frontmatter has been stripped. The plugin adds a random short d tag, a published_at timestamp, a title tag, optional summary and image tags, and t tags for topics. It signs locally through nostr-tools using finalizeEvent and publishes to the connected relay set.
There is also short-form mode. Turn it on in settings and the plugin adds a pencil icon. That opens a compact modal for sending a quick note as kind 1. This will not replace a full client for conversation, and it is not trying to. It is for the moment when you find a paragraph in your notes, want to share one sentence, and do not want to leave the vault.
Draft support is more complicated. Version 2.1.1 added "Publish as a draft" using kind 30024. That was a real Nostr pattern at the time, and the plugin exposes it clearly with a toggle in the publish modal. But current NIP-23 marks kind 30024 as deprecated and points toward NIP-37 for drafts. That does not make the plugin useless. It does mean you should treat draft interoperability carefully. A draft event that one client understands may not behave like a modern private draft in another client.
After a successful public long-form publish, the plugin writes a local record to published.json inside the plugin directory. That record includes the event, the source file path, the relays that accepted it and the profile nickname used. This is a very Obsidian thing to do. The Nostr event is public and relay-based, but your own publishing ledger stays beside your vault.
Images, frontmatter and the working desk
Nostr long-form sounds clean until images arrive. A Markdown note in Obsidian often uses wiki-style embeds like ![[image.png]]. That is wonderful inside your local vault and useless to a stranger reading on another client. Obsidian Nostr Writer tries to close that gap by scanning the active note's resolved links for image files, uploading them and replacing the local embed string with a public URL.
The upload service is specific: it posts to the nostr.build API endpoint for file uploads. For inline images, the plugin stores the returned URL and builds imeta tags from metadata such as mime type, original hash, size, dimensions, blurhash and thumbnail when those fields are available. Banner images are selected from the local machine in the publish modal and also uploaded. Premium nostr.build mode can use NIP-98 HTTP auth, which means the plugin signs an auth event for the upload request.
The limits are practical. The modal checks normal banner uploads against 10 MB, with a higher ceiling when premium storage is enabled. Inline image upload has its own size guard. You do not need to memorize those numbers to understand the point: this plugin is not merely pasting a Markdown note into Nostr. It is trying to make an Obsidian note survive outside Obsidian.
Frontmatter support arrived in version 1.6.0 through a community contribution from sfr0xyz. The current publish modal reads frontmatter for title, summary and tags, removes the frontmatter block from the body before publishing and also extracts hashtags directly from the note text. You can then add or remove tag pills before publishing. That is a small feature with a large ergonomic effect. It lets you keep the metadata habits of a local writing system while producing the tags Nostr clients expect.
The key bargain
Here is the part you should not skip. Obsidian Nostr Writer does not use a browser signer, Amber, a bunker or a hardware device. It asks for an nsec in plugin settings. The README's own security notice says the private key is stored in your local Obsidian settings file at <Vault Directory>/.obsidian/plugins/nostr-writer/data.json. The settings UI masks the field and lets you show, copy or delete it, but the project is explicit that masking is not strong encryption.
That is not scandalous. It is a trade. The plugin can be this smooth because it can sign from inside Obsidian. The danger is that any workflow storing an nsec in a vault config should be treated as hot-key territory. If somebody gets your device, your vault files, your sync folder or a malicious plugin into the wrong place, the risk is not theoretical. It is your publishing identity.
The sane way to use a tool like this is to decide what key it deserves. Some writers may use a dedicated publishing key instead of their main identity. Some may keep it on a machine they already protect carefully. Some will decide they need signer isolation and choose a different workflow. The point is not fear. The point is consent. Obsidian Nostr Writer gives you a quiet writing desk, but the key you place on that desk matters.
Relay handling is also concrete. The default settings include relays such as wss://nos.lol, wss://relay.damus.io, wss://relay.nostr.band, wss://relayable.org, wss://nostr.rocks and wss://nostr.fmt.wiz.biz. You can configure relay URLs, reconnect from the status bar and see how many relays are connected. You can also enable multiple profiles and store additional nsecs with nicknames, then choose the profile from the publish or short-note modal. Again, this is convenient and serious at the same time.
Bookmarks and highlights come home
The plugin started as a publishing tool, but later versions pulled reading artifacts back toward the vault. Version 2.0.0 added a bookmarks view and download capability. In code, it queries your kind 10003 bookmark list, the NIP-51 standard list for saved things, follows e tags for notes and a tags for long-form articles, then loads those events from your relays. The view can open items online through njump and download a bookmark into Obsidian as Markdown.
Version 2.2.0 added highlights. That view queries kind 9802, the NIP-84 highlight event. A highlight's content is the marked passage; tags can point back to the source through a, e or r tags. The plugin tries to resolve the source, show a readable card and let you copy the highlight text or download the source article. The UI even nudges users toward highlighter.com when no highlights are found and listr.lol when no bookmarks are found.
This is where the plugin becomes more than an export button. It hints at a richer loop: draft locally, publish outward, read elsewhere, save or highlight, then bring those fragments back into the vault where your thinking actually happens. Nostr is often described as a social protocol, but for writers it can also become a public annotation and memory layer. Obsidian Nostr Writer touches that idea without building a whole reader around it.
Who built it and how alive it is
The public project trail points to GitHub user jamesmagoo. The Obsidian registry lists author jamesmagoo, and Obsidian Stats names the plugin as by James McGauran. The README includes a Lightning address, magoo@getalby.com, a Nostr npub for ideas and feedback, Buy Me a Coffee and GitHub Sponsors links. This feels like a small open-source tool maintained by a real person, not a product team pretending to be a community.
The repository was created in July 2023, had its first release on August 2, 2023 and reached the Obsidian plugin store in version 1.3.0 later that month. The release history tells the story of the tool maturing in public: multiple relays in August 2023, published view and status bar, tags, multiple nsecs in November, frontmatter parsing in January 2024, bookmarks in April, auto-upload images to nostr.build, draft publishing and finally highlights in version 2.2.0 on April 18, 2024.
At the time of this review, GitHub showed 89 stars, 6 forks, 162 commits, MIT license, TypeScript as the main language and a few open issues. The Obsidian community stats file showed 4,258 total downloads for nostr-writer, with version 2.2.0 accounting for 955 of those. There were three visible contributors: jamesmagoo, LiamSwayne and sfr0xyz. The repository had later activity after the last release, but the latest packaged plugin version remains 2.2.0 from April 2024.
So where does it fit? Not as the default Nostr app for everyone. It fits writers, researchers, note-takers and small publishers who already trust Obsidian as their workshop. It fits people who want to publish long-form Nostr posts without making a web client their drafting environment. It fits a user who understands that local-first writing and hot-key signing are two different subjects. If that is you, this is one of the more charming tools in the Nostr shelf: narrow, useful, a little rough, and built around a genuinely good idea.
Sources worth opening
This article keeps claims close to the public project trail. Start here when you want to verify Obsidian Nostr Writer yourself.
- jamesmagoo/nostr-writer on GitHub
- Obsidian Nostr Writer README
- Plugin manifest
- NostrService source code
- Image upload service source code
- Release history
- Obsidian community plugin registry
- Obsidian community plugin stats
- Tony's guide: Publishing on Nostr With Obsidian
- NIP-23: Long-form Content
- NIP-51: Lists
- NIP-84: Highlights
- NIP-98: HTTP Auth
- NostrApps listing
- NIP-54 wiki
- Nostr protocol NIPs repository
- NIP-01 basic protocol flow
- NIP-05 DNS identifiers
- NIP-07 browser signer capability
- NIP-10 text note threading
- NIP-11 relay information document
- NIP-19 bech32 encoded entities
- NIP-44 versioned encryption
- NIP-46 remote signing
- NIP-56 reporting





