NoteMods, 132 Obsidian plugins built and released alone

NoteMods is my catalog of small Obsidian plugins, each built to do one job well. I built the factory that makes them, the release path that ships them and the site that sells them, and I run all of it alone.

From an idea to the Obsidian directory, one plugin at a timeFive stages from left to right, joined by one accent line. One, demand. Forum requests, GitHub issues and a daily ledger of directory downloads give a shortlist of ideas that no strong plugin solves yet. Two, build. ./fx new makes the plugin in one private monorepo, with a shared core, a shared license package and golden test vectors. Three, gates. ./fx check runs 6 gates on each plugin, an independent review reads the code, and 17 negative controls break the release gate on purpose. Between three and four sits the one human step. The I approve the live release. Four, release. CI opens a version pull request, pushes a tag to the public plugin repo, and that repo builds, attests and releases main.js. Five, directory. Obsidian reviews the plugin, a nightly job checks that the listed version matches the tag, and notemods.com gets the page. Along the bottom, the state on 5 November 2026. 137 products and 1,658 commits in the factory, 645 versions, 132 plugins listed, 13,231 downloads.From an idea to the Obsidian directoryone plugin, five stages[1] Demandwhat people ask for[2] Buildone private monorepo[3] Gates./fx check[4] ReleaseCI, no clicks[5] Directorylisted and watchedI approveforum requestsGitHub issuesdaily download ledger./fx new <slug>shared core, licensegolden test vectors6 gates per pluginindependent review17 negative controlsversion pull requesttag to public repobuild, attest, releaseObsidian reviewnightly listing watchpage on notemods.comWhere it stands on 5 November 2026137factory products1,658factory commits645versions released132listed in the directory13,231downloadsFrom an idea to the Obsidian directory, one plugin at a timeFive stages from left to right, joined by one accent line. One, demand. Forum requests, GitHub issues and a daily ledger of directory downloads give a shortlist of ideas that no strong plugin solves yet. Two, build. ./fx new makes the plugin in one private monorepo, with a shared core, a shared license package and golden test vectors. Three, gates. ./fx check runs 6 gates on each plugin, an independent review reads the code, and 17 negative controls break the release gate on purpose. Between three and four sits the one human step. The I approve the live release. Four, release. CI opens a version pull request, pushes a tag to the public plugin repo, and that repo builds, attests and releases main.js. Five, directory. Obsidian reviews the plugin, a nightly job checks that the listed version matches the tag, and notemods.com gets the page. Along the bottom, the state on 5 November 2026. 137 products and 1,658 commits in the factory, 645 versions, 132 plugins listed, 13,231 downloads.From an idea to the directory[1] Demandforum requests, GitHub issuesa daily download ledger[2] Build./fx new in one private monoreposhared core, golden vectors[3] Gates6 gates per plugin, a review17 negative controls[4] Releaseversion pull request, tagbuild, attest, release in CI[5] DirectoryObsidian review, nightly watcha page on notemods.comI approve the live releaseOn 5 November 2026132listed plugins13,231downloads
Every plugin takes the same path. Agents build it in one private monorepo and the gates have to pass. Only then do I approve the live release, and CI does the rest. 132 plugins reached the Obsidian directory this way between 10 October and 5 November 2026.
132Plugins in the Obsidian directory
13,231Downloads
645Versions released
131 of 132Passed the directory review
The NoteMods home page
The catalog site. Every plugin page is built each morning from the Obsidian directory and GitHub.
The catalog by category, plugins and downloadsSeven categories, one row each, sorted by downloads. For each row, a bar for the number of plugins and an accent bar for downloads, then the downloads per plugin and the top plugin. Bases, 20 plugins, 3,427 downloads, 171 per plugin, top plugin Bases Freeze Panes with 549. Editor, 28 plugins, 3,104 downloads, 111 per plugin, top plugin Footnotes in Callouts with 849. Files, 49 plugins, 2,815 downloads, 57 per plugin, top plugin Properties in PDF Export with 191. Search, 6 plugins, 1,276 downloads, 213 per plugin, top plugin Search Operators with 679. Links, 13 plugins, 1,106 downloads, 85 per plugin, top plugin Embed Outline with 380. Tasks, 10 plugins, 989 downloads, 99 per plugin, top plugin Bases Task Rows with 273. Tables, 6 plugins, 514 downloads, 86 per plugin, top plugin Table Rollup with 218. Files has the most plugins, mostly importers for other note apps. Search has the fewest and the most downloads per plugin.The catalog by category132 plugins, 13,231 downloadscategory, top pluginpluginsdownloadsper pluginBasesBases Freeze Panes, 549203,427171EditorFootnotes in Callouts, 849283,104111FilesProperties in PDF Export, 191492,81557SearchSearch Operators, 67961,276213LinksEmbed Outline, 380131,10685TasksBases Task Rows, 2731098999TablesTable Rollup, 218651486Files holds 49 plugins, mostly importers. Search holds 6 and earns 213 downloads each. The catalog by category, plugins and downloadsSeven categories sorted by downloads. Bases 3,427, Editor 3,104, Files 2,815, Search 1,276, Links 1,106, Tasks 989, Tables 514. Search earns the most per plugin, 213.The catalog by categorycategorydownloadseachBases20 plugins3,427171Editor28 plugins3,104111Files49 plugins2,81557Search6 plugins1,276213Links13 plugins1,10685Tasks10 plugins98999Tables6 plugins51486Search holds 6 plugins and earns213 downloads each, the most.
A NoteMods plugin page with install steps, version and downloads
A plugin page, with live downloads, versions and the install steps.
The NoteMods home page on a phone
A plugin page on a phone
The same pages on a phone.
How notemods.com is built and refreshed each dayThree columns. On the left, four sources. The Obsidian community profile gives downloads, review and health for each plugin. GitHub releases give the version and date. The product factory gives the README, screenshots and GIFs. Site content gives the page copy and the guides. In the middle, the daily run that a LaunchAgent starts at 06:15, in six steps. One, check free disk and memory and stop below 20 GB or 25 percent. Two, pull main and fetch the facts. Three, commit the data before the build, so the build marker names that commit. Four, build into a side folder and swap it in only when every page passed. Five, run 14 gates, then upload to Cloudflare Pages. Six, check the live site and push. On the right, notemods.com, a static site with 289 URLs in its sitemap, 132 plugin pages, 106 guides and 41 theme pages. In the browser, a strict content security policy, no backend, and analytics that load only after the visitor allows them. Along the bottom, 27 runs released and pushed since 23 October. A failed gate or low disk stops the run and the old site stays live.How notemods.com is built, every day at 06:15static, no backend[1] Sources[2] Daily run[3] Livecommunity.obsidian.mddownloads, review, healthGitHub releasesversion and date per pluginproduct-factoryREADME, screenshots, GIFssite contentpage copy and 106 guides[1]Check disk and memorystop under 20 GB or 25 %[2]Pull main, fetch factsthree fetch gates[3]Commit the data firstthe build marker names it[4]Build into a side folderswap in only when all pass[5]Run 14 gates, uploadwrangler pages deploy[6]Check live, then pushbuild.json on the sitenotemods.comCloudflare Pages289URLs in the sitemap132plugin pages41theme pagesIn the browserstrict CSP, no backendanalytics after AllowPro in GitHub Sponsors27 runs released and pushed since 23 Octa failed gate or low disk stops the run, the old site stays How notemods.com is built and refreshed each dayThree columns. On the left, four sources. The Obsidian community profile gives downloads, review and health for each plugin. GitHub releases give the version and date. The product factory gives the README, screenshots and GIFs. Site content gives the page copy and the guides. In the middle, the daily run that a LaunchAgent starts at 06:15, in six steps. One, check free disk and memory and stop below 20 GB or 25 percent. Two, pull main and fetch the facts. Three, commit the data before the build, so the build marker names that commit. Four, build into a side folder and swap it in only when every page passed. Five, run 14 gates, then upload to Cloudflare Pages. Six, check the live site and push. On the right, notemods.com, a static site with 289 URLs in its sitemap, 132 plugin pages, 106 guides and 41 theme pages. In the browser, a strict content security policy, no backend, and analytics that load only after the visitor allows them. Along the bottom, 27 runs released and pushed since 23 October. A failed gate or low disk stops the run and the old site stays live.How notemods.com is built[1] Sourcescommunity.obsidian.mdfactsGitHub releasesversionsproduct-factorydocs, GIFssite content106 guides[2] Daily run, 06:15[1]Check disk and memory[2]Pull main, fetch facts[3]Commit the data first[4]Build into a side folder[5]Run 14 gates, upload[6]Check live, then push[3] notemods.com, Cloudflare Pages289sitemap URLs132plugin pages41theme pages27 runs released and pushed since 23 Octa failed gate stops the run, the old site stays
Bases Freeze Panes in Obsidian, header row and first column staying in place while a table scrolls
Inside Obsidian. Bases Freeze Panes keeps the header and first column in place.
The settings panel of Bases Freeze Panes
Settings that read like the rest of Obsidian.
Public plugin repos created per day, 10 October to 1 November 2026A step line climbs from 18 public plugin repos on 10 October to 106 on 14 October, then to 132 on 1 November. Small bars under the axis show the repos created each day, the largest is 38 on 14 October. Most of the catalog was made in the first five days. After that the work moved to releases of the plugins already listed. Daily counts, in order from 10 October, 18, 5, 22, 23, 38, 0, 0, 0, 4, 0, 0, 9, 0, 2, 2, 2, 3, 0, 1, 0, 1, 0, 2.Public plugin repos, by the day each was created10 Oct to 1 Nov 2026, UTC050100repos, running totalper day381810 Oct14 Oct18 Oct21 Oct26 Oct1 Nov18 on day one106 by 14 Oct, 38 of them that day132then releases, not new repos645 versions across 132 plugins Public plugin repos created per day, 10 October to 1 November 2026Public plugin repos created per day, running total, 18 on 10 October, 106 on 14 October, 132 on 1 November.Plugin repos, running total050100106 by 14 Oct132per day10 Oct21 Oct1 Novthen 645 versions across 132 plugins
The NoteMods catalog page
The full catalog, by category.
Year
2026
Sector
Developer tools
Client or project
Own product, Zovo
Duration
October to November 2026
Stack
TypeScript, pnpm, Turborepo, Vitest, Changesets, GitHub Actions, Python, Cloudflare Pages
Role
Founder, engineer and operator
Updated

The problem

Obsidian users ask for many small features that the app does not have. In October 2026, 14 of the 30 most voted feature requests on the Obsidian forum were about Bases, the new database view. Most of those jobs are too small for a company and too fiddly for a weekend.

One plugin is easy to make. A hundred plugins that each pass the directory review, keep their versions in sync and get fixes every week is a different problem. That needs a factory, not a single repo.

What I built

One private monorepo holds every product, 137 of them today. A command named fx makes a new plugin from a fixed template, runs its checks, exports a clean public repo and prepares the release. Shared code for the core logic and for the Pro license sits in two packages that every plugin uses.

Each plugin passes 6 gates before it can ship. They check the files and versions, the README and its screenshots, lint, tests and build, and every network host the code reaches. A separate review then reads the code. In the first waves those reviews found between 4 and 13 real defects in every build that had already passed its own tests.

AI coding agents do the build work in parallel lanes. I pick the ideas, read the reviews and approve each live release. Nothing goes public without that step.

Release without clicks

A change lands with a version note. CI opens a version pull request, then pushes a tag to the public plugin repo. That repo builds main.js from the committed source, attests it and publishes the release, never as a draft.

A nightly job checks that the version the directory shows matches the latest tag. A weekly job flags any plugin with no release in 7 days. 17 negative controls break the release gate on purpose to prove it still fails when it should.

