Skip to content
[018]2026.06.04log

Opening a Shop in Someone Else's Village

An account of getting into the Obsidian community plugin store

Everything I'd built so far stood on my own land. My domain, my server, my database. If I didn't like a button's color, I changed it; if a rule was needed, I set it. I've written many times about the loneliness of building alone, but I don't think I've ever written about the freedom on its other side. In my village, I am the law.

In EP.17 I set up the structure of the Obsidian plugin. A structure where the plugin pulls instead of the server pushing. Now, to get people to use that plugin, I had to enter Obsidian's "community plugin store." Someone else's village. That village has a review.

There was more to prepare than I'd thought. For the plugin to talk to my server, I had to issue a key (API key) for each user, but I learned that I must not store that key in my database as-is. You store not the key itself but the key's fingerprint (hash). That way, even if my database is breached, the keys are safe. It's the same principle as a bank "not knowing" your password.

I also had to read the village's law. Obsidian's plugin review standards are published as a document. Don't leave secret values in logs. Use only the prescribed communication methods. Don't send data outside without user consent. What was interesting was that these standards were, in the end, telling the same story I'd learned in EP.15 and EP.16. The laws of someone else's village were, mostly, things I'd learned only after already causing an accident in my own.

Before submitting, I ran tests. I made and ran sixteen automated tests, and finally the real test—I installed it directly into my own Obsidian vault. Ninety-nine notes and twenty-three channel folders came in. I pressed sync once more. "No new notes." Meaning no duplicates were created. I now know this second click matters more than the first.

I also learned by searching that the submission method had recently changed. It used to be editing a list file on GitHub; now you submit through a developer dashboard. Had I followed an old guide article, I'd have wasted days. In someone else's village, the laws change too.

I submitted. The automated review ran. I watched the passing items turn green one by one. Zero failures. And within that same day, the plugin went public.

I typed "stacktube" into the plugin search box of the Obsidian app. It came up. Among thousands of plugins made by other people, the one I'd made occupied a slot. Its shelf score was 96, apparently.

It was a strange feeling. Uploading a feature to my own site is like bringing furniture into the house, and it stopped stirring anything in me long ago. But when a product lands on someone else's village shelf, a sensation similar to the day I first pressed the launch button came back. Passing where there is a review. Meeting standards I didn't set. For someone who builds alone, that's a report card you rarely receive.

Laws are more comfortable when they're my village's. But report cards are more honest when they're someone else's.


🔧 Technical Terms in This Episode

Plugin An extension inserted into an existing app. Obsidian displays user-made plugins in its official store after review.

API Key / Hash Storage The key an external program uses to access my server. The server stores not the original key but only its hash (a one-way fingerprint). Since you can't restore the key from the fingerprint, there's no harm even if it leaks.

E2E Test (End-to-End Test) A test that verifies not individual components but the user's entire actual path (connect → sync → re-sync) as a whole. This time I made a fake server and fake vault and ran sixteen scenarios.

Idempotency The property where doing the same operation twice yields the same result as doing it once. "Zero duplicates on the second sync" is exactly this. One of the most important properties in automation.