Renamed to opcd — run pip install opcd
This project has been archived.
The maintainers of this project have marked this project as archived. No new releases are expected.
Project description
🚨 📦 This package has moved to opcd. ➡️ Run
pip install opcdto install the new package.
dev-code
_ _
| | | |
__| | _____ ________ ___ ___ __| | ___
/ _` |/ _ \ \ / /______/ __/ _ \ / _` |/ _ \
| (_| | __/\ V / | (_| (_) | (_| | __/
\__,_|\___| \_/ \___\___/ \__,_|\___|
project · editor · container — simplified
Reusable Dev Containers for any project — without modifying the repository.
Table of Contents
Background
devcode is a CLI that opens any project in VS Code Dev Containers using reusable, local templates.
Define your environment once and reuse it across projects.
Typical Dev Container workflows involve:
- Copying
.devcontainer/directories between projects - Recreating environments repeatedly
- Committing configuration to repositories you do not control
devcode separates environment configuration from project code:
- Templates are stored locally
- Projects remain unchanged
- Containers are launched with a single command
Install
Dependencies
- VS Code with the Dev Containers extension
- Docker
- devcontainer CLI
pip install dev-code
Usage
# Open a project (auto-detects template from container history, or uses default)
devcode open ~/projects/my-app
# Open with an explicit template
devcode open ~/projects/my-app dev-code
Typical Workflow
devcode template new python-dev
devcode template edit python-dev
devcode open ~/projects/my-app python-dev
Project Switching
devcode list -a -i
Lists containers and allows reopening projects interactively.
Advanced Options
- Multiple template directories
- Verbose debugging (
-v) - Dry runs (
--dry-run) - Custom container paths
Internal Flow
- Validate project path (must exist)
- Resolve template (explicit → container history → settings default)
- Launch VS Code Dev Container
- Apply file injection rules
Configuration
devcode reads settings.json from:
~/.config/dev-code/settings.json
Override the config directory:
DEVCODE_CONF_DIR=/custom/path devcode open ~/projects/my-app
The file is created automatically with defaults on first run.
settings.json
{
"template_sources": ["~/.local/share/dev-code/templates"],
"default_template": "dev-code",
"template_write_dir": null
}
| Key | Description |
|---|---|
template_sources |
Ordered list of template directories searched when resolving templates. |
default_template |
Template used when devcode open is called without a template argument and no container history is found. Error if unset. |
template_write_dir |
Directory where devcode template new writes new templates. null (default) uses the XDG data home: ~/.local/share/dev-code/templates. Overridden per-invocation by --path. |
Template System
Default Location
~/.local/share/dev-code/templates/
Configure additional paths via template_sources in settings.json (see Configuration).
File Injection
Inject files from the host into the container at startup.
Example
{
"customizations": {
"dev-code": {
"cp": [
{
"source": "${localEnv:HOME}/.config/myapp",
"target": "/home/vscode/.config/myapp"
}
]
}
}
}
Fields
| Field | Required | Description |
|---|---|---|
source |
Yes | Host path |
target |
Yes | Container path |
override |
No | Skip if target exists (default: false) |
owner |
No | Requires group |
group |
No | Requires owner |
permissions |
No | chmod applied recursively |
Source Behavior
- Supports
${localEnv:VAR} - Supports relative paths from
.devcontainer/ - Missing environment variables cause the entry to be skipped
Copy Directory Contents
Use /. suffix:
{
"source": "${localEnv:HOME}/.config/myapp/.",
"target": "/home/vscode/.config/myapp/"
}
Copies directory contents instead of the directory itself.
Behavior Rules
target/copies into the directory- Without trailing
/copies as a file or directory override=falseskips existing files- Ownership and permissions are applied after copying
API
Full reference for all devcode commands and flags.
Global Flags
-v, --verbose Enable debug output
--version Show version and exit
devcode open
devcode open <path> [template] [options]
Open a project in VS Code using a devcontainer template.
Arguments
<path>— Project directory (must exist)[template](optional) — Template name, path to adevcontainer.json, or path to a directory containing it. Paths must start with./,../,/, or~/. If omitted, devcode resolves in this order:- Most recently running container for this project path
- Most recently stopped container for this project path
default_templatefromsettings.json(error if not set)
Options
| Option | Default | Description |
|---|---|---|
--dry-run |
— | Print resolved configuration and actions without executing |
--container-folder <path> |
resolved from devcontainer config | Container mount path |
--timeout <seconds> |
300 |
Time to wait for container startup |
devcode list
devcode list [-a] [-i]
List dev containers.
| Flag | Description |
|---|---|
-a, --all |
Include stopped containers |
-i, --interactive |
Prompt to reopen a listed container |
Interactive mode prompts Open [1-N]: — selecting a number reopens the project in VS Code.
devcode prune
devcode prune [path] [options]
Remove stopped dev containers. Either [path] or --all-projects is required.
Arguments
[path](optional) — Limit pruning to containers for this project directory.
Options
| Option | Description |
|---|---|
--all-projects |
Prune stopped containers across all projects |
--include-recent |
Also prune the most recently used container (skipped by default) |
devcode template
devcode template <subcommand>
Manage dev container templates.
devcode template new
devcode template new <name> [base] [options]
Create a new template by copying a base template.
| Argument | Default | Description |
|---|---|---|
[base] |
dev-code |
Template to copy from |
| Option | Description |
|---|---|
--edit |
Launch the new template as a Dev Container in VS Code after creation |
--path <dir> |
Write the new template into <dir> instead of the configured write target |
devcode template edit
devcode template edit <template>
Open a template directory in VS Code for editing.
devcode template list
devcode template list [--long]
List available templates.
| Option | Description |
|---|---|
--long |
Show description and full path for each template |
devcode template default
devcode template default [name]
Get or set the default template.
- Without
name: prints the current default. - With
name: setsdefault_templateinsettings.json.
devcode template source
devcode template source <subcommand>
Manage template search paths stored in settings.json.
devcode template source list
devcode template source list
Print all configured template search paths, one per line.
devcode template source add
devcode template source add <path>
Append <path> to template_sources in settings.json. Prints a notice and exits cleanly if already present.
devcode template source remove
devcode template source remove <path>
Remove <path> from template_sources in settings.json. Exits with an error if not found.
devcode completion
devcode completion bash
devcode completion zsh
devcode completion fish
Print the shell completion setup command for the given shell.
Add to your shell rc file for persistent completion:
# bash (~/.bashrc)
eval "$(devcode completion bash)"
# zsh (~/.zshrc)
eval "$(devcode completion zsh)"
# fish (~/.config/fish/config.fish)
eval (devcode completion fish)
Contributing
Ask questions, report bugs, or request features in Issues.
PRs welcome. Open an issue first for significant changes.
Run tox (or pytest for a single-interpreter run) before submitting.
License
MIT © Nasser Alansari (dacrystal)
See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dev_code-0.4.0.tar.gz.
File metadata
- Download URL: dev_code-0.4.0.tar.gz
- Upload date:
- Size: 415.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e0a9362e38cbe2bde83c167ea9857321ef0de01651e676bab4f55a4d161487d6
|
|
| MD5 |
3a6affdcf2e3be7227c97f3f7f08f695
|
|
| BLAKE2b-256 |
bf7a4ba40420600a9fb01340958394765d3a12a58ebbddf1fd11cf6eaea7ab61
|
Provenance
The following attestation bundles were made for dev_code-0.4.0.tar.gz:
Publisher:
publish-pypi.yml on dacrystal/dev-code
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dev_code-0.4.0.tar.gz -
Subject digest:
e0a9362e38cbe2bde83c167ea9857321ef0de01651e676bab4f55a4d161487d6 - Sigstore transparency entry: 1374299564
- Sigstore integration time:
-
Permalink:
dacrystal/dev-code@24f2d8e6a0ed91a9ab6ad04d455fb02150b1c654 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/dacrystal
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@24f2d8e6a0ed91a9ab6ad04d455fb02150b1c654 -
Trigger Event:
push
-
Statement type:
File details
Details for the file dev_code-0.4.0-py3-none-any.whl.
File metadata
- Download URL: dev_code-0.4.0-py3-none-any.whl
- Upload date:
- Size: 5.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fe13d081d1584ccefb2670647ea40661e1fd88c2b644f512dec4f6d0d32c411e
|
|
| MD5 |
c3b735573b614c9dcaa1a4bbc80efcb0
|
|
| BLAKE2b-256 |
912192bc44977c6e85047473fd032c0a21db5c158cc46a69f49c30328237d6ae
|
Provenance
The following attestation bundles were made for dev_code-0.4.0-py3-none-any.whl:
Publisher:
publish-pypi.yml on dacrystal/dev-code
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dev_code-0.4.0-py3-none-any.whl -
Subject digest:
fe13d081d1584ccefb2670647ea40661e1fd88c2b644f512dec4f6d0d32c411e - Sigstore transparency entry: 1374299616
- Sigstore integration time:
-
Permalink:
dacrystal/dev-code@24f2d8e6a0ed91a9ab6ad04d455fb02150b1c654 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/dacrystal
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@24f2d8e6a0ed91a9ab6ad04d455fb02150b1c654 -
Trigger Event:
push
-
Statement type: