{"owner":"vuejs","repo":"core","hasSkills":true,"totalSkillsCount":12,"totalTokensCount":8649,"categories":["plugin-manifest"],"hasMcp":false,"mcpConfig":null,"found":["packages/compiler-core/README.md","packages/compiler-dom/README.md","packages/compiler-sfc/README.md","packages/compiler-ssr/README.md","packages/reactivity/README.md","packages/runtime-core/README.md","packages/runtime-dom/README.md","packages/runtime-test/README.md","packages/server-renderer/README.md","packages/shared/README.md","packages/vue-compat/README.md","packages/vue/README.md"],"skills":{"packages/compiler-core/README.md":"# @vue/compiler-core\n","packages/compiler-dom/README.md":"# @vue/compiler-dom\n","packages/compiler-sfc/README.md":"# @vue/compiler-sfc\n\n> Lower level utilities for compiling Vue Single File Components\n\n**Note: as of 3.2.13+, this package is included as a dependency of the main `vue` package and can be accessed as `vue/compiler-sfc`. This means you no longer need to explicitly install this package and ensure its version matches that of `vue`'s. Just use the main `vue/compiler-sfc` deep import instead.**\n\nThis package contains lower level utilities that you can use if you are writing a plugin / transform for a bundler or module system that compiles Vue Single File Components (SFCs) into JavaScript. It is used in [vue-loader](https://github.com/vuejs/vue-loader) and [@vitejs/plugin-vue](https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue).\n\n## API\n\nThe API is intentionally low-level due to the various considerations when integrating Vue SFCs in a build system:\n\n- Separate hot-module replacement (HMR) for script, template and styles\n  - template updates should not reset component state\n  - style updates should be performed without component re-render\n\n- Leveraging the tool's plugin system for pre-processor handling. e.g. `<style lang=\"scss\">` should be processed by the corresponding webpack loader.\n\n- In some cases, transformers of each block in an SFC do not share the same execution context. For example, when used with `thread-loader` or other parallelized configurations, the template sub-loader in `vue-loader` may not have access to the full SFC and its descriptor.\n\nThe general idea is to generate a facade module that imports the individual blocks of the component. The trick is the module imports itself with different query strings so that the build system can handle each request as \"virtual\" modules:\n\n```\n                                  +--------------------+\n                                  |                    |\n                                  |  script transform  |\n                           +----->+                    |\n                           |      +--------------------+\n                           |\n+--------------------+     |      +--------------------+\n|                    |     |      |                    |\n|  facade transform  +----------->+ template transform |\n|                    |     |      |                    |\n+--------------------+     |      +--------------------+\n                           |\n                           |      +--------------------+\n                           +----->+                    |\n                                  |  style transform   |\n                                  |                    |\n                                  +--------------------+\n```\n\nWhere the facade module looks like this:\n\n```js\n// main script\nimport script from '/project/foo.vue?vue&type=script'\n// template compiled to render function\nimport { render } from '/project/foo.vue?vue&type=template&id=xxxxxx'\n// css\nimport '/project/foo.vue?vue&type=style&index=0&id=xxxxxx'\n\n// attach render function to script\nscript.render = render\n\n// attach additional metadata\n// some of these should be dev only\nscript.__file = 'example.vue'\nscript.__scopeId = 'xxxxxx'\n\n// additional tooling-specific HMR handling code\n// using __VUE_HMR_API__ global\n\nexport default script\n```\n\n### High Level Workflow\n\n1. In facade transform, parse the source into descriptor with the `parse` API and generate the above facade module code based on the descriptor;\n\n2. In script transform, use `compileScript` to process the script. This handles features like `<script setup>` and CSS variable injection. Alternatively, this can be done directly in the facade module (with the code inlined instead of imported), but it will require rewriting `export default` to a temp variable (a `rewriteDefault` convenience API is provided for this purpose) so additional options can be attached to the exported object.\n\n3. In template transform, use `compileTemplate` to compile the raw template into render function code.\n\n4. In style transform, use `compileStyle` to compile raw CSS to handle `<style scoped>`, `<style module>` and CSS variable injection.\n\nOptions needed for these APIs can be passed via the query string.\n\nFor detailed API references and options, check out the source type definitions. For actual usage of these APIs, check out [@vitejs/plugin-vue](https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue) or [vue-loader](https://github.com/vuejs/vue-loader/tree/next).\n","packages/compiler-ssr/README.md":"# @vue/compiler-ssr\n","packages/reactivity/README.md":"# @vue/reactivity\n\n## Usage Note\n\nThis package is inlined into Global & Browser ESM builds of user-facing renderers (e.g. `@vue/runtime-dom`), but also published as a package that can be used standalone. The standalone build should not be used alongside a pre-bundled build of a user-facing renderer, as they will have different internal storage for reactivity connections. A user-facing renderer should re-export all APIs from this package.\n\nFor full exposed APIs, see `src/index.ts`.\n\n## Credits\n\nThe implementation of this module is inspired by the following prior art in the JavaScript ecosystem:\n\n- [Meteor Tracker](https://docs.meteor.com/api/tracker.html)\n- [nx-js/observer-util](https://github.com/nx-js/observer-util)\n- [salesforce/observable-membrane](https://github.com/salesforce/observable-membrane)\n\n## Caveats\n\n- Built-in objects are not observed except for `Array`, `Map`, `WeakMap`, `Set` and `WeakSet`.\n","packages/runtime-core/README.md":"# @vue/runtime-core\n\n> This package is published only for typing and building custom renderers. It is NOT meant to be used in applications.\n\nFor full exposed APIs, see `src/index.ts`.\n\n## Building a Custom Renderer\n\n```ts\nimport { createRenderer } from '@vue/runtime-core'\n\nconst { render, createApp } = createRenderer({\n  patchProp,\n  insert,\n  remove,\n  createElement,\n  // ...\n})\n\n// `render` is the low-level API\n// `createApp` returns an app instance with configurable context shared\n// by the entire app tree.\nexport { render, createApp }\n\nexport * from '@vue/runtime-core'\n```\n\nSee `@vue/runtime-dom` for how a DOM-targeting renderer is implemented.\n","packages/runtime-dom/README.md":"# @vue/runtime-dom\n\n```js\nimport { h, createApp } from '@vue/runtime-dom'\n\nconst RootComponent = {\n  render() {\n    return h('div', 'hello world')\n  },\n}\n\ncreateApp(RootComponent).mount('#app')\n```\n","packages/runtime-test/README.md":"# @vue/runtime-test\n\nThis is for Vue's own internal tests only - it ensures logic tested using this package is DOM-agnostic, and it runs faster than JSDOM.\n\nIt can also be used as a reference for implementing a custom renderer.\n\n```js\nimport { h, render, nodeOps, dumpOps } from '@vue/runtime-test'\n\nconst App = {\n  data() {\n    return {\n      msg: 'Hello World!',\n    }\n  },\n  render() {\n    return h('div', this.msg)\n  },\n}\n\n// root is of type `TestElement` as defined in src/nodeOps.ts\nconst root = nodeOps.createElement('div')\nrender(h(App), root)\n\nconst ops = dumpOps()\nconsole.log(ops)\n```\n","packages/server-renderer/README.md":"# @vue/server-renderer\n\n**Note: as of 3.2.13+, this package is included as a dependency of the main `vue` package and can be accessed as `vue/server-renderer`. This means you no longer need to explicitly install this package and ensure its version matches that of `vue`'s. Just use the `vue/server-renderer` deep import instead.**\n\n## Basic API\n\n### `renderToString`\n\n**Signature**\n\n```ts\nfunction renderToString(\n  input: App | VNode,\n  context?: SSRContext,\n): Promise<string>\n```\n\n**Usage**\n\n```js\nconst { createSSRApp } = require('vue')\nconst { renderToString } = require('@vue/server-renderer')\n\nconst app = createSSRApp({\n  data: () => ({ msg: 'hello' }),\n  template: `<div>{{ msg }}</div>`,\n})\n\n;(async () => {\n  const html = await renderToString(app)\n  console.log(html)\n})()\n```\n\n### Handling Teleports\n\nIf the rendered app contains teleports, the teleported content will not be part of the rendered string. Instead, they are exposed under the `teleports` property of the ssr context object:\n\n```js\nconst ctx = {}\nconst html = await renderToString(app, ctx)\n\nconsole.log(ctx.teleports) // { '#teleported': 'teleported content' }\n```\n\n## Streaming API\n\n### `renderToNodeStream`\n\nRenders input as a [Node.js Readable stream](https://nodejs.org/api/stream.html#stream_class_stream_readable).\n\n**Signature**\n\n```ts\nfunction renderToNodeStream(input: App | VNode, context?: SSRContext): Readable\n```\n\n**Usage**\n\n```js\n// inside a Node.js http handler\nrenderToNodeStream(app).pipe(res)\n```\n\n**Note:** This method is not supported in the ESM build of `@vue/server-renderer`, which is decoupled from Node.js environments. Use `pipeToNodeWritable` instead.\n\n### `pipeToNodeWritable`\n\nRender and pipe to an existing [Node.js Writable stream](https://nodejs.org/api/stream.html#stream_writable_streams) instance.\n\n**Signature**\n\n```ts\nfunction pipeToNodeWritable(\n  input: App | VNode,\n  context: SSRContext = {},\n  writable: Writable,\n): void\n```\n\n**Usage**\n\n```js\n// inside a Node.js http handler\npipeToNodeWritable(app, {}, res)\n```\n\n### `renderToWebStream`\n\nRenders input as a [Web ReadableStream](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API).\n\n**Signature**\n\n```ts\nfunction renderToWebStream(\n  input: App | VNode,\n  context?: SSRContext,\n): ReadableStream\n```\n\n**Usage**\n\n```js\n// inside an environment with ReadableStream support\nreturn new Response(renderToWebStream(app))\n```\n\n**Note:** in environments that do not expose `ReadableStream` constructor in the global scope, `pipeToWebWritable` should be used instead.\n\n### `pipeToWebWritable`\n\nRender and pipe to an existing [Web WritableStream](https://developer.mozilla.org/en-US/docs/Web/API/WritableStream) instance.\n\n**Signature**\n\n```ts\nfunction pipeToWebWritable(\n  input: App | VNode,\n  context: SSRContext = {},\n  writable: WritableStream,\n): void\n```\n\n**Usage**\n\nThis is typically used in combination with [`TransformStream`](https://developer.mozilla.org/en-US/docs/Web/API/TransformStream):\n\n```js\n// TransformStream is available in environments such as CloudFlare workers.\n// in Node.js, TransformStream needs to be explicitly imported from 'stream/web'\nconst { readable, writable } = new TransformStream()\npipeToWebWritable(app, {}, writable)\n\nreturn new Response(readable)\n```\n\n### `renderToSimpleStream`\n\nRenders input in streaming mode using a simple readable interface.\n\n**Signature**\n\n```ts\nfunction renderToSimpleStream(\n  input: App | VNode,\n  context: SSRContext,\n  options: SimpleReadable,\n): SimpleReadable\n\ninterface SimpleReadable {\n  push(content: string | null): void\n  destroy(err: any): void\n}\n```\n\n**Usage**\n\n```js\nlet res = ''\n\nrenderToSimpleStream(\n  app,\n  {},\n  {\n    push(chunk) {\n      if (chunk === null) {\n        // done\n        console.log(`render complete: ${res}`)\n      } else {\n        res += chunk\n      }\n    },\n    destroy(err) {\n      // error encountered\n    },\n  },\n)\n```\n","packages/shared/README.md":"# @vue/shared\n\nInternal utility functions and constants shared across `@vue` packages.\n","packages/vue-compat/README.md":"## Overview\n\n`@vue/compat` (aka \"the migration build\") is a build of Vue 3 that provides configurable Vue 2 compatible behavior.\n\nThe migration build runs in Vue 2 mode by default - most public APIs behave exactly like Vue 2, with only a few exceptions. Usage of features that have changed or been deprecated in Vue 3 will emit runtime warnings. A feature's compatibility can also be enabled/disabled on a per-component basis.\n\n### Intended Use Cases\n\n- Upgrading a Vue 2 application to Vue 3 (with [limitations](#known-limitations))\n- Migrating a library to support Vue 3\n- For experienced Vue 2 developers who have not tried Vue 3 yet, the migration build can be used in place of Vue 3 to help learn the difference between versions.\n\n### Known Limitations\n\nWhile we've tried hard to make the migration build mimic Vue 2 behavior as much as possible, there are some limitations that may prevent your app from being eligible for upgrading:\n\n- Dependencies that rely on Vue 2 internal APIs or undocumented behavior. The most common case is usage of private properties on `VNodes`. If your project relies on component libraries like [Vuetify](https://vuetifyjs.com/en/), [Quasar](https://quasar.dev/) or [ElementUI](https://element.eleme.io/#/en-US), it is best to wait for their Vue 3 compatible versions.\n\n- Internet Explorer 11 support: [Vue 3 has officially dropped the plan for IE11 support](https://github.com/vuejs/rfcs/blob/master/active-rfcs/0038-vue3-ie11-support.md). If you still need to support IE11 or below, you will have to stay on Vue 2.\n\n- Server-side rendering: the migration build can be used for SSR, but migrating a custom SSR setup is much more involved. The general idea is replacing `vue-server-renderer` with [`@vue/server-renderer`](https://github.com/vuejs/core/tree/main/packages/server-renderer). Vue 3 no longer provides a bundle renderer and it is recommended to use Vue 3 SSR with [Vite](https://vite.dev/guide/ssr). If you are using [Nuxt.js](https://nuxtjs.org/), it is probably better to wait for Nuxt 3.\n\n### Expectations\n\nPlease note that the migration build aims to cover only publicly documented Vue 2 APIs and behavior. If your application fails to run under the migration build due to reliance on undocumented behavior, it is unlikely that we'll tweak the migration build to cater to your specific case. Consider refactoring to remove reliance on the behavior in question instead.\n\nA word of caution: if your application is large and complex, migration will likely be a challenge even with the migration build. If your app is unfortunately not suitable for upgrade, do note that we are planning to backport Composition API and some other Vue 3 features to the 2.7 release (estimated late Q3 2021).\n\nIf you do get your app running on the migration build, you **can** ship it to production before the migration is complete. Although there is a small performance/size overhead, it should not noticeably affect production UX. You may have to do so when you have dependencies that rely on Vue 2 behavior, and cannot be upgraded/replaced.\n\nThe migration build will be provided starting with 3.1, and will continue to be published alongside the 3.2 release line. We do plan to eventually stop publishing the migration build in a future minor version (no earlier than EOY 2021), so you should still aim to switch to the standard build before then.\n\n## Upgrade Workflow\n\nThe following workflow walks through the steps of migrating an actual Vue 2 app (Vue HackerNews 2.0) to Vue 3. The full commits can be found [here](https://github.com/vuejs/vue-hackernews-2.0/compare/migration). Note that the actual steps required for your project may vary, and these steps should be treated as general guidance rather than strict instructions.\n\n### Preparations\n\n- If you are still using the [deprecated named / scoped slot syntax](https://vuejs.org/v2/guide/components-slots.html#Deprecated-Syntax), update it to the latest syntax first (which is already supported in 2.6).\n\n### Installation\n\n1. Upgrade tooling if applicable.\n   - If using custom webpack setup: Upgrade `vue-loader` to `^16.0.0`.\n   - If using `vue-cli`: upgrade to the latest `@vue/cli-service` with `vue upgrade`\n   - (Alternative) migrate to [Vite](https://vite.dev/) + [vite-plugin-vue2](https://github.com/underfin/vite-plugin-vue2). [[Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/565b948919eb58f22a32afca7e321b490cb3b074)]\n\n2. In `package.json`, update `vue` to 3.1, install `@vue/compat` of the same version, and replace `vue-template-compiler` (if present) with `@vue/compiler-sfc`:\n\n   ```diff\n   \"dependencies\": {\n   -  \"vue\": \"^2.6.12\",\n   +  \"vue\": \"^3.1.0\",\n   +  \"@vue/compat\": \"^3.1.0\"\n      ...\n   },\n   \"devDependencies\": {\n   -  \"vue-template-compiler\": \"^2.6.12\"\n   +  \"@vue/compiler-sfc\": \"^3.1.0\"\n   }\n   ```\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/14f6f1879b43f8610add60342661bf915f5c4b20)\n\n3. In the build setup, alias `vue` to `@vue/compat` and enable compat mode via Vue compiler options.\n\n   **Example Configs**\n\n   <details>\n     <summary><b>vue-cli</b></summary>\n\n   ```js\n   // vue.config.js\n   module.exports = {\n     chainWebpack: config => {\n       config.resolve.alias.set('vue', '@vue/compat')\n\n       config.module\n         .rule('vue')\n         .use('vue-loader')\n         .tap(options => {\n           return {\n             ...options,\n             compilerOptions: {\n               compatConfig: {\n                 MODE: 2,\n               },\n             },\n           }\n         })\n     },\n   }\n   ```\n\n   </details>\n\n   <details>\n     <summary><b>Plain webpack</b></summary>\n\n   ```js\n   // webpack.config.js\n   module.exports = {\n     resolve: {\n       alias: {\n         vue: '@vue/compat',\n       },\n     },\n     module: {\n       rules: [\n         {\n           test: /\\.vue$/,\n           loader: 'vue-loader',\n           options: {\n             compilerOptions: {\n               compatConfig: {\n                 MODE: 2,\n               },\n             },\n           },\n         },\n       ],\n     },\n   }\n   ```\n\n   </details>\n\n   <details>\n     <summary><b>Vite</b></summary>\n\n   ```js\n   // vite.config.js\n   export default {\n     resolve: {\n       alias: {\n         vue: '@vue/compat',\n       },\n     },\n     plugins: [\n       vue({\n         template: {\n           compilerOptions: {\n             compatConfig: {\n               MODE: 2,\n             },\n           },\n         },\n       }),\n     ],\n   }\n   ```\n\n   </details>\n\n4. At this point, your application may encounter some compile-time errors / warnings (e.g. use of filters). Fix them first. If all compiler warnings are gone, you can also set the compiler to Vue 3 mode.\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/b05d9555f6e115dea7016d7e5a1a80e8f825be52)\n\n5. After fixing the errors, the app should be able to run if it is not subject to the [limitations](#known-limitations) mentioned above.\n\n   You will likely see a LOT of warnings from both the command line and the browser console. Here are some general tips:\n   - You can filter for specific warnings in the browser console. It's a good idea to use the filter and focus on fixing one item at a time. You can also use negated filters like `-GLOBAL_MOUNT`.\n\n   - You can suppress specific deprecations via [compat configuration](#compat-configuration).\n\n   - Some warnings may be caused by a dependency that you use (e.g. `vue-router`). You can check this from the warning's component trace or stack trace (expanded on click). Focus on fixing the warnings that originate from your own source code first.\n\n   - If you are using `vue-router`, note `<transition>` and `<keep-alive>` will not work with `<router-view>` until you upgrade to `vue-router` v4.\n\n6. Update [`<transition>` class names](https://v3-migration.vuejs.org/breaking-changes/transition.html). This is the only feature that does not have a runtime warning. You can do a project-wide search for `.*-enter` and `.*-leave` CSS class names.\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/d300103ba622ae26ac26a82cd688e0f70b6c1d8f)\n\n7. Update app entry to use [new global mounting API](https://v3-migration.vuejs.org/breaking-changes/global-api.html#a-new-global-api-createapp).\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/a6e0c9ac7b1f4131908a4b1e43641f608593f714)\n\n8. [Upgrade `vuex` to v4](https://next.vuex.vuejs.org/guide/migrating-to-4-0-from-3-x.html).\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/5bfd4c61ee50f358cd5daebaa584f2c3f91e0205)\n\n9. [Upgrade `vue-router` to v4](https://next.router.vuejs.org/guide/migration/index.html). If you also use `vuex-router-sync`, you can replace it with a store getter.\n\n   After the upgrade, to use `<transition>` and `<keep-alive>` with `<router-view>` requires using the new [scoped-slot based syntax](https://next.router.vuejs.org/guide/migration/index.html#router-view-keep-alive-and-transition).\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/758961e73ac4089890079d4ce14996741cf9344b)\n\n10. Pick off individual warnings. Note some features have conflicting behavior between Vue 2 and Vue 3 - for example, the render function API, or the functional component vs. async component change. To migrate to Vue 3 API without affecting the rest of the application, you can opt-in to Vue 3 behavior on a per-component basis with the [`compatConfig` option](#per-component-config).\n\n    [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/d0c7d3ae789be71b8fd56ce79cb4cb1f921f893b)\n\n11. When all warnings are fixed, you can remove the migration build and switch to Vue 3 proper. Note you may not be able to do so if you still have dependencies that rely on Vue 2 behavior.\n\n    [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/9beb45490bc5f938c9e87b4ac1357cfb799565bd)\n\n## Compat Configuration\n\n### Global Config\n\nCompat features can be disabled individually:\n\n```js\nimport { configureCompat } from 'vue'\n\n// disable compat for certain features\nconfigureCompat({\n  FEATURE_ID_A: false,\n  FEATURE_ID_B: false,\n})\n```\n\nAlternatively, the entire application can default to Vue 3 behavior, with only certain compat features enabled:\n\n```js\nimport { configureCompat } from 'vue'\n\n// default everything to Vue 3 behavior, and only enable compat\n// for certain features\nconfigureCompat({\n  MODE: 3,\n  FEATURE_ID_A: true,\n  FEATURE_ID_B: true,\n})\n```\n\n### Per-Component Config\n\nA component can use the `compatConfig` option, which expects the same options as the global `configureCompat` method:\n\n```js\nexport default {\n  compatConfig: {\n    MODE: 3, // opt-in to Vue 3 behavior for this component only\n    FEATURE_ID_A: true, // features can also be toggled at component level\n  },\n  // ...\n}\n```\n\n### Compiler-specific Config\n\nFeatures that start with `COMPILER_` are compiler-specific: if you are using the full build (with in-browser compiler), they can be configured at runtime. However if using a build setup, they must be configured via the `compilerOptions` in the build config instead (see example configs above).\n\n## Feature Reference\n\n### Compatibility Types\n\n- ✔ Fully compatible\n- ◐ Partially Compatible with caveats\n- ⨂ Incompatible (warning only)\n- ⭘ Compat only (no warning)\n\n### Incompatible\n\n> Should be fixed upfront or will likely lead to errors\n\n| ID                                    | Type | Description                                                             | Docs                                                                                                           |\n| ------------------------------------- | ---- | ----------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |\n| GLOBAL_MOUNT_CONTAINER                | ⨂    | Mounted application does not replace the element it's mounted to        | [link](https://v3-migration.vuejs.org/breaking-changes/mount-changes.html)                                     |\n| CONFIG_DEVTOOLS                       | ⨂    | production devtools is now a build-time flag                            | [link](https://github.com/vuejs/core/tree/main/packages/vue#bundler-build-feature-flags)                       |\n| COMPILER_V_IF_V_FOR_PRECEDENCE        | ⨂    | `v-if` and `v-for` precedence when used on the same element has changed | [link](https://v3-migration.vuejs.org/breaking-changes/v-if-v-for.html)                                        |\n| COMPILER_V_IF_SAME_KEY                | ⨂    | `v-if` branches can no longer have the same key                         | [link](https://v3-migration.vuejs.org/breaking-changes/key-attribute.html#on-conditional-branches)             |\n| COMPILER_V_FOR_TEMPLATE_KEY_PLACEMENT | ⨂    | `<template v-for>` key should now be placed on `<template>`             | [link](https://v3-migration.vuejs.org/breaking-changes/key-attribute.html#with-template-v-for)                 |\n| COMPILER_SFC_FUNCTIONAL               | ⨂    | `<template functional>` is no longer supported in SFCs                  | [link](https://v3-migration.vuejs.org/breaking-changes/functional-components.html#single-file-components-sfcs) |\n\n### Partially Compatible with Caveats\n\n| ID                       | Type | Description                                                                                                                                                                                | Docs                                                                                                                         |\n| ------------------------ | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- |\n| CONFIG_IGNORED_ELEMENTS  | ◐    | `config.ignoredElements` is now `config.compilerOptions.isCustomElement` (only in browser compiler build). If using build setup, `isCustomElement` must be passed via build configuration. | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#config-ignoredelements-is-now-config-iscustomelement) |\n| COMPILER_INLINE_TEMPLATE | ◐    | `inline-template` removed (compat only supported in browser compiler build)                                                                                                                | [link](https://v3-migration.vuejs.org/breaking-changes/inline-template-attribute.html)                                       |\n| PROPS_DEFAULT_THIS       | ◐    | props default factory no longer have access to `this` (in compat mode, `this` is not a real instance - it only exposes props, `$options` and injections)                                   | [link](https://v3-migration.vuejs.org/breaking-changes/props-default-this.html)                                              |\n| INSTANCE_DESTROY         | ◐    | `$destroy` instance method removed (in compat mode, only supported on root instance)                                                                                                       |                                                                                                                              |\n| GLOBAL_PRIVATE_UTIL      | ◐    | `Vue.util` is private and no longer available                                                                                                                                              |                                                                                                                              |\n| CONFIG_PRODUCTION_TIP    | ◐    | `config.productionTip` no longer necessary                                                                                                                                                 | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#config-productiontip-removed)                         |\n| CONFIG_SILENT            | ◐    | `config.silent` removed                                                                                                                                                                    |\n\n### Compat only (no warning)\n\n| ID                 | Type | Description                            | Docs                                                                    |\n| ------------------ | ---- | -------------------------------------- | ----------------------------------------------------------------------- |\n| TRANSITION_CLASSES | ⭘    | Transition enter/leave classes changed | [link](https://v3-migration.vuejs.org/breaking-changes/transition.html) |\n\n### Fully Compatible\n\n| ID                           | Type | Description                                                           | Docs                                                                                                                      |\n| ---------------------------- | ---- | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |\n| GLOBAL_MOUNT                 | ✔    | new Vue() -> createApp                                                | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#mounting-app-instance)                             |\n| GLOBAL_EXTEND                | ✔    | Vue.extend removed (use `defineComponent` or `extends` option)        | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#vue-extend-replaced-by-definecomponent)            |\n| GLOBAL_PROTOTYPE             | ✔    | `Vue.prototype` -> `app.config.globalProperties`                      | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#vue-prototype-replaced-by-config-globalproperties) |\n| GLOBAL_SET                   | ✔    | `Vue.set` removed (no longer needed)                                  |                                                                                                                           |\n| GLOBAL_DELETE                | ✔    | `Vue.delete` removed (no longer needed)                               |                                                                                                                           |\n| GLOBAL_OBSERVABLE            | ✔    | `Vue.observable` removed (use `reactive`)                             | [link](https://vuejs.org/api/reactivity-core.html#reactive)                                                               |\n| CONFIG_KEY_CODES             | ✔    | config.keyCodes removed                                               | [link](https://v3-migration.vuejs.org/breaking-changes/keycode-modifiers.html)                                            |\n| CONFIG_WHITESPACE            | ✔    | In Vue 3 whitespace defaults to `\"condense\"`                          |                                                                                                                           |\n| INSTANCE_SET                 | ✔    | `vm.$set` removed (no longer needed)                                  |                                                                                                                           |\n| INSTANCE_DELETE              | ✔    | `vm.$delete` removed (no longer needed)                               |                                                                                                                           |\n| INSTANCE_EVENT_EMITTER       | ✔    | `vm.$on`, `vm.$off`, `vm.$once` removed                               | [link](https://v3-migration.vuejs.org/breaking-changes/events-api.html)                                                   |\n| INSTANCE_EVENT_HOOKS         | ✔    | Instance no longer emits `hook:x` events                              | [link](https://v3-migration.vuejs.org/breaking-changes/vnode-lifecycle-events.html)                                       |\n| INSTANCE_CHILDREN            | ✔    | `vm.$children` removed                                                | [link](https://v3-migration.vuejs.org/breaking-changes/children.html)                                                     |\n| INSTANCE_LISTENERS           | ✔    | `vm.$listeners` removed                                               | [link](https://v3-migration.vuejs.org/breaking-changes/listeners-removed.html)                                            |\n| INSTANCE_SCOPED_SLOTS        | ✔    | `vm.$scopedSlots` removed; `vm.$slots` now exposes functions          | [link](https://v3-migration.vuejs.org/breaking-changes/slots-unification.html)                                            |\n| INSTANCE_ATTRS_CLASS_STYLE   | ✔    | `$attrs` now includes `class` and `style`                             | [link](https://v3-migration.vuejs.org/breaking-changes/attrs-includes-class-style.html)                                   |\n| OPTIONS_DATA_FN              | ✔    | `data` must be a function in all cases                                | [link](https://v3-migration.vuejs.org/breaking-changes/data-option.html)                                                  |\n| OPTIONS_DATA_MERGE           | ✔    | `data` from mixin or extension is now shallow merged                  | [link](https://v3-migration.vuejs.org/breaking-changes/data-option.html)                                                  |\n| OPTIONS_BEFORE_DESTROY       | ✔    | `beforeDestroy` -> `beforeUnmount`                                    |                                                                                                                           |\n| OPTIONS_DESTROYED            | ✔    | `destroyed` -> `unmounted`                                            |                                                                                                                           |\n| WATCH_ARRAY                  | ✔    | watching an array no longer triggers on mutation unless deep          | [link](https://v3-migration.vuejs.org/breaking-changes/watch.html)                                                        |\n| V_ON_KEYCODE_MODIFIER        | ✔    | `v-on` no longer supports keyCode modifiers                           | [link](https://v3-migration.vuejs.org/breaking-changes/keycode-modifiers.html)                                            |\n| CUSTOM_DIR                   | ✔    | Custom directive hook names changed                                   | [link](https://v3-migration.vuejs.org/breaking-changes/custom-directives.html)                                            |\n| ATTR_FALSE_VALUE             | ✔    | No longer removes attribute if binding value is boolean `false`       | [link](https://v3-migration.vuejs.org/breaking-changes/attribute-coercion.html)                                           |\n| ATTR_ENUMERATED_COERCION     | ✔    | No longer special case enumerated attributes                          | [link](https://v3-migration.vuejs.org/breaking-changes/attribute-coercion.html)                                           |\n| TRANSITION_GROUP_ROOT        | ✔    | `<transition-group>` no longer renders a root element by default      | [link](https://v3-migration.vuejs.org/breaking-changes/transition-group.html)                                             |\n| COMPONENT_ASYNC              | ✔    | Async component API changed (now requires `defineAsyncComponent`)     | [link](https://v3-migration.vuejs.org/breaking-changes/async-components.html)                                             |\n| COMPONENT_FUNCTIONAL         | ✔    | Functional component API changed (now must be plain functions)        | [link](https://v3-migration.vuejs.org/breaking-changes/functional-components.html)                                        |\n| COMPONENT_V_MODEL            | ✔    | Component v-model reworked                                            | [link](https://v3-migration.vuejs.org/breaking-changes/v-model.html)                                                      |\n| RENDER_FUNCTION              | ✔    | Render function API changed                                           | [link](https://v3-migration.vuejs.org/breaking-changes/render-function-api.html)                                          |\n| FILTERS                      | ✔    | Filters removed (this option affects only runtime filter APIs)        | [link](https://v3-migration.vuejs.org/breaking-changes/filters.html)                                                      |\n| COMPILER_IS_ON_ELEMENT       | ✔    | `is` usage is now restricted to `<component>` only                    | [link](https://v3-migration.vuejs.org/breaking-changes/custom-elements-interop.html)                                      |\n| COMPILER_V_BIND_SYNC         | ✔    | `v-bind.sync` replaced by `v-model` with arguments                    | [link](https://v3-migration.vuejs.org/breaking-changes/v-model.html)                                                      |\n| COMPILER_V_BIND_OBJECT_ORDER | ✔    | `v-bind=\"object\"` is now order sensitive                              | [link](https://v3-migration.vuejs.org/breaking-changes/v-bind.html)                                                       |\n| COMPILER_V_ON_NATIVE         | ✔    | `v-on.native` modifier removed                                        | [link](https://v3-migration.vuejs.org/breaking-changes/v-on-native-modifier-removed.html)                                 |\n| COMPILER_V_FOR_REF           | ✔    | `ref` in `v-for` (compiler support)                                   |                                                                                                                           |\n| COMPILER_NATIVE_TEMPLATE     | ✔    | `<template>` with no special directives now renders as native element |                                                                                                                           |\n| COMPILER_FILTERS             | ✔    | filters (compiler support)                                            |                                                                                                                           |\n","packages/vue/README.md":"# vue\n\n## Which dist file to use?\n\n### From CDN or without a Bundler\n\n- **`vue(.runtime).global(.prod).js`**:\n  - For direct use via `<script src=\"...\">` in the browser. Exposes the `Vue` global.\n  - Note that global builds are not [UMD](https://github.com/umdjs/umd) builds. They are built as [IIFEs](https://developer.mozilla.org/en-US/docs/Glossary/IIFE) and are only meant for direct use via `<script src=\"...\">`.\n  - In-browser template compilation:\n    - **`vue.global.js`** is the \"full\" build that includes both the compiler and the runtime so it supports compiling templates on the fly.\n    - **`vue.runtime.global.js`** contains only the runtime and requires templates to be pre-compiled during a build step.\n  - Inlines all Vue core internal packages - i.e. it's a single file with no dependencies on other files. This means you **must** import everything from this file and this file only to ensure you are getting the same instance of code.\n  - Contains hard-coded prod/dev branches, and the prod build is pre-minified. Use the `*.prod.js` files for production.\n\n- **`vue(.runtime).esm-browser(.prod).js`**:\n  - For usage via native ES modules imports (in browser via `<script type=\"module\">`).\n  - Shares the same runtime compilation, dependency inlining and hard-coded prod/dev behavior with the global build.\n\n### With a Bundler\n\n- **`vue(.runtime).esm-bundler.js`**:\n  - For use with bundlers like `webpack`, `rollup` and `parcel`.\n  - Leaves prod/dev branches with `process.env.NODE_ENV` guards (must be replaced by bundler)\n  - Does not ship minified builds (to be done together with the rest of the code after bundling)\n  - Imports dependencies (e.g. `@vue/runtime-core`, `@vue/compiler-core`)\n    - Imported dependencies are also `esm-bundler` builds and will in turn import their dependencies (e.g. `@vue/runtime-core` imports `@vue/reactivity`)\n    - This means you **can** install/import these deps individually without ending up with different instances of these dependencies, but you must make sure they all resolve to the same version.\n  - In-browser template compilation:\n    - **`vue.runtime.esm-bundler.js` (default)** is runtime only, and requires all templates to be pre-compiled. This is the default entry for bundlers (via `module` field in `package.json`) because when using a bundler templates are typically pre-compiled (e.g. in `*.vue` files).\n    - **`vue.esm-bundler.js`**: includes the runtime compiler. Use this if you are using a bundler but still want runtime template compilation (e.g. in-DOM templates or templates via inline JavaScript strings). You will need to configure your bundler to alias `vue` to this file.\n\n#### Bundler Build Feature Flags\n\n[Detailed Reference on vuejs.org](https://vuejs.org/api/compile-time-flags.html)\n\n`esm-bundler` builds of Vue expose global feature flags that can be overwritten at compile time:\n\n- `__VUE_OPTIONS_API__`\n  - Default: `true`\n  - Enable / disable Options API support\n\n- `__VUE_PROD_DEVTOOLS__`\n  - Default: `false`\n  - Enable / disable devtools support in production\n\n- `__VUE_PROD_HYDRATION_MISMATCH_DETAILS__`\n  - Default: `false`\n  - Enable / disable detailed warnings for hydration mismatches in production\n\nThe build will work without configuring these flags, however it is **strongly recommended** to properly configure them in order to get proper tree-shaking in the final bundle.\n\n### For Server-Side Rendering\n\n- **`vue.cjs(.prod).js`**:\n  - For use in Node.js server-side rendering via `require()`.\n  - If you bundle your app with webpack with `target: 'node'` and properly externalize `vue`, this is the build that will be loaded.\n  - The dev/prod files are pre-built, but the appropriate file is automatically required based on `process.env.NODE_ENV`.\n"},"files":{"packages/compiler-core/README.md":"# @vue/compiler-core\n","packages/compiler-dom/README.md":"# @vue/compiler-dom\n","packages/compiler-sfc/README.md":"# @vue/compiler-sfc\n\n> Lower level utilities for compiling Vue Single File Components\n\n**Note: as of 3.2.13+, this package is included as a dependency of the main `vue` package and can be accessed as `vue/compiler-sfc`. This means you no longer need to explicitly install this package and ensure its version matches that of `vue`'s. Just use the main `vue/compiler-sfc` deep import instead.**\n\nThis package contains lower level utilities that you can use if you are writing a plugin / transform for a bundler or module system that compiles Vue Single File Components (SFCs) into JavaScript. It is used in [vue-loader](https://github.com/vuejs/vue-loader) and [@vitejs/plugin-vue](https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue).\n\n## API\n\nThe API is intentionally low-level due to the various considerations when integrating Vue SFCs in a build system:\n\n- Separate hot-module replacement (HMR) for script, template and styles\n  - template updates should not reset component state\n  - style updates should be performed without component re-render\n\n- Leveraging the tool's plugin system for pre-processor handling. e.g. `<style lang=\"scss\">` should be processed by the corresponding webpack loader.\n\n- In some cases, transformers of each block in an SFC do not share the same execution context. For example, when used with `thread-loader` or other parallelized configurations, the template sub-loader in `vue-loader` may not have access to the full SFC and its descriptor.\n\nThe general idea is to generate a facade module that imports the individual blocks of the component. The trick is the module imports itself with different query strings so that the build system can handle each request as \"virtual\" modules:\n\n```\n                                  +--------------------+\n                                  |                    |\n                                  |  script transform  |\n                           +----->+                    |\n                           |      +--------------------+\n                           |\n+--------------------+     |      +--------------------+\n|                    |     |      |                    |\n|  facade transform  +----------->+ template transform |\n|                    |     |      |                    |\n+--------------------+     |      +--------------------+\n                           |\n                           |      +--------------------+\n                           +----->+                    |\n                                  |  style transform   |\n                                  |                    |\n                                  +--------------------+\n```\n\nWhere the facade module looks like this:\n\n```js\n// main script\nimport script from '/project/foo.vue?vue&type=script'\n// template compiled to render function\nimport { render } from '/project/foo.vue?vue&type=template&id=xxxxxx'\n// css\nimport '/project/foo.vue?vue&type=style&index=0&id=xxxxxx'\n\n// attach render function to script\nscript.render = render\n\n// attach additional metadata\n// some of these should be dev only\nscript.__file = 'example.vue'\nscript.__scopeId = 'xxxxxx'\n\n// additional tooling-specific HMR handling code\n// using __VUE_HMR_API__ global\n\nexport default script\n```\n\n### High Level Workflow\n\n1. In facade transform, parse the source into descriptor with the `parse` API and generate the above facade module code based on the descriptor;\n\n2. In script transform, use `compileScript` to process the script. This handles features like `<script setup>` and CSS variable injection. Alternatively, this can be done directly in the facade module (with the code inlined instead of imported), but it will require rewriting `export default` to a temp variable (a `rewriteDefault` convenience API is provided for this purpose) so additional options can be attached to the exported object.\n\n3. In template transform, use `compileTemplate` to compile the raw template into render function code.\n\n4. In style transform, use `compileStyle` to compile raw CSS to handle `<style scoped>`, `<style module>` and CSS variable injection.\n\nOptions needed for these APIs can be passed via the query string.\n\nFor detailed API references and options, check out the source type definitions. For actual usage of these APIs, check out [@vitejs/plugin-vue](https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue) or [vue-loader](https://github.com/vuejs/vue-loader/tree/next).\n","packages/compiler-ssr/README.md":"# @vue/compiler-ssr\n","packages/reactivity/README.md":"# @vue/reactivity\n\n## Usage Note\n\nThis package is inlined into Global & Browser ESM builds of user-facing renderers (e.g. `@vue/runtime-dom`), but also published as a package that can be used standalone. The standalone build should not be used alongside a pre-bundled build of a user-facing renderer, as they will have different internal storage for reactivity connections. A user-facing renderer should re-export all APIs from this package.\n\nFor full exposed APIs, see `src/index.ts`.\n\n## Credits\n\nThe implementation of this module is inspired by the following prior art in the JavaScript ecosystem:\n\n- [Meteor Tracker](https://docs.meteor.com/api/tracker.html)\n- [nx-js/observer-util](https://github.com/nx-js/observer-util)\n- [salesforce/observable-membrane](https://github.com/salesforce/observable-membrane)\n\n## Caveats\n\n- Built-in objects are not observed except for `Array`, `Map`, `WeakMap`, `Set` and `WeakSet`.\n","packages/runtime-core/README.md":"# @vue/runtime-core\n\n> This package is published only for typing and building custom renderers. It is NOT meant to be used in applications.\n\nFor full exposed APIs, see `src/index.ts`.\n\n## Building a Custom Renderer\n\n```ts\nimport { createRenderer } from '@vue/runtime-core'\n\nconst { render, createApp } = createRenderer({\n  patchProp,\n  insert,\n  remove,\n  createElement,\n  // ...\n})\n\n// `render` is the low-level API\n// `createApp` returns an app instance with configurable context shared\n// by the entire app tree.\nexport { render, createApp }\n\nexport * from '@vue/runtime-core'\n```\n\nSee `@vue/runtime-dom` for how a DOM-targeting renderer is implemented.\n","packages/runtime-dom/README.md":"# @vue/runtime-dom\n\n```js\nimport { h, createApp } from '@vue/runtime-dom'\n\nconst RootComponent = {\n  render() {\n    return h('div', 'hello world')\n  },\n}\n\ncreateApp(RootComponent).mount('#app')\n```\n","packages/runtime-test/README.md":"# @vue/runtime-test\n\nThis is for Vue's own internal tests only - it ensures logic tested using this package is DOM-agnostic, and it runs faster than JSDOM.\n\nIt can also be used as a reference for implementing a custom renderer.\n\n```js\nimport { h, render, nodeOps, dumpOps } from '@vue/runtime-test'\n\nconst App = {\n  data() {\n    return {\n      msg: 'Hello World!',\n    }\n  },\n  render() {\n    return h('div', this.msg)\n  },\n}\n\n// root is of type `TestElement` as defined in src/nodeOps.ts\nconst root = nodeOps.createElement('div')\nrender(h(App), root)\n\nconst ops = dumpOps()\nconsole.log(ops)\n```\n","packages/server-renderer/README.md":"# @vue/server-renderer\n\n**Note: as of 3.2.13+, this package is included as a dependency of the main `vue` package and can be accessed as `vue/server-renderer`. This means you no longer need to explicitly install this package and ensure its version matches that of `vue`'s. Just use the `vue/server-renderer` deep import instead.**\n\n## Basic API\n\n### `renderToString`\n\n**Signature**\n\n```ts\nfunction renderToString(\n  input: App | VNode,\n  context?: SSRContext,\n): Promise<string>\n```\n\n**Usage**\n\n```js\nconst { createSSRApp } = require('vue')\nconst { renderToString } = require('@vue/server-renderer')\n\nconst app = createSSRApp({\n  data: () => ({ msg: 'hello' }),\n  template: `<div>{{ msg }}</div>`,\n})\n\n;(async () => {\n  const html = await renderToString(app)\n  console.log(html)\n})()\n```\n\n### Handling Teleports\n\nIf the rendered app contains teleports, the teleported content will not be part of the rendered string. Instead, they are exposed under the `teleports` property of the ssr context object:\n\n```js\nconst ctx = {}\nconst html = await renderToString(app, ctx)\n\nconsole.log(ctx.teleports) // { '#teleported': 'teleported content' }\n```\n\n## Streaming API\n\n### `renderToNodeStream`\n\nRenders input as a [Node.js Readable stream](https://nodejs.org/api/stream.html#stream_class_stream_readable).\n\n**Signature**\n\n```ts\nfunction renderToNodeStream(input: App | VNode, context?: SSRContext): Readable\n```\n\n**Usage**\n\n```js\n// inside a Node.js http handler\nrenderToNodeStream(app).pipe(res)\n```\n\n**Note:** This method is not supported in the ESM build of `@vue/server-renderer`, which is decoupled from Node.js environments. Use `pipeToNodeWritable` instead.\n\n### `pipeToNodeWritable`\n\nRender and pipe to an existing [Node.js Writable stream](https://nodejs.org/api/stream.html#stream_writable_streams) instance.\n\n**Signature**\n\n```ts\nfunction pipeToNodeWritable(\n  input: App | VNode,\n  context: SSRContext = {},\n  writable: Writable,\n): void\n```\n\n**Usage**\n\n```js\n// inside a Node.js http handler\npipeToNodeWritable(app, {}, res)\n```\n\n### `renderToWebStream`\n\nRenders input as a [Web ReadableStream](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API).\n\n**Signature**\n\n```ts\nfunction renderToWebStream(\n  input: App | VNode,\n  context?: SSRContext,\n): ReadableStream\n```\n\n**Usage**\n\n```js\n// inside an environment with ReadableStream support\nreturn new Response(renderToWebStream(app))\n```\n\n**Note:** in environments that do not expose `ReadableStream` constructor in the global scope, `pipeToWebWritable` should be used instead.\n\n### `pipeToWebWritable`\n\nRender and pipe to an existing [Web WritableStream](https://developer.mozilla.org/en-US/docs/Web/API/WritableStream) instance.\n\n**Signature**\n\n```ts\nfunction pipeToWebWritable(\n  input: App | VNode,\n  context: SSRContext = {},\n  writable: WritableStream,\n): void\n```\n\n**Usage**\n\nThis is typically used in combination with [`TransformStream`](https://developer.mozilla.org/en-US/docs/Web/API/TransformStream):\n\n```js\n// TransformStream is available in environments such as CloudFlare workers.\n// in Node.js, TransformStream needs to be explicitly imported from 'stream/web'\nconst { readable, writable } = new TransformStream()\npipeToWebWritable(app, {}, writable)\n\nreturn new Response(readable)\n```\n\n### `renderToSimpleStream`\n\nRenders input in streaming mode using a simple readable interface.\n\n**Signature**\n\n```ts\nfunction renderToSimpleStream(\n  input: App | VNode,\n  context: SSRContext,\n  options: SimpleReadable,\n): SimpleReadable\n\ninterface SimpleReadable {\n  push(content: string | null): void\n  destroy(err: any): void\n}\n```\n\n**Usage**\n\n```js\nlet res = ''\n\nrenderToSimpleStream(\n  app,\n  {},\n  {\n    push(chunk) {\n      if (chunk === null) {\n        // done\n        console.log(`render complete: ${res}`)\n      } else {\n        res += chunk\n      }\n    },\n    destroy(err) {\n      // error encountered\n    },\n  },\n)\n```\n","packages/shared/README.md":"# @vue/shared\n\nInternal utility functions and constants shared across `@vue` packages.\n","packages/vue-compat/README.md":"## Overview\n\n`@vue/compat` (aka \"the migration build\") is a build of Vue 3 that provides configurable Vue 2 compatible behavior.\n\nThe migration build runs in Vue 2 mode by default - most public APIs behave exactly like Vue 2, with only a few exceptions. Usage of features that have changed or been deprecated in Vue 3 will emit runtime warnings. A feature's compatibility can also be enabled/disabled on a per-component basis.\n\n### Intended Use Cases\n\n- Upgrading a Vue 2 application to Vue 3 (with [limitations](#known-limitations))\n- Migrating a library to support Vue 3\n- For experienced Vue 2 developers who have not tried Vue 3 yet, the migration build can be used in place of Vue 3 to help learn the difference between versions.\n\n### Known Limitations\n\nWhile we've tried hard to make the migration build mimic Vue 2 behavior as much as possible, there are some limitations that may prevent your app from being eligible for upgrading:\n\n- Dependencies that rely on Vue 2 internal APIs or undocumented behavior. The most common case is usage of private properties on `VNodes`. If your project relies on component libraries like [Vuetify](https://vuetifyjs.com/en/), [Quasar](https://quasar.dev/) or [ElementUI](https://element.eleme.io/#/en-US), it is best to wait for their Vue 3 compatible versions.\n\n- Internet Explorer 11 support: [Vue 3 has officially dropped the plan for IE11 support](https://github.com/vuejs/rfcs/blob/master/active-rfcs/0038-vue3-ie11-support.md). If you still need to support IE11 or below, you will have to stay on Vue 2.\n\n- Server-side rendering: the migration build can be used for SSR, but migrating a custom SSR setup is much more involved. The general idea is replacing `vue-server-renderer` with [`@vue/server-renderer`](https://github.com/vuejs/core/tree/main/packages/server-renderer). Vue 3 no longer provides a bundle renderer and it is recommended to use Vue 3 SSR with [Vite](https://vite.dev/guide/ssr). If you are using [Nuxt.js](https://nuxtjs.org/), it is probably better to wait for Nuxt 3.\n\n### Expectations\n\nPlease note that the migration build aims to cover only publicly documented Vue 2 APIs and behavior. If your application fails to run under the migration build due to reliance on undocumented behavior, it is unlikely that we'll tweak the migration build to cater to your specific case. Consider refactoring to remove reliance on the behavior in question instead.\n\nA word of caution: if your application is large and complex, migration will likely be a challenge even with the migration build. If your app is unfortunately not suitable for upgrade, do note that we are planning to backport Composition API and some other Vue 3 features to the 2.7 release (estimated late Q3 2021).\n\nIf you do get your app running on the migration build, you **can** ship it to production before the migration is complete. Although there is a small performance/size overhead, it should not noticeably affect production UX. You may have to do so when you have dependencies that rely on Vue 2 behavior, and cannot be upgraded/replaced.\n\nThe migration build will be provided starting with 3.1, and will continue to be published alongside the 3.2 release line. We do plan to eventually stop publishing the migration build in a future minor version (no earlier than EOY 2021), so you should still aim to switch to the standard build before then.\n\n## Upgrade Workflow\n\nThe following workflow walks through the steps of migrating an actual Vue 2 app (Vue HackerNews 2.0) to Vue 3. The full commits can be found [here](https://github.com/vuejs/vue-hackernews-2.0/compare/migration). Note that the actual steps required for your project may vary, and these steps should be treated as general guidance rather than strict instructions.\n\n### Preparations\n\n- If you are still using the [deprecated named / scoped slot syntax](https://vuejs.org/v2/guide/components-slots.html#Deprecated-Syntax), update it to the latest syntax first (which is already supported in 2.6).\n\n### Installation\n\n1. Upgrade tooling if applicable.\n   - If using custom webpack setup: Upgrade `vue-loader` to `^16.0.0`.\n   - If using `vue-cli`: upgrade to the latest `@vue/cli-service` with `vue upgrade`\n   - (Alternative) migrate to [Vite](https://vite.dev/) + [vite-plugin-vue2](https://github.com/underfin/vite-plugin-vue2). [[Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/565b948919eb58f22a32afca7e321b490cb3b074)]\n\n2. In `package.json`, update `vue` to 3.1, install `@vue/compat` of the same version, and replace `vue-template-compiler` (if present) with `@vue/compiler-sfc`:\n\n   ```diff\n   \"dependencies\": {\n   -  \"vue\": \"^2.6.12\",\n   +  \"vue\": \"^3.1.0\",\n   +  \"@vue/compat\": \"^3.1.0\"\n      ...\n   },\n   \"devDependencies\": {\n   -  \"vue-template-compiler\": \"^2.6.12\"\n   +  \"@vue/compiler-sfc\": \"^3.1.0\"\n   }\n   ```\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/14f6f1879b43f8610add60342661bf915f5c4b20)\n\n3. In the build setup, alias `vue` to `@vue/compat` and enable compat mode via Vue compiler options.\n\n   **Example Configs**\n\n   <details>\n     <summary><b>vue-cli</b></summary>\n\n   ```js\n   // vue.config.js\n   module.exports = {\n     chainWebpack: config => {\n       config.resolve.alias.set('vue', '@vue/compat')\n\n       config.module\n         .rule('vue')\n         .use('vue-loader')\n         .tap(options => {\n           return {\n             ...options,\n             compilerOptions: {\n               compatConfig: {\n                 MODE: 2,\n               },\n             },\n           }\n         })\n     },\n   }\n   ```\n\n   </details>\n\n   <details>\n     <summary><b>Plain webpack</b></summary>\n\n   ```js\n   // webpack.config.js\n   module.exports = {\n     resolve: {\n       alias: {\n         vue: '@vue/compat',\n       },\n     },\n     module: {\n       rules: [\n         {\n           test: /\\.vue$/,\n           loader: 'vue-loader',\n           options: {\n             compilerOptions: {\n               compatConfig: {\n                 MODE: 2,\n               },\n             },\n           },\n         },\n       ],\n     },\n   }\n   ```\n\n   </details>\n\n   <details>\n     <summary><b>Vite</b></summary>\n\n   ```js\n   // vite.config.js\n   export default {\n     resolve: {\n       alias: {\n         vue: '@vue/compat',\n       },\n     },\n     plugins: [\n       vue({\n         template: {\n           compilerOptions: {\n             compatConfig: {\n               MODE: 2,\n             },\n           },\n         },\n       }),\n     ],\n   }\n   ```\n\n   </details>\n\n4. At this point, your application may encounter some compile-time errors / warnings (e.g. use of filters). Fix them first. If all compiler warnings are gone, you can also set the compiler to Vue 3 mode.\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/b05d9555f6e115dea7016d7e5a1a80e8f825be52)\n\n5. After fixing the errors, the app should be able to run if it is not subject to the [limitations](#known-limitations) mentioned above.\n\n   You will likely see a LOT of warnings from both the command line and the browser console. Here are some general tips:\n   - You can filter for specific warnings in the browser console. It's a good idea to use the filter and focus on fixing one item at a time. You can also use negated filters like `-GLOBAL_MOUNT`.\n\n   - You can suppress specific deprecations via [compat configuration](#compat-configuration).\n\n   - Some warnings may be caused by a dependency that you use (e.g. `vue-router`). You can check this from the warning's component trace or stack trace (expanded on click). Focus on fixing the warnings that originate from your own source code first.\n\n   - If you are using `vue-router`, note `<transition>` and `<keep-alive>` will not work with `<router-view>` until you upgrade to `vue-router` v4.\n\n6. Update [`<transition>` class names](https://v3-migration.vuejs.org/breaking-changes/transition.html). This is the only feature that does not have a runtime warning. You can do a project-wide search for `.*-enter` and `.*-leave` CSS class names.\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/d300103ba622ae26ac26a82cd688e0f70b6c1d8f)\n\n7. Update app entry to use [new global mounting API](https://v3-migration.vuejs.org/breaking-changes/global-api.html#a-new-global-api-createapp).\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/a6e0c9ac7b1f4131908a4b1e43641f608593f714)\n\n8. [Upgrade `vuex` to v4](https://next.vuex.vuejs.org/guide/migrating-to-4-0-from-3-x.html).\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/5bfd4c61ee50f358cd5daebaa584f2c3f91e0205)\n\n9. [Upgrade `vue-router` to v4](https://next.router.vuejs.org/guide/migration/index.html). If you also use `vuex-router-sync`, you can replace it with a store getter.\n\n   After the upgrade, to use `<transition>` and `<keep-alive>` with `<router-view>` requires using the new [scoped-slot based syntax](https://next.router.vuejs.org/guide/migration/index.html#router-view-keep-alive-and-transition).\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/758961e73ac4089890079d4ce14996741cf9344b)\n\n10. Pick off individual warnings. Note some features have conflicting behavior between Vue 2 and Vue 3 - for example, the render function API, or the functional component vs. async component change. To migrate to Vue 3 API without affecting the rest of the application, you can opt-in to Vue 3 behavior on a per-component basis with the [`compatConfig` option](#per-component-config).\n\n    [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/d0c7d3ae789be71b8fd56ce79cb4cb1f921f893b)\n\n11. When all warnings are fixed, you can remove the migration build and switch to Vue 3 proper. Note you may not be able to do so if you still have dependencies that rely on Vue 2 behavior.\n\n    [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/9beb45490bc5f938c9e87b4ac1357cfb799565bd)\n\n## Compat Configuration\n\n### Global Config\n\nCompat features can be disabled individually:\n\n```js\nimport { configureCompat } from 'vue'\n\n// disable compat for certain features\nconfigureCompat({\n  FEATURE_ID_A: false,\n  FEATURE_ID_B: false,\n})\n```\n\nAlternatively, the entire application can default to Vue 3 behavior, with only certain compat features enabled:\n\n```js\nimport { configureCompat } from 'vue'\n\n// default everything to Vue 3 behavior, and only enable compat\n// for certain features\nconfigureCompat({\n  MODE: 3,\n  FEATURE_ID_A: true,\n  FEATURE_ID_B: true,\n})\n```\n\n### Per-Component Config\n\nA component can use the `compatConfig` option, which expects the same options as the global `configureCompat` method:\n\n```js\nexport default {\n  compatConfig: {\n    MODE: 3, // opt-in to Vue 3 behavior for this component only\n    FEATURE_ID_A: true, // features can also be toggled at component level\n  },\n  // ...\n}\n```\n\n### Compiler-specific Config\n\nFeatures that start with `COMPILER_` are compiler-specific: if you are using the full build (with in-browser compiler), they can be configured at runtime. However if using a build setup, they must be configured via the `compilerOptions` in the build config instead (see example configs above).\n\n## Feature Reference\n\n### Compatibility Types\n\n- ✔ Fully compatible\n- ◐ Partially Compatible with caveats\n- ⨂ Incompatible (warning only)\n- ⭘ Compat only (no warning)\n\n### Incompatible\n\n> Should be fixed upfront or will likely lead to errors\n\n| ID                                    | Type | Description                                                             | Docs                                                                                                           |\n| ------------------------------------- | ---- | ----------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |\n| GLOBAL_MOUNT_CONTAINER                | ⨂    | Mounted application does not replace the element it's mounted to        | [link](https://v3-migration.vuejs.org/breaking-changes/mount-changes.html)                                     |\n| CONFIG_DEVTOOLS                       | ⨂    | production devtools is now a build-time flag                            | [link](https://github.com/vuejs/core/tree/main/packages/vue#bundler-build-feature-flags)                       |\n| COMPILER_V_IF_V_FOR_PRECEDENCE        | ⨂    | `v-if` and `v-for` precedence when used on the same element has changed | [link](https://v3-migration.vuejs.org/breaking-changes/v-if-v-for.html)                                        |\n| COMPILER_V_IF_SAME_KEY                | ⨂    | `v-if` branches can no longer have the same key                         | [link](https://v3-migration.vuejs.org/breaking-changes/key-attribute.html#on-conditional-branches)             |\n| COMPILER_V_FOR_TEMPLATE_KEY_PLACEMENT | ⨂    | `<template v-for>` key should now be placed on `<template>`             | [link](https://v3-migration.vuejs.org/breaking-changes/key-attribute.html#with-template-v-for)                 |\n| COMPILER_SFC_FUNCTIONAL               | ⨂    | `<template functional>` is no longer supported in SFCs                  | [link](https://v3-migration.vuejs.org/breaking-changes/functional-components.html#single-file-components-sfcs) |\n\n### Partially Compatible with Caveats\n\n| ID                       | Type | Description                                                                                                                                                                                | Docs                                                                                                                         |\n| ------------------------ | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- |\n| CONFIG_IGNORED_ELEMENTS  | ◐    | `config.ignoredElements` is now `config.compilerOptions.isCustomElement` (only in browser compiler build). If using build setup, `isCustomElement` must be passed via build configuration. | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#config-ignoredelements-is-now-config-iscustomelement) |\n| COMPILER_INLINE_TEMPLATE | ◐    | `inline-template` removed (compat only supported in browser compiler build)                                                                                                                | [link](https://v3-migration.vuejs.org/breaking-changes/inline-template-attribute.html)                                       |\n| PROPS_DEFAULT_THIS       | ◐    | props default factory no longer have access to `this` (in compat mode, `this` is not a real instance - it only exposes props, `$options` and injections)                                   | [link](https://v3-migration.vuejs.org/breaking-changes/props-default-this.html)                                              |\n| INSTANCE_DESTROY         | ◐    | `$destroy` instance method removed (in compat mode, only supported on root instance)                                                                                                       |                                                                                                                              |\n| GLOBAL_PRIVATE_UTIL      | ◐    | `Vue.util` is private and no longer available                                                                                                                                              |                                                                                                                              |\n| CONFIG_PRODUCTION_TIP    | ◐    | `config.productionTip` no longer necessary                                                                                                                                                 | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#config-productiontip-removed)                         |\n| CONFIG_SILENT            | ◐    | `config.silent` removed                                                                                                                                                                    |\n\n### Compat only (no warning)\n\n| ID                 | Type | Description                            | Docs                                                                    |\n| ------------------ | ---- | -------------------------------------- | ----------------------------------------------------------------------- |\n| TRANSITION_CLASSES | ⭘    | Transition enter/leave classes changed | [link](https://v3-migration.vuejs.org/breaking-changes/transition.html) |\n\n### Fully Compatible\n\n| ID                           | Type | Description                                                           | Docs                                                                                                                      |\n| ---------------------------- | ---- | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |\n| GLOBAL_MOUNT                 | ✔    | new Vue() -> createApp                                                | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#mounting-app-instance)                             |\n| GLOBAL_EXTEND                | ✔    | Vue.extend removed (use `defineComponent` or `extends` option)        | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#vue-extend-replaced-by-definecomponent)            |\n| GLOBAL_PROTOTYPE             | ✔    | `Vue.prototype` -> `app.config.globalProperties`                      | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#vue-prototype-replaced-by-config-globalproperties) |\n| GLOBAL_SET                   | ✔    | `Vue.set` removed (no longer needed)                                  |                                                                                                                           |\n| GLOBAL_DELETE                | ✔    | `Vue.delete` removed (no longer needed)                               |                                                                                                                           |\n| GLOBAL_OBSERVABLE            | ✔    | `Vue.observable` removed (use `reactive`)                             | [link](https://vuejs.org/api/reactivity-core.html#reactive)                                                               |\n| CONFIG_KEY_CODES             | ✔    | config.keyCodes removed                                               | [link](https://v3-migration.vuejs.org/breaking-changes/keycode-modifiers.html)                                            |\n| CONFIG_WHITESPACE            | ✔    | In Vue 3 whitespace defaults to `\"condense\"`                          |                                                                                                                           |\n| INSTANCE_SET                 | ✔    | `vm.$set` removed (no longer needed)                                  |                                                                                                                           |\n| INSTANCE_DELETE              | ✔    | `vm.$delete` removed (no longer needed)                               |                                                                                                                           |\n| INSTANCE_EVENT_EMITTER       | ✔    | `vm.$on`, `vm.$off`, `vm.$once` removed                               | [link](https://v3-migration.vuejs.org/breaking-changes/events-api.html)                                                   |\n| INSTANCE_EVENT_HOOKS         | ✔    | Instance no longer emits `hook:x` events                              | [link](https://v3-migration.vuejs.org/breaking-changes/vnode-lifecycle-events.html)                                       |\n| INSTANCE_CHILDREN            | ✔    | `vm.$children` removed                                                | [link](https://v3-migration.vuejs.org/breaking-changes/children.html)                                                     |\n| INSTANCE_LISTENERS           | ✔    | `vm.$listeners` removed                                               | [link](https://v3-migration.vuejs.org/breaking-changes/listeners-removed.html)                                            |\n| INSTANCE_SCOPED_SLOTS        | ✔    | `vm.$scopedSlots` removed; `vm.$slots` now exposes functions          | [link](https://v3-migration.vuejs.org/breaking-changes/slots-unification.html)                                            |\n| INSTANCE_ATTRS_CLASS_STYLE   | ✔    | `$attrs` now includes `class` and `style`                             | [link](https://v3-migration.vuejs.org/breaking-changes/attrs-includes-class-style.html)                                   |\n| OPTIONS_DATA_FN              | ✔    | `data` must be a function in all cases                                | [link](https://v3-migration.vuejs.org/breaking-changes/data-option.html)                                                  |\n| OPTIONS_DATA_MERGE           | ✔    | `data` from mixin or extension is now shallow merged                  | [link](https://v3-migration.vuejs.org/breaking-changes/data-option.html)                                                  |\n| OPTIONS_BEFORE_DESTROY       | ✔    | `beforeDestroy` -> `beforeUnmount`                                    |                                                                                                                           |\n| OPTIONS_DESTROYED            | ✔    | `destroyed` -> `unmounted`                                            |                                                                                                                           |\n| WATCH_ARRAY                  | ✔    | watching an array no longer triggers on mutation unless deep          | [link](https://v3-migration.vuejs.org/breaking-changes/watch.html)                                                        |\n| V_ON_KEYCODE_MODIFIER        | ✔    | `v-on` no longer supports keyCode modifiers                           | [link](https://v3-migration.vuejs.org/breaking-changes/keycode-modifiers.html)                                            |\n| CUSTOM_DIR                   | ✔    | Custom directive hook names changed                                   | [link](https://v3-migration.vuejs.org/breaking-changes/custom-directives.html)                                            |\n| ATTR_FALSE_VALUE             | ✔    | No longer removes attribute if binding value is boolean `false`       | [link](https://v3-migration.vuejs.org/breaking-changes/attribute-coercion.html)                                           |\n| ATTR_ENUMERATED_COERCION     | ✔    | No longer special case enumerated attributes                          | [link](https://v3-migration.vuejs.org/breaking-changes/attribute-coercion.html)                                           |\n| TRANSITION_GROUP_ROOT        | ✔    | `<transition-group>` no longer renders a root element by default      | [link](https://v3-migration.vuejs.org/breaking-changes/transition-group.html)                                             |\n| COMPONENT_ASYNC              | ✔    | Async component API changed (now requires `defineAsyncComponent`)     | [link](https://v3-migration.vuejs.org/breaking-changes/async-components.html)                                             |\n| COMPONENT_FUNCTIONAL         | ✔    | Functional component API changed (now must be plain functions)        | [link](https://v3-migration.vuejs.org/breaking-changes/functional-components.html)                                        |\n| COMPONENT_V_MODEL            | ✔    | Component v-model reworked                                            | [link](https://v3-migration.vuejs.org/breaking-changes/v-model.html)                                                      |\n| RENDER_FUNCTION              | ✔    | Render function API changed                                           | [link](https://v3-migration.vuejs.org/breaking-changes/render-function-api.html)                                          |\n| FILTERS                      | ✔    | Filters removed (this option affects only runtime filter APIs)        | [link](https://v3-migration.vuejs.org/breaking-changes/filters.html)                                                      |\n| COMPILER_IS_ON_ELEMENT       | ✔    | `is` usage is now restricted to `<component>` only                    | [link](https://v3-migration.vuejs.org/breaking-changes/custom-elements-interop.html)                                      |\n| COMPILER_V_BIND_SYNC         | ✔    | `v-bind.sync` replaced by `v-model` with arguments                    | [link](https://v3-migration.vuejs.org/breaking-changes/v-model.html)                                                      |\n| COMPILER_V_BIND_OBJECT_ORDER | ✔    | `v-bind=\"object\"` is now order sensitive                              | [link](https://v3-migration.vuejs.org/breaking-changes/v-bind.html)                                                       |\n| COMPILER_V_ON_NATIVE         | ✔    | `v-on.native` modifier removed                                        | [link](https://v3-migration.vuejs.org/breaking-changes/v-on-native-modifier-removed.html)                                 |\n| COMPILER_V_FOR_REF           | ✔    | `ref` in `v-for` (compiler support)                                   |                                                                                                                           |\n| COMPILER_NATIVE_TEMPLATE     | ✔    | `<template>` with no special directives now renders as native element |                                                                                                                           |\n| COMPILER_FILTERS             | ✔    | filters (compiler support)                                            |                                                                                                                           |\n","packages/vue/README.md":"# vue\n\n## Which dist file to use?\n\n### From CDN or without a Bundler\n\n- **`vue(.runtime).global(.prod).js`**:\n  - For direct use via `<script src=\"...\">` in the browser. Exposes the `Vue` global.\n  - Note that global builds are not [UMD](https://github.com/umdjs/umd) builds. They are built as [IIFEs](https://developer.mozilla.org/en-US/docs/Glossary/IIFE) and are only meant for direct use via `<script src=\"...\">`.\n  - In-browser template compilation:\n    - **`vue.global.js`** is the \"full\" build that includes both the compiler and the runtime so it supports compiling templates on the fly.\n    - **`vue.runtime.global.js`** contains only the runtime and requires templates to be pre-compiled during a build step.\n  - Inlines all Vue core internal packages - i.e. it's a single file with no dependencies on other files. This means you **must** import everything from this file and this file only to ensure you are getting the same instance of code.\n  - Contains hard-coded prod/dev branches, and the prod build is pre-minified. Use the `*.prod.js` files for production.\n\n- **`vue(.runtime).esm-browser(.prod).js`**:\n  - For usage via native ES modules imports (in browser via `<script type=\"module\">`).\n  - Shares the same runtime compilation, dependency inlining and hard-coded prod/dev behavior with the global build.\n\n### With a Bundler\n\n- **`vue(.runtime).esm-bundler.js`**:\n  - For use with bundlers like `webpack`, `rollup` and `parcel`.\n  - Leaves prod/dev branches with `process.env.NODE_ENV` guards (must be replaced by bundler)\n  - Does not ship minified builds (to be done together with the rest of the code after bundling)\n  - Imports dependencies (e.g. `@vue/runtime-core`, `@vue/compiler-core`)\n    - Imported dependencies are also `esm-bundler` builds and will in turn import their dependencies (e.g. `@vue/runtime-core` imports `@vue/reactivity`)\n    - This means you **can** install/import these deps individually without ending up with different instances of these dependencies, but you must make sure they all resolve to the same version.\n  - In-browser template compilation:\n    - **`vue.runtime.esm-bundler.js` (default)** is runtime only, and requires all templates to be pre-compiled. This is the default entry for bundlers (via `module` field in `package.json`) because when using a bundler templates are typically pre-compiled (e.g. in `*.vue` files).\n    - **`vue.esm-bundler.js`**: includes the runtime compiler. Use this if you are using a bundler but still want runtime template compilation (e.g. in-DOM templates or templates via inline JavaScript strings). You will need to configure your bundler to alias `vue` to this file.\n\n#### Bundler Build Feature Flags\n\n[Detailed Reference on vuejs.org](https://vuejs.org/api/compile-time-flags.html)\n\n`esm-bundler` builds of Vue expose global feature flags that can be overwritten at compile time:\n\n- `__VUE_OPTIONS_API__`\n  - Default: `true`\n  - Enable / disable Options API support\n\n- `__VUE_PROD_DEVTOOLS__`\n  - Default: `false`\n  - Enable / disable devtools support in production\n\n- `__VUE_PROD_HYDRATION_MISMATCH_DETAILS__`\n  - Default: `false`\n  - Enable / disable detailed warnings for hydration mismatches in production\n\nThe build will work without configuring these flags, however it is **strongly recommended** to properly configure them in order to get proper tree-shaking in the final bundle.\n\n### For Server-Side Rendering\n\n- **`vue.cjs(.prod).js`**:\n  - For use in Node.js server-side rendering via `require()`.\n  - If you bundle your app with webpack with `target: 'node'` and properly externalize `vue`, this is the build that will be loaded.\n  - The dev/prod files are pre-built, but the appropriate file is automatically required based on `process.env.NODE_ENV`.\n"},"items":[{"name":"README.md","path":"packages/compiler-core/README.md","rawUrl":"https://raw.githubusercontent.com/vuejs/core/HEAD/packages/compiler-core/README.md","title":"compiler-core Documentation","category":"plugin-manifest","format":"markdown","content":"# @vue/compiler-core\n","isInternal":false,"tokens":6,"sizeBytes":21},{"name":"README.md","path":"packages/compiler-dom/README.md","rawUrl":"https://raw.githubusercontent.com/vuejs/core/HEAD/packages/compiler-dom/README.md","title":"compiler-dom Documentation","category":"plugin-manifest","format":"markdown","content":"# @vue/compiler-dom\n","isInternal":false,"tokens":6,"sizeBytes":20},{"name":"README.md","path":"packages/compiler-sfc/README.md","rawUrl":"https://raw.githubusercontent.com/vuejs/core/HEAD/packages/compiler-sfc/README.md","title":"compiler-sfc Documentation","category":"plugin-manifest","format":"markdown","content":"# @vue/compiler-sfc\n\n> Lower level utilities for compiling Vue Single File Components\n\n**Note: as of 3.2.13+, this package is included as a dependency of the main `vue` package and can be accessed as `vue/compiler-sfc`. This means you no longer need to explicitly install this package and ensure its version matches that of `vue`'s. Just use the main `vue/compiler-sfc` deep import instead.**\n\nThis package contains lower level utilities that you can use if you are writing a plugin / transform for a bundler or module system that compiles Vue Single File Components (SFCs) into JavaScript. It is used in [vue-loader](https://github.com/vuejs/vue-loader) and [@vitejs/plugin-vue](https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue).\n\n## API\n\nThe API is intentionally low-level due to the various considerations when integrating Vue SFCs in a build system:\n\n- Separate hot-module replacement (HMR) for script, template and styles\n  - template updates should not reset component state\n  - style updates should be performed without component re-render\n\n- Leveraging the tool's plugin system for pre-processor handling. e.g. `<style lang=\"scss\">` should be processed by the corresponding webpack loader.\n\n- In some cases, transformers of each block in an SFC do not share the same execution context. For example, when used with `thread-loader` or other parallelized configurations, the template sub-loader in `vue-loader` may not have access to the full SFC and its descriptor.\n\nThe general idea is to generate a facade module that imports the individual blocks of the component. The trick is the module imports itself with different query strings so that the build system can handle each request as \"virtual\" modules:\n\n```\n                                  +--------------------+\n                                  |                    |\n                                  |  script transform  |\n                           +----->+                    |\n                           |      +--------------------+\n                           |\n+--------------------+     |      +--------------------+\n|                    |     |      |                    |\n|  facade transform  +----------->+ template transform |\n|                    |     |      |                    |\n+--------------------+     |      +--------------------+\n                           |\n                           |      +--------------------+\n                           +----->+                    |\n                                  |  style transform   |\n                                  |                    |\n                                  +--------------------+\n```\n\nWhere the facade module looks like this:\n\n```js\n// main script\nimport script from '/project/foo.vue?vue&type=script'\n// template compiled to render function\nimport { render } from '/project/foo.vue?vue&type=template&id=xxxxxx'\n// css\nimport '/project/foo.vue?vue&type=style&index=0&id=xxxxxx'\n\n// attach render function to script\nscript.render = render\n\n// attach additional metadata\n// some of these should be dev only\nscript.__file = 'example.vue'\nscript.__scopeId = 'xxxxxx'\n\n// additional tooling-specific HMR handling code\n// using __VUE_HMR_API__ global\n\nexport default script\n```\n\n### High Level Workflow\n\n1. In facade transform, parse the source into descriptor with the `parse` API and generate the above facade module code based on the descriptor;\n\n2. In script transform, use `compileScript` to process the script. This handles features like `<script setup>` and CSS variable injection. Alternatively, this can be done directly in the facade module (with the code inlined instead of imported), but it will require rewriting `export default` to a temp variable (a `rewriteDefault` convenience API is provided for this purpose) so additional options can be attached to the exported object.\n\n3. In template transform, use `compileTemplate` to compile the raw template into render function code.\n\n4. In style transform, use `compileStyle` to compile raw CSS to handle `<style scoped>`, `<style module>` and CSS variable injection.\n\nOptions needed for these APIs can be passed via the query string.\n\nFor detailed API references and options, check out the source type definitions. For actual usage of these APIs, check out [@vitejs/plugin-vue](https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue) or [vue-loader](https://github.com/vuejs/vue-loader/tree/next).\n","isInternal":false,"tokens":890,"sizeBytes":4445},{"name":"README.md","path":"packages/compiler-ssr/README.md","rawUrl":"https://raw.githubusercontent.com/vuejs/core/HEAD/packages/compiler-ssr/README.md","title":"compiler-ssr Documentation","category":"plugin-manifest","format":"markdown","content":"# @vue/compiler-ssr\n","isInternal":false,"tokens":8,"sizeBytes":20},{"name":"README.md","path":"packages/reactivity/README.md","rawUrl":"https://raw.githubusercontent.com/vuejs/core/HEAD/packages/reactivity/README.md","title":"reactivity Documentation","category":"plugin-manifest","format":"markdown","content":"# @vue/reactivity\n\n## Usage Note\n\nThis package is inlined into Global & Browser ESM builds of user-facing renderers (e.g. `@vue/runtime-dom`), but also published as a package that can be used standalone. The standalone build should not be used alongside a pre-bundled build of a user-facing renderer, as they will have different internal storage for reactivity connections. A user-facing renderer should re-export all APIs from this package.\n\nFor full exposed APIs, see `src/index.ts`.\n\n## Credits\n\nThe implementation of this module is inspired by the following prior art in the JavaScript ecosystem:\n\n- [Meteor Tracker](https://docs.meteor.com/api/tracker.html)\n- [nx-js/observer-util](https://github.com/nx-js/observer-util)\n- [salesforce/observable-membrane](https://github.com/salesforce/observable-membrane)\n\n## Caveats\n\n- Built-in objects are not observed except for `Array`, `Map`, `WeakMap`, `Set` and `WeakSet`.\n","isInternal":false,"tokens":215,"sizeBytes":921},{"name":"README.md","path":"packages/runtime-core/README.md","rawUrl":"https://raw.githubusercontent.com/vuejs/core/HEAD/packages/runtime-core/README.md","title":"runtime-core Documentation","category":"plugin-manifest","format":"markdown","content":"# @vue/runtime-core\n\n> This package is published only for typing and building custom renderers. It is NOT meant to be used in applications.\n\nFor full exposed APIs, see `src/index.ts`.\n\n## Building a Custom Renderer\n\n```ts\nimport { createRenderer } from '@vue/runtime-core'\n\nconst { render, createApp } = createRenderer({\n  patchProp,\n  insert,\n  remove,\n  createElement,\n  // ...\n})\n\n// `render` is the low-level API\n// `createApp` returns an app instance with configurable context shared\n// by the entire app tree.\nexport { render, createApp }\n\nexport * from '@vue/runtime-core'\n```\n\nSee `@vue/runtime-dom` for how a DOM-targeting renderer is implemented.\n","isInternal":false,"tokens":154,"sizeBytes":657},{"name":"README.md","path":"packages/runtime-dom/README.md","rawUrl":"https://raw.githubusercontent.com/vuejs/core/HEAD/packages/runtime-dom/README.md","title":"runtime-dom Documentation","category":"plugin-manifest","format":"markdown","content":"# @vue/runtime-dom\n\n```js\nimport { h, createApp } from '@vue/runtime-dom'\n\nconst RootComponent = {\n  render() {\n    return h('div', 'hello world')\n  },\n}\n\ncreateApp(RootComponent).mount('#app')\n```\n","isInternal":false,"tokens":56,"sizeBytes":198},{"name":"README.md","path":"packages/runtime-test/README.md","rawUrl":"https://raw.githubusercontent.com/vuejs/core/HEAD/packages/runtime-test/README.md","title":"runtime-test Documentation","category":"plugin-manifest","format":"markdown","content":"# @vue/runtime-test\n\nThis is for Vue's own internal tests only - it ensures logic tested using this package is DOM-agnostic, and it runs faster than JSDOM.\n\nIt can also be used as a reference for implementing a custom renderer.\n\n```js\nimport { h, render, nodeOps, dumpOps } from '@vue/runtime-test'\n\nconst App = {\n  data() {\n    return {\n      msg: 'Hello World!',\n    }\n  },\n  render() {\n    return h('div', this.msg)\n  },\n}\n\n// root is of type `TestElement` as defined in src/nodeOps.ts\nconst root = nodeOps.createElement('div')\nrender(h(App), root)\n\nconst ops = dumpOps()\nconsole.log(ops)\n```\n","isInternal":false,"tokens":155,"sizeBytes":596},{"name":"README.md","path":"packages/server-renderer/README.md","rawUrl":"https://raw.githubusercontent.com/vuejs/core/HEAD/packages/server-renderer/README.md","title":"server-renderer Documentation","category":"plugin-manifest","format":"markdown","content":"# @vue/server-renderer\n\n**Note: as of 3.2.13+, this package is included as a dependency of the main `vue` package and can be accessed as `vue/server-renderer`. This means you no longer need to explicitly install this package and ensure its version matches that of `vue`'s. Just use the `vue/server-renderer` deep import instead.**\n\n## Basic API\n\n### `renderToString`\n\n**Signature**\n\n```ts\nfunction renderToString(\n  input: App | VNode,\n  context?: SSRContext,\n): Promise<string>\n```\n\n**Usage**\n\n```js\nconst { createSSRApp } = require('vue')\nconst { renderToString } = require('@vue/server-renderer')\n\nconst app = createSSRApp({\n  data: () => ({ msg: 'hello' }),\n  template: `<div>{{ msg }}</div>`,\n})\n\n;(async () => {\n  const html = await renderToString(app)\n  console.log(html)\n})()\n```\n\n### Handling Teleports\n\nIf the rendered app contains teleports, the teleported content will not be part of the rendered string. Instead, they are exposed under the `teleports` property of the ssr context object:\n\n```js\nconst ctx = {}\nconst html = await renderToString(app, ctx)\n\nconsole.log(ctx.teleports) // { '#teleported': 'teleported content' }\n```\n\n## Streaming API\n\n### `renderToNodeStream`\n\nRenders input as a [Node.js Readable stream](https://nodejs.org/api/stream.html#stream_class_stream_readable).\n\n**Signature**\n\n```ts\nfunction renderToNodeStream(input: App | VNode, context?: SSRContext): Readable\n```\n\n**Usage**\n\n```js\n// inside a Node.js http handler\nrenderToNodeStream(app).pipe(res)\n```\n\n**Note:** This method is not supported in the ESM build of `@vue/server-renderer`, which is decoupled from Node.js environments. Use `pipeToNodeWritable` instead.\n\n### `pipeToNodeWritable`\n\nRender and pipe to an existing [Node.js Writable stream](https://nodejs.org/api/stream.html#stream_writable_streams) instance.\n\n**Signature**\n\n```ts\nfunction pipeToNodeWritable(\n  input: App | VNode,\n  context: SSRContext = {},\n  writable: Writable,\n): void\n```\n\n**Usage**\n\n```js\n// inside a Node.js http handler\npipeToNodeWritable(app, {}, res)\n```\n\n### `renderToWebStream`\n\nRenders input as a [Web ReadableStream](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API).\n\n**Signature**\n\n```ts\nfunction renderToWebStream(\n  input: App | VNode,\n  context?: SSRContext,\n): ReadableStream\n```\n\n**Usage**\n\n```js\n// inside an environment with ReadableStream support\nreturn new Response(renderToWebStream(app))\n```\n\n**Note:** in environments that do not expose `ReadableStream` constructor in the global scope, `pipeToWebWritable` should be used instead.\n\n### `pipeToWebWritable`\n\nRender and pipe to an existing [Web WritableStream](https://developer.mozilla.org/en-US/docs/Web/API/WritableStream) instance.\n\n**Signature**\n\n```ts\nfunction pipeToWebWritable(\n  input: App | VNode,\n  context: SSRContext = {},\n  writable: WritableStream,\n): void\n```\n\n**Usage**\n\nThis is typically used in combination with [`TransformStream`](https://developer.mozilla.org/en-US/docs/Web/API/TransformStream):\n\n```js\n// TransformStream is available in environments such as CloudFlare workers.\n// in Node.js, TransformStream needs to be explicitly imported from 'stream/web'\nconst { readable, writable } = new TransformStream()\npipeToWebWritable(app, {}, writable)\n\nreturn new Response(readable)\n```\n\n### `renderToSimpleStream`\n\nRenders input in streaming mode using a simple readable interface.\n\n**Signature**\n\n```ts\nfunction renderToSimpleStream(\n  input: App | VNode,\n  context: SSRContext,\n  options: SimpleReadable,\n): SimpleReadable\n\ninterface SimpleReadable {\n  push(content: string | null): void\n  destroy(err: any): void\n}\n```\n\n**Usage**\n\n```js\nlet res = ''\n\nrenderToSimpleStream(\n  app,\n  {},\n  {\n    push(chunk) {\n      if (chunk === null) {\n        // done\n        console.log(`render complete: ${res}`)\n      } else {\n        res += chunk\n      }\n    },\n    destroy(err) {\n      // error encountered\n    },\n  },\n)\n```\n","isInternal":false,"tokens":963,"sizeBytes":3895},{"name":"README.md","path":"packages/shared/README.md","rawUrl":"https://raw.githubusercontent.com/vuejs/core/HEAD/packages/shared/README.md","title":"shared Documentation","category":"plugin-manifest","format":"markdown","content":"# @vue/shared\n\nInternal utility functions and constants shared across `@vue` packages.\n","isInternal":false,"tokens":18,"sizeBytes":87},{"name":"README.md","path":"packages/vue-compat/README.md","rawUrl":"https://raw.githubusercontent.com/vuejs/core/HEAD/packages/vue-compat/README.md","title":"vue-compat Documentation","category":"plugin-manifest","format":"markdown","content":"## Overview\n\n`@vue/compat` (aka \"the migration build\") is a build of Vue 3 that provides configurable Vue 2 compatible behavior.\n\nThe migration build runs in Vue 2 mode by default - most public APIs behave exactly like Vue 2, with only a few exceptions. Usage of features that have changed or been deprecated in Vue 3 will emit runtime warnings. A feature's compatibility can also be enabled/disabled on a per-component basis.\n\n### Intended Use Cases\n\n- Upgrading a Vue 2 application to Vue 3 (with [limitations](#known-limitations))\n- Migrating a library to support Vue 3\n- For experienced Vue 2 developers who have not tried Vue 3 yet, the migration build can be used in place of Vue 3 to help learn the difference between versions.\n\n### Known Limitations\n\nWhile we've tried hard to make the migration build mimic Vue 2 behavior as much as possible, there are some limitations that may prevent your app from being eligible for upgrading:\n\n- Dependencies that rely on Vue 2 internal APIs or undocumented behavior. The most common case is usage of private properties on `VNodes`. If your project relies on component libraries like [Vuetify](https://vuetifyjs.com/en/), [Quasar](https://quasar.dev/) or [ElementUI](https://element.eleme.io/#/en-US), it is best to wait for their Vue 3 compatible versions.\n\n- Internet Explorer 11 support: [Vue 3 has officially dropped the plan for IE11 support](https://github.com/vuejs/rfcs/blob/master/active-rfcs/0038-vue3-ie11-support.md). If you still need to support IE11 or below, you will have to stay on Vue 2.\n\n- Server-side rendering: the migration build can be used for SSR, but migrating a custom SSR setup is much more involved. The general idea is replacing `vue-server-renderer` with [`@vue/server-renderer`](https://github.com/vuejs/core/tree/main/packages/server-renderer). Vue 3 no longer provides a bundle renderer and it is recommended to use Vue 3 SSR with [Vite](https://vite.dev/guide/ssr). If you are using [Nuxt.js](https://nuxtjs.org/), it is probably better to wait for Nuxt 3.\n\n### Expectations\n\nPlease note that the migration build aims to cover only publicly documented Vue 2 APIs and behavior. If your application fails to run under the migration build due to reliance on undocumented behavior, it is unlikely that we'll tweak the migration build to cater to your specific case. Consider refactoring to remove reliance on the behavior in question instead.\n\nA word of caution: if your application is large and complex, migration will likely be a challenge even with the migration build. If your app is unfortunately not suitable for upgrade, do note that we are planning to backport Composition API and some other Vue 3 features to the 2.7 release (estimated late Q3 2021).\n\nIf you do get your app running on the migration build, you **can** ship it to production before the migration is complete. Although there is a small performance/size overhead, it should not noticeably affect production UX. You may have to do so when you have dependencies that rely on Vue 2 behavior, and cannot be upgraded/replaced.\n\nThe migration build will be provided starting with 3.1, and will continue to be published alongside the 3.2 release line. We do plan to eventually stop publishing the migration build in a future minor version (no earlier than EOY 2021), so you should still aim to switch to the standard build before then.\n\n## Upgrade Workflow\n\nThe following workflow walks through the steps of migrating an actual Vue 2 app (Vue HackerNews 2.0) to Vue 3. The full commits can be found [here](https://github.com/vuejs/vue-hackernews-2.0/compare/migration). Note that the actual steps required for your project may vary, and these steps should be treated as general guidance rather than strict instructions.\n\n### Preparations\n\n- If you are still using the [deprecated named / scoped slot syntax](https://vuejs.org/v2/guide/components-slots.html#Deprecated-Syntax), update it to the latest syntax first (which is already supported in 2.6).\n\n### Installation\n\n1. Upgrade tooling if applicable.\n   - If using custom webpack setup: Upgrade `vue-loader` to `^16.0.0`.\n   - If using `vue-cli`: upgrade to the latest `@vue/cli-service` with `vue upgrade`\n   - (Alternative) migrate to [Vite](https://vite.dev/) + [vite-plugin-vue2](https://github.com/underfin/vite-plugin-vue2). [[Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/565b948919eb58f22a32afca7e321b490cb3b074)]\n\n2. In `package.json`, update `vue` to 3.1, install `@vue/compat` of the same version, and replace `vue-template-compiler` (if present) with `@vue/compiler-sfc`:\n\n   ```diff\n   \"dependencies\": {\n   -  \"vue\": \"^2.6.12\",\n   +  \"vue\": \"^3.1.0\",\n   +  \"@vue/compat\": \"^3.1.0\"\n      ...\n   },\n   \"devDependencies\": {\n   -  \"vue-template-compiler\": \"^2.6.12\"\n   +  \"@vue/compiler-sfc\": \"^3.1.0\"\n   }\n   ```\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/14f6f1879b43f8610add60342661bf915f5c4b20)\n\n3. In the build setup, alias `vue` to `@vue/compat` and enable compat mode via Vue compiler options.\n\n   **Example Configs**\n\n   <details>\n     <summary><b>vue-cli</b></summary>\n\n   ```js\n   // vue.config.js\n   module.exports = {\n     chainWebpack: config => {\n       config.resolve.alias.set('vue', '@vue/compat')\n\n       config.module\n         .rule('vue')\n         .use('vue-loader')\n         .tap(options => {\n           return {\n             ...options,\n             compilerOptions: {\n               compatConfig: {\n                 MODE: 2,\n               },\n             },\n           }\n         })\n     },\n   }\n   ```\n\n   </details>\n\n   <details>\n     <summary><b>Plain webpack</b></summary>\n\n   ```js\n   // webpack.config.js\n   module.exports = {\n     resolve: {\n       alias: {\n         vue: '@vue/compat',\n       },\n     },\n     module: {\n       rules: [\n         {\n           test: /\\.vue$/,\n           loader: 'vue-loader',\n           options: {\n             compilerOptions: {\n               compatConfig: {\n                 MODE: 2,\n               },\n             },\n           },\n         },\n       ],\n     },\n   }\n   ```\n\n   </details>\n\n   <details>\n     <summary><b>Vite</b></summary>\n\n   ```js\n   // vite.config.js\n   export default {\n     resolve: {\n       alias: {\n         vue: '@vue/compat',\n       },\n     },\n     plugins: [\n       vue({\n         template: {\n           compilerOptions: {\n             compatConfig: {\n               MODE: 2,\n             },\n           },\n         },\n       }),\n     ],\n   }\n   ```\n\n   </details>\n\n4. At this point, your application may encounter some compile-time errors / warnings (e.g. use of filters). Fix them first. If all compiler warnings are gone, you can also set the compiler to Vue 3 mode.\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/b05d9555f6e115dea7016d7e5a1a80e8f825be52)\n\n5. After fixing the errors, the app should be able to run if it is not subject to the [limitations](#known-limitations) mentioned above.\n\n   You will likely see a LOT of warnings from both the command line and the browser console. Here are some general tips:\n   - You can filter for specific warnings in the browser console. It's a good idea to use the filter and focus on fixing one item at a time. You can also use negated filters like `-GLOBAL_MOUNT`.\n\n   - You can suppress specific deprecations via [compat configuration](#compat-configuration).\n\n   - Some warnings may be caused by a dependency that you use (e.g. `vue-router`). You can check this from the warning's component trace or stack trace (expanded on click). Focus on fixing the warnings that originate from your own source code first.\n\n   - If you are using `vue-router`, note `<transition>` and `<keep-alive>` will not work with `<router-view>` until you upgrade to `vue-router` v4.\n\n6. Update [`<transition>` class names](https://v3-migration.vuejs.org/breaking-changes/transition.html). This is the only feature that does not have a runtime warning. You can do a project-wide search for `.*-enter` and `.*-leave` CSS class names.\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/d300103ba622ae26ac26a82cd688e0f70b6c1d8f)\n\n7. Update app entry to use [new global mounting API](https://v3-migration.vuejs.org/breaking-changes/global-api.html#a-new-global-api-createapp).\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/a6e0c9ac7b1f4131908a4b1e43641f608593f714)\n\n8. [Upgrade `vuex` to v4](https://next.vuex.vuejs.org/guide/migrating-to-4-0-from-3-x.html).\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/5bfd4c61ee50f358cd5daebaa584f2c3f91e0205)\n\n9. [Upgrade `vue-router` to v4](https://next.router.vuejs.org/guide/migration/index.html). If you also use `vuex-router-sync`, you can replace it with a store getter.\n\n   After the upgrade, to use `<transition>` and `<keep-alive>` with `<router-view>` requires using the new [scoped-slot based syntax](https://next.router.vuejs.org/guide/migration/index.html#router-view-keep-alive-and-transition).\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/758961e73ac4089890079d4ce14996741cf9344b)\n\n10. Pick off individual warnings. Note some features have conflicting behavior between Vue 2 and Vue 3 - for example, the render function API, or the functional component vs. async component change. To migrate to Vue 3 API without affecting the rest of the application, you can opt-in to Vue 3 behavior on a per-component basis with the [`compatConfig` option](#per-component-config).\n\n    [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/d0c7d3ae789be71b8fd56ce79cb4cb1f921f893b)\n\n11. When all warnings are fixed, you can remove the migration build and switch to Vue 3 proper. Note you may not be able to do so if you still have dependencies that rely on Vue 2 behavior.\n\n    [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/9beb45490bc5f938c9e87b4ac1357cfb799565bd)\n\n## Compat Configuration\n\n### Global Config\n\nCompat features can be disabled individually:\n\n```js\nimport { configureCompat } from 'vue'\n\n// disable compat for certain features\nconfigureCompat({\n  FEATURE_ID_A: false,\n  FEATURE_ID_B: false,\n})\n```\n\nAlternatively, the entire application can default to Vue 3 behavior, with only certain compat features enabled:\n\n```js\nimport { configureCompat } from 'vue'\n\n// default everything to Vue 3 behavior, and only enable compat\n// for certain features\nconfigureCompat({\n  MODE: 3,\n  FEATURE_ID_A: true,\n  FEATURE_ID_B: true,\n})\n```\n\n### Per-Component Config\n\nA component can use the `compatConfig` option, which expects the same options as the global `configureCompat` method:\n\n```js\nexport default {\n  compatConfig: {\n    MODE: 3, // opt-in to Vue 3 behavior for this component only\n    FEATURE_ID_A: true, // features can also be toggled at component level\n  },\n  // ...\n}\n```\n\n### Compiler-specific Config\n\nFeatures that start with `COMPILER_` are compiler-specific: if you are using the full build (with in-browser compiler), they can be configured at runtime. However if using a build setup, they must be configured via the `compilerOptions` in the build config instead (see example configs above).\n\n## Feature Reference\n\n### Compatibility Types\n\n- ✔ Fully compatible\n- ◐ Partially Compatible with caveats\n- ⨂ Incompatible (warning only)\n- ⭘ Compat only (no warning)\n\n### Incompatible\n\n> Should be fixed upfront or will likely lead to errors\n\n| ID                                    | Type | Description                                                             | Docs                                                                                                           |\n| ------------------------------------- | ---- | ----------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |\n| GLOBAL_MOUNT_CONTAINER                | ⨂    | Mounted application does not replace the element it's mounted to        | [link](https://v3-migration.vuejs.org/breaking-changes/mount-changes.html)                                     |\n| CONFIG_DEVTOOLS                       | ⨂    | production devtools is now a build-time flag                            | [link](https://github.com/vuejs/core/tree/main/packages/vue#bundler-build-feature-flags)                       |\n| COMPILER_V_IF_V_FOR_PRECEDENCE        | ⨂    | `v-if` and `v-for` precedence when used on the same element has changed | [link](https://v3-migration.vuejs.org/breaking-changes/v-if-v-for.html)                                        |\n| COMPILER_V_IF_SAME_KEY                | ⨂    | `v-if` branches can no longer have the same key                         | [link](https://v3-migration.vuejs.org/breaking-changes/key-attribute.html#on-conditional-branches)             |\n| COMPILER_V_FOR_TEMPLATE_KEY_PLACEMENT | ⨂    | `<template v-for>` key should now be placed on `<template>`             | [link](https://v3-migration.vuejs.org/breaking-changes/key-attribute.html#with-template-v-for)                 |\n| COMPILER_SFC_FUNCTIONAL               | ⨂    | `<template functional>` is no longer supported in SFCs                  | [link](https://v3-migration.vuejs.org/breaking-changes/functional-components.html#single-file-components-sfcs) |\n\n### Partially Compatible with Caveats\n\n| ID                       | Type | Description                                                                                                                                                                                | Docs                                                                                                                         |\n| ------------------------ | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- |\n| CONFIG_IGNORED_ELEMENTS  | ◐    | `config.ignoredElements` is now `config.compilerOptions.isCustomElement` (only in browser compiler build). If using build setup, `isCustomElement` must be passed via build configuration. | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#config-ignoredelements-is-now-config-iscustomelement) |\n| COMPILER_INLINE_TEMPLATE | ◐    | `inline-template` removed (compat only supported in browser compiler build)                                                                                                                | [link](https://v3-migration.vuejs.org/breaking-changes/inline-template-attribute.html)                                       |\n| PROPS_DEFAULT_THIS       | ◐    | props default factory no longer have access to `this` (in compat mode, `this` is not a real instance - it only exposes props, `$options` and injections)                                   | [link](https://v3-migration.vuejs.org/breaking-changes/props-default-this.html)                                              |\n| INSTANCE_DESTROY         | ◐    | `$destroy` instance method removed (in compat mode, only supported on root instance)                                                                                                       |                                                                                                                              |\n| GLOBAL_PRIVATE_UTIL      | ◐    | `Vue.util` is private and no longer available                                                                                                                                              |                                                                                                                              |\n| CONFIG_PRODUCTION_TIP    | ◐    | `config.productionTip` no longer necessary                                                                                                                                                 | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#config-productiontip-removed)                         |\n| CONFIG_SILENT            | ◐    | `config.silent` removed                                                                                                                                                                    |\n\n### Compat only (no warning)\n\n| ID                 | Type | Description                            | Docs                                                                    |\n| ------------------ | ---- | -------------------------------------- | ----------------------------------------------------------------------- |\n| TRANSITION_CLASSES | ⭘    | Transition enter/leave classes changed | [link](https://v3-migration.vuejs.org/breaking-changes/transition.html) |\n\n### Fully Compatible\n\n| ID                           | Type | Description                                                           | Docs                                                                                                                      |\n| ---------------------------- | ---- | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |\n| GLOBAL_MOUNT                 | ✔    | new Vue() -> createApp                                                | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#mounting-app-instance)                             |\n| GLOBAL_EXTEND                | ✔    | Vue.extend removed (use `defineComponent` or `extends` option)        | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#vue-extend-replaced-by-definecomponent)            |\n| GLOBAL_PROTOTYPE             | ✔    | `Vue.prototype` -> `app.config.globalProperties`                      | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#vue-prototype-replaced-by-config-globalproperties) |\n| GLOBAL_SET                   | ✔    | `Vue.set` removed (no longer needed)                                  |                                                                                                                           |\n| GLOBAL_DELETE                | ✔    | `Vue.delete` removed (no longer needed)                               |                                                                                                                           |\n| GLOBAL_OBSERVABLE            | ✔    | `Vue.observable` removed (use `reactive`)                             | [link](https://vuejs.org/api/reactivity-core.html#reactive)                                                               |\n| CONFIG_KEY_CODES             | ✔    | config.keyCodes removed                                               | [link](https://v3-migration.vuejs.org/breaking-changes/keycode-modifiers.html)                                            |\n| CONFIG_WHITESPACE            | ✔    | In Vue 3 whitespace defaults to `\"condense\"`                          |                                                                                                                           |\n| INSTANCE_SET                 | ✔    | `vm.$set` removed (no longer needed)                                  |                                                                                                                           |\n| INSTANCE_DELETE              | ✔    | `vm.$delete` removed (no longer needed)                               |                                                                                                                           |\n| INSTANCE_EVENT_EMITTER       | ✔    | `vm.$on`, `vm.$off`, `vm.$once` removed                               | [link](https://v3-migration.vuejs.org/breaking-changes/events-api.html)                                                   |\n| INSTANCE_EVENT_HOOKS         | ✔    | Instance no longer emits `hook:x` events                              | [link](https://v3-migration.vuejs.org/breaking-changes/vnode-lifecycle-events.html)                                       |\n| INSTANCE_CHILDREN            | ✔    | `vm.$children` removed                                                | [link](https://v3-migration.vuejs.org/breaking-changes/children.html)                                                     |\n| INSTANCE_LISTENERS           | ✔    | `vm.$listeners` removed                                               | [link](https://v3-migration.vuejs.org/breaking-changes/listeners-removed.html)                                            |\n| INSTANCE_SCOPED_SLOTS        | ✔    | `vm.$scopedSlots` removed; `vm.$slots` now exposes functions          | [link](https://v3-migration.vuejs.org/breaking-changes/slots-unification.html)                                            |\n| INSTANCE_ATTRS_CLASS_STYLE   | ✔    | `$attrs` now includes `class` and `style`                             | [link](https://v3-migration.vuejs.org/breaking-changes/attrs-includes-class-style.html)                                   |\n| OPTIONS_DATA_FN              | ✔    | `data` must be a function in all cases                                | [link](https://v3-migration.vuejs.org/breaking-changes/data-option.html)                                                  |\n| OPTIONS_DATA_MERGE           | ✔    | `data` from mixin or extension is now shallow merged                  | [link](https://v3-migration.vuejs.org/breaking-changes/data-option.html)                                                  |\n| OPTIONS_BEFORE_DESTROY       | ✔    | `beforeDestroy` -> `beforeUnmount`                                    |                                                                                                                           |\n| OPTIONS_DESTROYED            | ✔    | `destroyed` -> `unmounted`                                            |                                                                                                                           |\n| WATCH_ARRAY                  | ✔    | watching an array no longer triggers on mutation unless deep          | [link](https://v3-migration.vuejs.org/breaking-changes/watch.html)                                                        |\n| V_ON_KEYCODE_MODIFIER        | ✔    | `v-on` no longer supports keyCode modifiers                           | [link](https://v3-migration.vuejs.org/breaking-changes/keycode-modifiers.html)                                            |\n| CUSTOM_DIR                   | ✔    | Custom directive hook names changed                                   | [link](https://v3-migration.vuejs.org/breaking-changes/custom-directives.html)                                            |\n| ATTR_FALSE_VALUE             | ✔    | No longer removes attribute if binding value is boolean `false`       | [link](https://v3-migration.vuejs.org/breaking-changes/attribute-coercion.html)                                           |\n| ATTR_ENUMERATED_COERCION     | ✔    | No longer special case enumerated attributes                          | [link](https://v3-migration.vuejs.org/breaking-changes/attribute-coercion.html)                                           |\n| TRANSITION_GROUP_ROOT        | ✔    | `<transition-group>` no longer renders a root element by default      | [link](https://v3-migration.vuejs.org/breaking-changes/transition-group.html)                                             |\n| COMPONENT_ASYNC              | ✔    | Async component API changed (now requires `defineAsyncComponent`)     | [link](https://v3-migration.vuejs.org/breaking-changes/async-components.html)                                             |\n| COMPONENT_FUNCTIONAL         | ✔    | Functional component API changed (now must be plain functions)        | [link](https://v3-migration.vuejs.org/breaking-changes/functional-components.html)                                        |\n| COMPONENT_V_MODEL            | ✔    | Component v-model reworked                                            | [link](https://v3-migration.vuejs.org/breaking-changes/v-model.html)                                                      |\n| RENDER_FUNCTION              | ✔    | Render function API changed                                           | [link](https://v3-migration.vuejs.org/breaking-changes/render-function-api.html)                                          |\n| FILTERS                      | ✔    | Filters removed (this option affects only runtime filter APIs)        | [link](https://v3-migration.vuejs.org/breaking-changes/filters.html)                                                      |\n| COMPILER_IS_ON_ELEMENT       | ✔    | `is` usage is now restricted to `<component>` only                    | [link](https://v3-migration.vuejs.org/breaking-changes/custom-elements-interop.html)                                      |\n| COMPILER_V_BIND_SYNC         | ✔    | `v-bind.sync` replaced by `v-model` with arguments                    | [link](https://v3-migration.vuejs.org/breaking-changes/v-model.html)                                                      |\n| COMPILER_V_BIND_OBJECT_ORDER | ✔    | `v-bind=\"object\"` is now order sensitive                              | [link](https://v3-migration.vuejs.org/breaking-changes/v-bind.html)                                                       |\n| COMPILER_V_ON_NATIVE         | ✔    | `v-on.native` modifier removed                                        | [link](https://v3-migration.vuejs.org/breaking-changes/v-on-native-modifier-removed.html)                                 |\n| COMPILER_V_FOR_REF           | ✔    | `ref` in `v-for` (compiler support)                                   |                                                                                                                           |\n| COMPILER_NATIVE_TEMPLATE     | ✔    | `<template>` with no special directives now renders as native element |                                                                                                                           |\n| COMPILER_FILTERS             | ✔    | filters (compiler support)                                            |                                                                                                                           |\n","isInternal":false,"tokens":5267,"sizeBytes":26435},{"name":"README.md","path":"packages/vue/README.md","rawUrl":"https://raw.githubusercontent.com/vuejs/core/HEAD/packages/vue/README.md","title":"vue Documentation","category":"plugin-manifest","format":"markdown","content":"# vue\n\n## Which dist file to use?\n\n### From CDN or without a Bundler\n\n- **`vue(.runtime).global(.prod).js`**:\n  - For direct use via `<script src=\"...\">` in the browser. Exposes the `Vue` global.\n  - Note that global builds are not [UMD](https://github.com/umdjs/umd) builds. They are built as [IIFEs](https://developer.mozilla.org/en-US/docs/Glossary/IIFE) and are only meant for direct use via `<script src=\"...\">`.\n  - In-browser template compilation:\n    - **`vue.global.js`** is the \"full\" build that includes both the compiler and the runtime so it supports compiling templates on the fly.\n    - **`vue.runtime.global.js`** contains only the runtime and requires templates to be pre-compiled during a build step.\n  - Inlines all Vue core internal packages - i.e. it's a single file with no dependencies on other files. This means you **must** import everything from this file and this file only to ensure you are getting the same instance of code.\n  - Contains hard-coded prod/dev branches, and the prod build is pre-minified. Use the `*.prod.js` files for production.\n\n- **`vue(.runtime).esm-browser(.prod).js`**:\n  - For usage via native ES modules imports (in browser via `<script type=\"module\">`).\n  - Shares the same runtime compilation, dependency inlining and hard-coded prod/dev behavior with the global build.\n\n### With a Bundler\n\n- **`vue(.runtime).esm-bundler.js`**:\n  - For use with bundlers like `webpack`, `rollup` and `parcel`.\n  - Leaves prod/dev branches with `process.env.NODE_ENV` guards (must be replaced by bundler)\n  - Does not ship minified builds (to be done together with the rest of the code after bundling)\n  - Imports dependencies (e.g. `@vue/runtime-core`, `@vue/compiler-core`)\n    - Imported dependencies are also `esm-bundler` builds and will in turn import their dependencies (e.g. `@vue/runtime-core` imports `@vue/reactivity`)\n    - This means you **can** install/import these deps individually without ending up with different instances of these dependencies, but you must make sure they all resolve to the same version.\n  - In-browser template compilation:\n    - **`vue.runtime.esm-bundler.js` (default)** is runtime only, and requires all templates to be pre-compiled. This is the default entry for bundlers (via `module` field in `package.json`) because when using a bundler templates are typically pre-compiled (e.g. in `*.vue` files).\n    - **`vue.esm-bundler.js`**: includes the runtime compiler. Use this if you are using a bundler but still want runtime template compilation (e.g. in-DOM templates or templates via inline JavaScript strings). You will need to configure your bundler to alias `vue` to this file.\n\n#### Bundler Build Feature Flags\n\n[Detailed Reference on vuejs.org](https://vuejs.org/api/compile-time-flags.html)\n\n`esm-bundler` builds of Vue expose global feature flags that can be overwritten at compile time:\n\n- `__VUE_OPTIONS_API__`\n  - Default: `true`\n  - Enable / disable Options API support\n\n- `__VUE_PROD_DEVTOOLS__`\n  - Default: `false`\n  - Enable / disable devtools support in production\n\n- `__VUE_PROD_HYDRATION_MISMATCH_DETAILS__`\n  - Default: `false`\n  - Enable / disable detailed warnings for hydration mismatches in production\n\nThe build will work without configuring these flags, however it is **strongly recommended** to properly configure them in order to get proper tree-shaking in the final bundle.\n\n### For Server-Side Rendering\n\n- **`vue.cjs(.prod).js`**:\n  - For use in Node.js server-side rendering via `require()`.\n  - If you bundle your app with webpack with `target: 'node'` and properly externalize `vue`, this is the build that will be loaded.\n  - The dev/prod files are pre-built, but the appropriate file is automatically required based on `process.env.NODE_ENV`.\n","isInternal":false,"tokens":911,"sizeBytes":3759}],"systemPromptSnippet":"<yakaai_skills repo=\"vuejs/core\">\n<!-- File: packages/compiler-core/README.md (Tokens: ~6 | Category: plugin-manifest) -->\n# @vue/compiler-core\n\n<!-- File: packages/compiler-dom/README.md (Tokens: ~6 | Category: plugin-manifest) -->\n# @vue/compiler-dom\n\n<!-- File: packages/compiler-sfc/README.md (Tokens: ~890 | Category: plugin-manifest) -->\n# @vue/compiler-sfc\n\n> Lower level utilities for compiling Vue Single File Components\n\n**Note: as of 3.2.13+, this package is included as a dependency of the main `vue` package and can be accessed as `vue/compiler-sfc`. This means you no longer need to explicitly install this package and ensure its version matches that of `vue`'s. Just use the main `vue/compiler-sfc` deep import instead.**\n\nThis package contains lower level utilities that you can use if you are writing a plugin / transform for a bundler or module system that compiles Vue Single File Components (SFCs) into JavaScript. It is used in [vue-loader](https://github.com/vuejs/vue-loader) and [@vitejs/plugin-vue](https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue).\n\n## API\n\nThe API is intentionally low-level due to the various considerations when integrating Vue SFCs in a build system:\n\n- Separate hot-module replacement (HMR) for script, template and styles\n  - template updates should not reset component state\n  - style updates should be performed without component re-render\n\n- Leveraging the tool's plugin system for pre-processor handling. e.g. `<style lang=\"scss\">` should be processed by the corresponding webpack loader.\n\n- In some cases, transformers of each block in an SFC do not share the same execution context. For example, when used with `thread-loader` or other parallelized configurations, the template sub-loader in `vue-loader` may not have access to the full SFC and its descriptor.\n\nThe general idea is to generate a facade module that imports the individual blocks of the component. The trick is the module imports itself with different query strings so that the build system can handle each request as \"virtual\" modules:\n\n```\n                                  +--------------------+\n                                  |                    |\n                                  |  script transform  |\n                           +----->+                    |\n                           |      +--------------------+\n                           |\n+--------------------+     |      +--------------------+\n|                    |     |      |                    |\n|  facade transform  +----------->+ template transform |\n|                    |     |      |                    |\n+--------------------+     |      +--------------------+\n                           |\n                           |      +--------------------+\n                           +----->+                    |\n                                  |  style transform   |\n                                  |                    |\n                                  +--------------------+\n```\n\nWhere the facade module looks like this:\n\n```js\n// main script\nimport script from '/project/foo.vue?vue&type=script'\n// template compiled to render function\nimport { render } from '/project/foo.vue?vue&type=template&id=xxxxxx'\n// css\nimport '/project/foo.vue?vue&type=style&index=0&id=xxxxxx'\n\n// attach render function to script\nscript.render = render\n\n// attach additional metadata\n// some of these should be dev only\nscript.__file = 'example.vue'\nscript.__scopeId = 'xxxxxx'\n\n// additional tooling-specific HMR handling code\n// using __VUE_HMR_API__ global\n\nexport default script\n```\n\n### High Level Workflow\n\n1. In facade transform, parse the source into descriptor with the `parse` API and generate the above facade module code based on the descriptor;\n\n2. In script transform, use `compileScript` to process the script. This handles features like `<script setup>` and CSS variable injection. Alternatively, this can be done directly in the facade module (with the code inlined instead of imported), but it will require rewriting `export default` to a temp variable (a `rewriteDefault` convenience API is provided for this purpose) so additional options can be attached to the exported object.\n\n3. In template transform, use `compileTemplate` to compile the raw template into render function code.\n\n4. In style transform, use `compileStyle` to compile raw CSS to handle `<style scoped>`, `<style module>` and CSS variable injection.\n\nOptions needed for these APIs can be passed via the query string.\n\nFor detailed API references and options, check out the source type definitions. For actual usage of these APIs, check out [@vitejs/plugin-vue](https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue) or [vue-loader](https://github.com/vuejs/vue-loader/tree/next).\n\n<!-- File: packages/compiler-ssr/README.md (Tokens: ~8 | Category: plugin-manifest) -->\n# @vue/compiler-ssr\n\n<!-- File: packages/reactivity/README.md (Tokens: ~215 | Category: plugin-manifest) -->\n# @vue/reactivity\n\n## Usage Note\n\nThis package is inlined into Global & Browser ESM builds of user-facing renderers (e.g. `@vue/runtime-dom`), but also published as a package that can be used standalone. The standalone build should not be used alongside a pre-bundled build of a user-facing renderer, as they will have different internal storage for reactivity connections. A user-facing renderer should re-export all APIs from this package.\n\nFor full exposed APIs, see `src/index.ts`.\n\n## Credits\n\nThe implementation of this module is inspired by the following prior art in the JavaScript ecosystem:\n\n- [Meteor Tracker](https://docs.meteor.com/api/tracker.html)\n- [nx-js/observer-util](https://github.com/nx-js/observer-util)\n- [salesforce/observable-membrane](https://github.com/salesforce/observable-membrane)\n\n## Caveats\n\n- Built-in objects are not observed except for `Array`, `Map`, `WeakMap`, `Set` and `WeakSet`.\n\n<!-- File: packages/runtime-core/README.md (Tokens: ~154 | Category: plugin-manifest) -->\n# @vue/runtime-core\n\n> This package is published only for typing and building custom renderers. It is NOT meant to be used in applications.\n\nFor full exposed APIs, see `src/index.ts`.\n\n## Building a Custom Renderer\n\n```ts\nimport { createRenderer } from '@vue/runtime-core'\n\nconst { render, createApp } = createRenderer({\n  patchProp,\n  insert,\n  remove,\n  createElement,\n  // ...\n})\n\n// `render` is the low-level API\n// `createApp` returns an app instance with configurable context shared\n// by the entire app tree.\nexport { render, createApp }\n\nexport * from '@vue/runtime-core'\n```\n\nSee `@vue/runtime-dom` for how a DOM-targeting renderer is implemented.\n\n<!-- File: packages/runtime-dom/README.md (Tokens: ~56 | Category: plugin-manifest) -->\n# @vue/runtime-dom\n\n```js\nimport { h, createApp } from '@vue/runtime-dom'\n\nconst RootComponent = {\n  render() {\n    return h('div', 'hello world')\n  },\n}\n\ncreateApp(RootComponent).mount('#app')\n```\n\n<!-- File: packages/runtime-test/README.md (Tokens: ~155 | Category: plugin-manifest) -->\n# @vue/runtime-test\n\nThis is for Vue's own internal tests only - it ensures logic tested using this package is DOM-agnostic, and it runs faster than JSDOM.\n\nIt can also be used as a reference for implementing a custom renderer.\n\n```js\nimport { h, render, nodeOps, dumpOps } from '@vue/runtime-test'\n\nconst App = {\n  data() {\n    return {\n      msg: 'Hello World!',\n    }\n  },\n  render() {\n    return h('div', this.msg)\n  },\n}\n\n// root is of type `TestElement` as defined in src/nodeOps.ts\nconst root = nodeOps.createElement('div')\nrender(h(App), root)\n\nconst ops = dumpOps()\nconsole.log(ops)\n```\n\n<!-- File: packages/server-renderer/README.md (Tokens: ~963 | Category: plugin-manifest) -->\n# @vue/server-renderer\n\n**Note: as of 3.2.13+, this package is included as a dependency of the main `vue` package and can be accessed as `vue/server-renderer`. This means you no longer need to explicitly install this package and ensure its version matches that of `vue`'s. Just use the `vue/server-renderer` deep import instead.**\n\n## Basic API\n\n### `renderToString`\n\n**Signature**\n\n```ts\nfunction renderToString(\n  input: App | VNode,\n  context?: SSRContext,\n): Promise<string>\n```\n\n**Usage**\n\n```js\nconst { createSSRApp } = require('vue')\nconst { renderToString } = require('@vue/server-renderer')\n\nconst app = createSSRApp({\n  data: () => ({ msg: 'hello' }),\n  template: `<div>{{ msg }}</div>`,\n})\n\n;(async () => {\n  const html = await renderToString(app)\n  console.log(html)\n})()\n```\n\n### Handling Teleports\n\nIf the rendered app contains teleports, the teleported content will not be part of the rendered string. Instead, they are exposed under the `teleports` property of the ssr context object:\n\n```js\nconst ctx = {}\nconst html = await renderToString(app, ctx)\n\nconsole.log(ctx.teleports) // { '#teleported': 'teleported content' }\n```\n\n## Streaming API\n\n### `renderToNodeStream`\n\nRenders input as a [Node.js Readable stream](https://nodejs.org/api/stream.html#stream_class_stream_readable).\n\n**Signature**\n\n```ts\nfunction renderToNodeStream(input: App | VNode, context?: SSRContext): Readable\n```\n\n**Usage**\n\n```js\n// inside a Node.js http handler\nrenderToNodeStream(app).pipe(res)\n```\n\n**Note:** This method is not supported in the ESM build of `@vue/server-renderer`, which is decoupled from Node.js environments. Use `pipeToNodeWritable` instead.\n\n### `pipeToNodeWritable`\n\nRender and pipe to an existing [Node.js Writable stream](https://nodejs.org/api/stream.html#stream_writable_streams) instance.\n\n**Signature**\n\n```ts\nfunction pipeToNodeWritable(\n  input: App | VNode,\n  context: SSRContext = {},\n  writable: Writable,\n): void\n```\n\n**Usage**\n\n```js\n// inside a Node.js http handler\npipeToNodeWritable(app, {}, res)\n```\n\n### `renderToWebStream`\n\nRenders input as a [Web ReadableStream](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API).\n\n**Signature**\n\n```ts\nfunction renderToWebStream(\n  input: App | VNode,\n  context?: SSRContext,\n): ReadableStream\n```\n\n**Usage**\n\n```js\n// inside an environment with ReadableStream support\nreturn new Response(renderToWebStream(app))\n```\n\n**Note:** in environments that do not expose `ReadableStream` constructor in the global scope, `pipeToWebWritable` should be used instead.\n\n### `pipeToWebWritable`\n\nRender and pipe to an existing [Web WritableStream](https://developer.mozilla.org/en-US/docs/Web/API/WritableStream) instance.\n\n**Signature**\n\n```ts\nfunction pipeToWebWritable(\n  input: App | VNode,\n  context: SSRContext = {},\n  writable: WritableStream,\n): void\n```\n\n**Usage**\n\nThis is typically used in combination with [`TransformStream`](https://developer.mozilla.org/en-US/docs/Web/API/TransformStream):\n\n```js\n// TransformStream is available in environments such as CloudFlare workers.\n// in Node.js, TransformStream needs to be explicitly imported from 'stream/web'\nconst { readable, writable } = new TransformStream()\npipeToWebWritable(app, {}, writable)\n\nreturn new Response(readable)\n```\n\n### `renderToSimpleStream`\n\nRenders input in streaming mode using a simple readable interface.\n\n**Signature**\n\n```ts\nfunction renderToSimpleStream(\n  input: App | VNode,\n  context: SSRContext,\n  options: SimpleReadable,\n): SimpleReadable\n\ninterface SimpleReadable {\n  push(content: string | null): void\n  destroy(err: any): void\n}\n```\n\n**Usage**\n\n```js\nlet res = ''\n\nrenderToSimpleStream(\n  app,\n  {},\n  {\n    push(chunk) {\n      if (chunk === null) {\n        // done\n        console.log(`render complete: ${res}`)\n      } else {\n        res += chunk\n      }\n    },\n    destroy(err) {\n      // error encountered\n    },\n  },\n)\n```\n\n<!-- File: packages/shared/README.md (Tokens: ~18 | Category: plugin-manifest) -->\n# @vue/shared\n\nInternal utility functions and constants shared across `@vue` packages.\n\n<!-- File: packages/vue-compat/README.md (Tokens: ~5267 | Category: plugin-manifest) -->\n## Overview\n\n`@vue/compat` (aka \"the migration build\") is a build of Vue 3 that provides configurable Vue 2 compatible behavior.\n\nThe migration build runs in Vue 2 mode by default - most public APIs behave exactly like Vue 2, with only a few exceptions. Usage of features that have changed or been deprecated in Vue 3 will emit runtime warnings. A feature's compatibility can also be enabled/disabled on a per-component basis.\n\n### Intended Use Cases\n\n- Upgrading a Vue 2 application to Vue 3 (with [limitations](#known-limitations))\n- Migrating a library to support Vue 3\n- For experienced Vue 2 developers who have not tried Vue 3 yet, the migration build can be used in place of Vue 3 to help learn the difference between versions.\n\n### Known Limitations\n\nWhile we've tried hard to make the migration build mimic Vue 2 behavior as much as possible, there are some limitations that may prevent your app from being eligible for upgrading:\n\n- Dependencies that rely on Vue 2 internal APIs or undocumented behavior. The most common case is usage of private properties on `VNodes`. If your project relies on component libraries like [Vuetify](https://vuetifyjs.com/en/), [Quasar](https://quasar.dev/) or [ElementUI](https://element.eleme.io/#/en-US), it is best to wait for their Vue 3 compatible versions.\n\n- Internet Explorer 11 support: [Vue 3 has officially dropped the plan for IE11 support](https://github.com/vuejs/rfcs/blob/master/active-rfcs/0038-vue3-ie11-support.md). If you still need to support IE11 or below, you will have to stay on Vue 2.\n\n- Server-side rendering: the migration build can be used for SSR, but migrating a custom SSR setup is much more involved. The general idea is replacing `vue-server-renderer` with [`@vue/server-renderer`](https://github.com/vuejs/core/tree/main/packages/server-renderer). Vue 3 no longer provides a bundle renderer and it is recommended to use Vue 3 SSR with [Vite](https://vite.dev/guide/ssr). If you are using [Nuxt.js](https://nuxtjs.org/), it is probably better to wait for Nuxt 3.\n\n### Expectations\n\nPlease note that the migration build aims to cover only publicly documented Vue 2 APIs and behavior. If your application fails to run under the migration build due to reliance on undocumented behavior, it is unlikely that we'll tweak the migration build to cater to your specific case. Consider refactoring to remove reliance on the behavior in question instead.\n\nA word of caution: if your application is large and complex, migration will likely be a challenge even with the migration build. If your app is unfortunately not suitable for upgrade, do note that we are planning to backport Composition API and some other Vue 3 features to the 2.7 release (estimated late Q3 2021).\n\nIf you do get your app running on the migration build, you **can** ship it to production before the migration is complete. Although there is a small performance/size overhead, it should not noticeably affect production UX. You may have to do so when you have dependencies that rely on Vue 2 behavior, and cannot be upgraded/replaced.\n\nThe migration build will be provided starting with 3.1, and will continue to be published alongside the 3.2 release line. We do plan to eventually stop publishing the migration build in a future minor version (no earlier than EOY 2021), so you should still aim to switch to the standard build before then.\n\n## Upgrade Workflow\n\nThe following workflow walks through the steps of migrating an actual Vue 2 app (Vue HackerNews 2.0) to Vue 3. The full commits can be found [here](https://github.com/vuejs/vue-hackernews-2.0/compare/migration). Note that the actual steps required for your project may vary, and these steps should be treated as general guidance rather than strict instructions.\n\n### Preparations\n\n- If you are still using the [deprecated named / scoped slot syntax](https://vuejs.org/v2/guide/components-slots.html#Deprecated-Syntax), update it to the latest syntax first (which is already supported in 2.6).\n\n### Installation\n\n1. Upgrade tooling if applicable.\n   - If using custom webpack setup: Upgrade `vue-loader` to `^16.0.0`.\n   - If using `vue-cli`: upgrade to the latest `@vue/cli-service` with `vue upgrade`\n   - (Alternative) migrate to [Vite](https://vite.dev/) + [vite-plugin-vue2](https://github.com/underfin/vite-plugin-vue2). [[Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/565b948919eb58f22a32afca7e321b490cb3b074)]\n\n2. In `package.json`, update `vue` to 3.1, install `@vue/compat` of the same version, and replace `vue-template-compiler` (if present) with `@vue/compiler-sfc`:\n\n   ```diff\n   \"dependencies\": {\n   -  \"vue\": \"^2.6.12\",\n   +  \"vue\": \"^3.1.0\",\n   +  \"@vue/compat\": \"^3.1.0\"\n      ...\n   },\n   \"devDependencies\": {\n   -  \"vue-template-compiler\": \"^2.6.12\"\n   +  \"@vue/compiler-sfc\": \"^3.1.0\"\n   }\n   ```\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/14f6f1879b43f8610add60342661bf915f5c4b20)\n\n3. In the build setup, alias `vue` to `@vue/compat` and enable compat mode via Vue compiler options.\n\n   **Example Configs**\n\n   <details>\n     <summary><b>vue-cli</b></summary>\n\n   ```js\n   // vue.config.js\n   module.exports = {\n     chainWebpack: config => {\n       config.resolve.alias.set('vue', '@vue/compat')\n\n       config.module\n         .rule('vue')\n         .use('vue-loader')\n         .tap(options => {\n           return {\n             ...options,\n             compilerOptions: {\n               compatConfig: {\n                 MODE: 2,\n               },\n             },\n           }\n         })\n     },\n   }\n   ```\n\n   </details>\n\n   <details>\n     <summary><b>Plain webpack</b></summary>\n\n   ```js\n   // webpack.config.js\n   module.exports = {\n     resolve: {\n       alias: {\n         vue: '@vue/compat',\n       },\n     },\n     module: {\n       rules: [\n         {\n           test: /\\.vue$/,\n           loader: 'vue-loader',\n           options: {\n             compilerOptions: {\n               compatConfig: {\n                 MODE: 2,\n               },\n             },\n           },\n         },\n       ],\n     },\n   }\n   ```\n\n   </details>\n\n   <details>\n     <summary><b>Vite</b></summary>\n\n   ```js\n   // vite.config.js\n   export default {\n     resolve: {\n       alias: {\n         vue: '@vue/compat',\n       },\n     },\n     plugins: [\n       vue({\n         template: {\n           compilerOptions: {\n             compatConfig: {\n               MODE: 2,\n             },\n           },\n         },\n       }),\n     ],\n   }\n   ```\n\n   </details>\n\n4. At this point, your application may encounter some compile-time errors / warnings (e.g. use of filters). Fix them first. If all compiler warnings are gone, you can also set the compiler to Vue 3 mode.\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/b05d9555f6e115dea7016d7e5a1a80e8f825be52)\n\n5. After fixing the errors, the app should be able to run if it is not subject to the [limitations](#known-limitations) mentioned above.\n\n   You will likely see a LOT of warnings from both the command line and the browser console. Here are some general tips:\n   - You can filter for specific warnings in the browser console. It's a good idea to use the filter and focus on fixing one item at a time. You can also use negated filters like `-GLOBAL_MOUNT`.\n\n   - You can suppress specific deprecations via [compat configuration](#compat-configuration).\n\n   - Some warnings may be caused by a dependency that you use (e.g. `vue-router`). You can check this from the warning's component trace or stack trace (expanded on click). Focus on fixing the warnings that originate from your own source code first.\n\n   - If you are using `vue-router`, note `<transition>` and `<keep-alive>` will not work with `<router-view>` until you upgrade to `vue-router` v4.\n\n6. Update [`<transition>` class names](https://v3-migration.vuejs.org/breaking-changes/transition.html). This is the only feature that does not have a runtime warning. You can do a project-wide search for `.*-enter` and `.*-leave` CSS class names.\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/d300103ba622ae26ac26a82cd688e0f70b6c1d8f)\n\n7. Update app entry to use [new global mounting API](https://v3-migration.vuejs.org/breaking-changes/global-api.html#a-new-global-api-createapp).\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/a6e0c9ac7b1f4131908a4b1e43641f608593f714)\n\n8. [Upgrade `vuex` to v4](https://next.vuex.vuejs.org/guide/migrating-to-4-0-from-3-x.html).\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/5bfd4c61ee50f358cd5daebaa584f2c3f91e0205)\n\n9. [Upgrade `vue-router` to v4](https://next.router.vuejs.org/guide/migration/index.html). If you also use `vuex-router-sync`, you can replace it with a store getter.\n\n   After the upgrade, to use `<transition>` and `<keep-alive>` with `<router-view>` requires using the new [scoped-slot based syntax](https://next.router.vuejs.org/guide/migration/index.html#router-view-keep-alive-and-transition).\n\n   [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/758961e73ac4089890079d4ce14996741cf9344b)\n\n10. Pick off individual warnings. Note some features have conflicting behavior between Vue 2 and Vue 3 - for example, the render function API, or the functional component vs. async component change. To migrate to Vue 3 API without affecting the rest of the application, you can opt-in to Vue 3 behavior on a per-component basis with the [`compatConfig` option](#per-component-config).\n\n    [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/d0c7d3ae789be71b8fd56ce79cb4cb1f921f893b)\n\n11. When all warnings are fixed, you can remove the migration build and switch to Vue 3 proper. Note you may not be able to do so if you still have dependencies that rely on Vue 2 behavior.\n\n    [Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/9beb45490bc5f938c9e87b4ac1357cfb799565bd)\n\n## Compat Configuration\n\n### Global Config\n\nCompat features can be disabled individually:\n\n```js\nimport { configureCompat } from 'vue'\n\n// disable compat for certain features\nconfigureCompat({\n  FEATURE_ID_A: false,\n  FEATURE_ID_B: false,\n})\n```\n\nAlternatively, the entire application can default to Vue 3 behavior, with only certain compat features enabled:\n\n```js\nimport { configureCompat } from 'vue'\n\n// default everything to Vue 3 behavior, and only enable compat\n// for certain features\nconfigureCompat({\n  MODE: 3,\n  FEATURE_ID_A: true,\n  FEATURE_ID_B: true,\n})\n```\n\n### Per-Component Config\n\nA component can use the `compatConfig` option, which expects the same options as the global `configureCompat` method:\n\n```js\nexport default {\n  compatConfig: {\n    MODE: 3, // opt-in to Vue 3 behavior for this component only\n    FEATURE_ID_A: true, // features can also be toggled at component level\n  },\n  // ...\n}\n```\n\n### Compiler-specific Config\n\nFeatures that start with `COMPILER_` are compiler-specific: if you are using the full build (with in-browser compiler), they can be configured at runtime. However if using a build setup, they must be configured via the `compilerOptions` in the build config instead (see example configs above).\n\n## Feature Reference\n\n### Compatibility Types\n\n- ✔ Fully compatible\n- ◐ Partially Compatible with caveats\n- ⨂ Incompatible (warning only)\n- ⭘ Compat only (no warning)\n\n### Incompatible\n\n> Should be fixed upfront or will likely lead to errors\n\n| ID                                    | Type | Description                                                             | Docs                                                                                                           |\n| ------------------------------------- | ---- | ----------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |\n| GLOBAL_MOUNT_CONTAINER                | ⨂    | Mounted application does not replace the element it's mounted to        | [link](https://v3-migration.vuejs.org/breaking-changes/mount-changes.html)                                     |\n| CONFIG_DEVTOOLS                       | ⨂    | production devtools is now a build-time flag                            | [link](https://github.com/vuejs/core/tree/main/packages/vue#bundler-build-feature-flags)                       |\n| COMPILER_V_IF_V_FOR_PRECEDENCE        | ⨂    | `v-if` and `v-for` precedence when used on the same element has changed | [link](https://v3-migration.vuejs.org/breaking-changes/v-if-v-for.html)                                        |\n| COMPILER_V_IF_SAME_KEY                | ⨂    | `v-if` branches can no longer have the same key                         | [link](https://v3-migration.vuejs.org/breaking-changes/key-attribute.html#on-conditional-branches)             |\n| COMPILER_V_FOR_TEMPLATE_KEY_PLACEMENT | ⨂    | `<template v-for>` key should now be placed on `<template>`             | [link](https://v3-migration.vuejs.org/breaking-changes/key-attribute.html#with-template-v-for)                 |\n| COMPILER_SFC_FUNCTIONAL               | ⨂    | `<template functional>` is no longer supported in SFCs                  | [link](https://v3-migration.vuejs.org/breaking-changes/functional-components.html#single-file-components-sfcs) |\n\n### Partially Compatible with Caveats\n\n| ID                       | Type | Description                                                                                                                                                                                | Docs                                                                                                                         |\n| ------------------------ | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- |\n| CONFIG_IGNORED_ELEMENTS  | ◐    | `config.ignoredElements` is now `config.compilerOptions.isCustomElement` (only in browser compiler build). If using build setup, `isCustomElement` must be passed via build configuration. | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#config-ignoredelements-is-now-config-iscustomelement) |\n| COMPILER_INLINE_TEMPLATE | ◐    | `inline-template` removed (compat only supported in browser compiler build)                                                                                                                | [link](https://v3-migration.vuejs.org/breaking-changes/inline-template-attribute.html)                                       |\n| PROPS_DEFAULT_THIS       | ◐    | props default factory no longer have access to `this` (in compat mode, `this` is not a real instance - it only exposes props, `$options` and injections)                                   | [link](https://v3-migration.vuejs.org/breaking-changes/props-default-this.html)                                              |\n| INSTANCE_DESTROY         | ◐    | `$destroy` instance method removed (in compat mode, only supported on root instance)                                                                                                       |                                                                                                                              |\n| GLOBAL_PRIVATE_UTIL      | ◐    | `Vue.util` is private and no longer available                                                                                                                                              |                                                                                                                              |\n| CONFIG_PRODUCTION_TIP    | ◐    | `config.productionTip` no longer necessary                                                                                                                                                 | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#config-productiontip-removed)                         |\n| CONFIG_SILENT            | ◐    | `config.silent` removed                                                                                                                                                                    |\n\n### Compat only (no warning)\n\n| ID                 | Type | Description                            | Docs                                                                    |\n| ------------------ | ---- | -------------------------------------- | ----------------------------------------------------------------------- |\n| TRANSITION_CLASSES | ⭘    | Transition enter/leave classes changed | [link](https://v3-migration.vuejs.org/breaking-changes/transition.html) |\n\n### Fully Compatible\n\n| ID                           | Type | Description                                                           | Docs                                                                                                                      |\n| ---------------------------- | ---- | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |\n| GLOBAL_MOUNT                 | ✔    | new Vue() -> createApp                                                | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#mounting-app-instance)                             |\n| GLOBAL_EXTEND                | ✔    | Vue.extend removed (use `defineComponent` or `extends` option)        | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#vue-extend-replaced-by-definecomponent)            |\n| GLOBAL_PROTOTYPE             | ✔    | `Vue.prototype` -> `app.config.globalProperties`                      | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#vue-prototype-replaced-by-config-globalproperties) |\n| GLOBAL_SET                   | ✔    | `Vue.set` removed (no longer needed)                                  |                                                                                                                           |\n| GLOBAL_DELETE                | ✔    | `Vue.delete` removed (no longer needed)                               |                                                                                                                           |\n| GLOBAL_OBSERVABLE            | ✔    | `Vue.observable` removed (use `reactive`)                             | [link](https://vuejs.org/api/reactivity-core.html#reactive)                                                               |\n| CONFIG_KEY_CODES             | ✔    | config.keyCodes removed                                               | [link](https://v3-migration.vuejs.org/breaking-changes/keycode-modifiers.html)                                            |\n| CONFIG_WHITESPACE            | ✔    | In Vue 3 whitespace defaults to `\"condense\"`                          |                                                                                                                           |\n| INSTANCE_SET                 | ✔    | `vm.$set` removed (no longer needed)                                  |                                                                                                                           |\n| INSTANCE_DELETE              | ✔    | `vm.$delete` removed (no longer needed)                               |                                                                                                                           |\n| INSTANCE_EVENT_EMITTER       | ✔    | `vm.$on`, `vm.$off`, `vm.$once` removed                               | [link](https://v3-migration.vuejs.org/breaking-changes/events-api.html)                                                   |\n| INSTANCE_EVENT_HOOKS         | ✔    | Instance no longer emits `hook:x` events                              | [link](https://v3-migration.vuejs.org/breaking-changes/vnode-lifecycle-events.html)                                       |\n| INSTANCE_CHILDREN            | ✔    | `vm.$children` removed                                                | [link](https://v3-migration.vuejs.org/breaking-changes/children.html)                                                     |\n| INSTANCE_LISTENERS           | ✔    | `vm.$listeners` removed                                               | [link](https://v3-migration.vuejs.org/breaking-changes/listeners-removed.html)                                            |\n| INSTANCE_SCOPED_SLOTS        | ✔    | `vm.$scopedSlots` removed; `vm.$slots` now exposes functions          | [link](https://v3-migration.vuejs.org/breaking-changes/slots-unification.html)                                            |\n| INSTANCE_ATTRS_CLASS_STYLE   | ✔    | `$attrs` now includes `class` and `style`                             | [link](https://v3-migration.vuejs.org/breaking-changes/attrs-includes-class-style.html)                                   |\n| OPTIONS_DATA_FN              | ✔    | `data` must be a function in all cases                                | [link](https://v3-migration.vuejs.org/breaking-changes/data-option.html)                                                  |\n| OPTIONS_DATA_MERGE           | ✔    | `data` from mixin or extension is now shallow merged                  | [link](https://v3-migration.vuejs.org/breaking-changes/data-option.html)                                                  |\n| OPTIONS_BEFORE_DESTROY       | ✔    | `beforeDestroy` -> `beforeUnmount`                                    |                                                                                                                           |\n| OPTIONS_DESTROYED            | ✔    | `destroyed` -> `unmounted`                                            |                                                                                                                           |\n| WATCH_ARRAY                  | ✔    | watching an array no longer triggers on mutation unless deep          | [link](https://v3-migration.vuejs.org/breaking-changes/watch.html)                                                        |\n| V_ON_KEYCODE_MODIFIER        | ✔    | `v-on` no longer supports keyCode modifiers                           | [link](https://v3-migration.vuejs.org/breaking-changes/keycode-modifiers.html)                                            |\n| CUSTOM_DIR                   | ✔    | Custom directive hook names changed                                   | [link](https://v3-migration.vuejs.org/breaking-changes/custom-directives.html)                                            |\n| ATTR_FALSE_VALUE             | ✔    | No longer removes attribute if binding value is boolean `false`       | [link](https://v3-migration.vuejs.org/breaking-changes/attribute-coercion.html)                                           |\n| ATTR_ENUMERATED_COERCION     | ✔    | No longer special case enumerated attributes                          | [link](https://v3-migration.vuejs.org/breaking-changes/attribute-coercion.html)                                           |\n| TRANSITION_GROUP_ROOT        | ✔    | `<transition-group>` no longer renders a root element by default      | [link](https://v3-migration.vuejs.org/breaking-changes/transition-group.html)                                             |\n| COMPONENT_ASYNC              | ✔    | Async component API changed (now requires `defineAsyncComponent`)     | [link](https://v3-migration.vuejs.org/breaking-changes/async-components.html)                                             |\n| COMPONENT_FUNCTIONAL         | ✔    | Functional component API changed (now must be plain functions)        | [link](https://v3-migration.vuejs.org/breaking-changes/functional-components.html)                                        |\n| COMPONENT_V_MODEL            | ✔    | Component v-model reworked                                            | [link](https://v3-migration.vuejs.org/breaking-changes/v-model.html)                                                      |\n| RENDER_FUNCTION              | ✔    | Render function API changed                                           | [link](https://v3-migration.vuejs.org/breaking-changes/render-function-api.html)                                          |\n| FILTERS                      | ✔    | Filters removed (this option affects only runtime filter APIs)        | [link](https://v3-migration.vuejs.org/breaking-changes/filters.html)                                                      |\n| COMPILER_IS_ON_ELEMENT       | ✔    | `is` usage is now restricted to `<component>` only                    | [link](https://v3-migration.vuejs.org/breaking-changes/custom-elements-interop.html)                                      |\n| COMPILER_V_BIND_SYNC         | ✔    | `v-bind.sync` replaced by `v-model` with arguments                    | [link](https://v3-migration.vuejs.org/breaking-changes/v-model.html)                                                      |\n| COMPILER_V_BIND_OBJECT_ORDER | ✔    | `v-bind=\"object\"` is now order sensitive                              | [link](https://v3-migration.vuejs.org/breaking-changes/v-bind.html)                                                       |\n| COMPILER_V_ON_NATIVE         | ✔    | `v-on.native` modifier removed                                        | [link](https://v3-migration.vuejs.org/breaking-changes/v-on-native-modifier-removed.html)                                 |\n| COMPILER_V_FOR_REF           | ✔    | `ref` in `v-for` (compiler support)                                   |                                                                                                                           |\n| COMPILER_NATIVE_TEMPLATE     | ✔    | `<template>` with no special directives now renders as native element |                                                                                                                           |\n| COMPILER_FILTERS             | ✔    | filters (compiler support)                                            |                                                                                                                           |\n\n<!-- File: packages/vue/README.md (Tokens: ~911 | Category: plugin-manifest) -->\n# vue\n\n## Which dist file to use?\n\n### From CDN or without a Bundler\n\n- **`vue(.runtime).global(.prod).js`**:\n  - For direct use via `<script src=\"...\">` in the browser. Exposes the `Vue` global.\n  - Note that global builds are not [UMD](https://github.com/umdjs/umd) builds. They are built as [IIFEs](https://developer.mozilla.org/en-US/docs/Glossary/IIFE) and are only meant for direct use via `<script src=\"...\">`.\n  - In-browser template compilation:\n    - **`vue.global.js`** is the \"full\" build that includes both the compiler and the runtime so it supports compiling templates on the fly.\n    - **`vue.runtime.global.js`** contains only the runtime and requires templates to be pre-compiled during a build step.\n  - Inlines all Vue core internal packages - i.e. it's a single file with no dependencies on other files. This means you **must** import everything from this file and this file only to ensure you are getting the same instance of code.\n  - Contains hard-coded prod/dev branches, and the prod build is pre-minified. Use the `*.prod.js` files for production.\n\n- **`vue(.runtime).esm-browser(.prod).js`**:\n  - For usage via native ES modules imports (in browser via `<script type=\"module\">`).\n  - Shares the same runtime compilation, dependency inlining and hard-coded prod/dev behavior with the global build.\n\n### With a Bundler\n\n- **`vue(.runtime).esm-bundler.js`**:\n  - For use with bundlers like `webpack`, `rollup` and `parcel`.\n  - Leaves prod/dev branches with `process.env.NODE_ENV` guards (must be replaced by bundler)\n  - Does not ship minified builds (to be done together with the rest of the code after bundling)\n  - Imports dependencies (e.g. `@vue/runtime-core`, `@vue/compiler-core`)\n    - Imported dependencies are also `esm-bundler` builds and will in turn import their dependencies (e.g. `@vue/runtime-core` imports `@vue/reactivity`)\n    - This means you **can** install/import these deps individually without ending up with different instances of these dependencies, but you must make sure they all resolve to the same version.\n  - In-browser template compilation:\n    - **`vue.runtime.esm-bundler.js` (default)** is runtime only, and requires all templates to be pre-compiled. This is the default entry for bundlers (via `module` field in `package.json`) because when using a bundler templates are typically pre-compiled (e.g. in `*.vue` files).\n    - **`vue.esm-bundler.js`**: includes the runtime compiler. Use this if you are using a bundler but still want runtime template compilation (e.g. in-DOM templates or templates via inline JavaScript strings). You will need to configure your bundler to alias `vue` to this file.\n\n#### Bundler Build Feature Flags\n\n[Detailed Reference on vuejs.org](https://vuejs.org/api/compile-time-flags.html)\n\n`esm-bundler` builds of Vue expose global feature flags that can be overwritten at compile time:\n\n- `__VUE_OPTIONS_API__`\n  - Default: `true`\n  - Enable / disable Options API support\n\n- `__VUE_PROD_DEVTOOLS__`\n  - Default: `false`\n  - Enable / disable devtools support in production\n\n- `__VUE_PROD_HYDRATION_MISMATCH_DETAILS__`\n  - Default: `false`\n  - Enable / disable detailed warnings for hydration mismatches in production\n\nThe build will work without configuring these flags, however it is **strongly recommended** to properly configure them in order to get proper tree-shaking in the final bundle.\n\n### For Server-Side Rendering\n\n- **`vue.cjs(.prod).js`**:\n  - For use in Node.js server-side rendering via `require()`.\n  - If you bundle your app with webpack with `target: 'node'` and properly externalize `vue`, this is the build that will be loaded.\n  - The dev/prod files are pre-built, but the appropriate file is automatically required based on `process.env.NODE_ENV`.\n</yakaai_skills>"}