Real-Fruit-Snacks721 downloadsA polished community plugin browser: filters, rich details, trending, and installed-plugin management.
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.
Better Store: Search plugins) that opens any plugin's details from anywhere in Obsidian.minAppVersion exceeds your Obsidian version before you install.Better Store is in the official directory: Settings → Community plugins → Browse → search Better Store → Install. Or open the community listing.
main.js, manifest.json, and styles.css from the latest release.YourVault/.obsidian/plugins/better-store/.Release assets carry GitHub artifact attestations — verify provenance with gh attestation verify main.js -R Real-Fruit-Snacks/obsidian-better-store.
Open the store from the ribbon icon or the command palette (Better Store: Open store).
| Command | Action |
|---|---|
Better Store: Open store |
Opens (or reveals) the store — in a tab, split, or window per your setting |
Better Store: Search plugins |
Fuzzy quick-jump to any plugin's details (recently viewed rank first) |
Better Store: Apply plugin profile |
Switch to a saved enable-set |
Better Store: Export plugin list (Markdown / JSON) |
Copies your installed list to the clipboard |
Better Store: Import plugin list |
Paste an exported list and see what's missing |
Better Store: Scan catalog for GitHub stars & issues |
Fetch stars / open issues / creation dates for the whole catalog (needs a token) |
| Setting | Default | What it does |
|---|---|---|
| GitHub token | — | Optional. 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 lifetime | 12 h | How long the plugin catalog is cached. Manual refresh in the store header. |
| Default sort | Downloads | Downloads, recently updated, name, or trending. |
| Open the store in | Tab | Tab, split, or a new window. |
| Hide installed by default | Off | Start browsing with installed plugins hidden. |
| Show "New" badges | On | Highlight plugins that entered the registry in the last 14 days. |
| Show GitHub stars on cards | On | With 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 & issues | — | Fetches 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 viewed | On | Ranks recently opened plugins first in quick-jump search. |
| Detail pane toggles | On | Maintenance health chip, similar plugins, download history chart — each individually togglable. |
| Profiles / Filter presets | — | Review and delete saved profiles and presets. |
| Check for updates in the background | On | Checks installed plugins on the cache-lifetime cadence and marks the ribbon icon. |
| Notify when updates are found | On | Shows a notice when the background check finds updates. |
| Update controls | — | On 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 plugins | — | Review and unstar favorites. |
| Ignored plugins / authors / categories | — | Review and remove any ignore rule. |
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.raw.githubusercontent.com (no rate limit), API data from GitHub with your optional token.MarkdownRenderer and then passed through Obsidian's DOMPurify-backed sanitizer as defense in depth. Funding links are only accepted with http(s) schemes.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
obsidianmd/obsidian-releases registry, raw.githubusercontent.com, and api.github.com. No telemetry, no third-party services.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.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.
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.