Skip to main content
Extension.js detects Vue from your dependencies. It configures single-file component (SFC) compilation, framework aliases, and dev-time update behavior automatically. Scoped styles, the Composition API, and <script setup> all work without extra bundler wiring.

When Vue is a good fit

  • You already ship production Vue apps.
  • You prefer Vue single-file component authoring with scoped styles and the Composition API.
  • You want extension UI surfaces that mirror existing Vue architecture.

Template examples

new-vue

Template screenshot Build a Vue new-tab experience with SFC support from day one.
Repository: extension-js/examples/new-vue

content-vue

Template screenshot Inject Vue components directly into web pages with a content-script setup.
Repository: extension-js/examples/content-vue

Usage with an existing extension

Add Vue to an existing extension with the steps below.

Installation

Install the required dependencies:
For explicit setup in existing projects, install the Vue SFC toolchain too:

Configuration

Extension.js expects Vue components in .vue files. It configures vue-loader, VueLoaderPlugin, and Vue-related define flags in the Rspack pipeline.

Development behavior

When Extension.js detects Vue, it:
  • Enables .vue compilation in the framework plugin.
  • Applies Vue runtime aliases (for consistent runtime resolution).
  • Supports content script updates by remounting after relevant Vue SFC changes.
If your project lacks optional Vue tooling, Extension.js installs it and asks for a restart.

Troubleshooting

  • Missing Vue tooling warning: Install vue-loader and @vue/compiler-sfc.
  • Prompt to restart after install: Stop and rerun extension dev so Extension.js can load the newly installed loader/plugin.
  • Unexpected .vue handling issues: Verify vue is present in project dependencies so Extension.js detects Vue integration.

Usage examples

In a new tab extension

To use Vue in a new tab extension, include your entry file in HTML:

In a content_script file

For content scripts, mount a Vue app into an injected root node:

Best practices

  • Keep UI entrypoints framework-first (main.ts, App.vue) and keep extension APIs in dedicated modules.
  • Use scoped styles in SFCs when possible to reduce style leaks in extension pages.
  • For large UIs, split components and shared composables to keep content scripts small.

Next steps

Video walkthrough