
syncfusion-javascript-chart
Implements Syncfusion JavaScript chart controls (Line, Area, Bar, Column, Pie, Polar, Radar, Waterfall, Stock). Use when building interactive data visualizations, dashboards, or real-time charts. Covers series and axes configuration, styling, animations, exporting, and technical indicators. Works with TypeScript (webpack/modules) and JavaScript (CDN/ES5).
- Installs
- 65
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/syncfusion/javascript-ui-controls-skills --skill syncfusion-javascript-chart- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads syncfusion-javascript-chart automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Implementing Charts in Syncfusion TypeScript & JavaScript
The Syncfusion EJ2 Charts package provides a comprehensive collection of visualization components for building interactive, data-driven applications and dashboards.
Use the appropriate component for the required visualization:
- Use
Chartfor Cartesian, statistical, financial, Polar, and Radar series. - Use
AccumulationChartfor Pie, Doughnut, Funnel, and Pyramid visualizations. - Use
StockChartfor financial dashboards that require built-in range selection, periods, indicators, and stock-specific controls.
The package supports multiple series, axes, technical indicators, trendlines, animations, export, printing, accessibility, right-to-left rendering, and real-time data updates.
Platform Support
This skill covers TypeScript and JavaScript implementations.
TypeScript
TypeScript implementations use:
- Package installation through npm.
- Module-based imports from
@syncfusion/ej2-charts. - Feature registration through
Chart.Inject(...). - Typed data models.
- Typed event arguments.
- A bundler such as webpack or Vite.
- Full IDE and compiler support.
JavaScript
JavaScript implementations use:
- Consolidated or individual CDN scripts.
- Local ES5 script files where required.
- The global
ej.chartsnamespace. - Feature registration through
ej.charts.Chart.Inject(...). - No required TypeScript compilation step.
The configuration model is generally equivalent between TypeScript and JavaScript. However, package loading, imports, module injection, global namespace access, and type annotations differ between platforms.
When to Use This Skill
Use this skill when you need to:
- Create Cartesian Charts: Build Line, Spline, Area, Bar, Column, Scatter, Bubble, Range, Step, Histogram, Box and Whisker, Waterfall, Pareto, or financial Charts.
- Create Accumulation Charts: Build Pie, Doughnut, Funnel, or Pyramid visualizations with
AccumulationChart. - Create financial dashboards: Use Candle, Hilo, HiloOpenClose, indicators, trendlines, or
StockChart. - Visualize complex data: Configure multiple series, stacked series, grouped data, multiple axes, and chart panes.
- Build interactive dashboards: Combine Charts with dynamic or real-time data.
- Customize appearance: Configure palettes, fills, gradients, typography, borders, backgrounds, themes, and responsive behavior.
- Add interactivity: Enable tooltips, crosshairs, trackball-style interaction, legends, highlighting, selection, zooming, and panning.
- Implement advanced analysis: Add technical indicators, trendlines, annotations, and financial analysis.
- Export or print Charts: Export to supported image, document, or data formats and print rendered Charts.
- Optimize performance: Filter, aggregate, limit, or progressively load large datasets and use Canvas rendering when appropriate.
- Support accessibility: Configure descriptions, keyboard navigation, focus styling, screen-reader support, accessible summaries, data tables, and RTL layouts.
- Troubleshoot applications: Diagnose rendering, data binding, module injection, browser compatibility, and performance issues.
Component Selection
Select the component before implementing the visualization.
Use Chart
Use Chart for:
- Line and Spline.
- Area and stacked Area.
- Bar and Column.
- Scatter and Bubble.
- Range series.
- Step series.
- Histogram.
- Box and Whisker.
- Waterfall.
- Pareto.
- Polar and Radar.
- Candle, Hilo, and HiloOpenClose.
- Technical indicators.
- Trendlines.
Use AccumulationChart
Use AccumulationChart for:
- Pie.
- Doughnut.
- Funnel.
- Pyramid.
A Doughnut Chart is a Pie series with a nonzero innerRadius.
Do not configure:
type: 'Doughnut'
Use:
type: 'Pie',
innerRadius: '50%'
Use StockChart
Use StockChart when the application requires a stock-focused interface with features such as:
- Built-in range selection.
- Period selectors.
- Financial series switching.
- Technical indicators.
- Stock-specific toolbars.
- Financial export and print controls.
Navigation Guide
Read only the reference files relevant to the user's task.
WebMCP for TypeScript and JavaScript
📄 Read: TypeScript API Reference and JavaScript API Reference
- TypeScript WebMCP samples must import and inject every available Chart feature module, including
WebMcpChart. - Do not reduce TypeScript imports or injections based on the initial series type.
- Browser JavaScript WebMCP samples that use the global EJ2 bundle must contain no imports and no injection calls.
- JavaScript samples must use
new ej.charts.Chart(...)after loading the all-in-one browser script. - Both languages must use a stable Chart ID, automatic registration, and verified WebMCP tool names.
- Never generate
registerWebMcpTools()or a manual registration button.
Getting Started
Read references/getting-started.md for:
- Package installation.
- TypeScript and JavaScript setup.
- Module injection.
- Basic Chart creation.
- Local data binding.
- Theme selection.
- Initial troubleshooting.
Chart Types & Selection
Read references/chart-types.md for:
- Cartesian Chart types.
- Statistical and specialized Charts.
- Financial series.
- Polar and Radar Charts.
- Pie, Doughnut, Funnel, and Pyramid component selection.
- Guidelines for choosing an appropriate visualization.
- Required modules for each Chart type.
Series Configuration
Read references/series-configuration.md for:
- Series properties and mappings.
- Multiple series.
- Data labels.
- Markers.
- Series borders and fills.
- Stacking and grouping.
- Stacking groups.
- Empty-point handling.
- Multi-axis series.
Axes Customization
Read references/axes-customization.md for:
- Numeric, Category, DateTime, DateTimeCategory, and Logarithmic axes.
- Axis labels and formatting.
- Axis ranges and scaling.
- Multiple axes.
- Multiple panes.
- Axis positioning.
- Grid and tick lines.
- Strip lines.
Features & Interaction
Read references/features-interaction.md for:
- Tooltips and inline tooltip formatting.
- Shared tooltips.
- Crosshairs.
- Trackball-style interaction.
- Legends and highlighting.
- Point, series, and cluster selection.
- Zooming and panning.
- Chart annotations.
- Interaction events.
Styling & Appearance
Read references/styling-appearance.md for:
- Custom color palettes.
- Data-driven and conditional point colors.
- Linear and radial gradients.
- Typography.
- Borders and backgrounds.
- Chart-area styling.
- Responsive layouts.
- Built-in themes.
- Dynamic theme switching.
Advanced Features
Read references/advanced-features.md for:
- Technical indicators.
- SMA, EMA, MACD, RSI, ATR, Bollinger Bands, and Stochastic indicators.
- Trendlines and forecasting.
- Animation.
- Export to supported image, document, and data formats.
- Printing.
- Reduced-motion handling.
Data Handling & Updates
Read references/data-handling.md for:
- Dynamic data replacement.
- Adding, updating, and removing points.
- Real-time Charts.
- WebSocket updates.
- API polling.
- Drag-based data editing.
- Local and remote data sources.
DataManager.- CSV data.
- Large-dataset filtering and aggregation.
- Resource cleanup.
Accessibility & RTL Support
Read references/accessibility-rtl.md for:
- WCAG and WAI-ARIA support.
- Chart-level accessibility configuration.
- Series and point accessibility.
- Keyboard navigation.
- Focus-border customization.
- Screen-reader summaries.
- Semantic data tables.
- ARIA live-region announcements.
- Color and contrast guidance.
- Right-to-left rendering.
- Dynamic language switching.
Troubleshooting & Optimization
Read references/troubleshooting.md for:
- Blank or missing Charts.
- Invalid field mappings.
- Missing module injection.
- Tooltip and legend issues.
- Memory cleanup.
- TypeScript and CDN issues.
- SVG and Canvas rendering.
- Large-dataset optimization.
- Browser compatibility.
- Debugging strategies.
Core Implementation Rules
Follow these rules for every implementation.
Select the Correct Component
- Use
Chartfor Cartesian, statistical, Polar, Radar, and financial series. - Use
AccumulationChartfor Pie, Doughnut, Funnel, and Pyramid. - Use
StockChartwhen built-in stock-specific controls are required. - Do not mix APIs belonging to different Chart components.
Inject Required Modules
Import and inject every series, axis, and feature module used by the configuration.
import {
Category,
Chart,
LineSeries,
Tooltip
} from '@syncfusion/ej2-charts';
Chart.Inject(
LineSeries,
Category,
Tooltip
);
Common examples include:
LineSeriesfor Line Charts.ColumnSeriesfor Column Charts.StackingColumnSeriesfor stacked Column Charts.Categoryfor Category axes.DateTimefor DateTime axes.Tooltipfor tooltips.Legendfor legends.Selectionfor selection.Zoomfor zooming and panning.DataLabelfor Cartesian Chart data labels.Trendlinesfor trendlines.Exportfor exporting.ChartAnnotationfor annotations.
Preserve Valid Field Mappings
Always configure:
dataSource
xName
yName
Ensure that:
- The mapped fields exist.
- Y-values are numeric.
- DateTime values are valid JavaScript
Dateobjects. - Range and financial series include all required field mappings.
Use Correct Chart-Level Properties
Use:
legendSettings
palettes
selectionMode
zoomSettings
annotations
indicators
accessibility
Do not use:
legend
palette
selection
annotation
Use Correct Cartesian Data Label Placement
For a regular Cartesian Chart, configure data labels through:
marker: {
dataLabel: {
visible: true
}
}
Do not place dataLabel directly at the Cartesian series root.
Use Either Constructor Target or appendTo
Constructor target:
const chart: Chart = new Chart(
{
series: []
},
'#chart'
);
appendTo pattern:
const chart: Chart = new Chart({
series: []
});
chart.appendTo('#chart');
Do not attach the same instance twice.
Clean Up Resources
When permanently removing a Chart:
- Clear intervals and timeouts.
- Close WebSocket connections.
- Remove application-owned event listeners.
- Call
chart.destroy().
Quick Start Example
TypeScript
Install the package:
npm install @syncfusion/ej2-charts
Add the Chart container:
<div id="chart"></div>
Add a stable container size:
#chart {
width: 100%;
min-height: 420px;
}
Create the Chart:
import {
Chart,
DateTime,
LineSeries,
Tooltip
} from '@syncfusion/ej2-charts';
Chart.Inject(
LineSeries,
DateTime,
Tooltip
);
interface SalesData {
date: Date;
value: number;
}
const chart[To('#chart');
attach the same instance twice.
Up Resourcesvalue: 21
},
{
date: new Date(2026, 0, 2),
value: 24
},
{
date: new Date(2026, 0, 3),
value: 36
},
{
date: new Date(2026, 0, 4),
value: 38
},
{
date: new Date(2026, 0, 5),
value: 54
}
];
const chart: Chart = new Chart({
title: 'Sales Over Time',
primaryXAxis: {
valueType: 'DateTime',
labelFormat: 'dd MMM',
title: 'Date'
},
primaryYAxis: {
title: 'Sales'
},
tooltip: {
enable: true,
format:
'<b>${point.x:dd MMM yyyy}</b><br>' +
'Sales: ${point.y:n2}'
},
series: [
{
dataSource: chartData,
xName: 'date',
yName: 'value',
type: 'Line',
name: 'Sales',
marker: {
visible: true
}
}
]
});
chart.appendTo('#chart');
Module purpose:
LineSeriesrenders the Line series.DateTimesupports the DateTime X-axis.Tooltipenables point tooltips.
JavaScript with Consolidated CDN Script
Use a consistent, pinned EJ2 version in production.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta
name="viewport"
content="width=device-width, initial-scale=1.0"
>
<title>Sales Chart</title>
<script src="https://cdn.syncfusion.com/ej2/34.2.2/dist/ej2.min.js"></script>
<style>
#chart {
width: 100%;
min-height: 420px;
}
</style>
</head>
<body>
<div id="chart"></div>
<script>
ej.charts.Chart.Inject(
ej.charts.LineSeries,
ej.charts.DateTime,
ej.charts.Tooltip
);
var chartData = [
{
date: new Date(2026, 0, 1),
value: 21
},
{
date: new Date(2026, 0, 2),
value: 24
},
{
date: new Date(2026, 0, 3),
value: 36
},
{
date: new Date(2026, 0, 4),
value: 38
},
{
date: new Date(2026, 0, 5),
value: 54
}
];
var chart = new ej.charts.Chart({
title: 'Sales Over Time',
primaryXAxis: {
valueType: 'DateTime',
labelFormat: 'dd MMM',
title: 'Date'
},
primaryYAxis: {
title: 'Sales'
},
tooltip: {
enable: true,
format:
'<b>${point.x:dd MMM yyyy}</b><br>' +
'Sales: ${point.y:n2}'
},
series: [
{
dataSource: chartData,
xName: 'date',
yName: 'value',
type: 'Line',
name: 'Sales',
marker: {
visible: true
}
}
]
});
chart.appendTo('#chart');
</script>
</body>
</html>
JavaScript with Individual CDN Scripts
When individual package scripts are required, load them in dependency order and use the same version.
<script src="https://cdn.syncfusion.com/ej2/34.2.2/ej2-base/dist/global/ej2-base.min.js"></script>
<script src="https://cdn.syncfusion.com/ej2/34.2.2/ej2-data/dist/global/ej2-data.min.js"></script>
<script src="https://cdn.syncfusion.com/ej2/34.2.2/ej2-svg-base/dist/global/ej2-svg-base.min.js"></script>
<script src="https://cdn.syncfusion.com/ej2/34.2.2/ej2-charts/dist/global/ej2-charts.min.js"></script>
Do not load the consolidated EJ2 script together with individual package scripts.
Common Patterns
Pattern 1: Multi-Series Column Chart
Use regular Column series for side-by-side comparison.
Required modules:
import {
Category,
Chart,
ColumnSeries,
Legend,
Tooltip
} from '@syncfusion/ej2-charts';
Chart.Inject(
ColumnSeries,
Category,
Legend,
Tooltip
);
Configuration:
series: [
{
dataSource: chartData,
xName: 'month',
yName: 'sales',
type: 'Column',
name: 'Sales'
},
{
dataSource: chartData,
xName: 'month',
yName: 'revenue',
type: 'Column',
name: 'Revenue'
}
],
legendSettings: {
visible: true,
position: 'Bottom'
},
tooltip: {
enable: true,
shared: true
}
Pattern 2: Stacked Column Chart with Legend
Required modules:
import {
Category,
Chart,
Legend,
StackingColumnSeries,
Tooltip
} from '@syncfusion/ej2-charts';
Chart.Inject(
StackingColumnSeries,
Category,
Legend,
Tooltip
);
Configuration:
series: [
{
dataSource: chartData,
xName: 'category',
yName: 'value1',
type: 'StackingColumn',
name: 'Current'
},
{
dataSource: chartData,
xName: 'category',
yName: 'value2',
type: 'StackingColumn',
name: 'Previous'
}
],
legendSettings: {
visible: true,
position: 'Bottom'
},
tooltip: {
enable: true,
shared: true
}
Use StackingColumn100 when each category must be normalized to 100 percent.
Pattern 3: Real-Time Data Update
Use a bounded data window and disable animation for frequent updates.
interface RealTimeData {
timestamp: Date;
value: number;
}
let realTimeData: RealTimeData[] = [];
const maximumVisiblePoints: number = 100;
const updateInterval: number =
window.setInterval(() => {
const nextPoint: RealTimeData = {
timestamp: new Date(),
value:
Math.round(
Math.random() * 10000
) / 100
};
realTimeData = [
...realTimeData,
nextPoint
].slice(-maximumVisiblePoints);
chart.series[0].dataSource =
realTimeData;
chart.refresh();
}, 5000);
window.addEventListener(
'beforeunload',
(): void => {
window.clearInterval(
updateInterval
);
chart.destroy();
}
);
Apply all changes before calling refresh().
Pattern 4: Interactive Point Selection
Inject Selection.
import {
Chart,
ColumnSeries,
Selection
} from '@syncfusion/ej2-charts';
Chart.Inject(
ColumnSeries,
Selection
);
Configure selection through Chart-level properties:
const chart: Chart = new Chart({
selectionMode: 'Point',
isMultiSelect: false,
selectionPattern:
'DiagonalForward',
selectionComplete: (args): void => {
console.log(
'Selected values:',
args.selectedDataValues
);
},
series: [
{
dataSource: chartData,
xName: 'category',
yName: 'value',
type: 'Column'
}
]
});
chart.appendTo('#chart');
Do not use pointRender as a selection event. pointRender customizes points before they are rendered.
Pattern 5: Pie and Doughnut Charts
Use AccumulationChart.
import {
AccumulationChart,
PieSeries
} from '@syncfusion/ej2-charts';
AccumulationChart.Inject(
PieSeries
);
const pieChart:
AccumulationChart =
new AccumulationChart({
series: [
{
dataSource: chartData,
xName: 'category',
yName: 'value',
type: 'Pie'
}
]
});
pieChart.appendTo('#chart');
Create a Doughnut Chart by setting innerRadius.
series: [
{
dataSource: chartData,
xName: 'category',
yName: 'value',
type: 'Pie',
innerRadius: '50%'
}
]
Pattern 6: Technical Indicator
Technical indicators belong in the Chart-level indicators collection.
import {
CandleSeries,
Chart,
DateTime,
LineSeries,
SmaIndicator
} from '@syncfusion/ej2-charts';
Chart.Inject(
CandleSeries,
LineSeries,
DateTime,
SmaIndicator
);
series: [
{
dataSource: stockData,
xName: 'date',
open: 'open',
high: 'high',
low: 'low',
close: 'close',
type: 'Candle',
name: 'Price'
}
],
indicators: [
{
dataSource: stockData,
xName: 'date',
close: 'close',
type: 'Sma',
period: 20,
seriesName: 'Price',
name: 'SMA 20'
}
]
Do not add an indicator to the normal series collection.
Key Properties
Chart-Level Properties
primaryXAxis: Configures the primary X-axis.primaryYAxis: Configures the primary Y-axis.axes: Defines additional axes.rows: Defines horizontal Chart panes.columns: Defines vertical Chart panes.series: Defines Cartesian and financial series.indicators: Defines technical indicators.annotations: Defines custom HTML annotations.tooltip: Configures Chart tooltips.legendSettings: Configures the legend.crosshair: Configures crosshair interaction.zoomSettings: Configures zooming and panning.selectionMode: Configures point, series, or cluster selection.selectedDataIndexes: Defines initial selection.palettes: Defines the Chart color collection.theme: Selects a built-in theme.background: Configures the Chart background.chartArea: Configures the plotting area.title: Defines the Chart title.subTitle: Defines the Chart subtitle.height: Configures the Chart height.width: Configures the Chart width.enableCanvas: Enables Canvas rendering.enableRtl: Enables right-to-left rendering.accessibility: Configures Chart-level accessibility.
Series-Level Properties
dataSource: Defines the series data.xName: Maps the X-value field.yName: Maps the numeric Y-value field.type: Selects the series type.name: Defines the legend and tooltip series name.visible: Controls initial series visibility.fill: Configures the series color.width: Configures compatible line width.opacity: Configures series opacity.border: Configures series borders.marker: Configures point markers.marker.dataLabel: Configures Cartesian Chart data labels.pointColorMapping: Maps point colors from the data source.emptyPointSettings: Configures missing values.trendlines: Defines trendlines for a compatible series.animation: Configures series animation.xAxisName: Associates a series with a named X-axis.yAxisName: Associates a series with a named Y-axis.stackingGroup: Groups compatible stacked series.accessibility: Configures series and point accessibility.
AccumulationChart Properties
series: Defines Pie, Doughnut, Funnel, or Pyramid series.legendSettings: Configures the accumulation legend.tooltip: Configures accumulation tooltips.enableSmartLabels: Reduces label overlap.accessibilityDescription: Describes the visualization.focusable: Controls Chart focusability.focusBorderColor: Configures the focus border.focusBorderWidth: Configures focus-border width.focusBorderMargin: Configures focus-border spacing.
WebMCP Language Rules
TypeScript
import { Chart, WebMcpChart } from '@syncfusion/ej2-charts';
// The complete WebMCP sample must import and inject all available Chart feature modules.
Chart.Inject(WebMcpChart);
JavaScript
// No imports and no Chart.Inject(...) for global-bundle JavaScript WebMCP samples.
var chart = new ej.charts.Chart({ enableWebMcp: true });
FAQ
What does the syncfusion-javascript-chart skill do?
Implements Syncfusion JavaScript chart controls (Line, Area, Bar, Column, Pie, Polar, Radar, Waterfall, Stock). Use when building interactive data visualizations, dashboards, or real-time charts. Covers series and axes configuration, styling, animations, exporting, and technical indicators. Works with TypeScript (webpack/modules) and JavaScript (CDN/ES5).
How do I install syncfusion-javascript-chart?
Run npx skills add https://github.com/syncfusion/javascript-ui-controls-skills --skill syncfusion-javascript-chart in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/syncfusion-javascript-chart/ (personal) or .claude/skills/syncfusion-javascript-chart/ (project).
Which AI agents can use syncfusion-javascript-chart?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is syncfusion-javascript-chart safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains syncfusion-javascript-chart?
It is published by syncfusion in syncfusion/javascript-ui-controls-skills. It has 65 recorded installs.
More from syncfusion/javascript-ui-controls-skills
syncfusion-javascript-grid
syncfusion/javascript-ui-controls-skills
Open the skill to read its SKILL.md instructions.
syncfusion-javascript-common
syncfusion/javascript-ui-controls-skills
Open the skill to read its SKILL.md instructions.
syncfusion-javascript-dropdowns
syncfusion/javascript-ui-controls-skills
Comprehensive guide for implementing Syncfusion TypeScript dropdown components including AutoComplete, ComboBox, Mention, Dropdownlist, Multiselect, ListBox, and MultiColumn ComboBox. Use this when building selection interfaces, data binding, filtering, cascading dropdowns, dual list transfer, custom templates, and accessible dropdown experiences.
syncfusion-javascript-popups
syncfusion/javascript-ui-controls-skills
Open the skill to read its SKILL.md instructions.
syncfusion-javascript-license
syncfusion/javascript-ui-controls-skills
Open the skill to read its SKILL.md instructions.
syncfusion-javascript-tab
syncfusion/javascript-ui-controls-skills
Open the skill to read its SKILL.md instructions.
Popular frontend & design skills
setup-matt-pocock-skills
mattpocock/skills
Configure this repo for the engineering skills: set up its issue tracker, triage label vocabulary, and domain doc layout. Run once before first use of the other engineering skills.
frontend-design
anthropics/skills
Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.
hyperframes-animation
heygen-com/hyperframes
All animation knowledge for HyperFrames — atomic motion rules, multi-phase scene blueprints, scene transitions, broader motion-design techniques, AND the seven runtime adapters (GSAP default, plus Lottie, Three.js, Anime.js, CSS keyframes, Web Animations API, TypeGPU). Use for any motion or animation task: pick 2-4 rules and compose, or load a blueprint, or look up runtime-specific API (e.g. GSAP eases / Lottie player / Three.js mixer). Also covers auditing an existing composition's choreography (animation map) and 24 named text-animation effects. HyperFrames-native: single paused timeline, seek-safe, deterministic.
prototype
mattpocock/skills
Build a throwaway prototype to answer a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like.
hyperframes-core
heygen-com/hyperframes
The HyperFrames composition contract — build one renderable project. Use for composition structure, the data- timing attributes, class="clip", tracks, sub-compositions, variables, framework-owned media playback, deterministic-render rules, and validation. Read before writing composition HTML.
vercel-react-best-practices
vercel-labs/agent-skills
React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.