\n\n\u003Cimg width=\"308\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/0e1beb6b-d06b-436c-b106-c924fead87ab\" />\n\n\u003Cimg width=\"931\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/aef6f71a-fa28-4b7c-b512-e6386e18159a\" />\n\n### Describe the solution you'd like\n\nIn my [pull request](https://github.com/vuejs/vitepress/pull/4630), I've introduced custom components that can be overridden in the `enhanceApp` function. In these custom components, I can add custom logic for rendering text, such as using the Vue compile function. \n\nAdditionally, I added a flag to skip the title update, allowing for custom logic implementation. \n\nPlease also see my PR: [https://github.com/vuejs/vitepress/pull/4630](https://github.com/vuejs/vitepress/pull/4630).\n\n### Describe alternatives you've considered\n\n_No response_\n\n### Additional context\n\n_No response_\n\n### Validations\n\n- [x] Follow our [Code of Conduct](https://vuejs.org/about/coc.html)\n- [x] Read the [docs](https://vitepress.dev).\n- [x] Read the [Contributing Guidelines](https://github.com/vuejs/vitepress/blob/main/.github/contributing.md).\n- [x] Check that there isn't already an issue that asks for the same feature to avoid creating a duplicate.",[],4637,"Sidenav Components / Skip title update","2025-03-20T12:17:14Z","https://github.com/vuejs/vitepress/issues/4637",0.72628486,{"description":2900,"labels":2901,"number":2904,"owner":2866,"repository":2867,"state":2868,"title":2905,"updated_at":2906,"url":2907,"score":2908},"### Is your feature request related to a problem? Please describe.\n\nI want to be able to localize the Code Block feature.\n\n### Describe the solution you'd like\n\nI've found an option to overwrite the copy button tooltip, but it's not present in the `LocaleConfig\u003CThemeConfig>` type, so I can't overwrite it per locale. I couldn't find an existing option to overwrite the \"Copied\" text. I would like to be able to overwrite both strings per locale.\n\n### Describe alternatives you've considered\n\n_No response_\n\n### Additional context\n\nExisting option to overwrite the copy button tooltip:\r\nhttps://github.com/vuejs/vitepress/blob/730fc0851ab323d62757b7822f60e84a7cf93bdf/src/node/markdown/markdown.ts#L113-L117\r\n\r\nStrings to overwrite:\r\n\r\n\r\n\n\n### Validations\n\n- [X] Follow our [Code of Conduct](https://vuejs.org/about/coc.html)\n- [X] Read the [docs](https://vitepress.dev).\n- [X] Read the [Contributing Guidelines](https://github.com/vuejs/vitepress/blob/main/.github/contributing.md).\n- [X] Check that there isn't already an issue that asks for the same feature to avoid creating a duplicate.",[2902,2903],{"name":2857,"color":2858},{"name":2860,"color":2861},4431,"Localize Code Block copy feature","2025-03-02T18:07:56Z","https://github.com/vuejs/vitepress/issues/4431",0.7295186,{"description":2910,"labels":2911,"number":2915,"owner":2866,"repository":2867,"state":2916,"title":2917,"updated_at":2918,"url":2919,"score":2920},"### Describe the bug\r\n\r\nWhen using [`base`](https://vitepress.vuejs.org/config/basics.html#base), `route.path` is different across client and server.\r\n\r\nFor example, when using base `/base/` and logging `route.path`, `vitepress build` will log `/index.html`, but when visited in the browser, it logs `/base/index.html`.\r\n\r\n\r\n### Reproduction\r\n\r\n[Minimal reproduction link](https://github.com/privatenumber/issue-reproductions/tree/master/reproductions/vuejs/vitepress/587)\r\n\r\n1. Create a project with the following files:\r\n\r\n.vitepress/config.js\r\n```js\r\nimport { defineConfig } from 'vitepress'\r\n\r\nexport default defineConfig({\r\n\tbase: '/base/'\r\n})\r\n```\r\n\r\nindex.md:\r\n```html\r\n\u003Cscript setup>\r\nimport { useRoute } from 'vitepress';\r\n\r\nconst route = useRoute();\r\nconsole.log(`\\n\\nBUG: \"route.path\" is different across server and client: \"${route.path}\"\\n\\n`);\r\n\u003C/script>\r\n\r\nHello world\r\n```\r\n\r\n2. Run`vitepress build` and see `/index.html` get logged\r\n\r\n3. Run `vitepress serve` and see `/base/index.html` get logged\r\n\r\n\r\n### Expected behavior\r\n\r\nFor `route.path` to be consistent across server and client.\r\n\r\n### System Info\r\n\r\n```shell\r\nN/A\r\n```\r\n\r\n\r\n### Additional context\r\n\r\nRelated: https://github.com/vuejs/vitepress/issues/446\r\n\r\n### Validations\r\n\r\n- [X] Follow our [Code of Conduct](https://vuejs.org/about/coc.html)\r\n- [X] Read the [docs](https://vitepress.vuejs.org).\r\n- [X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.",[2912],{"name":2913,"color":2914},"duplicate","cfd3d7",587,"closed","base not used in route.path in server side","2023-01-21T16:04:13Z","https://github.com/vuejs/vitepress/issues/587",0.69826055,{"description":2922,"labels":2923,"number":2924,"owner":2866,"repository":2867,"state":2916,"title":2925,"updated_at":2926,"url":2927,"score":2928},"### Is your feature request related to a problem? Please describe.\n\nI'm using Vue components that generate headers dynamically, and (of course) the headers I create in Vue components don't appear in the outline.\n\n### Describe the solution you'd like\n\nI'd like to be able to add headers to `page.headers` in my component.\n\n### Describe alternatives you've considered\n\nI tried manipulating `page.headers` in my component from `useData()`, but the headers are read-only at that point.\n\n### Additional context\n\n_No response_\n\n### Validations\n\n- [X] Follow our [Code of Conduct](https://vuejs.org/about/coc.html)\n- [X] Read the [docs](https://vitepress.vuejs.org).\n- [X] Read the [Contributing Guidelines](https://github.com/vuejs/vitepress/blob/main/.github/contributing.md).\n- [X] Check that there isn't already an issue that asks for the same feature to avoid creating a duplicate.",[],1145,"Dynamic Outline","2023-01-21T14:26:54Z","https://github.com/vuejs/vitepress/issues/1145",0.69984084,{"description":2930,"labels":2931,"number":2932,"owner":2866,"repository":2867,"state":2916,"title":2933,"updated_at":2934,"url":2935,"score":2936},"### Describe the bug\n\nHello, thank you so much for vitepress — we are using it for https://observablehq.com/plot/\r\n\r\nCurrently we see that the instant search **detailed list** feature works in `docs:dev` but does not work with `docs:preview` (nor in production). \r\n\r\nWe are currently using v1.0.0-alpha.72, but I tried locally upgrading to v1.0.0-beta.1 and the issue is still here.\r\n\n\n### Reproduction\n\nClone https://github.com/observablehq/plot\r\nchange vitepress version to v1.0.0-beta.1 in package.json\r\nrun yarn; yarn docs:build; yarn docs:preview\r\nopen the site and search “color”\r\n\r\nscreenshot: left: docs:dev; right: docs:preview\r\n\r\n\r\n\n\n### Expected behavior\n\nThe detailed list should appear.\n\n### System Info\n\n```sh\nSystem:\r\n OS: macOS 13.3.1\r\n CPU: (8) arm64 Apple M1\r\n Memory: 63.64 MB / 16.00 GB\r\n Shell: 5.9 - /bin/zsh\r\n Binaries:\r\n Node: 20.1.0 - ~/.nvm/versions/node/v20.1.0/bin/node\r\n Yarn: 1.22.19 - /opt/homebrew/bin/yarn\r\n npm: 9.6.4 - ~/.nvm/versions/node/v20.1.0/bin/npm\r\n Browsers:\r\n Chrome: 114.0.5735.106\r\n Firefox: 113.0.2\r\n Safari Technology Preview: 16.4\r\n npmPackages:\r\n vitepress: ^1.0.0-beta.1 => 1.0.0-beta.1\n```\n\n\n### Additional context\n\n_No response_\n\n### Validations\n\n- [X] Check if you're on the [latest VitePress version](https://github.com/vuejs/vitepress/releases/latest).\n- [X] Follow our [Code of Conduct](https://vuejs.org/about/coc.html)\n- [X] Read the [docs](https://vitepress.dev).\n- [X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.",[],2485,"Detailed list doesn't work with docs:preview (only works with docs:dev)","2023-06-15T00:04:10Z","https://github.com/vuejs/vitepress/issues/2485",0.7004058,{"description":2938,"labels":2939,"number":2941,"owner":2866,"repository":2867,"state":2916,"title":2942,"updated_at":2943,"url":2944,"score":2945},"### Describe the bug\r\n\r\nUsing both dynamic routing and `lastUpdated: true` causes the build to crash.\r\n\r\n### Reproduction\r\n\r\nI have the following structure:\r\n\r\n```\r\n.vitepress\r\n config.js\r\nsrc\r\n [test]\r\n index.md\r\n index.paths.js\r\n```\r\n\r\nIn `.vitepress/config.js`, `lastUpdated` was set to `true`. The following error occured:\r\n\r\n```\r\n[vitepress] spawn git ENOENT\r\nfile: C:/Users/\u003Cme>/source/repos/\u003Crepo>/src/1234/index.md\r\n✖ building client + server bundles...\r\nbuild error:\r\nError: spawn git ENOENT\r\n at Process.ChildProcess._handle.onexit (node:internal/child_process:283:19)\r\n at onErrorNT (node:internal/child_process:478:16)\r\n at processTicksAndRejections (node:internal/process/task_queues:83:21)\r\n```\r\n\r\nI have determined that the root cause is that: https://github.com/vuejs/vitepress/blob/main/src/node/markdownToVue.ts#L210 doesn't check if the file actually exists, causing https://github.com/vuejs/vitepress/blob/a07f959d472f1976d26c675066204eca9bc7c651/src/node/utils/getGitTimestamp.ts#L4 to spawn a process to get the git log of a nonexistent file, which fails with ENOENT because the file doesn't exist.\r\n\r\n### Expected behavior\r\n\r\nLast updated detection is disabled for dynamic routes.\r\n\r\n### System Info\r\n\r\n```sh\r\nProbably irrelevant, but:\r\n\r\n\r\n System:\r\n OS: Windows 10 10.0.22621\r\n CPU: (16) x64 AMD Ryzen 7 5700U with Radeon Graphics\r\n Memory: 763.48 MB / 9.85 GB\r\n Binaries:\r\n Node: 16.17.0 - C:\\Program Files\\nodejs\\node.EXE\r\n npm: 9.8.0 - C:\\Program Files\\nodejs\\npm.CMD\r\n pnpm: 8.5.0 - C:\\Program Files\\nodejs\\pnpm.CMD\r\n Browsers:\r\n Edge: Spartan (44.22621.1992.0), Chromium (114.0.1823.82)\r\n Internet Explorer: 11.0.22621.1\r\n npmPackages:\r\n vitepress: ^1.0.0-beta.5 => 1.0.0-beta.5\r\n```\r\n\r\n\r\n### Additional context\r\n\r\n_No response_\r\n\r\n### Validations\r\n\r\n- [X] Check if you're on the [latest VitePress version](https://github.com/vuejs/vitepress/releases/latest).\r\n- [X] Follow our [Code of Conduct](https://vuejs.org/about/coc.html)\r\n- [X] Read the [docs](https://vitepress.dev).\r\n- [X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.",[2940],{"name":2857,"color":2858},2646,"Last updated detection doesn't like dynamic routing","2023-08-07T00:04:29Z","https://github.com/vuejs/vitepress/issues/2646",0.703288,{"description":2947,"labels":2948,"number":2952,"owner":2866,"repository":2867,"state":2916,"title":2953,"updated_at":2954,"url":2955,"score":2956},"### Describe the bug\r\n\r\n`Hydration completed but contains mismatches.`\r\n\r\n\r\n\r\nFirst, yes I know there are already a few issues regarding this, but still I couldn't seem to find an answer to the problem. So I've gathered as much info as possible here to be used for debug.\r\n\r\nSecond, I know the meaning of the error. The rendered HTML differs on server/client.\r\n\r\nThis happens because of a markdown-it plugin I added.\r\n\r\nI do not understand why the server and client would render two versions of the markup.\r\n\r\n\r\n\r\n### Reproduction\r\n\r\n\r\nThis is a stripped down version of the markdown file in question\r\n\r\n```md\r\nz\r\n\r\n\r\n\r\ny\r\n\r\n\r\n\r\nx\r\n```\r\n\r\nThis is the markdown-it plugin I added. It will use the \"Test\" title of the image and use it to make a caption under the image.\r\n\r\nThis works fine in dev mode.\r\n\r\n```js\r\n// .vitepress/config.mjs\r\n..\r\nmarkdown: {\r\n // Adding a markup-it plugin\r\n config: md => {\r\n const _super = md.renderer.rules.image\r\n md.renderer.rules.image = function (tokens, idx, options, env, self) {\r\n if (tokens[idx].attrs[2]) {\r\n const title = tokens[idx].attrs[2][1]\r\n const src = tokens[idx].attrs[0][1]\r\n const alt = tokens[idx].content\r\n return `\r\n \u003Cfigure>\r\n \u003Cimg src=\"${src}\" alt=\"${alt}\" title=\"${title}\" />\r\n \u003Cfigcaption align=\"center\">\r\n \u003Csmall style=\"opacity: 0.8\">${title}\u003C/small>\r\n \u003C/figcaption>\r\n \u003C/figure>`\r\n }\r\n return _super(tokens, idx, options, env, self)\r\n }\r\n }\r\n},\r\n..\r\n```\r\n\r\nThis is the **SERVER** rendered markup \r\n(or what I see when `CTRL+u`)\r\n\r\n```html\r\n\u003Cdiv>\r\n \u003Cp>z\u003C/p>\r\n \u003Cp>\u003Cimg src=\"/assets/vitepress-init.P2GuQSTo.jpg\" alt=\"\" />\u003C/p>\r\n \u003Cp>y\u003C/p>\r\n \u003Cp>\r\n \u003Cfigure>\r\n \u003Cimg src=\"/assets/colours.H7Z7cb1m.png\" alt=\"\" title=\"Test\" />\r\n \u003Cfigcaption align=\"center\">\u003Csmall style=\"opacity: 0.8;\">Test\u003C/small>\u003C/figcaption>\r\n \u003C/figure>\r\n \u003C/p>\r\n \u003Cp>x\u003C/p>\r\n\u003C/div>\r\n```\r\n\r\nThis is the **CLIENT** rendered markup\r\n(or what I see when I inspect in the browser `F12`)\r\n\r\n```html\r\n\u003Cdiv>\r\n \u003Cp>z\u003C/p>\r\n \u003Cp>\u003Cimg src=\"/assets/vitepress-init.P2GuQSTo.jpg\" alt=\"\" />\u003C/p>\r\n \u003Cp>y\u003C/p>\r\n \u003Cp>\u003C/p>\r\n \u003Cfigure>\r\n \u003Cimg src=\"/assets/colours.H7Z7cb1m.png\" alt=\"\" title=\"Test\" />\r\n \u003Cfigcaption align=\"center\">\u003Csmall style=\"opacity: 0.8;\">Test\u003C/small>\u003C/figcaption>\r\n \u003C/figure>\r\n\u003C/div>\r\n```\r\n\r\nSo looks like the client has problems rendering. The `\u003Cfigure>` should be inside the empty `\u003Cp>`, but it's not.\r\n\r\nI couldn't find in the core code where the server and client did the actual rendering, so I couldn't debug this further.\r\n\r\nAny help appreciated, thanks a lot\r\n\r\n\r\n\r\n\r\n\r\n### Expected behavior\r\n\r\nI would expect the server and client to render the same output\r\n\r\n### System Info\r\n\r\n```Text\r\nLinux\r\nVitePress v1.0.1\r\nNode 21.7.1\r\n```\r\n\r\n\r\n### Additional context\r\n\r\n_No response_\r\n\r\n### Validations\r\n\r\n- [X] Check if you're on the [latest VitePress version](https://github.com/vuejs/vitepress/releases/latest).\r\n- [X] Follow our [Code of Conduct](https://vuejs.org/about/coc.html)\r\n- [X] Read the [docs](https://vitepress.dev).\r\n- [X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.",[2949],{"name":2950,"color":2951},"bug: pending triage","e99695",3702,"Hydration completed but contains mismatches","2024-05-01T04:42:08Z","https://github.com/vuejs/vitepress/issues/3702",0.70502216,["Reactive",2958],{},["Set"],["ShallowReactive",2961],{"$fTRc1wZytZ_XrK4EfJfei_Sz-An4H4Yy6syhVxH_PVJc":-1,"$f3XAs_AyXr-2CNHCEc1pdBHrSCU3oypYGSRb58XAJeQM":-1},"/vuejs/vitepress/2892"]