@vyuhlabs/create-devstack
v0.6.0
Published
Scaffold production-ready dev environments — devcontainers, Makefiles, quality presets, CI workflows
Maintainers
Readme
@vyuhlabs/create-devstack
Scaffold production-ready development environments for any project. Generates devcontainers, then delegates to @vyuhlabs/dxkit for Makefiles, quality presets, CI workflows, and AI DX.
Quick Start
# New project (greenfield)
npm create @vyuhlabs/devstack my-project
# Existing project (brownfield)
cd existing-project
npx @vyuhlabs/create-devstack initWhat It Does
An 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 |
How It Works
create-devstack
│
├─ Interactive wizard → .project.yaml
├─ Devcontainer generator → .devcontainer/
│
└─ Calls: dxkit init --full
│
├─ Reads .project.yaml
└─ Generates everything elsecreate-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.
.project.yaml
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: falseBrownfield (Existing Projects)
cd 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.
Devcontainer
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.
CLI Options
| 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.
Stealth Mode
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 --stealthExamples
# 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 --stealthRequirements
- Node.js >= 18
- npm >= 9
Development
git clone https://github.com/vyuh-labs/create-devstack.git
cd create-devstack
npm install
npm run build
npm testScripts
| 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) |
Git Hooks
- Pre-commit: lint + format staged files + typecheck
- Pre-push: run tests affected by changes (
vitest --changed)
Related
- @vyuhlabs/dxkit — AI-native developer experience toolkit
- codespaces-ai-template-v2 — Legacy template (being replaced by this package)
License
MIT
