Plugin System: app.use()
Create a Vue plugin as an object with an install method, register global components, directives, and provide values to the entire application.
Plugin System: app.use() is a free Frontend Academy lesson on CoddyKit. This is lesson 4 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Frontend Academy learning path, and your progress syncs across the web and the CoddyKit app. The Frontend Academy course includes 4 lessons in total.
What Is a Vue Plugin?
A plugin is reusable functionality you install into a Vue app: global components, directives, provide values, prototype-style helpers (router, i18n, pinia). Plugins are how libraries integrate with Vue.
Plugin Shape
A plugin is an object with an install(app, options) method — or a function that acts as the install method.
// MyPlugin.ts
export default {
install(app, options) {
// Configure things here
}
};Installing a Plugin
Call app.use(plugin, options) on the Vue app instance.
import { createApp } from 'vue';
import App from './App.vue';
import MyPlugin from './plugins/MyPlugin';
const app = createApp(App);
app.use(MyPlugin, { theme: 'dark' });
app.mount('#app');Plugin Use Case: Global Components
Register many small components globally so consumers don't have to import each one.
// plugins/iconPack.ts
import IconChevron from './IconChevron.vue';
import IconClose from './IconClose.vue';
import IconUser from './IconUser.vue';
export default {
install(app) {
app.component('IconChevron', IconChevron);
app.component('IconClose', IconClose);
app.component('IconUser', IconUser);
}
};
// main.ts
app.use(iconPack);Plugin Use Case: Global Directives
Register custom directives once, available app-wide.
export default {
install(app) {
app.directive('focus', { mounted: (el) => el.focus() });
app.directive('click-outside', clickOutsideDirective);
}
};Plugin Use Case: provide()
Provide app-wide values that any component can inject — common for API clients and configuration.
import type { InjectionKey } from 'vue';
import { ApiClient } from './ApiClient';
export const ApiKey: InjectionKey<ApiClient> = Symbol('api');
export default {
install(app, { baseURL }) {
const api = new ApiClient({ baseURL });
app.provide(ApiKey, api);
}
};
// Anywhere:
const api = inject(ApiKey)!;Real Plugins: Pinia, Vue Router, i18n
The major Vue ecosystem libraries are plugins.
import { createPinia } from 'pinia';
import router from './router';
import { createI18n } from 'vue-i18n';
const app = createApp(App);
app.use(createPinia());
app.use(router);
app.use(createI18n({ /* ... */ }));Plugin Options
Plugins accept options to configure their behaviour at install time.
app.use(MyPlugin, {
apiUrl: 'https://api.example.com',
enableLogs: true,
theme: 'dark'
});
// Inside the plugin:
install(app, options) {
if (options.enableLogs) console.log('plugin installed');
}TypeScript Augmentation
For globalProperties or injection helpers, augment Vue's types so consumers get autocompletion.
// types.d.ts
declare module '@vue/runtime-core' {
interface ComponentCustomProperties {
$api: ApiClient;
}
}
// In plugin:
install(app) {
app.config.globalProperties.$api = new ApiClient();
}globalProperties — Old Pattern
app.config.globalProperties.$foo exposes a value as this.$foo in Options API components and templates. Composition API prefers inject().
Idempotent install
Don't crash if installed twice — check a flag or use Symbol-based provide keys that naturally deduplicate.
Writing Your Own Plugin
If multiple apps reuse a config (auth wrapper, telemetry setup, design tokens), package them as a plugin. Publishing to npm with a clean install(app, options) signature is the Vue-idiomatic way to ship reusable functionality.
Quick Check
What method do you call on a Vue app instance to install a plugin?
Recap: Vue Plugins
Plugin = object with install(app, options). Install via app.use(plugin, options). Use to register global components, directives, provide values, and configure libraries. Pinia, Vue Router, i18n are all plugins. Augment ComponentCustomProperties for $-prefixed properties. Keep install idempotent.
Learn HTML with an AI tutor — free
Write and run real code in your browser, get instant help from a 24/7 AI tutor, and pick up where you left off on the web or in the app.
- Courses
- 41
- Lessons
- 163
Frequently Asked Questions
Is the “Plugin System: app.use()” lesson free?
Yes — the full text of “Plugin System: app.use()” is free to read here on the web. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Frontend Academy course, upgrade to CoddyKit PRO. The Frontend Academy course includes 4 lessons in total.
What will I learn in “Plugin System: app.use()”?
Create a Vue plugin as an object with an install method, register global components, directives, and provide values to the entire application. You practise Frontend Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Frontend Academy?
No prior experience is required. Frontend Academy on CoddyKit is structured for beginners through advanced learners, so you can start here or from the beginning and move at your own pace. This is lesson 4 of 4.
How long does the “Plugin System: app.use()” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Frontend Academy lesson?
Yes. Every Frontend Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- provide() and inject() for Dependency Injection
- Async Components and Suspense
- Custom Directives
- Plugin System: app.use()