--- title: '⚠️ 1.0.0-rc.165 Breaking Change Notice: Blog & Notes Features Migrated to "Collections"' sticky: true createTime: 2025/10/09 22:18:52 permalink: /en/blog/dk58a4t2/ tags: - Breaking Change - Important Update --- :::important ‼️ This update is a BREAKING CHANGE! The blog and notes features have been entirely migrated to a new "Collections" architecture. ‼️ ::: ## Design Motivation: Why Introduce "Collections"? [Jump to Migration Guide 👇👇👇](#migration-guide){.read-more} ### Background & Problem Analysis The theme initially only supported the **blog** feature, treating all Markdown files under the `docs` source directory as blog posts. As the version iterated, we added the **notes/knowledge base** feature, defaulting the `notes` directory as the root for notes and excluding its content from the blog list. This phased implementation led to an **architectural imbalance**: the blog became a "first-class citizen," while the notes feature appeared marginalized. This caused the following issues for users: - **Path Redundancy**: Note files had to be stored under the `notes/` directory, adding unnecessary directory levels. - **Complex Links**: When `autoFrontmatter` was not enabled, URLs were forced to include the `/notes/` prefix. - **Conceptual Confusion**: Users were often confused about the functional difference between "notes" and "docs." - **Cumbersome Configuration**: Extra adjustments to the `notes.dir` configuration were needed to achieve a standard documentation site structure. These design flaws were legacy issues from historical iterations, and we sincerely apologize for the inconvenience. ### Solution: Unified Content Abstraction After researching mainstream static site generators (like Hugo, VitePress) and full-stack frameworks (like Nuxt), we drew inspiration from the `collection` concept in `@nuxt/content`. We decided to introduce **Collections** as a unified unit for content organization. Whether it's a blog, notes, documentation, or a knowledge base, they are essentially specific collections of Markdown files, differing only in their presentation. :::important Core Insight: Use the "Collection" abstraction to unify the organization of various content types while preserving their respective display characteristics. ::: Based on content characteristics, we defined two collection types: - **`post` type**: Suitable for fragmented, loosely related content (e.g., blogs, columns), providing an article list as a navigation entry. - **`doc` type**: Suitable for structured, strongly related content (e.g., documentation, manuals), providing a sidebar for quick navigation. This design solves the historical architectural problems and lays the foundation for extending more content types in the future. ## Migration Guide ### Core Concepts - **Collection**: Specified via `collection.dir`; all Markdown files under this directory belong to the collection. - **Collection Type**: - `post`: Fragmented content, supports article list navigation. - `doc`: Structured content, supports sidebar navigation. ### Configuration Migration Replace the original `blog` and `notes` configurations: ```ts twoslash // @noErrors import { defineUserConfig } from 'vuepress' import { plumeTheme } from 'vuepress-theme-plume' export default defineUserConfig({ theme: plumeTheme({ // [!code --:9] // Remove old blog and notes configuration blog: { /* Blog configuration */ }, notes: { link: '/', dir: '/notes/', notes: [ { dir: 'typescript', link: '/typescript/', sidebar: 'auto' } ] }, // [!code ++:17] // Use collections configuration collections: [ { type: 'post', // Replaces original blog functionality dir: 'blog', // Points to docs/blog directory title: 'Blog' // Collection display name // Original blog configuration continues here // ... }, { type: 'doc', // Replaces original notes functionality dir: 'typescript', // Points to docs/typescript directory title: 'TypeScript Notes', linkPrefix: '/typescript/', // Page link prefix, sidebar judgment basis sidebar: 'auto', // Auto-generate sidebar }, ] }) }) ``` ### Directory Structure Adjustment Migrate files according to the following steps: **Procedure:** 1. Move subdirectories under the `notes` directory directly to the `docs` root directory. 2. Create a `blog` directory and move original blog posts into it. 3. Remove the now-empty `notes` directory. :::: flex