Denvig is a concept of simplifying development environments across multiple languages and frameworks by creating a small set of consistent wrappers to avoid muscle memory and configuration headaches.
brew install denvig/tap/denvigYou can install the CLI tool globally using npm:
npm install -g denvigAfter installation, the denvig command will be available in your terminal.
Executes an action inside the project. Defaults are detected for common languages/frameworks, but you can also
specify your own actions in the .denvig.yml file.
denvig run build
denvig run install
denvig run test
denvig run devSome actions are common to many frameworks so they have quick access for convenience:
denvig build
denvig test
denvig install
denvig lintInspect and manage project dependencies across multiple ecosystems (npm, pnpm, yarn, Ruby/Bundler, Python/uv):
denvig deps. # List all dependencies
denvig deps list --depth 1 # Include subdependencies
denvig deps list --ecosystem npm # Filter to specific ecosystem
denvig deps outdated # Show outdated dependencies
denvig deps outdated --semver patch # Filter by semver level (patch or minor)
denvig deps outdated --no-cache # Force fresh data
denvig deps why <package> # Show why a dependency is installedManage background services defined in .denvig.yml. Services run via launchctl on macOS:
denvig services # List all services and their status
denvig services start api # Start a service
denvig services stop api # Stop a service
denvig services restart api # Restart a service
denvig services status api # Check status of a service
denvig services logs api # View service logs
denvig services logs api -n 50 # View last 50 lines
denvig services logs api -f # Follow logs in real-time
denvig services teardown # Stop all services in current project
denvig services teardown --global --remove-logs # Full cleanupManage services from other projects using the full path:
denvig services start marcqualie/denvig/dev # Start 'dev' service in marcqualie/denvig project
denvig services status marcqualie/denvig/hello # Check status of 'hello' in marcqualie/denvig projectSee docs/configuration.md for service configuration options.
Discover and manage projects across your system:
denvig projects # List all projects
denvig projects --with-config # Only show projects with .denvig.ymlView and validate configuration:
denvig config # Display current configuration
denvig config verify # Verify .denvig.yml against schema
denvig config verify path/to/file.ymldenvig info # Show information about current project
denvig plugins # List available plugins and their actions
denvig version # Show version
denvig zsh completions --install # Install shell completionsMost commands accept --json for programmatic output and --project to target a different project.
There is a set of core languages and frameworks that Denvig will support out of the box. Any language or framework can be supported by using the per project configs.
- Node.js (npm, pnpm, yarn)
- Bun
- Vite
- Deno
- Ruby (rubygems)
- Python (uv)
- CLI tool to simplify environment setup
- YAML configuration at ~/.denvig.yml
- Per project configuration via ./.denvig.yml
- Consistent API for all languages/frameworks
- Dependency management across multiple ecosystems
- Background service management
For troubleshooting guides including service management, resource identification, and log browsing, see docs/troubleshooting.md.
Denvig can be used programmatically in TypeScript projects:
import { DenvigSDK } from 'denvig'
const denvig = new DenvigSDK()
// Services
const services = await denvig.services.list()
await denvig.services.start('api')
await denvig.services.stop('api')
// Dependencies
const deps = await denvig.deps.list()
const outdated = await denvig.deps.outdated({ semver: 'minor' })
// Execute in context of another project
await denvig.deps.outdated({ project: 'marcqualie/denvig' })All response types are exported for TypeScript consumers:
import type { ServiceResponse, Dependency, OutdatedDependency } from 'denvig'You can build from source instead of using the provided methods above:
pnpm install
pnpm buildAfter building, the CLI will be available at dist/cli.cjs. You can link it globally:
npm link