Manage images¶
Introduction¶
We call images the root filesystem tarballs that are used to create WSL instances.
Wsl Manager caches these images locally to avoid re-downloading them each time an image is created. This allows faster instance creation and offline usage.
The actual image files (root filesystems) are located in
$Env:LOCALAPPDATA\Wsl\RootFS. Each one is stored as a file with the
rootfs.tar.gz suffix and with its digest (SHA256) as a prefix. For instance:
PS> # Get the local filename of the first image
PS> (gwsli | Select-Object -First 1).LocalFilename
EAA1B653F754EC92D893CA4D7CC97EDB8EA08B57CCB41A00973AC80A79AC3AE8.rootfs.tar.gz
Filename format
Using the digest as a filename ensures that images are not duplicated on disk if they are the same (for instance, multiple instances created from the same image will share the same root filesystem file).
Some images may be compressed with other formats than gunzip (e.g. zstd).
However, the file suffix is still tar.gz and WSL will recognize it because
it uses bsdtar under the hood.
The metadata of the images (name, type, os, release, ...) as well as their
source are stored in a local SQLite database located in
$Env:LOCALAPPDATA\Wsl\RootFS\images.db.
This information can be queried using the Get-WslImage cmdlet (alias gwsli).
For instance:
Get image details
PS> Get-WslImage alpine | Format-List *
Id : 32031732-dd91-4d42-a715-5d59c0dd5d3d
SourceId : fd46c4ca-c183-44bb-ab54-c8d10bf0e833
Name : alpine
State : Synced
Type : Builtin
CreationDate : 21/12/2025 19:43:22
UpdateDate : 21/12/2025 19:45:32
Url : docker://ghcr.io/antoinemartin/powershell-wsl-manager/alpine#latest
Configured : True
Username : alpine
Uid : 1000
Os : Alpine
Release : 3.23.2
LocalFileName : 0926BDEB3848F8B06D2572641DCD801D3CC31EC74AD7A0C3B5D7AD24DC5DF6E0.rootfs.tar.gz
Size : 37255108
DigestUrl :
DigestAlgorithm : SHA256
DigestType : docker
FileHash : 0926BDEB3848F8B06D2572641DCD801D3CC31EC74AD7A0C3B5D7AD24DC5DF6E0
Source : WslImageSource
IsLocalOnly : False
OsName : Alpine:3.23.2
FileName : 0926BDEB3848F8B06D2572641DCD801D3CC31EC74AD7A0C3B5D7AD24DC5DF6E0.rootfs.tar.gz
File : C:\Users\AntoineMartin\AppData\Local\Wsl\RootFS\0926BDEB3848F8B06D2572641DCD801D3CC31EC74AD7A0C3B5D7AD24DC5DF6E0.rootfs.tar.gz
IsAvailableLocally : True
Length : 36,1 MB
OnlineHash : 0926BDEB3848F8B06D2572641DCD801D3CC31EC74AD7A0C3B5D7AD24DC5DF6E0
Outdated : False
IsCached : True
PS>
Each image is associated with a source, which describes where the image comes
from. The sources can be listed with the Get-WslImageSource cmdlet:
PS> Get-WslImageSource
Name Type Distribution Release Configured Length UpdateDate
---- ---- ------------ ------- ---------- ------ ----------
alpine-base Builtin Alpine 3.23.2 False 3,5 MB 22/12/2025 11:51:21
alpine Builtin Alpine 3.23.2 True 35,5 MB 22/12/2025 11:51:21
...
PS>
When creating a new WSL instance with New-WslInstance arch -From arch for
instance, the image source and the corresponding image are managed automatically
by the module. The following sections are interesting to manage images with the
module. They describe the different types of images available as well as how to
synchronize, update and remove them.
Types of images¶
images can currently be of the following types:
Builtin¶
Builtin images are images that are officially supported by Wsl Manager. They are
built from official sources and maintained by the Wsl Manager project. They are
stored as docker images in the Github Container Registry under the
antoinemartin/powershell-wsl-manager namespace.
These images can be used directly by their name when creating a new WSL instance. e.g.
They are also the ones returned by the Get-WslImageSource command (see above).
The currently available distributions are:
- Archlinux (
arch). As this is a rolling distribution, there is no version attached. The current image used as base is 2025-08-01. - Alpine 3.23 (
alpine) - Ubuntu 26.04 (
ubuntu) - Debian 13 (
debian) - OpenSuse tumbleweed (
opensuse-tumbleweed). This is also a rolling distribution.
Each of these distributions comes into 2 flavors: Configured (the default) and
Unconfigured by adding the suffix -base. The difference between configured and
base images is described in the
create instances documentation.
The available builtin images can be listed using
Get-WslImage -Source Builtins:
PS> Get-WslImageSource
Name Type Distribution Release Configured Length UpdateDate
---- ---- ------------ ------- ---------- ------ ----------
alpine-base Builtin Alpine 3.23.2 False 3,5 MB 22/12/2025 11:51:21
alpine Builtin Alpine 3.23.2 True 35,5 MB 22/12/2025 11:51:21
arch-base Builtin Arch 2025.12.01 False 209,3 MB 22/12/2025 11:51:21
arch Builtin Arch 2025.12.01 True 375,9 MB 22/12/2025 11:51:21
debian-base Builtin Debian 13 False 29,4 MB 22/12/2025 11:51:21
debian Builtin Debian 13 True 141,7 MB 22/12/2025 11:51:21
opensuse-tumb... Builtin Opensuse-... 20251217 False 46,4 MB 22/12/2025 11:51:21
opensuse-tumb... Builtin Opensuse-... 20251217 True 108,6 MB 22/12/2025 11:51:21
ubuntu-base Builtin Ubuntu 26.04 False 377,6 MB 22/12/2025 11:51:21
ubuntu Builtin Ubuntu 26.04 True 430,8 MB 22/12/2025 11:51:21
PS>
Builtin images are refreshed every sunday night by a github actions workflow.
They are made available in the Github Packages registry (https://ghcr.io) on the
antoinemartin namespace. The full list is available here
.
The list of builtin images are stored in the github repository in an ad-hoc
branch called rootfs. The actual fetched URL containing the list is:
The list is stored locally in the SQLite database
($Env:LOCALAPPDATA\Wsl\RootFS\images.db). It is refreshed if it's older than
one day.
It's possible to force refresh using the -Sync switch:
PS> Get-WslImageSource -Type Builtins -Sync
⌛ Fetching Builtins images from: https://raw.githubusercontent.com/antoinemartin/PowerShell-Wsl-Manager/refs/heads/rootfs/builtins.rootfs.json
Name Type Distribution Release Configured Length UpdateDate
---- ---- ------------ ------- ---------- ------ ----------
alpine-base Builtin Alpine 3.23.2 False 3,5 MB 22/12/2025 11:51:21
... (ommitted for brevity)...
PS>
PS> Get-WslImageSource -Type Builtins -Sync
⌛ Fetching Builtins images from: https://raw.githubusercontent.com/antoinemartin/PowerShell-Wsl-Manager/refs/heads/rootfs/builtins.rootfs.json
Name Type Distribution Release Configured Length UpdateDate
---- ---- ------------ ------- ---------- ------ ----------
alpine-base Builtin Alpine 3.23.2 False 3,5 MB 22/12/2025 11:51:21
alpine Builtin Alpine 3.23.2 True 35,5 MB 22/12/2025 11:51:21
arch-base Builtin Arch 2025.12.01 False 209,3 MB 22/12/2025 11:51:21
arch Builtin Arch 2025.12.01 True 375,9 MB 22/12/2025 11:51:21
debian-base Builtin Debian 13 False 29,4 MB 22/12/2025 11:51:21
debian Builtin Debian 13 True 141,7 MB 22/12/2025 11:51:21
opensuse-tumb... Builtin Opensuse-... 20251217 False 46,4 MB 22/12/2025 11:51:21
opensuse-tumb... Builtin Opensuse-... 20251217 True 108,6 MB 22/12/2025 11:51:21
ubuntu-base Builtin Ubuntu 26.04 False 377,6 MB 22/12/2025 11:51:21
ubuntu Builtin Ubuntu 26.04 True 430,8 MB 22/12/2025 11:51:21
PS>
Incus¶
Incus, formerly known as LXD, is a solution to run Linux system containers on a Linux machine. It's somewhat like WSL for Linux, but with more features. LXD was originally developed by Canonical, the company behind Ubuntu, and is now maintained by the linux containers project. The project maintains images as root filesystems for a fair amount of linux distributions (list here).
The list of available Incus images can be obtained with the command:
PS> Get-WslImage -Source Incus
Name Type Distribution Release Configured Length UpdateDate
---- ---- ------------ ------- ---------- ------ ----------
almalinux Incus Almalinux 10 False 80,0 MB 22/12/2025 11:49:43
...(cut for brevity)...
voidlinux Incus Voidlinux current False 99,4 MB 22/12/2025 11:49:43
PS>
A Incus based WSL instance can be created with Install-Wsl by passing a image
Url with the following syntax:
incus://<os>#<release>
for instance:
Wsl Manager maintains a list of available Incus images and their metadata. This
list is hosted in the github repository in the special rootfs branch, along
with the list of builtin images.
The actual fetched Url is:
The list is updated every night at 2am by a Github Actions workflow that fetches the latest images for Incus and stores their metadata in a format easier to parse by the module.
The related information is stored locally by Wsl Manager in the SQLite database
($Env:LOCALAPPDATA\Wsl\Image\images.db). It is refreshed if the local copy in
the database is older than a day.
Like the builtin images, the Incus images list can also be forced refreshed with
the -Sync switch:
PS> Get-WslImageSource -Type Incus -Sync
⌛ Fetching Incus images from: https://raw.githubusercontent.com/antoinemartin/PowerShell-Wsl-Manager/refs/heads/rootfs/incus.rootfs.json
Name Type Os Release Configured State FileName
---- ---- -- ------- ---------- ----- --------
almalinux Incus almalinux 10 False NotDownloaded incus.almalinux_10.rootfs.tar.gz
...(cut for brevity)...
voidlinux Incus voidlinux current False NotDownloaded incus.voidlinux_current.rootf...
PS>
Uri¶
The Uri type of images is for images that have been installed from a URL. Look
at the following example with the official
archlinux WSL image
that is configured to start systemd on launch:
PS> New-WslInstance archsystemd -From https://mirror.pkgbuild.com/wsl/latest/archlinux.wsl
...
PS> Get-WslImage archlinux
Name Type Os Release Configured State Length
---- ---- -- ------- ---------- ----- ------
archlinux Uri Archlinux latest False Synced 131,1 MB
PS> Get-WslImageSource archlinux -Type Uri
Name Type Distribution Release Configured Length UpdateDate
---- ---- ------------ ------- ---------- ------ ----------
archlinux Uri Archlinux latest False 131,1 MB 23/12/2025 09:48:11
PS>
PS> New-WslInstance archsystemd -From https://mirror.pkgbuild.com/wsl/latest/archlinux.wsl | Invoke-WslInstance
⌛ Creating directory [C:\Users\AntoineMartin\AppData\Local\Wsl\archsystemd]...
⌛ Downloading https://mirror.pkgbuild.com/wsl/latest/archlinux.wsl...
archlinux.wsl (131,1 MB) [=================================================================================================================================================================================================] 100%
🎉 [Archlinux:latest] Synced at [C:\Users\AntoineMartin\AppData\Local\Wsl\RootFS\8DFE92910A188F191B0AF2972BD4BDA661178B769CE820A8921E8B7AEAE9A517.rootfs.tar.gz].
⌛ Creating instance [archsystemd] from [C:\Users\AntoineMartin\AppData\Local\Wsl\RootFS\8DFE92910A188F191B0AF2972BD4BDA661178B769CE820A8921E8B7AEAE9A517.rootfs.tar.gz]...
🎉 Done. Command to enter instance: Invoke-WslInstance -In archsystemd or wsl -d archsystemd
Name State Version Default
---- ----- ------- -------
archsystemd Stopped 2 False
PS> Get-WslImage archlinux
Name Type Os Release Configured State Length
---- ---- -- ------- ---------- ----- ------
archlinux Uri Archlinux latest False Synced 131,1 MB
PS> Get-WslImageSource archlinux -Type Uri
Name Type Distribution Release Configured Length UpdateDate
---- ---- ------------ ------- ---------- ------ ----------
archlinux Uri Archlinux latest False 131,1 MB 23/12/2025 09:48:11
PS>
Docker/OCI Images¶
images can also be downloaded from Docker/OCI compatible registries like GitHub
Container Registry (ghcr.io) or the docker hub (docker.io). This
functionality is built into the module for accessing container images that
contain images as single layers.
When using Docker URIs with the format docker://registry/image#tag, the module
will:
- Authenticate with the registry
- Download the image manifest
- Extract the single layer containing the image
- Save it as a compressed tar.gz file
This is particularly useful for accessing images built and distributed as container images.
Here is an example that creates a test WSL instance from the edge alpine
docker hub image and performs its configuration (with use of aliases):
PS> # Equivalent to New-WslInstance -Name test -From docker://docker.io/alpine#edge | Invoke-WslConfigure | Invoke-WslInstance
PS> nwsl test -From docker://docker.io/alpine#edge | cwsl | iwsl
⌛ Creating directory [C:\Users\AntoineMartin\AppData\Local\Wsl\test]...
⌛ Retrieving docker image manifest for alpine:edge from registry docker.io...
⌛ Downloading Docker image layer from docker.io/library/alpine:edge...
⌛ Retrieving docker image manifest for library/alpine:edge from registry docker.io...
👀 Root filesystem size: 3,5 MB. Digest sha256:d62bb7eb03b5936dc5a5665fd5a6ede7eab4a6bd0ed965be8c6c3c21e1e53931. Downloading...
sha256:d62bb7eb03b5936dc5a5665fd5a6ede7eab4a6bd0ed965be8c6c3c21e1e53931 (3,5 MB) [=========================================================================================================================================] 100%
🎉 Successfully downloaded Docker image layer to C:\Users\AntoineMartin\AppData\Local\Wsl\RootFS\D62BB7EB03B5936DC5A5665FD5A6EDE7EAB4A6BD0ED965BE8C6C3C21E1E53931.rootfs.tar.gz.tmp. File size: 3,5 MB
🎉 [alpine:edge] Synced at [C:\Users\AntoineMartin\AppData\Local\Wsl\RootFS\D62BB7EB03B5936DC5A5665FD5A6EDE7EAB4A6BD0ED965BE8C6C3C21E1E53931.rootfs.tar.gz].
⌛ Creating instance [test] from [C:\Users\AntoineMartin\AppData\Local\Wsl\RootFS\D62BB7EB03B5936DC5A5665FD5A6EDE7EAB4A6BD0ED965BE8C6C3C21E1E53931.rootfs.tar.gz]...
🎉 Done. Command to enter instance: Invoke-WslInstance -In test or wsl -d test
⌛ Running initialization script [C:\Users\AntoineMartin\Documents\WindowsPowerShell\Modules\Wsl-Manager/configure.sh] on instance [test]...
🎉 Configuration of instance [test] completed successfully.
[powerlevel10k] fetching gitstatusd .. [ok]
❯ cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.22.0_alpha20250108
PRETTY_NAME="Alpine Linux edge"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues"
❯
Local¶
A local image is only available locally. It is either the result of an
Export-WslInstance command (more information
here) or an image that has been created
from a local root filesystem tarball.
Get images¶
The list of local images is given by the Get-WslImage (alias gwsli) command:
PS> Get-WslImage
Name Type Os Release Configured State Length
---- ---- -- ------- ---------- ----- ------
opensuse Docker Opensuse-... 20250813 True Synced 107,3 MB
docker Local arch 3.22.1 True Synced 511,9 MB
iknite Local Alpine 3.21.3 False Outdated 805,1 MB
kaweezle Local Alpine 3.21.3 False Synced 802,2 MB
opensuse Uri opensuse unknown False Synced 46,3 MB
python Local debian 13 True Synced 113,7 MB
opensuse Uri Opensuse 15.6 False Synced 39,9 MB
alpine Builtin Alpine 3.23.2 True Synced 36,1 MB
opensuse-tumb... Builtin Opensuse-... 20251217 False Outdated 72,3 MB
yawsldocker-a... Docker Alpine 3.22.1 True Synced 148,5 MB
jekyll Local Alpine 3.22.1 False Synced 159,0 MB
archlinux Uri Archlinux latest False Synced 131,1 MB
alpine Docker alpine edge False Synced 3,5 MB
PS>
Several filters are available (see reference), like:
PS> gwsli -Distribution Alpine
Name Type Os Release Configured State Length
---- ---- -- ------- ---------- ----- ------
iknite Local Alpine 3.21.3 False Outdated 805,1 MB
kaweezle Local Alpine 3.21.3 False Synced 802,2 MB
alpine Builtin Alpine 3.23.2 True Synced 36,1 MB
yawsldocker-a... Docker Alpine 3.22.1 True Synced 148,5 MB
jekyll Local Alpine 3.22.1 False Synced 159,0 MB
PS>
You can also get only outdated images with the -Outdated switch:
PS> Get-WslImage -Outdated
Name Type Os Release Configured State Length
---- ---- -- ------- ---------- ----- ------
iknite Local Alpine 3.21.3 False Outdated 805,1 MB
opensuse-tumb... Builtin Opensuse-... 20251217 False Outdated 72,3 MB
PS>
Local images are marked as Outdated when the related source image has been
updated and the digest of the local image is no longer the same as the source
image.
An image source can be updated with the Update-WslImageSource cmdlet (see
here) in order to refresh the status of
local images and mark them as outdated if necessary. Builtin and Incus image
sources are automatically updated if they are older than 1 day when calling
Get-WslImageSource, so you usually don't need to do this manually unless you
want to force refresh of the image sources before checking for outdated images.
Synchronize images¶
Fetch builtins images¶
Local Synchronization of images is performed with the Sync-WslImage (swlsi
alias) cmdlet. For instance, to fetch the builtin debian base image:
PS> Sync-WslImage debian-base
⌛ Downloading Docker image layer from ghcr.io/antoinemartin/powershell-wsl-manager/debian-base:latest...
⌛ Retrieving docker image manifest for antoinemartin/powershell-wsl-manager/debian-base:latest from registry ghcr.io...
👀 Root filesystem size: 48,1 MB. Digest sha256:af4880b366245a9a2d4a3dee7341a8073e27ad065dc0deb73357c394f06b62cf. Downloading...
sha256:af4880b366245a9a2d4a3dee7341a8073e27ad065dc0deb73357c394f06b62cf (48,1 MB) [========================================================================================================================================] 100%
🎉 Successfully downloaded Docker image layer to C:\Users\AntoineMartin\AppData\Local\Wsl\RootFS\B5A034812F22D96C746D6CD49E50053F328D9D135B3226A7613DA5F448018000.rootfs.tar.gz.tmp. File size: 48,1 MB
🎉 [Debian:13] Synced at [C:\Users\AntoineMartin\AppData\Local\Wsl\RootFS\B5A034812F22D96C746D6CD49E50053F328D9D135B3226A7613DA5F448018000.rootfs.tar.gz].
Name Type Os Release Configured State Length
---- ---- -- ------- ---------- ----- ------
debian-base Builtin Debian 13 False Synced 48,1 MB
PS>
Import local root file systems¶
You can also synchronize a image from a local file path:
When synchronizing a local image, the cmdlet will attempt to extract linux
distribution information from the root filesystem in order to display the image
metadata correctly. It will look for standard files like /etc/os-release,
/etc/wsl.conf and /etc/passwd, etc.
Force synchronization¶
You can force the re-synchronization with the -Force switch. For instance, to
force re-synchronization of the builtin Alpine images:
PS> Get-WslImage -Type Builtin -Distribution Alpine | Sync-WslImage -Force
⌛ Retrieving docker image manifest for antoinemartin/powershell-wsl-manager/alpine:latest from registry ghcr.io...
⌛ Downloading Docker image layer from ghcr.io/antoinemartin/powershell-wsl-manager/alpine:latest...
⌛ Retrieving docker image manifest for antoinemartin/powershell-wsl-manager/alpine:latest from registry ghcr.io...
👀 Root filesystem size: 36,1 MB. Digest sha256:a8c002573f4fbc85bd96b5b3d30e7cd7c73ae78eccf18d9f00977748d78f82fd. Downloading...
sha256:a8c002573f4fbc85bd96b5b3d30e7cd7c73ae78eccf18d9f00977748d78f82fd (36,1 MB) [========================================================================================================================================] 100%
🎉 Successfully downloaded Docker image layer to C:\Users\AntoineMartin\AppData\Local\Wsl\RootFS\A8C002573F4FBC85BD96B5B3D30E7CD7C73AE78ECCF18D9F00977748D78F82FD.rootfs.tar.gz.tmp. File size: 36,1 MB
🎉 [Alpine:3.23.2] Synced at [C:\Users\AntoineMartin\AppData\Local\Wsl\RootFS\A8C002573F4FBC85BD96B5B3D30E7CD7C73AE78ECCF18D9F00977748D78F82FD.rootfs.tar.gz].
Name Type Os Release Configured State Length
---- ---- -- ------- ---------- ----- ------
alpine Builtin Alpine 3.23.2 True Synced 36,1 MB
PS>
Update outdated¶
Builtin images¶
Builtin images can be easily updated when they are outdated:
PS> Get-WslImage -Outdated -Type Builtin | Sync-WslImage
⌛ Downloading Docker image layer from ghcr.io/antoinemartin/powershell-wsl-manager/alpine:latest...
⌛ Retrieving docker image manifest for antoinemartin/powershell-wsl-manager/alpine:latest from registry ghcr.io...
👀 Root filesystem size: 36,1 MB. Digest sha256:bdafbeb2ef3f5c150d00351c53c51e2a974758e7d24a6fbbab982632929c531e. Downloading...
sha256:bdafbeb2ef3f5c150d00351c53c51e2a974758e7d24a6fbbab982632929c531e (36,1 MB) [========================================================================================================================================] 100%
🎉 Successfully downloaded Docker image layer to C:\Users\AntoineMartin\AppData\Local\Wsl\RootFS\BDAFBEB2EF3F5C150D00351C53C51E2A974758E7D24A6FBBAB982632929C531E.rootfs.tar.gz.tmp. File size: 36,1 MB
🎉 [Alpine:3.23.2] Synced at [C:\Users\AntoineMartin\AppData\Local\Wsl\RootFS\BDAFBEB2EF3F5C150D00351C53C51E2A974758E7D24A6FBBAB982632929C531E.rootfs.tar.gz].
Name Type Os Release Configured State Length
---- ---- -- ------- ---------- ----- ------
alpine Builtin Alpine 3.23.2 True Synced 36,1 MB
⌛ Downloading Docker image layer from ghcr.io/antoinemartin/powershell-wsl-manager/debian-base:latest...
⌛ Retrieving docker image manifest for antoinemartin/powershell-wsl-manager/debian-base:latest from registry ghcr.io...
👀 Root filesystem size: 48,1 MB. Digest sha256:af4880b366245a9a2d4a3dee7341a8073e27ad065dc0deb73357c394f06b62cf. Downloading...
sha256:af4880b366245a9a2d4a3dee7341a8073e27ad065dc0deb73357c394f06b62cf (48,1 MB) [========================================================================================================================================] 100%
🎉 Successfully downloaded Docker image layer to C:\Users\AntoineMartin\AppData\Local\Wsl\RootFS\AF4880B366245A9A2D4A3DEE7341A8073E27AD065DC0DEB73357C394F06B62CF.rootfs.tar.gz.tmp. File size: 48,1 MB
🎉 [Debian:13] Synced at [C:\Users\AntoineMartin\AppData\Local\Wsl\RootFS\AF4880B366245A9A2D4A3DEE7341A8073E27AD065DC0DEB73357C394F06B62CF.rootfs.tar.gz].
debian-base Builtin Debian 13 False Synced 48,1 MB
PS>
Incus images¶
The incus images outdated status is also updated automatically when synchronizing image sources.
Other image types¶
For other types of images (Uri, Docker, Local), you need to manually check for updates and re-synchronize them as there is no automatic update mechanism for these types of images. This can done with the following command that will update all image sources of type Uri, Docker and Local:
PS> Get-WslImageSource -Source Uri,Docker,Local | Update-WslImageSource
⌛ Retrieving docker image manifest for antoinemartin/yawsldocker/yawsldocker-alpine:latest from registry ghcr.io...
Name Type Distribution Release Configured Length UpdateDate
---- ---- ------------ ------- ---------- ------ ----------
yawsldocker-a... Docker Alpine 3.22.1 True 148,5 MB 23/12/2025 18:56:56
⌛ Retrieving docker image manifest for antoinemartin/powershell-wsl-manager/opensuse:latest from registry ghcr.io...
opensuse Docker Opensuse-... 20250813 True 107,3 MB 23/12/2025 18:56:57
⌛ Retrieving docker image manifest for alpine:edge from registry docker.io...
alpine Docker alpine edge False 3,5 MB 23/12/2025 18:56:58
kaweezle Local Alpine 3.21.3 False 802,2 MB 23/12/2025 18:56:58
jekyll Local Alpine 3.22.1 True 159,0 MB 23/12/2025 18:56:59
AVERTISSEMENT : The WslImageSource docker (Id: b8a5d1fa-f6e4-45a2-9185-edebab2cc20f) does not have a URL to update from.
docker Local arch 3.22.1 True 0 B 16/10/2025 15:42:09
AVERTISSEMENT : The WslImageSource python (Id: cb760bea-4118-423a-89c2-c06e5c5ebd7b) does not have a URL to update from.
python Local debian 13 True 0 B 16/10/2025 15:42:09
archlinux Uri Archlinux latest False 131,1 MB 23/12/2025 18:56:59
AVERTISSEMENT : Failed to update WslImageSource from URL https://images.linuxcontainers.org/images/opensuse/15.6/amd64/default/20251109_04:20/rootfs.tar.xz: The specified URL was not found:
https://images.linuxcontainers.org/images/opensuse/15.6/amd64/default/20251109_04%3A20/rootfs.tar.xz
opensuse Uri Opensuse 15.6 False 39,9 MB 10/11/2025 14:30:46
opensuse Uri Opensuse tumbleweed False 46,4 MB 23/12/2025 18:57:00
PS>
You can then re-synchronize the outdated images as shown previously:
PS> Get-WslImage -Outdated -Type Uri,Local,Docker | Sync-WslImage
⌛ Downloading file:///C:/Users/AntoineMartin/AppData/Local/Wsl/RootFS - Copie/kaweezle.rootfs.tar.gz...
kaweezle.rootfs.tar.gz (802,2 MB) [===============================================================================] 100%
🎉 [Alpine:3.21.3] Synced at [C:\Users\AntoineMartin\AppData\Local\Wsl\RootFS\B6B41F0CECFAD9CE2ECACE59A7336EF0DA9005BF4518BA4D7BBC05B38A6B5AD9.rootfs.tar.gz].
Name Type Os Release Configured State Length
---- ---- -- ------- ---------- ----- ------
iknite Local Alpine 3.21.3 False Synced 802,2 MB
⌛ Downloading https://download.opensuse.org/tumbleweed/appliances/opensuse-tumbleweed-dnf-image.x86_64-lxc-dnf.tar.xz...
opensuse-tumbleweed-dnf-image.x86_64-lxc-dnf.tar.xz (46,4 MB) [===================================================] 100%
🎉 [opensuse:tumbleweed] Synced at [C:\Users\AntoineMartin\AppData\Local\Wsl\RootFS\1040342FFDB679BA1FDA75A81611DFCBA61129E1048901FE62F0C3271873E007.rootfs.tar.gz].
opensuse Uri opensuse tumbleweed False Synced 46,4 MB
PS>
Remove images¶
You can remove local images with the Remove-WslImage (rmwsli alias) cmdlet:
PS> Remove-WslImage -Distribution opensuse
Type Os Release State Name
---- -- ------- ----- ----
Builtin Opensuse tumbleweed NotDownloaded opensuse.rootfs.tar.gz
It can accept image(s) through the pipe:
PS> # Get installed images
PS> Get-WslImage -Distribution Opensuse-Tumbleweed
Name Type Os Release Configured State FileName
---- ---- -- ------- ---------- ----- --------
opensuse-tumb... Builtin Opensuse-... 20250820 True Synced docker.opensuse-tumbleweed.ro...
opensuse-tumb... Builtin Opensuse-... 20250820 False Synced docker.opensuse-tumbleweed-ba...
PS> # Remove them at once
PS> Get-WslImage -Distribution Opensuse-Tumbleweed | Remove-WslImage
Name Type Os Release Configured State FileName
---- ---- -- ------- ---------- ----- --------
opensuse-tumb... Builtin Opensuse-... 20250820 True NotDownloaded docker.opensuse-tumbleweed.ro...
opensuse-tumb... Builtin Opensuse-... 20250820 False NotDownloaded docker.opensuse-tumbleweed-ba...
PS> # No more local images
PS> Get-WslImage -Distribution Opensuse-Tumbleweed
PS> # Builtins still there
PS> Get-WslImage -Source Builtins -Distribution opensuse-tumbleweed
Name Type Os Release Configured State FileName
---- ---- -- ------- ---------- ----- --------
opensuse-tumb... Builtin Opensuse-... 20250820 True NotDownloaded docker.opensuse-tumbleweed.ro...
opensuse-tumb... Builtin Opensuse-... 20250820 False NotDownloaded docker.opensuse-tumbleweed-ba...
PS>
Get images by size¶
You can order the present filesystem by size with the command:
PS> Get-WslImage | Sort-Object -Property Length -Descending | Format-Table Name,Type, Os, Release, Configured, @{Label="Size (MB)"; Expression={ [int]($_.Length/1Mb) }}
Name Type Os Release Configured Size (MB)
---- ---- -- ------- ---------- ---------
iknite Local Alpine 3.21.3 False 805
kaweezle Local Alpine 3.21.3 False 802
ubuntu Builtin Ubuntu 25.10 True 423
arch Builtin Arch 2025.08.01 True 392
arch-base Builtin Arch 2025.08.01 False 210
jekyll Local alpine 3.22.1 True 158
yawsldocker-alpine Uri Alpine 3.22.1 True 148
opensuse Uri Opensuse-Tumbleweed 20250813 True 107
opensuse-base Uri Opensuse-Tumbleweed 20250813 False 71
debian-base Builtin Debian 13 False 48
alpine Builtin Alpine 3.22.1 True 35
alpine-base Builtin Alpine 3.22.1 False 4
PS>