Grimoire Roadmap

July 20, 2026 ยท View on GitHub

Current State

The core local-first product is implemented: save, extract, organize, search, review, back up, restore, and diagnose local issues. Source checkout and Docker are the currently supported run paths. A native installer, signed release archives, and a Homebrew formula are also implemented and undergoing live-installation validation before becoming supported install paths.

Shipped product areas:

  • Bookmark ingestion, content extraction, PDF extraction, YouTube transcript extraction, and asynchronous pipeline status.
  • SQLite storage with keyword search, semantic search, hybrid search, tags, category CRUD, and category drag-and-drop reparenting.
  • Bookmark status actions: pin, archive, mark read, soft delete to Trash, restore from Trash, permanent delete, and 30-day trash purge.
  • Personal notes, editable bookmark details, first-run empty state, daemon-offline banner, and degraded-mode messaging when AI or embeddings are not configured.
  • AI enrichment, embedding generation, related bookmarks, organization agent suggestions, atomic suggestion acceptance, timeline events, and cold-start guard below 20 bookmarks.
  • Settings page for AI, embeddings, runtime settings, app lock, backup destination, scheduled snapshots, and S3-compatible backup targets.
  • Portable backup/restore snapshots with manifest.json, checksums.sha256, snapshot.db, non-secret data/settings.json, rollback directory creation, and restart_required: true restore responses.
  • Native install/upgrade/uninstall script for macOS LaunchAgent and Linux systemd user units.
  • Docker deployment path with one loopback-bound container port (127.0.0.1:3210:3210) serving both frontend and daemon API.
  • Streamable HTTP MCP endpoint at /mcp for bookmark search, reading, creation, and category listing.
  • Source-of-truth API contract in daemon/src/api/contract.ts, generated API.md, generated docs/api-contract.json, and API docs drift checking.
  • Packaged littleimp backup CLI commands for create, list, restore, and local snapshot verification.
  • In-app local backup verification from Settings without restoring the snapshot.
  • Optional encrypted backup packages through the littleimp CLI and Settings.
  • Manual Settings, daemon API, and packaged littleimp update check paths for GitHub Releases-compatible update availability checks.
  • Explicit packaged littleimp update install native upgrade flow with archive download, local archive support, checksum/signature verification, daemon restart, health version verification, and rollback guidance.
  • Signed release archive packaging for macOS and Linux with built frontend assets, daemon runtime files, checksums, and signature-ready manifests.
  • One-command release installer that downloads the platform archive, verifies the published checksum, verifies detached signatures when present, and delegates to the native installer.
  • In-repository Homebrew formula for an alternate MVP install path backed by checksum-verified release archives and brew services.
  • Redacted diagnostics from Settings, littleimp diagnostics, and GET /diagnostics for local support bundles without telemetry.
  • Local and CI quality gates for linting, type-checks, daemon tests, frontend tests, API docs drift checks, production build, Playwright E2E, and Docker health validation.

Migration from Legacy Grimoire (High Priority)

Grimoire 1.0 is a complete rewrite. The legacy Grimoire (SvelteKit + PocketBase) is preserved on the legacy/v0.x branch. A direct data-migration path is a high-priority post-1.0 item โ€” no automated tool ships yet.

  • Supported source versions: Grimoire v0.4 or newer. Older releases are out of scope for the automated importer.
  • The source data shape and field mapping from a PocketBase admin backup ZIP are already documented in docs/parity/grimoire-backup-import-shape.md.
  • The importer will build on the existing browser/Netscape import pipeline and the JSON/CSV export parity fields (notes, read/archive/pinned state, read-later, opened metrics) already shipped for round-tripping.
  • Until the tool lands, v0.4+ users can export from the legacy app and use the current import flows as an interim path.

Future Ideas

Not yet implemented:

  • Packaged browser extension or bookmarklet client for one-click saves, building on the protected local capture endpoint.
  • Multi-device sync of live data.
  • Multi-user or public-network deployment mode, tracked as post-MVP direction research in docs/multi-user-post-mvp-research.md.
  • Optional authentication/rate limiting for non-local deployments.
  • Direct legacy Grimoire backup import tooling (see Migration from Legacy Grimoire above).
  • Plugin system.
  • GitHub Issues extractor.
  • Provider-specific consumer cloud APIs for Google Drive, Dropbox, OneDrive, or iCloud beyond normal synced folders.
  • sqlite-vec-backed vector index optimization if the current float32 BLOB approach becomes a bottleneck.

