Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>systemd ToolkitNew to Visual Studio Code? Get it now.
systemd Toolkit

systemd Toolkit

kioz.wang

|
9 installs
| (0) | Free
Language support for systemd unit, network, and configuration files: syntax highlighting, directive completion, hover documentation, and systemctl integration.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

systemd Toolkit

Language support for editing systemd unit, network, and daemon configuration files, plus systemctl / journalctl integration: a Units panel, CodeLens, live logs, and unit-file deploy — locally and over SSH.

Features

Editing

  • Syntax highlighting for unit files (.service, .socket, .timer, .path, .mount, .swap, .automount, .target, .slice, .scope, .device), network files (.network, .netdev, .link, .nspawn, .dnssd, .dns-delegate) and daemon config files (journald.conf, logind.conf, resolved.conf, system.conf, …).
  • Directive completion — directives are inferred from the current [Section] and file type. Inside [Service] of a .service file you get ExecStart, Type, Restart, …, not socket or timer options.
  • Value completion — for enumerable directives (Type=, Restart=, KillMode=, booleans, …) the allowed values are offered after =.
  • Section completion — typing [ lists the valid sections for the file.
  • Hover documentation — hovering a directive shows a summary, allowed values, and a link to the upstream man page.
  • Ctrl+Click — opens the online HTML man page (anchored at the directive), and jumps to dependency targets (After=, Wants=, WantedBy=, …) when they are deployed.
  • Snippets — templates for service, oneshot, timer, socket, mount, automount, path, slice and target units (e.g. type service).

Editing: directive/value/section completion, hover, Ctrl+Click

Commands

Command Action
systemd: Show Unit Status systemctl status <unit>
systemd: Start / Stop / Restart / Reload Unit systemctl <action> <unit>
systemd: Enable / Disable Unit systemctl enable/disable <unit>
systemd: Reload Daemon systemctl daemon-reload
systemd: Show Unit Logs live journalctl -u <unit> --follow
systemd: Deploy Unit File write file + daemon-reload

The unit name is inferred from the active editor (e.g. sshd.service), or you are prompted. Commands run in an integrated systemd terminal. Diagnostics (extension logs and a record of every command executed) go to the systemd Toolkit output channel.

Units panel

The systemd activity-bar container has three views:

  • Target — the current host and unit scope (click either to switch). The Refresh button lives here and refreshes all three views.
  • Loaded — units currently in memory (systemctl list-units), with a list/tree toggle, a Show/Hide inactive toggle, and a name filter. Both modes show each unit's state via icon and colour.
  • Installed — units present in list-unit-files but not loaded (collapsed by default, fetched lazily when expanded), with its own list/tree toggle and filter. Freshly-deployed-but-inactive units surface here (systemd garbage-collects inactive units out of list-units).

Actions on a unit are state-dependent (same matrix as CodeLens):

State Actions
active Stop, Restart, Logs
inactive Start, Logs
failed Restart, Logs
transitioning / masked Logs only
enabled + Disable
disabled + Enable

Every unit also offers Status, View Unit File, and Edit Unit File. In the Installed tree, each group has a New button to create a unit of that type.

Units panel: Target/Loaded/Installed views and state-dependent actions

Editor CodeLens

For unit files the editor shows a state-dependent CodeLens:

  • not deployed → a single Deploy action;
  • deployed → live status (active (running)), then:
    • active → Stop + Restart; inactive → Start; failed → Restart;
    • enabled → Disable; disabled → Enable;
    • Logs, and Edit (read-only preview) / Deploy (editable copy).

Deploy writes the file and runs systemctl daemon-reload:

  • an edited unit is written back to its FragmentPath (or to the unit dir if the fragment is a vendor file under /usr/lib/systemd/ or /lib/systemd/);
  • a new file goes to /etc/systemd/system/<name> (or ~/.config/systemd/user/<name> for user scope);
  • overwriting an existing file on the target asks for confirmation first.

Deploy does not start or enable the unit — those are separate steps (Start / Enable).

Editor CodeLens: state-dependent actions, Deploy → Start/Enable flow

Live logs

Show Unit Logs opens a read-only tab streaming journalctl -u <unit> --follow -n 300 (locally or over SSH). It refreshes continuously, throttled and capped, and stops its process when the tab closes. Log views carry no CodeLens.

Live logs: streaming journalctl --follow in a read-only tab

Status bar

The status bar shows the current target (host · scope · vNNN); click it to switch host or scope for the session.

Remote (SSH) & scope

  • systemd-toolkit.host — SSH alias (from ~/.ssh/config) to operate on; empty = local. Remote commands reuse one multiplexed SSH connection.
  • systemd-toolkit.scope — system (default) or user (systemctl --user). User scope deploys to ~/.config/systemd/user/ and never elevates.

The Target view and status bar switch these for the session without changing the settings. The panel follows the session; the editor CodeLens follows the file's own scope (a file under /etc/systemd/system/ is always system).

Supported systemd versions

Ships directive data for systemd 258, 259, 260, 261 (latest stable patch of each series). The extension automatically matches the target's systemd version (systemctl --version, honouring systemd-toolkit.host) so language features always use the right directive data. If the target has no systemd, or its version has no matching data, a picker asks you to choose a version — the choice applies to the current host connection only and is re-evaluated when you switch hosts.

Settings

  • systemd-toolkit.docSource — online (default) or man.
  • systemd-toolkit.onlineDocBase — base URL for online.
  • systemd-toolkit.systemctlPath / systemd-toolkit.journalctlPath — binary paths.
  • systemd-toolkit.host — SSH alias to operate on (empty = local).
  • systemd-toolkit.scope — system | user.
  • systemd-toolkit.sshPath — path to ssh.
  • systemd-toolkit.authMethod — sudo (default) / pkexec / none.

How the directive data is produced

Completion and hover data is generated from the systemd source tree's man pages (DocBook XML) by scripts/generate-data.py. See DEVELOPMENT.md for details.

Building

npm install
npm run compile
npm run package   # → systemd-toolkit-0.1.0.vsix

License & attribution

The extension is licensed under LGPL-2.1-or-later (see LICENSE). The systemd logo used for the icon is © Tobias Bernard (GNOME), licensed under CC BY-SA 4.0 — see THIRD_PARTY_NOTICES.md for details.

This extension is not affiliated with, or endorsed by, the systemd project.

Notes / limitations

  • Boolean directives complete as yes/no/true/false/on/off.
  • Time-span (5min, 1h 30min) and size (512M) values are free-form, not auto-completed.
  • Privileged commands run through systemd-toolkit.authMethod (default sudo) in a terminal for interactive auth.
  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft