Organizing presets
Keep presets focused
Each preset should represent one type of project or workflow. Don’t try to make a single preset that handles every scenario. Why? Focused presets are:- Easier to understand and maintain
- More reusable across different projects
- Faster to install (you only get what you need)
- Simpler to debug when something goes wrong
Group related packages
Within a preset, group packages that serve similar purposes:- Scan what’s included at a glance
- Add or remove related packages together
- Understand the purpose of each section
Naming conventions
Use short, descriptive names
Preset names should be easy to type and remember.Follow a consistent pattern
If you manage multiple presets, use a consistent naming scheme:framework-variant or tool-purpose
Match presetName to key
The preset key andpresetName field should always match:
presetName field for the install command, so matching them prevents confusion.
Using descriptions
Always include descriptions
Every preset should have a clear description:- Remember what each preset does months later
- Choose the right preset when you have many options
- Share presets with teammates who aren’t familiar with them
Write clear, concise descriptions
Aim for 1-2 sentences that capture the preset’s purpose and key components.Version pinning strategies
Pin versions for critical packages
Use version pinning when you need a specific version:- Breaking changes are common in the package
- You need a specific feature from a particular version
- You want reproducible installs across environments
Let minor versions float
For most packages, omit the version to get the latest:- Bug fixes
- Security patches
- Performance improvements
Document version decisions
If you pin a version for a specific reason, add a comment (in documentation or a separate README):Interactive package handling
Always set interactive flag correctly
Interactive commands:create-next-appcreate-react-appcreate-viteshadcn(withinitflag)- Any command that asks questions
Pass flags to skip prompts
When possible, use flags to make interactive commands non-interactive:- Are faster (no waiting for user input)
- Can run unattended
- Are easier to script and automate
Config file organization
One config per project type
For personal use, keep all your presets in oneconfig.json:
config.json
Multiple configs for teams
For teams or complex workflows, use separate config files:Use dry-run before committing changes
Before running a preset for real, preview what will happen:- Commands look correct
- Package manager is right (npm vs pnpm vs yarn vs bun)
- Dev flags are applied to the right packages
- Versions are specified where needed
Sharing presets
Store configs in version control
Commit yourconfig.json to git so your team can use the same presets:
Document your presets
Create a README explaining each preset:README.md
- Install a preset:
package.json looks right.
Performance tips
Batch non-interactive packages
PM-Auto automatically batches non-interactive packages into a single install command. Help it do this by marking packages correctly:Use faster package managers
For speed, considerpnpm or bun instead of npm:
bun- Fastestpnpm- Fast (also saves disk space)yarn- Moderatenpm- Slower (but most compatible)
Maintenance
Review and update regularly
Every few months:- Test each preset in a fresh directory
- Update pinned versions if needed
- Remove packages you no longer use
- Add new packages you find yourself installing repeatedly
Keep a changelog
Document changes to shared presets:CHANGELOG.md
What’s next?
Config schema
Complete reference for all configuration options
Troubleshooting
Solutions for common issues