Skip to content

Commit b102c07

Browse files
committed
feat(blog): add post introducing dtvem
1 parent 8a22b77 commit b102c07

2 files changed

Lines changed: 115 additions & 0 deletions

File tree

421 KB
Loading
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
---
2+
title: "Introducing the Developer Tools Virtual Environment Manager!"
3+
date: "2026-01-05T12:00:00-05:00"
4+
categories: [golang, cli, python, node, ruby]
5+
description: "A unified, cross-platform runtime version manager that actually works on Windows"
6+
---
7+
8+
If you've ever tried to manage multiple versions of Python, Node.js, or Ruby on Windows, you know the pain. Tools like `nvm`, `pyenv`, and `rbenv` work great on macOS and Linux, but Windows support ranges from "hacky workarounds" to "just use WSL." And even on Unix systems, you're juggling three different tools with three different configurations.
9+
10+
So I built something better.
11+
12+
## Introducing dtvem
13+
14+
**dtvem** (Developer Tools Virtual Environment Manager) is a unified, cross-platform runtime version manager written in Go. One tool to manage Python, Node.js, and Ruby — and it works identically on Windows, macOS, and Linux.
15+
16+
No shell hooks. No `.bashrc` modifications. No WSL required. Just install it and go.
17+
18+
## Why Another Version Manager?
19+
20+
The existing tools are great, but they all have the same problem: Windows is an afterthought. And if you work across multiple runtimes, you're maintaining separate tools with separate configurations.
21+
22+
dtvem takes a different approach:
23+
24+
- **Windows is a first-class citizen** — not an afterthought or "community port"
25+
- **Shim-based architecture** — works in cmd.exe, PowerShell, bash, zsh, fish, whatever
26+
- **One tool for multiple runtimes** — Python, Node.js, and Ruby today, with Go, Rust, and Java on the roadmap
27+
- **Project-local versions** — drop a config file in your project and the right versions activate automatically
28+
29+
## How It Works
30+
31+
dtvem uses shims instead of shell integration. When you run `python` or `node`, it intercepts the command and routes it to the correct version based on your configuration.
32+
33+
The resolution order is simple:
34+
35+
1. **Local config**`.dtvem/runtimes.json` in your project (or any parent directory)
36+
2. **Global config**`~/.dtvem/config/runtimes.json` for system-wide defaults
37+
3. **System PATH** — falls back to whatever's installed on your system
38+
39+
No magic. No shell hooks. It just works.
40+
41+
## Getting Started
42+
43+
Installation is a one-liner.
44+
45+
**Windows (PowerShell):**
46+
47+
```powershell
48+
irm dtvem.io/install.ps1 | iex
49+
```
50+
51+
**macOS / Linux:**
52+
53+
```bash
54+
curl -fsSL dtvem.io/install.sh | bash
55+
```
56+
57+
Once installed, the workflow is straightforward:
58+
59+
```bash
60+
# Install a runtime version
61+
dtvem install python 3.12.0
62+
dtvem install node 22.0.0
63+
64+
# Set global defaults
65+
dtvem global python 3.12.0
66+
dtvem global node 22.0.0
67+
68+
# Set project-specific versions
69+
cd my-project
70+
dtvem local python 3.10.0
71+
dtvem local node 18.20.0
72+
73+
# Check what's active
74+
dtvem current
75+
```
76+
77+
That's it. Navigate into `my-project` and Python 3.10.0 and Node 18.20.0 are automatically active. Navigate out and your global versions take over.
78+
79+
## Migrating from Existing Tools
80+
81+
Already using nvm, pyenv, or rbenv? dtvem can import your existing installations:
82+
83+
```bash
84+
dtvem migrate node # Import from nvm or fnm
85+
dtvem migrate python # Import from pyenv
86+
dtvem migrate ruby # Import from rbenv, rvm, chruby, or uru
87+
```
88+
89+
It detects your existing version managers, copies the installed versions, preserves your globally installed packages, and optionally cleans up the old installations. You can run both tools side-by-side during the transition if you want a gradual migration.
90+
91+
## The Website
92+
93+
All the details live at [dtvem.io](https://dtvem.io). You'll find:
94+
95+
- **Getting Started guide** — installation and basic workflow
96+
- **Command reference** — all 18 commands documented
97+
- **Runtime guides** — specifics for Python, Node.js, and Ruby
98+
- **Migration guide** — step-by-step for switching from other tools
99+
- **Comparison page** — how dtvem stacks up against nvm, pyenv, rbenv, asdf, and mise
100+
101+
The install scripts are served directly from the domain, so the one-liner installations just work.
102+
103+
## Get It / Contribute
104+
105+
dtvem is pre-1.0 but fully functional. The core runtimes are stable, and I'm working on adding Go, Rust, and Java.
106+
107+
Both projects are open source under the MIT license:
108+
109+
- CLI: [github.com/CodingWithCalvin/dtvem.cli](https://github.com/CodingWithCalvin/dtvem.cli)
110+
- Website: [github.com/CodingWithCalvin/dtvem.io](https://github.com/CodingWithCalvin/dtvem.io)
111+
112+
If you're tired of juggling multiple version managers — or you've been stuck on Windows without good options — give dtvem a try.
113+
114+
As always, I accept pull requests :)
115+

0 commit comments

Comments
 (0)