| CONTENTS |
|---|
| ABOUT DVN |
| HOW IT WORKS |
| GETTING STARTED |
| INSTALLING |
| USAGE |
| ACKNOWLEDGEMENTS |
| RELATED PROJECTS |
| LICENSE |
dvn is a command-line utility for managing development environments.
Let's say you are working something called "MyProject", which requires:
- A Visual Studio 2022/2026 solution named "MyProject"
- A Visual Studio Code workspace named "MyProject-Documentation"
- A Visual Studio Code workspace named "Other-Documentation"
- GitHub Desktop
- A webpage containing API documentation
- Additional project-related specific data that should be backed up
You could do all of the above steps manually, or you could let dvn do it for you by typing: dvn myproject
Important
dvn requires the .NET 10 SDK!
dvn is a portable application, so "installing" is simple:
- Download the latest release
- Extract the contents of the downloaded file to a folder of your choice
You'll notice that the folder you extracted to contains a single item: dvn.exe
The dvn framework is comprised of the files and folders that are required by dvn. This framework doesn't exist yet, so we need to create it.
To create the dvn framework:
- Open a terminal in the the folder that contains
dvn.exe - Type
$ dvnSince this is the first time you are executing dvn, you will see a message letting you know that the dvn framework will be created.
The .\.dvn\configs\dvn.config file contains the configuration settings for dvn.
Currently this file only contains a list of files and folders that are ignored when the data backup functionality is enabled (to keep file sizes are kept to a minimum), so their isn't much to configure.
When you start an environment by typing...
$ dvn myproj...dvn looks for a manifest file named .\.dvn\manifests\myproj.dvn.manifest, which contains all of the information dvn needs to start the environment.
If the file does not exist, it is created using the default settings, which you will need to modify.
Important
Any \ characters need to be escaped as \\!
When a new manifest file is created, it looks like this:
{
"DevelopmentEnvironment": {
"Name": "test2",
"Description": "Default environment description.",
"BackupEnabled": false,
"BackupSources": null,
"BackupLocation": null
},
"EnvironmentApplications": [
{
"Name": null,
"Description": null,
"FileName": null,
"Arguments": null,
"WorkingDirectory": null
}
],
"WebBrowser": {
"BrowserPages": {
"Chrome": {},
"IExplore": {},
"Firefox": {}
}
}
}Manifest files contain the following components:
-
Name
The name of the environment (e.g., "myproj"). -
Description
The description of the environment (e.g., "My project environment"). -
BackupEnabled
Determines if the data backup functionality is enabled ("true"), or disabled ("false"). -
BackupSources
Absolute paths to data that will be backed up, if the data backup functionality is enabled. -
BackupLocation
The absolute path where backups are created. -
EnvironmentApplication
Each application that will be launched by dvn has it's own block with the following data:-
Name
The name of the application -
Description
Description of the application -
FileName
The application file name -
Arguments
Any command-line arguments -
WorkingDirectory
The application working directory
-
-
WebBrowser
A list of webpages to be opened in specific web browsers
This is what a completed manifest file looks like:
{
"DevelopmentEnvironment": {
"Name": "myproj",
"Description": "My project environment",
"BackupEnabled": true,
"BackupSources": [
"C:\\repositories\\MyProject",
"C:\\data\\reports"
],
"BackupLocation": "C:\\backups",
},
"EnvironmentApplications": [
{
"Name": "Visual Studio - MyProject",
"Description": "MyProject solution",
"FileName": "MyProject.sln",
"Arguments": null,
"WorkingDirectory": "C:\\repositories\\MyProject\\src"
},
{
"Name": "Visual Studio Code - MyProject documentation",
"Description": "MyProject documentation",
"FileName": "Code.exe",
"Arguments": "MyProject-documentation.code-workspace | exit /b",
"WorkingDirectory": "\\path\\to\\VisualStudioCode"
},
{
"Name": "Visual Studio Code - Other documentation",
"Description": "Other documentation",
"FileName": "Code.exe",
"Arguments": "Other-documentation.code-workspace | exit /b",
"WorkingDirectory": "\\path\\to\\VisualStudioCode"
},
{
"Name": "GitHub Desktop",
"Description": "GitHub Desktop",
"FileName": "GitHubDesktop.exe",
"Arguments": null,
"WorkingDirectory": "C:\\Users\\JaneSmith\\AppData\\Local\\GitHubDesktop"
}
],
"WebBrowser":
{
"BrowserPages":
{
"Chrome":
{
"Wikipedia": "https://www.google.com",
"Weather.com": "https://www.weather.com"
},
"Firefox":
{
"Firefox": "https://www.firefox.com",
"Wikipedia": "https://www.wikipedia.com"
},
"IExplore":
{
"Microsoft": "https://www.microsoft.com",
"Xbox": "https://xbox.com"
}
}
}
}The above manifest file will:
- Start the "myproj" development environment
- Backup the "C:\repositories\MyProject" and "C:\data\reports" to "C:\backups"
- Start the "MyProject" solution in Visual Studio
- Start the "MyProject-Documentation" workspace in Visual Studio Code
- Start the "Other-Documentation" workspace in Visual Studio Code
- Start the "GitHub Desktop" application
- Open various web pages in various web browsers
This is the dvn syntax:
dvn <command> [-option01 -option02 ...]dvn requires that you pass a valid command.
In general, you'll use the %environment% command, which will start the specified development environment (or create a blank manifest file, if one doesn't exist).
For example, to start/create the myproj environment, you would type
$ dvn myprojTo get a list of valid commands, type
$ dvn helpdvn also accepts options, which are...optional
Options:
- Must be a single character
- Start with the
-(dash) character - Are separated by a space
For example, you can force the data for the myproj environment to be backed up by typing
$ dvn myproj -bTo get a list of valid options, type
$ dvn helpComing soon.
Distributed under the Apache 2.0 License.
Copyright © 2026 A Pretty Cool Program
Last updated: 260419