User Journey Coverage

JourneyStatus
Save a URLShipped
Search saved content by keywordShipped
Search saved content semantically or with hybrid rankingShipped
Add and edit personal notesShipped
Edit title, tags, category, and notesShipped
Pin important bookmarksShipped
Archive and unarchive bookmarksShipped
Move bookmarks to Trash, restore, and permanently deleteShipped
Mark bookmarks as read or unreadShipped
Create, rename, delete, and reparent categoriesShipped
Configure AI and embedding providersShipped
Understand degraded mode when AI or embeddings are unsetShipped
Import browser bookmarksShipped
Export bookmarks to JSON or CSVShipped
Review and accept/reject AI suggestionsShipped
Find related bookmarksShipped
Back up and restore local dataShipped, with daemon restart required after restore
Verify local backups without restoringShipped
Create encrypted backup packages in SettingsShipped
Verify or restore encrypted backup packagesShipped from Settings for packages under the configured backup folder; shipped from CLI for arbitrary local paths
Run through Docker on localhostShipped
Connect through MCP on localhostShipped
Install without cloning the repositoryShipped through release archives and the one-command release installer
Install through HomebrewAlternate MVP path implemented; full install validation is gated on publicly reachable release artifacts
Generate local diagnosticsShipped
Migrate data from legacy Grimoire (v0.4+)Planned (high priority)
Sync live data across devicesFuture

Milestone Summary

MilestoneStatusNotes
M1 Core user journeysCompleteBookmark status actions, notes, Trash, archive, category CRUD, drag-and-drop reparenting.
M2 Settings UICompleteAI, embeddings, runtime settings, app lock, and backup configuration.
M3 AI featuresCompleteEmbeddings, semantic/hybrid search, related bookmarks, organization agent, review queue.
M4 Testing infrastructureCompleteDaemon/unit integration tests, frontend tests, Playwright E2E, API contract drift checks, CI.
M5 Distribution readinessCompleteNative installer, Docker path, first-run/degraded states, backup/restore, and diagnostics.
v1.0 hardeningCompleteRuntime settings, Docker safety, CI, safe backup/restore, API docs source of truth, shared API types, and documentation alignment.

Decisions Log

#QuestionDecision
1Archive vs delete UXArchive is hidden permanently with no expiry and its own page. Trash is a separate 30-day soft-delete state with restore and permanent delete.
2Notes renderingMarkdown read mode with textarea edit mode.
3Pinned bookmark displayPinned bookmarks sort first within the active view.
4Settings surfaceDedicated /settings page.
5Category move UIDrag-and-drop reparenting is primary; "Move to..." remains the fallback/mobile path.
6Test frameworkBun test runner for daemon; Vitest and Playwright for frontend.
7Suggestion acceptanceSuggestion action, acceptance status, and timeline insert happen in one SQLite transaction.
8Auto-apply behaviorConfidence >= 0.9 executes directly and records timeline; lower confidence queues for review.
9Cold-start behaviorUnder 20 bookmarks, organization automation is limited; keyword search still works and semantic search works where embeddings exist.
10Vector storageEmbeddings are stored as float32 BLOBs in SQLite; sqlite-vec remains a future optimization.
11Backup modelBackup is snapshot-based, not live sync. Restore recreates local state from a portable snapshot and requires daemon restart.
12Cloud backup scopeS3-compatible storage is the first remote target. Cloud-synced folders are supported as local destinations.
13Docker network modelDocker binds the host port to 127.0.0.1; container-internal HOST=0.0.0.0 only enables Docker forwarding.
14API documentationdaemon/src/api/contract.ts is the source of truth; API.md and docs/api-contract.json are generated artifacts.
15ScopeGrimoire 1.0 is local-first, single-user, and loopback-first. Multi-user/server mode, endpoint aliases, and packaged browser-extension clients are explicitly out of scope for 1.0.