Releases: microsoft/WSL
Releases · microsoft/WSL
Release list
3.0.1
WSLc is generally available.
Linux containers are central to modern development, from cloud-native applications to AI workloads. We're making those workflows simpler and easier to access on Windows with WSL containers, which is generally available today. Read more about the feature below.
Official announcement: https://blogs.windows.com/windowsdeveloper/2026/09/29/wsl-containers-now-generally-available/
Architecture deep dive: https://devblogs.microsoft.com/commandline/wslc-architecture-deep-dive/
What's Changed
- Simplify event reader cleanup by beena352 in #41667
- Fix config's handling of non-ascii characters by Feng Wang (@chemwolf6922) in #41657
- Prevent potential invalid access for string array pretty print by Feng Wang (@chemwolf6922) in #41673
- Follow up to PR #41512 by Feng Wang (@chemwolf6922) in #41642
- Use a static CRT in debug builds by Blue (@OneBlue) in #41684
- Increase the VM termination timeout to 30 seconds by Blue (@OneBlue) in #41688
- Impersonate the caller before making various filesystem operations by Blue (@OneBlue) in #41689
- Support STDIN through SDK by JohnMcPMS in #41698
- Followup to STDIN PR by JohnMcPMS in #41703
- Remove references to WSLC being in preview by Blue (@OneBlue) in #41704
Full Changelog: 2.9.13...3.0.1
2.9.13
What's Changed
- Fix activating a stopping service treated as OOM by Feng Wang (@chemwolf6922) in #41460
- Set distributionStartTimeout to 2 minutes in the tests to solve distribution start timeouts errors by Blue (@OneBlue) in #41583
- Enable RedirectionGuard process mitigation by Ben Hillis (@benhillis) in #41542
- Updates Ubuntu latest LTS images by Carlos Nihelton (@cnihelton) in #41465
- diagnostics: improve collect-wsl-logs for analysis (summary.json, README, profile info, WSL/guest state) by Ben Hillis (@benhillis) in #40776
- Move security model under technical documentation by Ben Hillis (@benhillis) in #41605
- Fix typos by Anton Kesy (@antonkesy) in #41589
- Don't stop parsing linux config files on invalid lines by Blue (@OneBlue) in #41606
- wslc: add --all-tags to pull for docker parity by ggarzia-MSFT in #41494
- Added WSL container to OOBE by Craig Loewen (@craigloewen-msft) in #41402
- Pre merge Localization strings prior to GA by ggarzia-MSFT in #41585
- wslc: keep image list json CreatedSince locale-invariant by ggarzia-MSFT in #41609
- Warn on an escaped CR in wsl.conf instead of dropping it silently by Leo Camus (@Dev-next-gen) in #41591
- Set a restricted ephemeral port range for test case ConsommeTests::PortZeroBindIsTracked by Blue (@OneBlue) in #41616
- CLI: Global option scopes for nested commands (related to compose support) by David Bennett (@dkbennett) in #41546
- Change default relay buffer size to 64KiB by Feng Wang (@chemwolf6922) in #41603
- Fix redirect stdout and stderror to the same file overlapping by Feng Wang (@chemwolf6922) in #41611
- Move installer log collection after repro by Feng Wang (@chemwolf6922) in #41620
- wslc: add --digests to image list for docker parity by ggarzia-MSFT in #41457
- Localization change from build: 157843092 by Blue (@OneBlue) in #41630
- Explicitely return SOCKET from WSLCPluginAPI_ProcessGetFd() by Blue (@OneBlue) in #41626
- In mirrored mode, handle route update as add instead of replace by FetoiuCatalin in #41391
- Add wslc events command by beena352 in #41608
- Don't fail the UnitTests::Warnings test case if GlobalSecureAccess VPN is running by Blue (@OneBlue) in #41638
- Wait for wslservice to be started when running tests by Blue (@OneBlue) in #41639
- Create new namespaces for distro cgroups by Feng Wang (@chemwolf6922) in #41512
- Fix unnecessary delay in the port tracking loop by Feng Wang (@chemwolf6922) in #41472
- wslc: add --follow-link to cp by ggarzia-MSFT in #41501
- Disable unstable bind cap test and re-enable Loopback test that was incorrectly disabled by FetoiuCatalin in #41648
- Move objects shared by wslc.exe and the tests to src/windows/common by ggarzia-MSFT in #41619
- Fix various protocol parsing issues by Blue (@OneBlue) in #41637
- Localization change from build: 157980831 by Blue (@OneBlue) in #41647
- Add WSLC network lifecycle events by beena352 in #41576
- Fix potential out of bound access when pretty-printing string field in init messages by Blue (@OneBlue) in #41664
New Contributors
- Anton Kesy (@antonkesy) made their first contribution in #41589
- Leo Camus (@Dev-next-gen) made their first contribution in #41591
Full Changelog: 2.9.12...2.9.13
2.9.12
What's Changed
- wslc: add --size to inspect for docker parity by ggarzia-MSFT in #41489
- Add wslc container restart command by beena352 in #41435
- init: fix dhcpcd option name in bridged-mode config by DesertRatUa in #41538
- Host plugin Plan9 shares as the session user by Ben Hillis (@benhillis) in #41548
- Fix virtiofs bind mounts exposing files as root-owned (#40719) by Stephen Halter (@halter73) in #40733
- wslc: match docker prune semantics (confirmation prompt, -f aliases --force) by ggarzia-MSFT in #41455
- wslc: add --all to image list for docker parity by ggarzia-MSFT in #41456
- wslc: add --details to container logs for docker parity by ggarzia-MSFT in #41467
- Don't fail the installation if DeprovisionMsix() fails by Blue (@OneBlue) in #41453
- wslc: add --size to container list for docker parity by ggarzia-MSFT in #41477
- wslc: add --all-tags to push for docker parity by ggarzia-MSFT in #41500
- Fix build issue for wslsettings, and add more logging to the pipelines by Flor Chacón (@florelis) in #40388
- Validate variable-length message strings by Ben Hillis (@benhillis) in #41567
- Fix WSLC fallback gateway collision by Ben Hillis (@benhillis) in #41547
- Reduce expected distro termination log noise by Ben Hillis (@benhillis) in #41541
- CLI: Add global options to root help, adjust options usage by David Bennett (@dkbennett) in #41534
- wslc: add docker --quiet to image load, image push and container cp by ggarzia-MSFT in #41466
- Tear down the stale plugin Plan9 server before recreating it by Ben Hillis (@benhillis) in #41565
- Use a locally imported version of docker/dockerfile instead of downloading it from the default registry by Blue (@OneBlue) in #41575
- Use canonical path in VolumeMount_Parse_ReturnExpectedResult by Blue (@OneBlue) in #41577
- Remove two noisy warnings from the distro validation scripts by Blue (@OneBlue) in #41579
New Contributors
- DesertRatUa made their first contribution in #41538
- Stephen Halter (@halter73) made their first contribution in #40733
Full Changelog: 2.9.11...2.9.12
2.7.14
What's Changed
- [release/2.7] Make sure that message structures are correctly zero-initialized by Ben Hillis (@benhillis) in #41524
- [release/2.7] Backport additional fixes by Ben Hillis (@benhillis) in #41540
- [release/2.7] Host plugin Plan9 shares as the session user by Ben Hillis (@benhillis) in #41557
- [release/2.7] Validate guest capability strings by Ben Hillis (@benhillis) in #41569
Full Changelog: 2.7.13...2.7.14
2.9.11
What's Changed
- Add container restart runtime support by beena352 in #41454
- Fix p9 drvfs read only mount regression by Feng Wang (@chemwolf6922) in #41487
- Fix WSLC Plan9 mount and image-build failures by Feng Wang (@chemwolf6922) in #41535
Full Changelog: 2.9.10...2.9.11
2.9.10
What's Changed
- wslc: consolidate size formatting on FormatHumanReadableSize by ggarzia-MSFT in #41429
- CLI: Add virtiofs mapshared regression test by David Bennett (@dkbennett) in #41427
- Fix tracked routes being collapsed by incomplete comparison by Feng Wang (@chemwolf6922) in #41393
- Add github issue suggestion in user visible error by Feng Wang (@chemwolf6922) in #41432
- Match Docker output for prune operations and container inspection by ggarzia-MSFT in #41430
- CLI: Mount PR followup & fix two docker parser bugs by David Bennett (@dkbennett) in #41436
- Invalidate the TestImageRegistry cache after running prune --all by Blue (@OneBlue) in #41442
- Solve various issues found by verifier by Blue (@OneBlue) in #41445
- CLI: Align alias listing with docker, Apple and other CLIs by David Bennett (@dkbennett) in #41439
- Align container list format with Docker specifications by ggarzia-MSFT in #41375
- wslc: alias -f to --format on inspect commands for docker parity by ggarzia-MSFT in #41463
- CLI: Add explicit per-command argument overrides by David Bennett (@dkbennett) in #41478
- Fix WSLC parser unit test argument overrides by Ben Hillis (@benhillis) in #41496
- Fix systemd-tmpfiles failure on systemd v261+ with systemd boot disabled by Feng Wang (@chemwolf6922) in #41491
- Fix unvalidated TerminalProfileSize during distribution import by Ben Hillis (@benhillis) in #41495
- Bump WSL DeviceHost to 1.2.62 by Daman Mulye (@damanm24) with @Copilot in #41499
- Enable unity build repo-wide via WSL_UNITY_BATCH_SIZE by ggarzia-MSFT in #41441
- Add wslc system info command by beena352 in #41408
- Harden Windows macros against dangling-else ambiguity by Eamon (@Eamon2009) in #41513
- Fix dangling-else bugs in FAIL_FAST_IF and EMIT_USER_WARNING macros by Eamon (@Eamon2009) in #41504
- Wslc events by Kevin Vega (@kvega005) in #40971
- Resolve an issue preventing WSL from starting due to an MDE Plugin error
New Contributors
- tega-ajise made their first contribution in #41509
Full Changelog: 2.9.9...2.9.10
2.7.13
What's Changed
- Resolve an issue preventing WSL from starting due to an MDE Plugin error
Full Changelog: 2.7.12...2.7.13
2.9.9
What's Changed
- Fix batch of minor issues by Feng Wang (@chemwolf6922) in #41397
- Consolidate timestamp parsing and support docker-style options by ggarzia-MSFT in #41403
- Localization change from build: 155641729 by Blue (@OneBlue) in #41424
- Add hybrid CRT link for Windows binaries by JohnMcPMS in #40890
- Match docker's keyset for wslc volume list --format json by ggarzia-MSFT in #41413
- Container lifecycle transitions by Kevin Vega (@kvega005) in #41140
- Update Microsoft.WSL.DeviceHost to 1.2.61 by Blue (@OneBlue) in #41426
- Handle Linux failures from GNS callbacks by Shawn Yuan (@shuaiyuanxx) in #41396
- Skip publishing helper DCAT script as artifact by Flor Chacón (@florelis) in #41431
Full Changelog: 2.9.8...2.9.9
2.9.8
What's Changed
- Run the distro validation script daily by Blue (@OneBlue) in #40920
- Added WSLc API docs by Craig Loewen (@craigloewen-msft) in #40922
- Add a script to validate & fix mismatches CRLF in the repo by Blue (@OneBlue) in #40933
- Remove '.' from HCS suffix by Blue (@OneBlue) in #40946
- fix socket channel set exit events by Feng Wang (@chemwolf6922) in #40924
- Use strict detection of http line ending for docker response by yao-msft in #40932
- CLI: Fix hang with exec/run -i with self-exiting command and open stdin by David Bennett (@dkbennett) in #40921
- Don't append the build prefix when a line is being continued from a previous log entry by Blue (@OneBlue) in #40947
- Implement --stop-timeout in wslc create|run and support -1 (infinite) timeouts by Blue (@OneBlue) in #40919
- fix: use lowercased key when validating windowsterminal.profileTemplate by Syed Osama Ali Shah (@Osamaali313) in #40911
- Use throwing overloads in SetupTestDirectory by beena352 in #40964
- Publish the WSLC nuget package on github releases by Blue (@OneBlue) in #40962
- Support arbitrary network driver options in wslc network create by beena352 in #40859
- Fix various issues in the virtionet tests by Blue (@OneBlue) in #40963
- Don't use an overlay for the gpu libraries if the inbox folder isn't present by Blue (@OneBlue) in #40969
- Fix Lost sub directory structure when mapping to a VHD volume by Kevin Vega (@kvega005) in #40857
- Add support for callback when loading images and display loaded images in wslc image load by Blue (@OneBlue) in #40960
- Bump Kali to 2026.2 by g0tmi1k (@g0tmi1k) in #40982
- Fix https proxy not set when pac is used by Feng Wang (@chemwolf6922) in #40950
- Fix E_ACCESSDENIED during download if temp is hidden by Feng Wang (@chemwolf6922) in #40708
- Add configurable storage path for the default wslc session by Ben Hillis (@benhillis) in #40956
- Added samples to the API by Craig Loewen (@craigloewen-msft) in #40930
- Document what the session creation parameters do, and which of them ae visible to all users on the machine by Blue (@OneBlue) in #41020
- fix(l10n): add localization guidance comments for commonly mistranslated terms by Gordon Lam (@yeelam-gordon) in #14440
- Cap storage hw queue count to 4 by Feng Wang (@chemwolf6922) in #40975
- test(drvfs): add O_APPEND ftruncate coverage, skip on virtiofs by Ben Hillis (@benhillis) in #41032
- Update validate-line-endings.py to not depend on pip packages by Blue (@OneBlue) in #41022
- Fix potential use-after-free on the container deletion path by Blue (@OneBlue) in #41018
- Remove comment in packages.config causing powershell parsing error by Blue (@OneBlue) in #41036
- Collect WSLg logs and crash dumps in collect-wsl-logs.ps1 by Ben Hillis (@benhillis) in #40913
- Log an error when connect() fails in the NAT mode relay by Blue (@OneBlue) in #41033
- Mark routes via a link-local gateway as onlink to fix VPN /32 networking failures by Ben Hillis (@benhillis) in #41003
- Add wslc network connect and disconnect commands by beena352 in #41011
- Fix flaky E2E network list test assertion by beena352 in #41009
- Add support for container healthchecks by Blue (@OneBlue) in #41012
- Bump DeviceHost to 1.2.48-0 and enable virtiofs O_APPEND ftruncate test by Ben Hillis (@benhillis) in #41044
- Read /etc/locale.conf when configuring the distro locale by Yoshitaka Sato (@i4M1k0SU) in #40940
- Retry to delete WSL distribution shortcut for up to 10 seconds by Blue (@OneBlue) in #41046
- Make the release pipeline logic to push to the store optional (and disabled by default) by Blue (@OneBlue) in #41045
- Add wslc container cp command for tar archive upload by Pooja Trivedi (@ptrivedi) in #40835
- Pre-download socat to avoid test failing due to connectivity issues by Blue (@OneBlue) in #41035
- Enable rollback on install failures during update by Gordon Lam (@yeelam-gordon) in #40524
- CLI: Help improvements - Table output with color and routing support by David Bennett (@dkbennett) in #40848
- Fix: handle partial write in stdio forwarding by Feng Wang (@chemwolf6922) in #41065
- Protect critical WSL processes under heavy load with cgroup & isolate distro cgroups by Feng Wang (@chemwolf6922) in #40519
- Localization change from build: 152044029 by Blue (@OneBlue) in #41066
- Add --format option to wslc version command by ggarzia-MSFT in #41078
- Add missing error code mappings found in user visible errors by Feng Wang (@chemwolf6922) in #41074
- Refine CODEOWNERS for WSLC by Ben Hillis (@benhillis) in #41079
- Start the plan9 server on WSL2 even when automount and mountFsTab are… by Shuo Li (@Lsseeker) in #41057
- Remove hard-coded password from C# API docs by Ben Hillis (@benhillis) in #41098
- Simplify e2e build-test image cleanup with per-test RAII ownership by ggarzia-MSFT in #41094
- Use bespoke interfaces to communicate with wsldevicehost by Brian Perkins (@Brian-Perkins) in #41099
- CLI: Update all non-help output to use Reporter by David Bennett (@dkbennett) in #41010
- CLI: Route wslc warnings through Reporter by David Bennett (@dkbennett) in #41111
- Fix cgmanifest.json hash format and add type:git entries for NOTICE generation by beena352 in #41025
- Update .NET runtime packages to 10.0.10 by Ben Hillis (@benhillis) in #41127
- Use single virtiofs device for all shares by Daman Mulye (@damanm24) in #41129
- Bump Linux SDK to 1.23.0 and guard char->wide formatters to Windows by Ben Hillis (@benhillis) in #41071
- Fix MoveDistribution VHD ownership restore to reuse the resolved file handle by Ben Hillis (@benhillis) in #41131
- Add --ip, --link, --link-local-ip, --driver-opt, --network-alias flag… by beena352 in #41070
- CLI: Add quiet support to pull and align with Docker by David Bennett (@dkbennett) in #41121
- WSLC: Add UDP and IPv6 support for exposed image ports by David Bennett (@dkbennett) in #41124
- CLI: Make container id required for stop command by David Bennett (@dkbennett) in #41108
- Fix various issues in the distro validation script by Blue (@OneBlue) in #41141
- Handle offlink default gateways in GNS by Ben Hillis (@benhillis) in #41130
- Fix spurious ERROR log for unsupported optional cgroup controllers by Ben Hillis (@benhillis) in #41122
- Retry to delete distribution VHD for up to 10 seconds by Blue (@OneBlue) in #41153
- Bump gitpython from 3.1.50 to 3.1.52 in /tools/devops by Dependabot (@dependabot)[bot] in #41159
- Track implicit autobind ports from listen() in Consomme networking by Ben Hillis (@benhillis) in #41125
- Fix a teardown race in HttpProxyStateTracker by Ben Hillis (@benhillis) in #41097
- Update GitHub Actions workflow for issue comments by piercosta in #41142
- virtiofs: Use aggregate share feature in WSLC by Daman Mulye (@damanm24) in #41151
- Fix recurring TSA onboarding failure in release builds by Ben Hillis (@benhillis) in #41167
- WSLC: Refactor ParseImage and ParseRepository (PR Feedback followup) by David Bennett (@dkbennett) in #41154
- Update Tumbleweed v20260724.0 by Scott Bradnick (@sbradnick) in #41168
- Use an azure key vault to store Github tokens for automated pull requests & release creation by Blue (@OneBlue) in #41158
- Improve WSL2 guest memory reclaim by Ben Hillis (@benhillis) in #41096
- CLI: Align WSLC argument parser with Docker flag and value semantics by David Bennett (@dkbennett) in #41160
- fixed title error visibility by Shawn Yuan (@shuaiyuanxx) in #41118
- Follow up to the cgroup PR #40519 by Feng Wang (@chemwolf6922) in #41073
- Use 4 request queues for aggregate virtiofs devices by Ben Hillis (@benhillis) in #41169
- Address memory reclaim follow-ups from #41096 by Ben Hillis (@benhillis) in #41171
- Add --ip-...
2.7.12
What's Changed
- Mount plugin folders on behalf of the user owning the wsl session (#41331)
- [release/2.7] Fix VHD ownership during distribution moves by Ben Hillis (@benhillis) in #41354
Full Changelog: 2.7.11...2.7.12