Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
f73fd89
initial try
FloSch62 Oct 19, 2025
68feb4c
make it faster
FloSch62 Oct 19, 2025
b063a6f
remove old polling
FloSch62 Oct 19, 2025
48f74c4
poc
FloSch62 Oct 22, 2025
bd73581
add setting to allow for custom clab bin path
kaelemc Nov 13, 2025
a115b4d
migrate containerlab calls to custom bin path
kaelemc Nov 13, 2025
10569c5
Guarded the command construction by deriving a binaryPath that falls …
FloSch62 Nov 13, 2025
212e2e5
update container removal logic and mark interfaces as down when stopped
FloSch62 Nov 18, 2025
27a015b
pause state
FloSch62 Nov 18, 2025
947f4a5
Merge branch 'main' into events
kaelemc Nov 29, 2025
ff7cbd5
Remove sudoEnabledByDefault setting
kaelemc Nov 29, 2025
2bbc675
Replace sudo function with simple group/perm check
kaelemc Nov 29, 2025
2cdfcdc
Streamline clab install/update activation flow
kaelemc Nov 29, 2025
ad85e5f
Add dockerode package
kaelemc Nov 29, 2025
610348d
Migration to dockerode + refactoring for related docker parts.
kaelemc Nov 29, 2025
8022793
Update TopoViewer for live handling of docker images update from even…
kaelemc Nov 29, 2025
a9bd0b2
Change panel style to feel more like a 'window'. Change buttons to Ok…
kaelemc Nov 29, 2025
f7071b9
Move properties on link capture wheel to bottom
kaelemc Nov 29, 2025
f2a3470
Install uplot lib
kaelemc Nov 29, 2025
d22874f
add --interface-stats arg to events
kaelemc Nov 29, 2025
4e1a1d4
Make link panel resizable and add graphs for intf stats
kaelemc Nov 30, 2025
a557a1b
Let camera button toggle/close svg export panel
kaelemc Nov 30, 2025
644720d
Add native node modules plugin to esbuild configuration
FloSch62 Nov 30, 2025
3d68a13
Merge branch 'events' of https://github.com/flosch62/vscode-container…
FloSch62 Nov 30, 2025
7028da8
first try
FloSch62 Nov 24, 2025
acc3a52
better shapes
FloSch62 Nov 24, 2025
86e7f85
better lines
FloSch62 Nov 24, 2025
bf87625
better defaults
FloSch62 Nov 24, 2025
ebbeb59
truly free
FloSch62 Nov 25, 2025
7d41f22
fixed arrow pos
FloSch62 Nov 25, 2025
004180b
better defaults
FloSch62 Nov 25, 2025
260afda
copy paste works
FloSch62 Nov 25, 2025
fdf0bf9
del to delete
FloSch62 Nov 25, 2025
d64f43d
Migrate to new window manager class for topoviewer panels
kaelemc Nov 30, 2025
2888265
Migrate to new window manager class for topoviewer panels
kaelemc Nov 30, 2025
97926ee
allign style
FloSch62 Nov 30, 2025
58d4cae
better defaults
FloSch62 Nov 30, 2025
f73c107
fix tests
FloSch62 Nov 30, 2025
99bfafd
same buttons
FloSch62 Nov 30, 2025
95dcbfa
correct apply funtion
FloSch62 Nov 30, 2025
d8fab2e
add z-index property to shape annotation
FloSch62 Nov 30, 2025
0f0c88c
Update README to reflect settings changes + sudo changes
kaelemc Nov 30, 2025
d7ec7a9
dont allow to add shaped to groups
FloSch62 Nov 30, 2025
ec192c6
Merge upstream/free-shapes into events
FloSch62 Nov 30, 2025
734960f
Trigger interface inpsection on a container state change
kaelemc Nov 30, 2025
6d1aee2
fix tests
FloSch62 Nov 30, 2025
dbaca46
Merge branch 'events' of https://github.com/flosch62/vscode-container…
FloSch62 Nov 30, 2025
115ac48
fix lint in tests
FloSch62 Nov 30, 2025
a15ee77
fallback to polling
FloSch62 Nov 30, 2025
fd94740
remove wrong version
FloSch62 Nov 30, 2025
8c5d894
automatic units
FloSch62 Dec 1, 2025
ec7c3be
Add instance close callbacks to PanelManager and register unhighlight…
FloSch62 Dec 1, 2025
c4b4dce
Cache view-mode topology and push incremental stats-based edge update…
FloSch62 Dec 1, 2025
92777df
fix performance metric
FloSch62 Dec 1, 2025
c4cb732
hide dummy links, fixes #353
FloSch62 Dec 1, 2025
a55712f
Add visual change indicator to Apply buttons in editor panels
FloSch62 Dec 1, 2025
406ab8b
Fix freeshape context menu not working after node editor save by reap…
FloSch62 Dec 1, 2025
bf9c8c2
Enhance tooltip handling in RunningLabTreeDataProvider to persist dur…
FloSch62 Dec 1, 2025
7565fdc
Fix TopoViewer to use current lab's containers and reuse existing ter…
FloSch62 Dec 2, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 15 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ A Visual Studio Code extension that integrates [containerlab](https://containerl

## Requirements

- **containerlab** must be installed and accessible in your system `PATH`. The extension will offer to install it if not found.
- **containerlab** must be installed. The extension will offer to install it if not found.
- You must be in the `clab_admins` and `docker` group. Podman is not supported for runtime features.
- (Optional) **Edgeshark** for packet capture features - can be installed directly from the extension using the "Install Edgeshark" command.


Expand Down Expand Up @@ -83,13 +84,13 @@ Configure the extension behavior through VS Code settings (`containerlab.*`):

| Setting | Type | Default | Description |
|---------|------|---------|-------------|
| `sudoEnabledByDefault` | boolean | `false` | Prepend `sudo` to containerlab commands |
| `runtime` | string | `docker` | Container runtime (`docker`, `podman`, `ignite`) |
| `refreshInterval` | number | `5000` | Auto-refresh interval in milliseconds |
| `binaryPath` | string | `""` | Custom path to containerlab binary (leave empty to resolve from PATH) |
| `showWelcomePage` | boolean | `true` | Show welcome page on activation |
| `skipInstallationCheck` | boolean | `false` | Skip containerlab install check/prompt; extension stays inactive if containerlab is missing |
| `skipUpdateCheck` | boolean | `false` | Skip extension update check |
| `skipCleanupWarning` | boolean | `false` | Skip warning popups for cleanup commands |

The Containerlab Explorer listens to the containerlab event stream, so running labs update live without manual refresh intervals.

### 🎯 Command Options

| Setting | Type | Default | Description |
Expand Down Expand Up @@ -124,12 +125,11 @@ Configure the extension behavior through VS Code settings (`containerlab.*`):
| `capture.preferredAction` | string | `Wireshark VNC` | Preferred capture method (`Edgeshark`, `Wireshark VNC`) |
| `capture.wireshark.dockerImage` | string | `ghcr.io/kaelemc/`<br/>`wireshark-vnc-docker:latest` | Docker image for Wireshark VNC |
| `capture.wireshark.pullPolicy` | string | `always` | Image pull policy (`always`, `missing`, `never`) |
| `capture.wireshark.extraDockerArgs` | string | `-e HTTP_PROXY=""`<br/>`-e http_proxy=""` | Extra docker arguments |
| `capture.wireshark.theme` | string | `Follow VS Code theme` | Wireshark theme |
| `capture.wireshark.stayOpenInBackground` | boolean | `true` | Keep sessions alive in background |
| `edgeshark.extraEnvironmentVars` | string | `HTTP_PROXY=,`<br/>`http_proxy=` | Environment variables for Edgeshark |
| `remote.hostname` | string | `""` | Hostname/IP for Edgeshark packet capture |
| `remote.packetflixPort` | number | `5001` | Port for Packetflix endpoint (Edgeshark) |
| `capture.edgeshark.extraEnvironmentVars` | string | `HTTP_PROXY=,`<br/>`http_proxy=` | Environment variables for Edgeshark |
| `capture.remoteHostname` | string | `""` | Hostname/IP for Edgeshark packet capture |
| `capture.packetflixPort` | number | `5001` | Port for Packetflix endpoint (Edgeshark) |

### 🌐 Lab Sharing

Expand All @@ -147,6 +147,10 @@ Configure the extension behavior through VS Code settings (`containerlab.*`):
"nokia_srlinux": "sr_cli",
"arista_ceos": "Cli"
},
"containerlab.node.sshUserMapping": {
"nokia_srlinux": "admin",
"cisco_xrd": "clab"
},
"containerlab.editor.customNodes": [
{
"name": "SRLinux Latest",
Expand All @@ -166,8 +170,8 @@ When deploying labs, you can monitor the detailed progress in the Output window:
2. Select "Containerlab" from the dropdown menu
3. Watch the deployment logs in real-time

## Auto-refresh Behavior
- The Containerlab Explorer automatically refreshes based on the `containerlab.refreshInterval` setting
## Live Updates
- The Containerlab Explorer streams containerlab events, so running labs refresh immediately without polling
- Labs are consistently sorted:
- Deployed labs appear before undeployed labs
- Within each group (deployed/undeployed), labs are sorted by their absolute path
Expand Down
17 changes: 16 additions & 1 deletion esbuild.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,20 @@ async function build() {
// Note: CSS and JS files are now bundled by webpack
// No need to copy them separately from html-static

// Plugin to stub native .node files - ssh2 has JS fallbacks
const nativeNodeModulesPlugin = {
name: 'native-node-modules',
setup(build) {
build.onResolve({ filter: /\.node$/ }, () => ({
path: 'noop',
namespace: 'native-node-empty',
}));
build.onLoad({ filter: /.*/, namespace: 'native-node-empty' }, () => ({
contents: 'module.exports = {};',
}));
},
};

// Build the extension
await esbuild.build({
entryPoints: ['src/extension.ts'],
Expand All @@ -40,7 +54,8 @@ async function build() {
format: 'cjs',
external: ['vscode'],
outfile: 'dist/extension.js',
sourcemap: true
sourcemap: true,
plugins: [nativeNodeModulesPlugin],
});

console.log('Build complete! HTML templates copied to dist/');
Expand Down
7 changes: 4 additions & 3 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ export default [
'node_modules/**',
'.vscode-test.mjs', // VS Code test harness
'legacy-backup/**', // Legacy backup files
'labs/**' // containerlab lab files
'labs/**', // containerlab lab files
"src/utils/consts.ts"
]
},

Expand Down Expand Up @@ -65,8 +66,8 @@ export default [
'sonarjs/no-alphabetical-sort': 'off',
'aggregate-complexity/aggregate-complexity': ['error', { max: 15 }]

}
},
}


];
Loading