Add Plugins to Templates
How to add plugins for post-generation actions
Plugins run post-processing after file generation. They handle actions like git initialization, dependency installation, and more.
What are Plugins?
Plugins execute after all processors have finished generating files:
Adding Plugins
In cyan.yaml
cyan.yaml
plugins:- name: cyan/init-gitconfig:commitMessage: "Initial commit from template"
In Template Code
return {processors: [/* ... */],plugins: [{name: 'cyan/init-git',config: {commitMessage: `Initial commit: ${projectName}`}}]};
Available Plugins
Git Initialization
Initialize a git repository:
cyan.yaml
plugins:- name: cyan/init-gitconfig:commitMessage: "Initial commit from template"branch: "main"
Dependency Installation
Install dependencies after generation:
cyan.yaml
plugins:- name: cyan/npm-installconfig:packageManager: "pnpm" # npm, yarn, pnpm, bundev: false
Custom Plugins
Use community or custom plugins:
cyan.yaml
plugins:- name: myorg/setup-toolingconfig:installDeps: truerunLint: truerunFormat: true
Multiple Plugins
Chain multiple plugins:
return {processors: [/* ... */],plugins: [// First: Initialize git{name: 'cyan/init-git',config: {commitMessage: 'Initial commit'}},// Second: Install dependencies{name: 'cyan/npm-install',config: {packageManager: 'pnpm'}},// Third: Run initial setup{name: 'myorg/project-setup',config: {createEnvFile: true,generateKeys: true}}]};
Conditional Plugins
Add plugins based on user choices:
const plugins = [];if (initGit) {plugins.push({name: 'cyan/init-git',config: {commitMessage: `Initial commit: ${projectName}`}});}if (installDeps) {plugins.push({name: 'cyan/npm-install',config: {packageManager: packageManager}});}return {processors: [/* ... */],plugins};
Plugin Configuration
Pass any config your plugin needs:
cyan.yaml
plugins:- name: myorg/deploy-setupconfig:cloudProvider: "aws"region: "us-east-1"environment: "development"enableCI: true
Common Patterns
Full Project Setup
const plugins = [// Git{name: 'cyan/init-git',config: { commitMessage: 'Initial commit from template' }},// Dependencies{name: 'cyan/npm-install',config: { packageManager: 'pnpm' }},// IDE setup{name: 'myorg/vscode-setup',config: {extensions: ['esbenp.prettier-vscode', 'dbaeumer.vscode-eslint'],settings: {'editor.formatOnSave': true,'editor.defaultFormatter': 'esbenp.prettier-vscode'}}}];return { processors: [/* ... */], plugins };
See Plugin Development for creating custom plugins.
Related
- Plugin Development - Create custom plugins
- Processors vs Plugins - When to use each
- Full Example - Complete template with plugins