Skip to main content

Podman Desktop 1.20 Release

· 15 min read
Vladyslav Zhukovskyi
Senior Software Engineer

Podman Desktop 1.20 Release! 🎉

podman-desktop-hero-1.20

Podman Desktop 1.20 is now available. Click here to download it!

This release brings exciting new features and improvements:

  • Start all containers in bulk: A new bulk-run button allows you to start multiple selected containers at once, saving time when launching your container stack.
  • Switching users and clusters: Seamlessly switch your active Kubernetes cluster and user context from within Podman Desktop, making multi-cluster workflows much easier.
  • Search by description in extension list: Find extensions faster by searching not just by name but also through keywords in their descriptions.
  • Update providers from the Resources page: Easily update your container engines or Kubernetes providers right from the Resources page for a more streamlined upgrade process.
  • Local Extension Development Mode: The production binary now lets you load and live-test local extensions after enabling Development Mode, eliminating the need to run Podman Desktop in dev/watch mode.
  • Instantly stop live container logs: Now you can stop live log streaming from containers without closing the logs window. This gives you more control over resource usage and debugging workflows.
  • New Community page website: A new Community page on our website helps you connect with fellow users, find resources, and get involved with Podman Desktop’s development.

Release details 🔍

Bulk Start All Containers

If you have several containers to run, you no longer need to start each one individually. Podman Desktop now provides a “Run All” button on the Containers view to launch all selected containers with a single click. This makes it much more convenient to bring up multiple services or an entire application stack in one go. Already-running containers are intelligently skipped, so the bulk start action focuses on only starting the ones that are stopped.

Containers List pageContainers List page

Switch Users and Clusters

Podman Desktop’s Kubernetes integration now supports easy context switching between different clusters and user accounts. You can change your active Kubernetes cluster and user directly through the application UI without editing config files or using external CLI commands. This is especially useful for developers working with multiple environments – for example, switching from a development cluster to a production cluster (or using different user credentials) is now just a few clicks. It streamlines multi-cluster workflows by letting you hop between contexts seamlessly inside Podman Desktop.

Edit Kubernetes Context pageEdit Kubernetes Context page

Extension Search by Description

The extension marketplace search has been improved to help you discover tools more easily. Previously, searching for extensions only matched against extension names. In Podman Desktop 1.20, the search bar also looks at extension descriptions. This means you can enter a keyword related to an extension’s functionality or topic, and the relevant extensions will appear even if that keyword isn’t in the extension’s name. It’s now much easier to find extensions by what they do, not just what they’re called.

Extensions pageExtensions page

Provider Updates from Resources Page

Managing your container and Kubernetes providers just got easier. The Resources page in Podman Desktop (which lists your container engines and Kubernetes environments) now allows direct updates for those providers. If a new version of a provider – say Podman, Docker, or a Kubernetes VM – is available, you can trigger the upgrade right from Podman Desktop’s interface. No need to manually run update commands or leave the app; a quick click keeps your development environment up-to-date with the latest releases.

Resources pageResources page

Local Extension Development Mode

Extension authors can now toggle Development Mode in Preferences and add a local folder from the new Local Extensions tab. Podman Desktop will watch the folder, load the extension, and keep it tracked across restarts, exactly as it behaves in production. You can start, stop, or untrack the extension directly from the UI, shortening the feedback loop for building and debugging add-ons without extra CLI flags or a special dev build.

Resources pageResources page

Instantly stop live container logs

The container logs viewer can now be canceled mid-stream, allowing you to stop tailing logs when they are no longer needed. Previously, once a container’s logs were opened, the output would continue streaming until the logs window was closed. With this update, an ongoing log stream can be interrupted via a cancel action without closing the logs pane, giving you more control over log monitoring. This improvement helps avoid redundant log output and unnecessary resource usage by letting log streaming be halted on demand.

New Community Page

We’ve launched a new Community page on the Podman Desktop website to better connect our users and contributors. This page serves as a central hub for all community-related resources: you can find links to join our Discord channel, participate in GitHub discussions, follow us on social platforms, and more. It also highlights ways to contribute to the project, whether by reporting issues, writing code, or improving documentation. Whether you want to share feedback, meet other Podman Desktop enthusiasts, or get involved in development, the Community page is the place to start.


