Scaffold production-ready development environments for any project. Generates devcontainers, then delegates to @vyuhlabs/dxkit for Makefiles, quality presets, CI workflows, and AI DX.
# New project (greenfield)
npm create @vyuhlabs/devstack my-project
# Existing project (brownfield)
cd existing-project
npx @vyuhlabs/create-devstack initAn interactive wizard asks you to choose:
- Languages — Python, Go, Node.js, Next.js, Rust, C#
- Infrastructure — PostgreSQL, Redis
- Quality preset — Strict (95%), Standard (80%), Relaxed (60%)
- Tools — Devcontainer, GitHub Actions, Pre-commit, Claude Code, gcloud, Pulumi, Infisical
Then generates:
| What | Owner | Description |
|---|---|---|
.project.yaml |
create-devstack | Your choices as config-as-code |
.devcontainer/ |
create-devstack | Dockerfile, docker-compose, devcontainer.json, post-create.sh |
Makefile |
dxkit | ~45 targets (test, quality, build, deploy, etc.) |
.project/ |
dxkit | Runtime scripts (quality, test, setup, session) |
| Language configs | dxkit | pyproject.toml, go.mod, tsconfig.json, etc. |
.github/workflows/ |
dxkit | CI and quality workflows |
.pre-commit-config.yaml |
dxkit | Language-conditional hooks |
.claude/ |
dxkit | AI agents, commands, skills, rules |
create-devstack
│
├─ Interactive wizard → .project.yaml
├─ Devcontainer generator → .devcontainer/
│
└─ Calls: dxkit init --full
│
├─ Reads .project.yaml
└─ Generates everything else
create-devstack handles the dev environment (containers). dxkit handles everything else (build system, quality, CI, AI DX). The handoff is via .project.yaml — create-devstack writes it, dxkit reads it.
The generated config file looks like:
project:
name: my-project
description: A web API for managing inventory
languages:
python:
enabled: true
version: '3.12'
quality:
coverage: 80
lint: true
typecheck: true
go:
enabled: true
version: '1.24.0'
quality:
coverage: 80
lint: true
infrastructure:
postgres:
enabled: true
version: '16'
tools:
claude_code: true
docker: true
precommit: true
gcloud: falsecd existing-project
npx @vyuhlabs/create-devstack initThe brownfield flow:
- Scans your project — detects languages, versions, frameworks, test runners, infrastructure, and tools
- Shows what it found and lets you confirm or adjust
- Respects existing files — won't overwrite your
.devcontainer/,.claude/, or configs - Generates only what's missing (
.project.yaml, devcontainer, then delegates to dxkit)
If .project.yaml already exists, you can keep it or reconfigure. If it's malformed, create-devstack falls back to detection.
The generated .devcontainer/ is fully conditional:
- Dockerfile.dev — Only installs languages you selected (Python, Go, Node, Rust)
- docker-compose.yml — Only includes services you need (PostgreSQL, Redis)
- devcontainer.json — VS Code extensions matched to your stack
- post-create.sh — Setup scripts for selected languages and tools
Works in GitHub Codespaces, local Docker, VS Code Remote Containers, JetBrains Gateway, or the devcontainer CLI.
| Flag | Description |
|---|---|
--yes, -y |
Accept defaults, no prompts |
--lang <languages> |
Languages: python, go, node, nextjs, rust, csharp (comma-separated) |
--infra <services> |
Infrastructure: postgres, redis (comma-separated) |
--preset <name> |
Quality preset: strict, standard (default), relaxed |
--stealth |
Gitignore generated files (local-only, not committed) |
-d, --description |
Project description |
--version, -v |
Show version |
--help, -h |
Show help |
For greenfield, --yes requires --lang to specify at least one language. For brownfield (init), --yes auto-detects from the filesystem.
Use --stealth to keep generated files local — they're added to .gitignore so they won't be committed. Only files actually created in this run are gitignored (existing files are never touched). Consistent with dxkit's /stealth-mode.
npx @vyuhlabs/create-devstack init --yes --stealth# Interactive
npm create @vyuhlabs/devstack my-app
# Python project, standard quality
npm create @vyuhlabs/devstack my-app --yes --lang python
# Multi-language with postgres
npm create @vyuhlabs/devstack my-app --yes --lang python,go --infra postgres
# Node project with strict quality
npm create @vyuhlabs/devstack my-app --yes --lang node --preset strict
# Brownfield — auto-detect, accept all
npx @vyuhlabs/create-devstack init --yes
# Brownfield — local-only (stealth)
npx @vyuhlabs/create-devstack init --yes --stealthOnce create-devstack and dxkit have generated your project, you get:
make help # See all available commands
make doctor # Verify your setup
make setup # Install language tools + authenticate cloud services
make test # Run tests
make quality # Run linters + quality checks
make fix # Auto-fix formatting and lint issues
make check # Full pre-commit validation (quality + tests)
make session-start # Start an AI-assisted dev session (requires Claude Code)Use Claude Code for AI-powered analysis:
/health # 6-dimension codebase health audit
/vulnerabilities # CWE-classified security scan
/quality # Lint + AI review
/test-gaps # Find untested critical code
/dev-report # Developer activity reportSee the dxkit README for the full list of 30+ commands and 20 agents.
- Node.js >= 18
- npm >= 9
git clone https://github.com/vyuh-labs/create-devstack.git
cd create-devstack
npm install
npm run build
npm test| Script | Description |
|---|---|
npm run build |
Compile TypeScript |
npm run typecheck |
Type-check without emitting |
npm run lint |
ESLint |
npm run format |
Prettier |
npm test |
Vitest (watch mode) |
npm run test:run |
Vitest (single run) |
- Pre-commit: lint + format staged files + typecheck
- Pre-push: run tests affected by changes (
vitest --changed)
- @vyuhlabs/dxkit — AI-native developer experience toolkit
- codespaces-ai-template-v2 — Legacy template (being replaced by this package)
MIT