Better Store

approved

by Real-Fruit-Snacks

A polished community plugin browser: filters, rich details, trending, and installed-plugin management. - This plugin has not been manually reviewed by Obsidian staff.

1 stars761 downloadsUpdated 16d agoMIT

Better Store — the community plugin browser, polished

License: MIT Latest release Obsidian 1.13.0+ CI Downloads

Documentation site · Latest release · Changelog

Overview

Better Store is an Obsidian plugin that replaces day-to-day use of the built-in community plugin browser. It opens as a full workspace tab with real filters, heuristic categories, rendered README previews, GitHub stats, a trending view, and a dashboard for the plugins you already have installed.

It deliberately does not install, update, or remove plugin files itself — install actions hand off to Obsidian's native Community Plugins dialog, so nothing about your vault's security model changes.

Features

  • Full workspace view — a filter sidebar, card grid, and detail pane instead of a cramped modal; opens in a tab, a split, or its own window. Stays open while you work.
  • Responsive to narrow panes — in a skinny split pane the layout collapses to a single column: filters move into a toggle-able drawer, the detail pane opens as a full-screen sheet, and toolbars wrap. (Desktop-only for now — the mobile experience still needs polish, so the plugin is flagged desktop-only.)
  • Filters & sorting — search across name/author/description, category chips, "updated within" (24h → 1 year), minimum downloads, minimum stars, hide installed; sort by downloads, recency, name, trending, GitHub stars, open issues, or recently added.
  • Author drill-down — click any author to see everything they've published.
  • Full-catalog GitHub scan — with a token, scan every plugin's stars, open issues, and repository creation date into a persistent cache (resumable, cancellable, rate-limit aware) to unlock accurate catalog-wide sorting by those metrics — including a "recently added" view that surfaces genuinely new plugins, not just recently-patched ones.
  • GitHub stars on cards — with a token linked, star counts appear on browse cards, fetched only for the cards on screen and cached for the session (togglable).
  • "New" detection vs "recently added" — the "New only" filter flags plugins that entered the registry since you started using Better Store (exact, but forward-looking); the scanned "recently added" sort uses repo creation date as a catalog-wide proxy for first release.
  • Heuristic categories — Tasks, Sync & Backup, AI, Appearance, Editor, Export & Import, Calendar & Time, Data & Queries, Files & Organization, Publishing & Sharing, Integrations. The official registry has no categories, so these are keyword-derived — imperfect by design and easy to refine.
  • Rich details — rendered README with images (sanitized), GitHub stars and open issues, recent releases, and funding links, fetched lazily and cached.
  • Trending — local download-delta tracking across catalog refreshes. Builds up as you use the plugin; no external service, no telemetry.
  • Installed dashboard — current vs. latest version, update badges, enable/disable toggles (with bulk select), "stale" warnings for plugins unmaintained for a year+, changelog links.
  • BRAT panel — when BRAT is installed, lists the beta plugins it tracks and offers one-click add / check-for-updates. Better Store only reads BRAT's list and hands off to BRAT's own commands — never touching another plugin's files.
  • Tree view — an explorer-style layout with folders derived from the active sort (download tiers, recency, A–Z, trending, GitHub stars, open issues, recently added), a collapsed Stale folder, persistent expansion, and indent guides.
  • Quick jump — a fuzzy search command (Better Store: Search plugins) that opens any plugin's details from anywhere in Obsidian.
  • "New" detection — plugins that entered the registry in the last 14 days get a badge and a "New only" filter (togglable).
  • Favorites — star plugins to track them; a "Starred only" filter keeps your watchlist one click away.
  • Update notifications — a background check marks the ribbon icon (and optionally shows a notice) when installed plugins have updates.
  • Update controls — on the Installed tab, skip a specific version (re-notified on the next one), stop checking a plugin entirely, or mute all update nags for 1 hour to 1 week; all reviewable in settings.
  • Release notes inline — expand any release in the detail pane to read its changelog without leaving Obsidian.
  • Compatibility warnings — flags plugins whose minAppVersion exceeds your Obsidian version before you install.
  • Keyboard navigation — arrow keys move through cards and tree rows, Enter opens details, Esc closes the pane.
  • Ignore rules — hide individual plugins, everything by an author, or whole categories.
  • Plugin profiles — save named enable-sets ("Writing", "Minimal") and switch between them in one click, from the Installed tab or the command palette.
  • Export / import — copy your installed list as Markdown or JSON; paste a list back to see what's missing and star it as an install shopping list.
  • Maintenance health — a healthy / aging / at-risk chip on the detail pane from update recency and release cadence (togglable).
  • Download history — a sparkline built from your own catalog snapshots (togglable).
  • Similar plugins — related plugins by shared categories and keywords, one click away in the detail pane (togglable).
  • Filter presets — save sidebar filter combinations under a name and reapply them from a dropdown.
  • Copy actions — repository URL and BRAT string copy buttons in the detail pane.

Installation

From Community Plugins (recommended)

Better Store is in the official directory: Settings → Community plugins → Browse → search Better Store → Install. Or open the community listing.

Manual

  1. Download main.js, manifest.json, and styles.css from the latest release.
  2. Place them in YourVault/.obsidian/plugins/better-store/.
  3. Settings → Community plugins → enable Better Store.

Release assets carry GitHub artifact attestations — verify provenance with gh attestation verify main.js -R Real-Fruit-Snacks/obsidian-better-store.

Getting Started

Open the store from the ribbon icon or the command palette (Better Store: Open store).

Commands