Community thank you

🎉 We’d like to say a big thank you to everyone who helped to make Podman Desktop even better. In this release we received pull requests from the following people:


Final notes

The complete list of issues fixed in this release is available here and here.

Get the latest release from the Downloads section of the website and boost your development journey with Podman Desktop. Additionally, visit the GitHub repository and see how you can help us make Podman Desktop better.

Detailed release changelog

feat 💡

  • feat: adds dropdown option to message box by @gastoner #13049
  • feat(table): adding key props by @axel7083 #12994
  • feat(table): adding accessibility labels to collapse button by @axel7083 #12979
  • feat: add badge for in-development extensions by @benoitf #12951
  • feat: new community page website by @cdrage #12748
  • feat: allow provider update from resources page by @SoniaSandler #12729
  • feat(extension-api): support cancellation token for pull image by @axel7083 #12706
  • feat(ui): created universal icon by @gastoner #12677
  • feat: add button to start all containers in bulk by @MarsKubeX #12646
  • feat: support fine-grained window events for EventStore by @feloy #12636
  • feat: make window.logsContainer cancellable by @feloy #12624
  • feat(extension): add search by description in extension list by @omertuc #12519
  • feat: added switching users and clusters by @gastoner #12445
  • feat: allow to use production binary to develop extensions by @benoitf #10731

