Live from registry
Generate GitHub Actions CI/CD pipelines by analyzing the codebase you already have.
cistack scans your project, detects the stack, and writes production-ready GitHub Actions workflows for CI, deployment, Docker, and releases. It is designed for real repos, not toy demos: it reads lock files, framework signals, release config, monorepo workspaces, hosting config, and Git branch metadata before generating YAML.
Weekly downloads
2.4k
last week on npm
Quick install
npx cistackInstallation
npx cistackAlways fetches the latest version. No global install.
cistack supports Node.js 16+, and the project itself is continuously verified on Node.js 18, 20, and 22 in GitHub Actions.
Run preview
Animated CLI output after scanning a typical project.
Reference
Why cistack
- Detects languages, frameworks, testing tools, hosting providers, and release tooling automatically
- Uses your repository's default Git branch when available instead of assuming main
- Supports monorepos, per-package workflows, and package-manager-aware commands
- Generates ecosystem-aware Dependabot config, including Bun when bun.lock is present
- Smart-merges generated workflows with existing files instead of blindly overwriting them
- Generates deploy pipelines for Vercel, Netlify, Firebase, GitHub Pages, AWS, Azure, Heroku, Render, and Railway
- Ships with built-in workflow audit and upgrade commands
- Includes typed cistack.config.js support through index.d.ts
- Backed by an automated regression suite covering branch handling, release detection, smart merge behavior, monorepo package scripts, and CLI smoke tests
CLI usage
What gets generated
Supported detection
Supported top-level config keys
- nodeVersion
- packageManager
- hosting
- frameworks
- testing
- branches
- workflowLayout
- cache
- monorepo
- release
- secrets
- outputDir
Branch behavior
- If branches is set in config, cistack uses it exactly
- Otherwise it reads the repository's default branch from Git metadata when available
- If Git metadata is unavailable, it falls back to safe defaults like main, master, and develop depending on the workflow type
Configuration
Create cistack.config.js when you want to override detection.
Example
/** @type {import('cistack').Config} */
module.exports = {
nodeVersion: '20',
packageManager: 'pnpm',
branches: ['main', 'staging'],
workflowLayout: 'single',
hosting: ['Vercel'],
outputDir: '.github/workflows',
cache: {
npm: true,
cargo: true,
pip: true,
},
monorepo: {
perPackage: true,
},
release: {
tool: 'semantic-release',
},
};Secrets
Generated deploy and release workflows document the secrets they need at the top of each file. Add them in GitHub under Settings, Secrets and variables, Actions.
Run checks locally
npm testnpm run test:smokenode bin/ciflow.js audit --path .node bin/ciflow.js upgrade --path . --dry-runIf you are using the published package, the executable is cistack. In the cistack repository, the local entrypoint is bin/ciflow.js.
Development and quality
The project includes a regression suite for the areas that were historically the easiest to break:
- config override handling
- default branch detection
- deploy branch selection
- Netlify production branch handling
- smart merge behavior
- monorepo per-package build script lookup
- release config detection
- release workflow generation
- CLI dry-run smoke testing
MIT License
CI/CD workflow generation from the repo you already have.
Created by Edwin Vakayil
© 2026 cistack. All rights reserved where applicable.