Install your entire project stack with one command.
PM-Auto is a CLI that lets you define reusable package presets (your usual tech stacks) and install them anywhere instantly. No more copy-pasting npm commands or forgetting dependencies.
If you regularly set up the same kind of projects, PM-Auto saves real time.
Most devs do this:
npm install react react-dom
npm install -D @types/react @types/react-dom
npm install vite @vitejs/plugin-react
npm install three @react-three/fiber gsapEvery. Single. Time.
PM-Auto lets you define that once in a config file, then reuse it forever:
pm-auto install viteDone.
PM-Auto is built around presets.
A preset is:
- A name (e.g.
vite,next,threejs-react) - A package manager (
npm,pnpm, oryarn) - A list of packages to be installed
You store presets in a JSON config file. PM-Auto reads that file and runs the commands for you.
npm install -g pm-auto
# or
pnpm add -g pm-auto
# or
yarn global add pm-autoVerify:
pm-auto -VCreate config.json:
{
"example": {
"presetName": "example",
"description": "A sample configuration demonstrating all options for PM-Auto",
"packageManager": "bun",
"packages": [
{
"command": "create-next-app",
"interactive": true,
"dev": false, //optional
"version": "latest", //optional
"flags": ["."] //optional
},
]
}
}pm-auto config ./config.json(
pm-auto install examplePM-Auto executes each command using the specified package manager.
Install presets from your config.
pm-auto install [preset-name]Common options:
--dry-runβ preview commands without running them--add-flags "<flags>"β append flags to non-interactive installs
Example:
pm-auto install example --dry-runUninstall packages defined in presets.
pm-auto uninstall exampleUse --dry-run to preview.
List all presets in your config.
pm-auto listShow details about a specific preset.
pm-auto describe exampleSet or update the config file path.
pm-auto config ./relative/path/to/config.jsonShow the currently active config path.
pm-auto config-pathPM-Auto uses a JSON config file to define presets.
When you run:
pm-auto config ./config.jsonPM-Auto will automatically prepend an example preset to the file whether itβs empty or not. This is intentional β the example acts as inline documentation so you immediately see how presets are structured.
You are expected to edit or delete the example once you understand it.
{
"example": {
"presetName": "example",
"description": "A sample configuration demonstrating all options for PM-Auto",
"packageManager": "bun",
"packages": [
{
"command": "create-next-app",
"interactive": true,
"dev": false,
"version": "latest",
"flags": ["."]
},
{
"command": "shadcn",
"interactive": true,
"dev": false,
"version": "latest",
"flags": ["init"]
},
{
"command": "gsap",
"interactive": false,
"dev": false,
"version": "3.11.4",
"flags": ["--peer-deps"]
},
{
"command": "@react-three/fiber",
"interactive": false,
"dev": false
},
{
"command": "clsx",
"interactive": false,
"dev": false
},
{
"command": "@types/three",
"interactive": false,
"dev": true
}
]
}
}exampleβ internal key (can be anything)presetNameβ name you pass to the CLI (pm-auto install example)descriptionβ shown inlistanddescribepackageManagerβnpm,pnpm,yarn, orbunpackagesβ ordered list of install commands
Each entry in packages represents one install command.
commandβ package or tool nameinteractiveβtrueif the command prompts for inputdevβ install as dev dependencyversionβ exact version ("3.11.4","latest", or omitted)flagsβ extra CLI flags or arguments
PM-Auto builds the final command for you.
Example output:
npm install gsap@3.11.4 -D{
"threejs-react": {
"name": "threejs-react",
"description": "Three.js + React setup",
"packageManager": "pnpm",
"packages": [
{ "command": "three @react-three/fiber @react-three/drei", "interactive": false },
{ "command": "@types/three --save-dev", "interactive": false },
{ "command": "gsap leva", "interactive": false }
]
}
}{
"fullstack-ts": {
"name": "fullstack-ts",
"description": "Express + TypeScript backend",
"packageManager": "npm",
"packages": [
{ "command": "typescript ts-node --save-dev", "interactive": false },
{ "command": "@types/node --save-dev", "interactive": false },
{ "command": "express dotenv cors helmet", "interactive": false }
]
}
}- Group packages you always install together
- Keep preset names short (
vite,next,api)
Nothing installs
- Check config path:
pm-auto config-path - Validate JSON formatting
Command hangs
- You forgot
"interactive": true
Wrong package manager
- Double-check
packageManagerfield
- Node.js 14+
- npm, pnpm, yarn 2+, or bun
If you set up projects more than twice, itβs already worth it.