Starlight Plugin Extension Guide
Plugin System Overview
Starlight’s plugin system is built on Astro integration, allowing modular extension of documentation site functionality. All plugins are distributed through npm packages, supporting both official and community plugins.
Core Concepts
- Feature Extension: Add new components, optimize build process, or integrate third-party services
- Configuration Inheritance: Plugin configuration deeply integrates with Starlight main configuration
- Type Safety: Complete TypeScript type support provided
Plugin Management
Installing Plugins
Using the official image plugin as an example:
npm install @astrojs/starlight-image @astrojs/imageConfiguration File
Create starlight.plugins.mjs in the project root:
import imagePlugin from '@astrojs/starlight-image';
/** @type {import('@astrojs/starlight').StarlightPlugins} */
export default {
image: imagePlugin({
defaultLocale: 'en',
imageService: 'sharp',
}),
};Applying Configuration
Update astro.config.mjs:
import { defineConfig } from 'astro/config';
import starlight from '@astrojs/starlight';
import plugins from './starlight.plugins.mjs';
export default defineConfig({
integrations: [
starlight({
// ... existing configuration ...
plugins: Object.values(plugins),
}),
],
});Common Plugin Examples
1. Image Optimization Plugin
Configuration example:
// starlight.plugins.mjs
export default {
image: imagePlugin({
responsive: {
deviceSizes: [640, 750, 828, 1080, 1200],
imageSizes: [16, 32, 48, 64],
},
}),
};2. Analytics Plugin
Installation:
npm install starlight-google-analyticsUsage:
// starlight.plugins.mjs
import analytics from 'starlight-google-analytics';
export default {
analytics: analytics({
trackingID: 'UA-XXXXX-Y',
}),
};Plugin Development Basics
1. Create Plugin Template
mkdir starlight-plugin-example
cd starlight-plugin-example
npm init -y2. Basic Structure
// index.js
/** @type {import('@astrojs/starlight').StarlightPlugin} */
export default {
name: 'example-plugin',
hooks: {
setup({ config, updateConfig }) {
// Plugin logic
updateConfig({
head: [
...config.head,
{ tag: 'meta', attrs: { name: 'plugin-added' } },
],
});
},
},
};3. Local Testing
Temporarily install in your project:
npm install ./path/to/starlight-plugin-exampleTroubleshooting
- Version Conflicts: Ensure plugin version is compatible with Starlight version
- Configuration Validation: Use
astro checkto validate configuration - Cache Issues: Run
npm run clearto clear build cache