Visual Studio Code
The Visual Studio Code extension adds the Microsoft editor to a Frostyard
desktop image, with its code command, a desktop entry, and an icon. Use it
when you want the editor without changing the image. Every image carries the
extension’s definition, switched off. The extension itself is not in the image:
Updex turns it on and downloads it.
Before you start
Section titled “Before you start”You need:
- A Frostyard desktop image. The feature is marked for Snow and Snowfield
(
X-Snosi-Products=snow,snowfield), but Updex lists it on every image. The extension is built on gui-base: on Floe, the editor merges but does not start. - Root access to enable, update, and remove the extension.
- Network access to
https://repository.frostyard.org/ext/vscode/. - Free space in
/varfor the image. - A desktop session, to start the editor from the application grid.
Visual Studio Code has no published test results on Frostyard images yet. Try it on a machine you can spare first.
Enable Visual Studio Code
Section titled “Enable Visual Studio Code”See what Updex found, then enable the feature and download it now:
updex features list --component=vscodesudo updex features enable vscode --nowvscode appears as a component, with its feature disabled. The enable command
downloads the image, checks its checksum and signature, links it, and refreshes
the merge.
Check the merge and the files that start the editor:
systemd-sysext statuscommand -v codels /usr/share/applications/com.microsoft.VSCode.desktopsystemd-sysext status lists vscode. The command prints a path, and the
desktop entry exists.
There is no unit to check. The extension ships no service, no preset, and no boot drop-in.
If enable --now exits with a refresh error (refresh_error in JSON), the
download worked, but the activation did not. If the output says
activation did not finish, the extension is merged, but users and groups can
be missing: reboot. Otherwise the merge state is unknown: reboot. A
sudo systemd-sysext refresh by hand does not create users and groups. Then run
the checks above again.
Use Visual Studio Code
Section titled “Use Visual Studio Code”Run the editor from a terminal:
codeYou can also pick Visual Studio Code in the application grid. The application
grid starts /usr/share/code/code. The code command is a link to
Microsoft’s launcher script, /usr/share/code/bin/code, which starts the same
binary.
The desktop entry carries the MIME types application/x-code-workspace and
inode/directory. The build adds inode/directory, so a file manager can open
a folder in Code.
The icon is /usr/share/pixmaps/vscode.png. That directory is the unthemed
fallback path, which every toolkit scans.
A merge in a running GNOME session does not always make the icon appear at once. Start a new session and the icon is there. The desktop entry itself appears without a new session.
The extension adds the editor, its command, the launcher, and the icon. It
ships no configuration file and keeps no state under /var.
Update and remove
Section titled “Update and remove”An update swaps /usr and replaces the editor. Close any open Code window
first, because the files it runs from change under it. The extension keeps no
state of its own, so nothing else is affected.
Remove Visual Studio Code now:
sudo updex features disable vscode --now --forceUpdex unmerges all extensions on the host, deletes the Visual Studio Code
image, and merges the rest again. The command, the launcher, and the icon go.
The extension holds only /usr, so removal leaves no data of its own behind.
Reboot when the command finishes. Without --force, Updex refuses while the
image is merged.
Roll back
Section titled “Roll back”Roll back with sudo updex features rollback vscode. It takes effect at the next boot. Updex then holds updates until a newer version is published. To stop future updates instead, run sudo updex features disable vscode. The extension keeps no state of its own. See Roll back.
See Manage system extensions for the update check, the
timer, and plain disable.
Troubleshooting
Section titled “Troubleshooting”| Symptom | Check | Fix |
|---|---|---|
code or the launcher is missing |
systemd-sysext status, command -v code, and ls /usr/share/applications/com.microsoft.VSCode.desktop |
Check that the image is merged. If it is, reboot: a sudo systemd-sysext refresh does nothing when the merged images did not change. |
| The icon is the generic application icon | The icon in the application grid after a new login | A running GNOME session does not always rescan icons from a merge. Icons are reliable from the next session start. |
enable --now exits non-zero after the download |
The output shows Error: sysext refresh failed (refresh_error with --json) |
If the output says activation did not finish, reboot. Otherwise reboot too: a refresh by hand does not create the extension’s users and groups. Then check systemd-sysext status. |
Do not repair the extension with apt. If a merged image is missing files, the
fix is a corrected extension build.
What ships
Section titled “What ships”| Item | What you get |
|---|---|
| Package | code, from packages.microsoft.com/repos/code |
| Version | The image file name carries the code version, plus a +rN snosi revision when one is set |
| Image file | vscode_<version>_<os>_<arch>.raw.zst; .raw.xz, .raw.gz, and .raw also work |
| Download | From https://repository.frostyard.org/ext/vscode/, signature required (Verify=true), into /var/lib/extensions.d/ |
| Commands | /usr/bin/code (launcher) and /usr/share/code/code |
| Desktop entry | /usr/share/applications/com.microsoft.VSCode.desktop, with inode/directory added to its MIME types |
| Icon | /usr/share/pixmaps/vscode.png |
| Services | None: no preset and no boot drop-in |
Each build checks that the launcher command, its binary, the desktop entry, and the icon are present. A build that is missing one fails.
The image builds against gui-base, the shared set of desktop libraries that
every desktop product already has. The delta leaves those libraries out, and
your product supplies its own copies at merge time. An editor build therefore
cannot put an older GUI library over the one your desktop uses. A finalize
check fails the build when the delta carries a divergent GUI library.
The image is an overlay that holds only what its build base does not already have. A later Base can break an older Visual Studio Code image.
See also
Section titled “See also”- System extension catalog
- Dev tools system extension
- Manage system extensions
- Desktop applications in sysexts
- Updex v2.1.3 command reference
Sources
Section titled “Sources”Reviewed 2026-10-27; Updex facts reviewed 2026-10-30. snosi commit
b2858ca0222814c395cf8248db98f3e096d57dc9;
Updex v2.1.3 commit
2661e987faac986f2594d1d9bbbadf1bf3053f5b.
mkosi.images/vscode/mkosi.confmkosi.images/vscode/required-paths.txtmkosi.images/gui-base/mkosi.confshared/packages/vscode/mkosi.postinst.d/vscode.chrootmkosi.images/base/mkosi.extra/usr/lib/sysupdate.vscode.d/vscode.featuremkosi.images/base/mkosi.extra/usr/lib/sysupdate.vscode.d/vscode.transferdocs/native-ab-prototype-history.mddocs/design/sysexts.md- Updex v2.1.3
README.md - Updex v2.1.3
updex/features.go - Updex v2.1.3 release
- Updex
docs/adr/0019-apply-merged-sysusers-and-tmpfiles-on-a-live-refresh.md(a live refresh runssystemd-sysusersandsystemd-tmpfiles --create; when the last refresh fails, the merge state is unknown; a refresh by hand does not runsystemd-sysusers) src/data/extensions.json- Murbella’s live check on a merged host (frostyard-org#21 review)
docs/adr/0016-automatic-sysext-updates-apply-at-next-boot.md