The site

notemods.com is a static site that a Python build makes from live data. Each morning at 06:15 a scheduled run fetches the directory facts and GitHub releases, commits the data, builds into a side folder and swaps it in only when every page passed. It then runs 14 gates, uploads to Cloudflare Pages and checks the live site.

The site has 289 URLs, with a page for each of the 132 plugins, 106 guides and 41 theme pages. It has no backend, a strict content security policy and no analytics until the visitor allows them. When a gate fails or the disk runs low, the run stops and the old site stays live.

Result

132 plugins are listed in the Obsidian directory, all with Excellent health. The first went live on 10 October 2026. Together they have 13,231 downloads across 645 released versions.

Most plugins are small, and the median has 54 downloads. The top one, Footnotes in Callouts and Tables, has 849. Core features stay free and MIT licensed. One GitHub sponsorship turns on Pro in each plugin that has it.

Own product. Download and version counts come from the Obsidian community stats file on 5 November 2026. The factory and site repositories are private. All 132 plugin repositories are public.

[+]More case studies

More case studies

All case studies

Next step

Send me your project, or the part your team can’t get to.

Send me your project

My last client result, a reports page cut from 3,800 requests per load to 3. The brief and the repo are enough to start.

How it starts

  1. [1]Send your project
  2. [2]Get a free plan
  3. [3]Approve the first milestone