mirror of
https://github.com/jackyzha0/quartz.git
synced 2026-03-21 21:45:42 -05:00
chore: remove completed migration planning docs
This commit is contained in:
parent
f970ee7788
commit
0664d71ef5
1116
MIGRATION_TASKS.md
1116
MIGRATION_TASKS.md
File diff suppressed because it is too large
Load Diff
@ -1,548 +0,0 @@
|
||||
# Quartz Plugin Migration Analysis
|
||||
|
||||
This document provides a comprehensive analysis of which Quartz v4 plugins and components can be migrated to separate repositories, along with strategies and recommendations for each migration.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [Executive Summary](#executive-summary)
|
||||
2. [Migration Categories](#migration-categories)
|
||||
3. [Component Analysis](#component-analysis)
|
||||
4. [Plugin Analysis](#plugin-analysis)
|
||||
5. [Migration Strategies](#migration-strategies)
|
||||
6. [Lessons Learned](#lessons-learned)
|
||||
7. [Recommended Migration Order](#recommended-migration-order)
|
||||
|
||||
---
|
||||
|
||||
## Executive Summary
|
||||
|
||||
Quartz v4 consists of **25 components** and **25 plugins** (13 transformers, 2 filters, 12 emitters). Not all of these are suitable for migration to external repositories. This analysis categorizes each based on:
|
||||
|
||||
- **Complexity** - How much code and dependencies are involved
|
||||
- **Independence** - Whether it can function without deep Quartz integration
|
||||
- **Community Value** - Whether external plugins would benefit the ecosystem
|
||||
- **Customization Demand** - How often users want to customize this feature
|
||||
|
||||
### Summary Statistics
|
||||
|
||||
| Category | Total | Good Candidates | Moderate | Core Only |
|
||||
| ------------ | ----- | --------------- | -------- | --------- |
|
||||
| Components | 25 | 8 | 7 | 10 |
|
||||
| Transformers | 13 | 5 | 4 | 4 |
|
||||
| Emitters | 12 | 3 | 4 | 5 |
|
||||
| Filters | 2 | 1 | 1 | 0 |
|
||||
|
||||
---
|
||||
|
||||
## Migration Categories
|
||||
|
||||
### ✅ Good Candidates
|
||||
|
||||
Components/plugins that are:
|
||||
|
||||
- Self-contained with clear boundaries
|
||||
- Frequently customized by users
|
||||
- Have potential for community variations
|
||||
- Can work with the standard plugin API
|
||||
|
||||
### ⚠️ Moderate Candidates
|
||||
|
||||
Components/plugins that:
|
||||
|
||||
- Have some dependencies on Quartz internals
|
||||
- Might need API adjustments to externalize
|
||||
- Could benefit from being plugins but require more work
|
||||
|
||||
### ❌ Core Only
|
||||
|
||||
Components/plugins that:
|
||||
|
||||
- Are fundamental to Quartz's operation
|
||||
- Have deep integration with build system
|
||||
- Would create versioning nightmares if externalized
|
||||
- Are rarely customized
|
||||
|
||||
---
|
||||
|
||||
## Component Analysis
|
||||
|
||||
### ✅ Good Candidates for Migration
|
||||
|
||||
#### 1. Explorer (Already Migrated)
|
||||
|
||||
**Status**: ✅ Migrated to `@quartz-community/explorer`
|
||||
|
||||
**Complexity**: High (FileTrieNode, state persistence, mobile navigation)
|
||||
**Dependencies**: Content index data
|
||||
**Value**: High - users frequently want custom sorting, filtering, and styling
|
||||
|
||||
**Migration Notes**:
|
||||
|
||||
- Required reimplementing FileTrieNode for client-side
|
||||
- Needed path utilities (simplifySlug, folder prefix detection)
|
||||
- State persistence via localStorage works well as standalone
|
||||
|
||||
#### 2. Graph (Already Migrated)
|
||||
|
||||
**Status**: ✅ Migrated to `@quartz-community/graph`
|
||||
|
||||
**Complexity**: Very High (D3 force simulation, PixiJS rendering)
|
||||
**Dependencies**: Content index, D3, PixiJS (loaded from CDN)
|
||||
**Value**: High - visual feature that differentiates Quartz
|
||||
|
||||
**Migration Notes**:
|
||||
|
||||
- Loads D3/PixiJS from CDN to avoid bundling large dependencies
|
||||
- Configuration is self-contained via data attributes
|
||||
- Works well as standalone plugin
|
||||
|
||||
#### 3. Search (Already Migrated)
|
||||
|
||||
**Status**: ✅ Migrated to `@quartz-community/search`
|
||||
|
||||
**Complexity**: High (FlexSearch indexing, CJK support, preview)
|
||||
**Dependencies**: Content index, FlexSearch
|
||||
**Value**: High - core feature with customization demand
|
||||
|
||||
**Migration Notes**:
|
||||
|
||||
- FlexSearch can be imported as ESM module
|
||||
- Preview fetching works via standard fetch API
|
||||
- Keyboard shortcuts are self-contained
|
||||
|
||||
#### 4. TableOfContents
|
||||
|
||||
**Status**: 📋 Recommended for migration
|
||||
|
||||
**Complexity**: Medium
|
||||
**Dependencies**: Heading data from transformer
|
||||
**Value**: Medium - users want different TOC styles
|
||||
|
||||
**Migration Strategy**:
|
||||
|
||||
```
|
||||
1. Extract TableOfContents.tsx and toc.inline.ts
|
||||
2. Pass heading data via data attributes
|
||||
3. Style variations via CSS variables
|
||||
4. Support different depth/scroll behavior options
|
||||
```
|
||||
|
||||
#### 5. Backlinks
|
||||
|
||||
**Status**: 📋 Recommended for migration
|
||||
|
||||
**Complexity**: Medium
|
||||
**Dependencies**: Content index (backlinks data)
|
||||
**Value**: Medium - some users want custom backlink displays
|
||||
|
||||
**Migration Strategy**:
|
||||
|
||||
```
|
||||
1. Extract Backlinks.tsx
|
||||
2. Fetch backlinks from contentIndex.json
|
||||
3. Support custom rendering templates
|
||||
4. Add filtering options
|
||||
```
|
||||
|
||||
#### 6. RecentNotes
|
||||
|
||||
**Status**: 📋 Recommended for migration
|
||||
|
||||
**Complexity**: Low-Medium
|
||||
**Dependencies**: Content metadata
|
||||
**Value**: Medium - popular feature with customization needs
|
||||
|
||||
**Migration Strategy**:
|
||||
|
||||
```
|
||||
1. Extract component and date sorting logic
|
||||
2. Make limit, filter, and sort configurable
|
||||
3. Support custom card templates
|
||||
```
|
||||
|
||||
#### 7. Comments
|
||||
|
||||
**Status**: 📋 Recommended for migration
|
||||
|
||||
**Complexity**: Low (wrapper for external services)
|
||||
**Dependencies**: External comment providers (Giscus, Utterances, etc.)
|
||||
**Value**: High - many comment system variations exist
|
||||
|
||||
**Migration Strategy**:
|
||||
|
||||
```
|
||||
1. Create base Comments interface
|
||||
2. Implement Giscus, Utterances, Disqus variants
|
||||
3. Each provider as separate plugin or single plugin with providers
|
||||
```
|
||||
|
||||
#### 8. Breadcrumbs
|
||||
|
||||
**Status**: 📋 Recommended for migration
|
||||
|
||||
**Complexity**: Low
|
||||
**Dependencies**: Path parsing
|
||||
**Value**: Low-Medium - some customization demand
|
||||
|
||||
**Migration Strategy**:
|
||||
|
||||
```
|
||||
1. Extract component with path utilities
|
||||
2. Make separator, styling configurable
|
||||
3. Add options for hiding/showing parts
|
||||
```
|
||||
|
||||
### ⚠️ Moderate Candidates
|
||||
|
||||
#### 9. Darkmode
|
||||
|
||||
**Status**: ⚠️ Consider migration
|
||||
|
||||
**Complexity**: Low
|
||||
**Dependencies**: Theme system (CSS variables)
|
||||
**Concerns**: Tightly coupled to Quartz's theme system
|
||||
|
||||
**Migration Consideration**:
|
||||
|
||||
- Could work if theme contract is stable
|
||||
- Would need to document required CSS variables
|
||||
- Risk: theme changes could break external plugins
|
||||
|
||||
#### 10. ReaderMode
|
||||
|
||||
**Status**: ⚠️ Consider migration
|
||||
|
||||
**Complexity**: Low
|
||||
**Dependencies**: Layout system, CSS
|
||||
**Concerns**: Affects layout which is Quartz-controlled
|
||||
|
||||
#### 11. TagList
|
||||
|
||||
**Status**: ⚠️ Consider migration
|
||||
|
||||
**Complexity**: Low
|
||||
**Dependencies**: Frontmatter tags
|
||||
**Value**: Low - simple component
|
||||
|
||||
#### 12. ContentMeta
|
||||
|
||||
**Status**: ⚠️ Consider migration
|
||||
|
||||
**Complexity**: Low
|
||||
**Dependencies**: Frontmatter, date formatting
|
||||
**Value**: Low-Medium
|
||||
|
||||
#### 13. Footer
|
||||
|
||||
**Status**: ⚠️ Consider migration
|
||||
|
||||
**Complexity**: Low
|
||||
**Dependencies**: Site configuration
|
||||
**Value**: Low - simple customization
|
||||
|
||||
#### 14. Flex
|
||||
|
||||
**Status**: ⚠️ Consider migration
|
||||
|
||||
**Complexity**: Very Low
|
||||
**Dependencies**: None
|
||||
**Value**: Low - utility component
|
||||
|
||||
#### 15. ConditionalRender
|
||||
|
||||
**Status**: ⚠️ Consider migration
|
||||
|
||||
**Complexity**: Very Low
|
||||
**Dependencies**: Page context
|
||||
**Value**: Low - utility component
|
||||
|
||||
### ❌ Core Only (Do Not Migrate)
|
||||
|
||||
#### 16. Content, TagContent, FolderContent
|
||||
|
||||
**Reason**: Core page rendering, deeply integrated with build system
|
||||
|
||||
#### 17. NotFound (404)
|
||||
|
||||
**Reason**: Needs to integrate with routing system
|
||||
|
||||
#### 18. Head
|
||||
|
||||
**Reason**: SEO and metadata, tightly coupled to configuration
|
||||
|
||||
#### 19. PageTitle
|
||||
|
||||
**Reason**: Simple, rarely customized, core branding
|
||||
|
||||
#### 20. ArticleTitle
|
||||
|
||||
**Reason**: Simple, part of core layout
|
||||
|
||||
#### 21. Spacer
|
||||
|
||||
**Reason**: Trivial utility, not worth externalizing
|
||||
|
||||
#### 22. DesktopOnly / MobileOnly
|
||||
|
||||
**Reason**: Layout utilities, simple CSS wrappers
|
||||
|
||||
---
|
||||
|
||||
## Plugin Analysis
|
||||
|
||||
### Transformer Plugins
|
||||
|
||||
#### ✅ Good Candidates
|
||||
|
||||
| Plugin | Complexity | Value | Migration Notes |
|
||||
| ---------------------------- | ---------- | --------- | -------------------------------------------- |
|
||||
| **ObsidianFlavoredMarkdown** | High | Very High | Popular, many want customization |
|
||||
| **RoamFlavoredMarkdown** | Medium | Medium | Niche but valuable for Roam users |
|
||||
| **OxHugoFlavouredMarkdown** | Medium | Medium | Niche for Hugo migrants |
|
||||
| **Citations** | Medium | Medium | Academic users want variations |
|
||||
| **Latex** | Medium | High | Math rendering variations (KaTeX vs MathJax) |
|
||||
|
||||
#### ⚠️ Moderate Candidates
|
||||
|
||||
| Plugin | Complexity | Concerns |
|
||||
| ---------------------- | ---------- | ------------------------------------------- |
|
||||
| **SyntaxHighlighting** | Medium | Many themes exist, could externalize themes |
|
||||
| **TableOfContents** | Low | Generates heading data for component |
|
||||
| **Description** | Low | Simple, stable |
|
||||
| **HardLineBreaks** | Very Low | Trivial |
|
||||
|
||||
#### ❌ Core Only
|
||||
|
||||
| Plugin | Reason |
|
||||
| -------------------------- | ---------------------------------- |
|
||||
| **FrontMatter** | Fundamental to content parsing |
|
||||
| **GitHubFlavoredMarkdown** | Base markdown features |
|
||||
| **CreatedModifiedDate** | Deep git integration |
|
||||
| **CrawlLinks** | Link resolution integral to Quartz |
|
||||
|
||||
### Emitter Plugins
|
||||
|
||||
#### ✅ Good Candidates
|
||||
|
||||
| Plugin | Complexity | Value | Migration Notes |
|
||||
| ------------------ | ---------- | ------ | ------------------------------------ |
|
||||
| **CustomOgImages** | High | High | Users want custom OG generation |
|
||||
| **CNAME** | Very Low | Medium | Simple but useful for custom domains |
|
||||
| **Favicon** | Low | Low | Simple file operations |
|
||||
|
||||
#### ⚠️ Moderate Candidates
|
||||
|
||||
| Plugin | Complexity | Concerns |
|
||||
| ------------------ | ---------- | ---------------------------------------------- |
|
||||
| **ContentIndex** | Medium | Core data structure, careful versioning needed |
|
||||
| **AliasRedirects** | Low | Simple but integrated with routing |
|
||||
| **Static** | Low | File copying, stable |
|
||||
| **Assets** | Low | File copying, stable |
|
||||
|
||||
#### ❌ Core Only
|
||||
|
||||
| Plugin | Reason |
|
||||
| ---------------------- | -------------------- |
|
||||
| **ContentPage** | Core page generation |
|
||||
| **TagPage** | Core page type |
|
||||
| **FolderPage** | Core page type |
|
||||
| **ComponentResources** | CSS/JS bundling |
|
||||
| **NotFoundPage** | 404 generation |
|
||||
|
||||
### Filter Plugins
|
||||
|
||||
| Plugin | Status | Notes |
|
||||
| ------------------- | ----------- | ----------------------------- |
|
||||
| **RemoveDrafts** | ⚠️ Moderate | Simple, could have variations |
|
||||
| **ExplicitPublish** | ⚠️ Moderate | Alternative publishing model |
|
||||
|
||||
---
|
||||
|
||||
## Migration Strategies
|
||||
|
||||
### Strategy 1: Client-Side Component (Recommended for UI)
|
||||
|
||||
Best for: Explorer, Graph, Search, TableOfContents, Backlinks
|
||||
|
||||
```
|
||||
Components with client-side interactivity:
|
||||
1. Export TSX component with factory pattern
|
||||
2. Inline scripts bundled as strings
|
||||
3. SCSS styles bundled as strings
|
||||
4. Configuration via data attributes
|
||||
5. Data fetched from /static/contentIndex.json
|
||||
```
|
||||
|
||||
**Pros**: Complete independence, clear boundaries
|
||||
**Cons**: Requires reimplementing utilities
|
||||
|
||||
### Strategy 2: Transformer Plugin
|
||||
|
||||
Best for: Markdown extensions, syntax variations
|
||||
|
||||
```
|
||||
Transformer plugins:
|
||||
1. Export factory function returning plugin object
|
||||
2. Implement markdownPlugins() for remark plugins
|
||||
3. Implement htmlPlugins() for rehype plugins
|
||||
4. Optionally inject CSS/JS via externalResources()
|
||||
```
|
||||
|
||||
**Pros**: Clean API, well-documented pattern
|
||||
**Cons**: Limited to markdown/HTML transformation
|
||||
|
||||
### Strategy 3: Emitter Plugin
|
||||
|
||||
Best for: Output generation, file processing
|
||||
|
||||
```
|
||||
Emitter plugins:
|
||||
1. Export factory function returning plugin object
|
||||
2. Implement emit() for file generation
|
||||
3. Optionally implement partialEmit() for incremental builds
|
||||
4. Declare dependencies via getQuartzComponents()
|
||||
```
|
||||
|
||||
**Pros**: Full control over output
|
||||
**Cons**: More complex API, needs build system understanding
|
||||
|
||||
### Strategy 4: Hybrid (Component + Emitter)
|
||||
|
||||
Best for: Features needing both UI and data generation
|
||||
|
||||
```
|
||||
Graph-like features:
|
||||
1. Component plugin for UI rendering
|
||||
2. Emitter plugin for data generation
|
||||
3. Clear data contract between them
|
||||
```
|
||||
|
||||
**Pros**: Flexibility, separation of concerns
|
||||
**Cons**: More complex to maintain
|
||||
|
||||
---
|
||||
|
||||
## Lessons Learned
|
||||
|
||||
From migrating Explorer, Graph, and Search:
|
||||
|
||||
### 1. Path Utilities Are Essential
|
||||
|
||||
Every component needs path helpers:
|
||||
|
||||
- `simplifySlug()` - Remove trailing `/index`
|
||||
- `getCurrentSlug()` - Parse current URL
|
||||
- Folder prefix detection for navigation
|
||||
|
||||
**Recommendation**: Create `@quartz-community/utils` package
|
||||
|
||||
### 2. Content Index Is The Data Contract
|
||||
|
||||
All components fetch from `/static/contentIndex.json`. Document this format:
|
||||
|
||||
```typescript
|
||||
interface ContentIndex {
|
||||
[slug: string]: {
|
||||
title: string
|
||||
links: string[]
|
||||
tags: string[]
|
||||
content: string
|
||||
// ... other fields
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Event System Is Stable
|
||||
|
||||
Quartz's navigation events work reliably:
|
||||
|
||||
- `nav` - After page load/navigation
|
||||
- `prenav` - Before navigation (save state)
|
||||
- `window.addCleanup()` - Register cleanup handlers
|
||||
|
||||
### 4. CDN Loading Works Well
|
||||
|
||||
For large dependencies (D3, PixiJS, FlexSearch):
|
||||
|
||||
- Load from CDN at runtime
|
||||
- Avoids bundling bloat
|
||||
- Users can self-host if needed
|
||||
|
||||
### 5. TypeScript Limitations
|
||||
|
||||
Inline scripts run in browser context:
|
||||
|
||||
- Use `@ts-nocheck` directive
|
||||
- Document expected globals
|
||||
- Provide type stubs if needed
|
||||
|
||||
### 6. State Persistence Patterns
|
||||
|
||||
Standard patterns work:
|
||||
|
||||
- `localStorage` for persistent state (folder states)
|
||||
- `sessionStorage` for session state (scroll positions)
|
||||
- URL hash for shareable state (if needed)
|
||||
|
||||
---
|
||||
|
||||
## Recommended Migration Order
|
||||
|
||||
Based on value, complexity, and community demand:
|
||||
|
||||
### Phase 1: High Value, Already Migrated ✅
|
||||
|
||||
1. ~~Explorer~~ - Complete
|
||||
2. ~~Graph~~ - Complete
|
||||
3. ~~Search~~ - Complete
|
||||
|
||||
### Phase 2: High Value, Medium Complexity
|
||||
|
||||
4. **Comments** - Many provider variations needed
|
||||
5. **TableOfContents** - Frequently customized
|
||||
6. **Backlinks** - Popular feature
|
||||
|
||||
### Phase 3: Medium Value, Low Complexity
|
||||
|
||||
7. **RecentNotes** - Common customization
|
||||
8. **Breadcrumbs** - Simple migration
|
||||
9. **Latex** - Math rendering variations
|
||||
|
||||
### Phase 4: Transformer Plugins
|
||||
|
||||
10. **ObsidianFlavoredMarkdown** - High demand
|
||||
11. **Citations** - Academic users
|
||||
12. **RoamFlavoredMarkdown** - Niche but valuable
|
||||
|
||||
### Phase 5: Emitter Plugins
|
||||
|
||||
13. **CustomOgImages** - High customization demand
|
||||
14. **ContentIndex** - Careful versioning needed
|
||||
|
||||
### Phase 6: Evaluate Based on Demand
|
||||
|
||||
- Darkmode (if theme API stabilizes)
|
||||
- SyntaxHighlighting themes
|
||||
- Other minor components
|
||||
|
||||
---
|
||||
|
||||
## Appendix: Migration Checklist
|
||||
|
||||
For each plugin migration:
|
||||
|
||||
- [ ] Create repository from plugin-template
|
||||
- [ ] Copy component/plugin code
|
||||
- [ ] Replace Quartz imports with `@quartz-community/types`
|
||||
- [ ] Reimplement required utilities (path helpers, etc.)
|
||||
- [ ] Add `@ts-nocheck` for inline scripts
|
||||
- [ ] Update data fetching to use `/static/contentIndex.json`
|
||||
- [ ] Handle both data formats (`data.content || data`)
|
||||
- [ ] Test with `npm run build`
|
||||
- [ ] Test with actual Quartz site
|
||||
- [ ] Document configuration options
|
||||
- [ ] Add to plugin registry
|
||||
|
||||
---
|
||||
|
||||
_This document was generated based on analysis of Quartz v4 codebase and lessons learned from migrating Explorer, Graph, and Search plugins._
|
||||
Loading…
Reference in New Issue
Block a user