This
Astro integration
enables rendering and client-side hydration for your
Vue 3
components.
Astro includes an
astro add
command to automate the setup of official integrations. If you prefer, you can
install integrations manually
instead.
To install
@astrojs/vue
, run the following from your project directory and follow the prompts:
If you run into any issues,
feel free to report them to us on GitHub
and try the manual installation steps below.
First, install the
@astrojs/vue
package:
Then, apply the integration to your
astro.config.*
file using the
integrations
property:
import { defineConfig } from ' astro/config ' ;
import vue from ' @astrojs/vue ' ;
export default defineConfig ({
To use your first Vue component in Astro, head to our
UI framework documentation
. You’ll explore:
📦 how framework components are loaded,
💧 client-side hydration options, and
🤝 opportunities to mix and nest frameworks together
For help, check out the
#support
channel on
Discord
. Our friendly Support Squad members are here to help!
You can also check our
Astro Integration Documentation
for more on integrations.
This package is maintained by Astro’s Core team. You’re welcome to submit an issue or PR!
This integration is powered by
@vitejs/plugin-vue
. To customize the Vue compiler, options can be provided to the integration. See the
@vitejs/plugin-vue
docs
for more details.
import { defineConfig } from ' astro/config ' ;
import vue from ' @astrojs/vue ' ;
export default defineConfig ({
// treat any tag that starts with ion- as custom elements
isCustomElement : ( tag ) => tag . startsWith ( ' ion- ' ),
You can extend the Vue
app
instance setting the
appEntrypoint
option to a root-relative import specifier (for example,
appEntrypoint: "/src/pages/_app"
).
The default export of this file should be a function that accepts a Vue
App
instance prior to rendering, allowing the use of
custom Vue plugins
,
app.use
, and other customizations for advanced use cases.
import { defineConfig } from ' astro/config ' ;
import vue from ' @astrojs/vue ' ;
export default defineConfig ({
integrations: [ vue ({ appEntrypoint: ' /src/pages/_app ' })],
import type { App } from ' vue ' ;
import i18nPlugin from ' my-vue-i18n-plugin ' ;
export default ( app : App ) => {
You can use Vue JSX by setting
jsx: true
.
import { defineConfig } from ' astro/config ' ;
import vue from ' @astrojs/vue ' ;
export default defineConfig ({
integrations: [ vue ({ jsx: true })],
This will enable rendering for both Vue and Vue JSX components. To customize the Vue JSX compiler, pass an options object instead of a boolean. See the
@vitejs/plugin-vue-jsx
docs
for more details.
import { defineConfig } from ' astro/config ' ;
import vue from ' @astrojs/vue ' ;
export default defineConfig ({
// treat any tag that starts with ion- as custom elements
isCustomElement : ( tag ) => tag . startsWith ( ' ion- ' ),
Added in:
@astrojs/[email protected]
You can enable
Vue DevTools
in development by passing an object with
devtools: true
to your
vue()
integration config:
import { defineConfig } from ' astro/config ' ;
import vue from ' @astrojs/vue ' ;
export default defineConfig ({
integrations: [ vue ({ devtools: true })],
Added in:
@astrojs/[email protected]
For more customization, you can instead pass options that the
Vue DevTools Vite Plugin
supports. (Note:
appendTo
is not supported.)
For example, you can set
launchEditor
to your preferred editor if you are not using Visual Studio Code:
import { defineConfig } from " astro/config " ;
import vue from " @astrojs/vue " ;
export default defineConfig ({
devtools: { launchEditor: " webstorm " },