CommandAction
Better Store: Open storeOpens (or reveals) the store — in a tab, split, or window per your setting
Better Store: Search pluginsFuzzy quick-jump to any plugin's details (recently viewed rank first)
Better Store: Apply plugin profileSwitch to a saved enable-set
Better Store: Export plugin list (Markdown / JSON)Copies your installed list to the clipboard
Better Store: Import plugin listPaste an exported list and see what's missing
Better Store: Scan catalog for GitHub stars & issuesFetch stars / open issues / creation dates for the whole catalog (needs a token)

Settings

SettingDefaultWhat it does
GitHub tokenOptional. Link a secret from Obsidian's secret storage holding a GitHub personal access token — it raises the API rate limit (60/hr without) used for stars, issues, and releases. A classic token with no scopes is enough. Only the secret's name is stored in plugin data; the token itself never leaves secret storage. The token is verified automatically when linked — and put straight to work: open detail panes re-fetch their GitHub data and the update check reruns. A Test button re-checks anytime, reporting your remaining rate limit.
Cache lifetime12 hHow long the plugin catalog is cached. Manual refresh in the store header.
Default sortDownloadsDownloads, recently updated, name, or trending.
Open the store inTabTab, split, or a new window.
Hide installed by defaultOffStart browsing with installed plugins hidden.
Show "New" badgesOnHighlight plugins that entered the registry in the last 14 days.
Show GitHub stars on cardsOnWith a token linked, fetches star counts for the cards on screen (one request per plugin, session-cached). Stays inactive without a token so the anonymous 60/hr limit is saved for the detail pane.
Scan the catalog for stars & issuesFetches GitHub stars + open issues for every plugin (one request each) into a persistent cache, enabling catalog-wide sort by stars / open issues and a min-stars filter. Requires a token; resumable, cancellable, rate-limit aware. A rescan-freshness slider controls how long scanned stats stay valid.
Track recently viewedOnRanks recently opened plugins first in quick-jump search.
Detail pane togglesOnMaintenance health chip, similar plugins, download history chart — each individually togglable.
Profiles / Filter presetsReview and delete saved profiles and presets.
Check for updates in the backgroundOnChecks installed plugins on the cache-lifetime cadence and marks the ribbon icon.
Notify when updates are foundOnShows a notice when the background check finds updates.
Update controlsOn the Installed tab: skip a specific version, stop checking a plugin, or mute all update nags for 1 hour–1 week. Skipped versions, disabled plugins, and mute status are reviewable in settings.
Starred pluginsReview and unstar favorites.
Ignored plugins / authors / categoriesReview and remove any ignore rule.

How It Works

  • The catalog comes from the official obsidianmd/obsidian-releases registry and stats files. The multi-megabyte stats file is slimmed to totals + last-updated timestamps and cached inside the plugin's own folder.
  • Detail-view data (README, stars, releases) is fetched lazily per plugin — READMEs from raw.githubusercontent.com (no rate limit), API data from GitHub with your optional token.
  • Trending compares download counts across your own catalog refreshes (snapshots kept locally, capped at 30).
  • READMEs are third-party content: they're rendered through Obsidian's MarkdownRenderer and then passed through Obsidian's DOMPurify-backed sanitizer as defense in depth. Funding links are only accepted with http(s) schemes.
  • Enable/disable toggles use an internal Obsidian API (the same one used by well-known plugin managers). If a future Obsidian update changes it, those toggles may stop working until this plugin updates — everything else is unaffected.

Architecture

src/
├── main.ts              plugin entry: commands, service wiring, update checks
├── view.ts              ItemView hosting the Svelte root
├── settings.ts          declarative settings tab
├── data/                pure, fully unit-tested modules (no Obsidian imports)
│   ├── registry.ts      registry parsing + stats slimming
│   ├── categories.ts    keyword → category heuristics
│   ├── filter.ts        filter/sort engine
│   ├── tree.ts          sort-derived folder grouping
│   ├── trending.ts      download-delta snapshots + history
│   ├── newness.ts       new-plugin detection
│   ├── service.ts       fetch + cache orchestration (IO injected)
│   ├── installed.ts     installed-plugin status
│   ├── profiles.ts      enable-set diffing
│   ├── portability.ts   export/import of plugin lists
│   ├── health.ts        maintenance assessment
│   ├── similar.ts       related-plugin scoring
│   ├── scan.ts          full-catalog scan selection
│   ├── updates.ts       update suppression (skip / mute / don't-check)
│   ├── brat.ts          BRAT data parsing + command ids
│   ├── token.ts         GitHub token check + secret migration
│   └── ...              versions, readme URL rewriting, formatting
└── ui/                  Svelte 5 components
    ├── StoreView.svelte tabs, state, wiring
    ├── FilterSidebar / PluginCard / DetailPane / InstalledTab
    ├── TreeView / Sparkline / Icon
    ├── QuickJumpModal / modals (name prompt, import, profiles)
    └── store-context.ts typed access to Obsidian internals

Privacy & Permissions

  • Network — requests go only to the official obsidianmd/obsidian-releases registry, raw.githubusercontent.com, and api.github.com. No telemetry, no third-party services.
  • Clipboard — write-only, and only when you click a copy/export action. The plugin never reads your clipboard.
  • Storage — settings and UI state live in Obsidian's plugin data (data.json); caches live in the plugin's own folder; the optional GitHub token lives in Obsidian's secret storage — plugin data records only the linked secret's name, never the token.

Self-hosting

The repository ships a .gitlab-ci.yml, so the project can also be hosted and built on a self-hosted GitLab instance — the pipeline runs the same verify/build steps, publishes the plugin files as artifacts, and serves the docs site via GitLab Pages.

Development

npm install
npm run dev            # watch build
npm run check          # TypeScript type check
npm run check:svelte   # Svelte component type check
npm test               # unit tests (138)
npm run build          # production build + bundle verification

Junction/symlink the repo into a test vault's .obsidian/plugins/better-store and enable it.

License

MIT

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.