fix 🔨

  • fix: pod name not working in k8s by @eqqe #13066
  • fix: do not search full path executable by @feloy #13060
  • fix: don't show table when there are no running container engines by @SoniaSandler #13051
  • fix: increase timeout waiting kubeconfig creation by @feloy #13050
  • fix(ContainerList): same named container group should have individual groups by @axel7083 #13002
  • fix: change podman machine stream close function context by @SoniaSandler #12982
  • fix: make container or vm connection terminal responsive on start and restart by @SoniaSandler #12981
  • fix: test errors after migration to vitest v 3.2.x by @dgolovin #12965
  • fix: add better checks to detect Podman Desktop extension in dev mode by @benoitf #12954
  • fix: update docker compatibility link in compose onboarding by @SoniaSandler #12923
  • fix(patch): patched kubernetes/client-node package by @gastoner #12919
  • fix(frontend): group containers by groupId by @axel7083 #12915
  • fix: change separators for fine grained events by @feloy #12914
  • fix: display VM connections in status bar by @feloy #12910
  • fix: clean up electron-updater cache when it is not needed anymore by @dgolovin #12870
  • fix: dispatch resources counts events when context is offline by @feloy #12834
  • fix(frontend): container list table display race condition by @axel7083 #12833
  • fix: avoid to send status field when patching a resource by @benoitf #12810
  • fix: refresh providers when vm connections are registered/unregistered by @feloy #12805
  • fix: duplicate title on homepage by @statickidz #12802
  • fix: send container connection status to extension API listeners by @jeffmaury #12794
  • fix: remove mistakenly placed archive, update .gitignore by @odockal #12793
  • fix: remove full access to d-bus and add missing --talk-name options by @dgolovin #12778
  • fix: flaky test in BuildImageFromContainerfile.spec.ts by @dgolovin #12777
  • fix: logs filename has undefined extension by @jiridostal #12774
  • fix: minimize on startup plist for macOS by @cblecker #12768
  • fix: error during extension install overlaps with other components by @jiridostal #12741
  • fix: wrong text in component props sending wrong telemetry data by @MarsKubeX #12737
  • fix: wrong margin in the update available modal by @MarsKubeX #12728
  • fix: terminal prompt duplication after saved output restored by @dgolovin #12725
  • fix: clear caches for all resources when one informer is offline by @feloy #12714
  • fix: fine-grained configuration-changed by @feloy #12700
  • fix: uncaught exceptions in ContainerListCompose.spec.ts by @dgolovin #12681
  • fix: uncaught exceptions in ContainerList.spec.ts by @dgolovin #12680
  • fix: update static image link by @SoniaSandler #12651
  • fix: addressed uninstall version error for kubectl installed via onboard by @bmahabirbu #12426
  • fix: make image build cancellable by @dgolovin #12261
  • fix(ci): perform update of ubuntu packages earlier (backport #13177) by @mergify[bot] in #13181
  • revert: 12870 (backport #13152) by @mergify[bot] in #13180

chore ✅

  • chore: use aggregating way to report activateExtension event by @benoitf #13071
  • chore: use the new aggregate method to track createProviders by @benoitf #13064
  • chore: add an aggregate method for telemetry by @benoitf #13063
  • chore: bring inversify bindings by @benoitf #13062
  • chore(tray): update existing tray icons by @vancura #13057
  • chore: add decorators/annotations for DI of inversify by @benoitf #13043
  • chore: update storybook to v9 by @benoitf #13037
  • chore: modified link to the community meeting recordings by @rujutashinde #12997
  • chore(deps-dev): switch to prettier 3.6.2 by @jeffmaury #12995
  • chore: move disposable group to API package by @benoitf #12992
  • chore: introduce inversify library by @benoitf #12978
  • chore: moved mockclear to beforeeach in containerList.spec.ts by @MarsKubeX #12963
  • chore: update podman to v5.5.2 by @benoitf #12960
  • chore: fix typo by @benoitf #12955
  • chore: allow to remove extension in dev mode without error by @benoitf #12953
  • chore: add color for devMode by @benoitf #12942
  • chore: set oneClick false and perMachine false in nsis by @cdrage #12941
  • chore: add devMode inside extension metadata by @benoitf #12940
  • chore(podman): remove promisify usage for node:fs function by @axel7083 #12906
  • chore: removed svelte check warning by @MarsKubeX #12892
  • chore(core): remove unnecessary dns configuration by @axel7083 #12891
  • chore: upgrade biomejs to v2 by @benoitf #12885
  • chore: notify development folder instance when extension id is loaded/removed from extension loader by @benoitf #12875
  • chore: stop sending kubernetesExecIntoContainer event by @MarsKubeX #12873
  • chore: expose a method from extension loader: ensureExtensionIsEnabled by @benoitf #12871
  • chore(website): modified footer color for links in dark mode by @rujutashinde #12860
  • chore: fix the .github issue templates to add project ids by @rujutashinde #12859
  • chore(issue-template): adding 1.19.2 to bug_report.yml by @axel7083 #12844
  • chore: addProviderMenuItem - add provider if it does not exist by @cdrage #12841
  • chore: remove error prone metadata for k8 creation from YAML by @bmahabirbu #12837
  • chore: correctly type guard e.target for micromark listener by @cdrage #12818
  • chore: modified github templates for issues to add projects by @rujutashinde #12796
  • chore(e2e): change expected img num in stress test depending on OS by @danivilla9 #12789
  • chore: update podman to v5.5.1 by @benoitf #12762
  • chore: track all changes from the extension by @benoitf #12743
  • chore: remove notarize option from electron builder config by @odockal #12719
  • chore(e2e): add scrollintoviewifneeded to ui-stress-test by @danivilla9 #12689
  • chore(e2e): refactor extension-installation-smoke test case by @danivilla9 #12665
  • chore: update social networks links by @vancura #12662
  • chore: bump svelte to 5.28.3 by @feloy #12650
  • chore(workflows): set permission for publish-website-pr-cloudflare.yaml by @axel7083 #12631
  • chore(workflows): set permission for e2e-main.yaml by @axel7083 #12630
  • chore(workflows): set permission for e2e-kubernetes-main.yaml by @axel7083 #12629
  • chore(workflows): set permission for downloads-count.yaml by @axel7083 #12625
  • chore: add generate sbom job in release workflow by @SoniaSandler #12603
  • chore: update Flatpak banner by @Eonfge #12594
  • chore: send watch events only after we're starting the watch by @benoitf #12590
  • chore: add border with more contrast in the table component by @SoniaSandler #12583
  • chore: make the file items in preferences clearable by @SoniaSandler #12473
  • chore(deps): bump electron-builder to v26 by @axel7083 #12351
  • chore: remove no-explicit-any from dialogs by @cdrage #11480

refactor 🛠️

  • refactor(mock): simplify how to call a method on a mock object by @benoitf #13072
  • refactor: move message box interfaces to api package by @benoitf #13007
  • refactor: extract status bar api to api package by @benoitf #13006
  • refactor: move menu api to the API package by @benoitf #13005
  • refactor: move interfaces of configuration to the api package by @benoitf #12999
  • refactor: move event to API side by @benoitf #12996
  • refactor(ui/table): replace filter#map#flat chain by reduce by @axel7083 #12967
  • refactor(podman): move podman-install.ts to proper folder by @axel7083 #12936
  • refactor(table): remove unnecessary binding by @axel7083 #12934
  • refactor(types): adding generics to Table by @axel7083 #12933
  • refactor(podman): extract PodmanInfo to dedicated file by @axel7083 #12911
  • refactor(core): move default protocol configuration to Main by @axel7083 #12905
  • refactor(podman): extract MacOSInstaller to a dedicated file by @axel7083 #12904
  • refactor(podman): extract WinInstaller to a dedicated file by @axel7083 #12899
  • refactor(frontend): make ContainerGroupPartInfoUI id property non-nullable by @axel7083 #12896
  • refactor(podman): extract getBundledPodmanVersion interface to a file by @axel7083 #12894
  • refactor(podman): extract Installer interface to dedicated file by @axel7083 #12887
  • refactor: move filesystem tree construct to backend by @feloy #12872
  • refactor(podman): extract BaseInstaller to a dedicated file by @axel7083 #12811
  • refactor(podman): extract WinBitCheck to dedicated file by @axel7083 #12712
  • refactor(podman): extract WinVersionCheck to a dedicated file by @axel7083 #12705
  • refactor(podman): extract WinMemoryCheck class to dedicated file by @axel7083 #12702
  • refactor(podman): extract WSL2Check class to dedicated file by @axel7083 #12699
  • refactor(ui): use new icon component in ui svelte lib by @gastoner #12678
  • refactor(extension/podman): extracting WSLVersionCheck by @axel7083 #12664

test 🚦

  • chore(test): reset podman machine on failure by @cbr7 #13034
  • chore(test): improve auth-utility playwright codebase by @odockal #13022
  • chore(test): clean hanging podman machine in e2e test by @cbr7 #13019
  • chore(test): create exception to check for update test by @cbr7 #12993
  • chore(test): navigation takes longer on cicd by @cbr7 #12991
  • chore(test): fix insufficient assert timeout by @cbr7 #12977
  • chore(test): add timeout param to method call by @cbr7 #12966
  • chore(test): throw error when needed for correct message by @cbr7 #12964
  • chore(test): get error thrown in case of failure by @cbr7 #12961
  • chore(test): wait for full page load before actions by @cbr7 #12938
  • chore(test): increase robustness in prune containers e2e test by @cbr7 #12922
  • chore(test): install ingress controller on Kind cluster only if needed by @amisskii #12839
  • chore(test): increase timeout for cicd by @cbr7 #12787
  • fix(tests): fix KubernetesTerminal flaky test by @dgolovin #12780
  • fix(tests): flaky Typeahead.spec.ts by @dgolovin #12779
  • chore(test): remove race promise by @cbr7 #12752
  • chore(test): share e2e tests authentication functionality by @odockal #12704
  • chore(test): use installed electron binary for external e2e tests by @odockal #12688
  • chore(test): add openshift docker e2e test by @cbr7 #12676
  • chore(test): Stabilize Kubernetes e2e tests on Windows CI by @amisskii #12554
  • test(e2e): push image into kubernetes cluster and reuse it with a pod by @danivilla9 #12427
  • chore(test): Add status bar provider tests by @xbabalov #12352

docs 📖

  • docs: updated procedural steps in the install in restricted environme… by @shipsing #12949
  • docs: updated the procedural steps based on latest changes by @shipsing #12907
  • docs: removed a blog that no longer works as expected by @shipsing #12855
  • docs(website): updated the tutorial section by @shipsing #12763
  • docs(website): added a procedure to manage a kube context by @shipsing #12750
  • docs(website): fixed a formatting issue by @shipsing #12672
  • docs(website): release note 1.19 by @axel7083 #12602
  • docs(website): added details to customize the UI on the discover PD page by @shipsing #12575
  • docs(website): add podman desktop core blog by @Firewall #12497
  • docs: add Podman AI Lab OpenVINO blog by @jeffmaury #12496
  • docs(windows): update uninstall instructions by @wngtk #12349

ci 🔁

  • ci: completely hide github button for argos by @cdrage #12596