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/image
Configuration 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-analytics
Usage:
// 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 -y
2. 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-example
Troubleshooting
- Version Conflicts: Ensure plugin version is compatible with Starlight version
- Configuration Validation: Use
astro check
to validate configuration - Cache Issues: Run
npm run clear
to clear build cache