Full Registry V1
This page defines the milestone for signed plugin registry distribution in Lapis Notes. It is intentionally separate from the Complete Daily-Use App release milestone so plugin distribution work can move without widening that release target.
Release Goal
Lapis Notes supports installable plugins distributed through a signed official registry while preserving the existing Obsidian-compatible plugin runtime.
The app can fetch verified registry metadata, install verified plugin files into
the existing .obsidian/plugins/<plugin-id>/ layout, record provenance outside
plugin-controlled manifests, manage installed plugins from Settings, and pilot
the flow with the first official installable Docs plugin.
In Scope
- Locked built-in official registry source.
- Signed catalog, plugin detail, and release metadata.
- Browser-compatible hash and signature verification.
- Verified staging installer, update, and uninstall flows.
- Installed provenance state in
.obsidian/installed-plugins.json. PluginDistributionManagerexposed throughAppbesidePluginManager.- Settings UI for Installed, Browse, Updates, and Sources.
- On-demand install prompt for official Docs file handlers.
- Monorepo release tooling for official plugin packages.
- Docs plugin pilot from package artifact to registry install.
Non-goals For V1
- Replacing
PluginManager. - Trusting plugin manifests as proof of official, verified, or core status.
- Arbitrary user-added third-party registry sources.
- Full TUF timestamp, snapshot, or delegated target metadata.
- Chunked or multi-entry plugin bundles beyond the first pilot needs.
- Moving Bases or other baseline/core plugins out of the bundled bootstrap.
- Silent installation or enablement of privileged desktop plugins.
Policy
Core is a bundling and runtime ownership concept. Official is a provenance and signature concept.
Downloaded official plugins remain community-style installed plugins at runtime. They are official only when they come from a verified official registry entry and a verified official release signature. True bundled core behavior remains reserved for code registered by the app bundle.
The official registry source is locked for v1. Community or manual plugins may still load through the existing plugin runtime, but the UI must label them as community, manual, or unverified unless provenance is recorded by the distribution layer.
The external registry repository layout, generated metadata contract, signing roles, static hosting requirements, and first Docs pilot registry shape are defined in Plugin Registry Distribution.
Ordered Backlog
The Full Registry V1 implementation sequence is:
ROADMAP-PLUGIN-REGISTRY-001: Define Full Registry V1 milestone and spec contract.TASK-PLUGIN-REGISTRY-001: Add plugin registry metadata schemas and verification primitives.TASK-PLUGIN-REGISTRY-002: Implement official registry client and cache.TASK-PLUGIN-REGISTRY-003: Implement installed plugin state and verified installer.TASK-PLUGIN-REGISTRY-004: ExposePluginDistributionManagerthrough App services.TASK-PLUGIN-REGISTRY-005: Add Plugins settings registry UI.TASK-PLUGIN-REGISTRY-006: Add monorepo packaging and signing tooling for official plugins.TASK-PLUGIN-REGISTRY-007: Create official registry repository bootstrap plan and first generated registry.TASK-PLUGIN-REGISTRY-008: Package Docs as the first official installable plugin.TASK-PLUGIN-REGISTRY-009: Add on-demand install for Docs file handlers.TASK-PLUGIN-REGISTRY-010: Move Docs out of bundled workspace bootstrap after registry install works.TASK-PLUGIN-REGISTRY-011: Add update and revocation handling for installed official plugins.TASK-PLUGIN-REGISTRY-PUBLISH-REMAINING-OFFICIAL: Publish and activate remaining official plugin registry releases.TASK-PLUGIN-REGISTRY-UNBUNDLE-REMAINING-OFFICIAL: Remove migrated official plugins from bundled workspace bootstrap.TASK-PLUGIN-REGISTRY-MARKDOWN-LINT-OFFICIAL: Move Markdown Lint into the official plugin registry.
TASK-PLUGIN-REGISTRY-PUBLISH-REMAINING-OFFICIAL includes the app-repo local
asset publisher and Forgejo workflow for building, signing, staging, and
publishing immutable official plugin assets to Forgejo release downloads under
the app repo. Registry metadata activation remains owned by the registry repo
after those assets exist.
Do not remove a first-party plugin from the bundled workspace bootstrap until the verified install path works in both browser/PWA and Electron.
Docs Pilot
Docs is the first official installable plugin pilot.
The pilot is successful when:
- Docs has a decided official installable ID and documented migration policy
from the current bundled
docsID if that ID changes. - The package emits
manifest.json,main.js, andstyles.csssuitable for standalone installation. - The official registry advertises Docs with
.lapisdocand.lapissheetcontribution summaries. - The app can install, enable, restart, open Docs files, disable, and uninstall Docs in browser/PWA and Electron.
- Docs is removed from bundled workspace bootstrap only after that flow passes.
Remaining First-Party Migration
Canvas, Graph, Markdown Lint, Notebook, PDF, Slides, Telemetry, and Docs now use
official installable lapis-* IDs and are external to the bundled workspace
bootstrap. Installed official records load from /.obsidian/plugins/<id>/,
remain compatible with community-plugins.json enablement, and appear under
Core plugins when their installed provenance is official. First-party
packages remain in the monorepo for official artifact builds and publish flows.
Bases remains bundled for this phase. Its registry entry, if present, must stay pending/non-installable until a separate issue changes that ownership decision.
Markdown itself remains bundled; Markdown Lint is an external official plugin
with manifest id lapis-markdown-lint while preserving the
markdown-lint.disabledRules configuration namespace.
Release Gate
Do not consider Full Registry V1 complete until all of these are true:
- The app verifies official registry, detail, and release metadata.
.lapis-pluginbundles and every signed bundled file are hash-checked before final install.- Installed provenance is stored outside plugin-controlled manifests.
- Official, community, manual, and bundled provenance are visually distinct.
- Desktop-only or privileged plugins are blocked or gated by Workspace Trust.
- Install, update, uninstall, and failure states are recoverable.
- The Docs pilot works end to end in browser/PWA and Electron.
- Existing manually installed community plugin loading remains compatible.
Validation
Use the narrowest package checks for each issue:
- API distribution work:
pnpm --filter @lapis-notes/api check:all. - Workspace UI or app integration:
pnpm --filter @lapis-notes/workspace check:all. - Script or cross-package work:
pnpm check:all. - App-runtime or bootstrap behavior:
pnpm test:smoke. - Spec changes:
make spec-lintandmdbook build specwhen practical.
Every implementation commit that touches code should keep the owning package or contract spec current.