From 209236f72d50367c6707955892b0153bb92ef8f0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 6 Dec 2023 07:50:04 +0000 Subject: [PATCH] deploy: afbcd9f274fdf1690848fa33b086301ea151942d --- 404.html | 4 +- ...amily-1b33ecd1c85565d5af69c52a03180a61.png | Bin 0 -> 375292 bytes assets/js/021eaa84.7644475a.js | 1 - assets/js/021eaa84.9d53fbae.js | 1 + ...40286.73ca0e0b.js => 0d040286.1b79d3d0.js} | 2 +- assets/js/183053be.5528338e.js | 1 + assets/js/1949cc8d.fa46cf8a.js | 1 + assets/js/1b2af15e.a4034df7.js | 1 + ...c5d2b.2b3d8a12.js => 382c5d2b.d5188a32.js} | 2 +- assets/js/38a042e4.78ce4697.js | 1 + assets/js/38a042e4.a9b21b67.js | 1 - assets/js/3b5edcc4.38cb72ef.js | 1 + assets/js/65a10ffa.138dffd6.js | 1 - assets/js/65a10ffa.9fdb1eef.js | 1 + ...86833.486eb6ae.js => 72486833.d09f3bbb.js} | 2 +- assets/js/814f3328.440aa4d0.js | 1 - assets/js/814f3328.98343356.js | 1 + assets/js/a00af9f0.13f510a8.js | 1 + assets/js/a00af9f0.77be6ea6.js | 1 - assets/js/a7023ddc.0b7e2f7e.js | 1 + assets/js/a7023ddc.299c19b3.js | 1 - ...1c099.dfc3aa5a.js => b0f1c099.98377134.js} | 2 +- ...675dd.b499b841.js => b2b675dd.209aeddd.js} | 2 +- assets/js/b2f554cd.2278936c.js | 1 - assets/js/b2f554cd.e47d9aef.js | 1 + assets/js/b39cdcf9.5b4d2d45.js | 1 - assets/js/b39cdcf9.ee25241a.js | 1 + assets/js/ba5b9f11.3afcedc2.js | 1 - assets/js/ba5b9f11.993dc57e.js | 1 + assets/js/f6360934.71a1098b.js | 1 + assets/js/f9fb4395.5cad7669.js | 1 + assets/js/main.10641e27.js | 2 - assets/js/main.8c5dd587.js | 2 + ...CENSE.txt => main.8c5dd587.js.LICENSE.txt} | 0 assets/js/runtime~main.1c63f8c0.js | 1 + assets/js/runtime~main.ebf62b27.js | 1 - blog.html | 15 ++- blog/5-things-to-know-for-a-docker-user.html | 6 +- blog/archive.html | 6 +- blog/atom.xml | 113 ++++++++++++++++- blog/develop-using-devcontainer.html | 6 +- blog/feed.json | 18 +++ blog/podman-desktop-release-0.10.html | 6 +- blog/podman-desktop-release-0.11.html | 6 +- blog/podman-desktop-release-0.12.html | 6 +- blog/podman-desktop-release-0.13.html | 6 +- blog/podman-desktop-release-0.14.html | 6 +- blog/podman-desktop-release-0.15.html | 6 +- blog/podman-desktop-release-1.0.html | 6 +- blog/podman-desktop-release-1.1.html | 6 +- blog/podman-desktop-release-1.2.html | 6 +- blog/podman-desktop-release-1.3.html | 6 +- blog/podman-desktop-release-1.4.html | 6 +- blog/podman-desktop-release-1.5.html | 8 +- blog/rss.xml | 109 +++++++++++++++- ...ubernetes-cluster-with-podman-desktop.html | 6 +- ...podman-images-with-kubernetes-cluster.html | 117 ++++++++++++++++++ blog/tags.html | 6 +- blog/tags/codespaces.html | 6 +- blog/tags/compose.html | 6 +- blog/tags/devcontainer.html | 6 +- blog/tags/docker.html | 6 +- blog/tags/extensions.html | 6 +- blog/tags/images.html | 27 ++++ blog/tags/kind.html | 6 +- blog/tags/kubernetes.html | 13 +- blog/tags/migrating.html | 6 +- blog/tags/onboarding.html | 6 +- blog/tags/openshift.html | 6 +- blog/tags/podman-desktop.html | 17 ++- blog/tags/podman.html | 27 ++++ blog/tags/release.html | 6 +- blog/tags/settings.html | 6 +- blog/tags/story.html | 6 +- core-values.html | 4 +- docs/compose.html | 4 +- docs/compose/running-compose.html | 4 +- docs/compose/setting-up-compose.html | 4 +- docs/containers.html | 4 +- docs/containers/creating-a-pod.html | 4 +- docs/containers/images.html | 4 +- docs/containers/images/building-an-image.html | 4 +- docs/containers/images/pulling-an-image.html | 4 +- .../pushing-an-image-to-a-registry.html | 4 +- docs/containers/onboarding.html | 4 +- docs/containers/registries.html | 4 +- ...nticating-to-a-preconfigured-registry.html | 4 +- .../registries/insecure-registry.html | 4 +- docs/containers/starting-a-container.html | 4 +- docs/extensions.html | 4 +- docs/extensions/install.html | 4 +- docs/extensions/publish.html | 4 +- docs/extensions/write.html | 4 +- .../extensions/write/onboarding-workflow.html | 4 +- .../extensions/write/when-clause-context.html | 4 +- docs/installation.html | 4 +- docs/installation/linux-install.html | 4 +- ...an-desktop-from-a-compressed-tar-file.html | 4 +- ...-podman-desktop-from-a-flatpak-bundle.html | 4 +- docs/installation/macos-install.html | 4 +- docs/installation/windows-install.html | 4 +- ...nd-podman-in-a-restricted-environment.html | 4 +- ...p-silently-with-the-windows-installer.html | 4 +- ...alling-podman-desktop-with-chocolatey.html | 4 +- .../installing-podman-desktop-with-scoop.html | 4 +- ...installing-podman-desktop-with-winget.html | 4 +- docs/intro.html | 4 +- docs/kind.html | 4 +- ...lding-an-image-and-testing-it-in-kind.html | 4 +- ...onfiguring-podman-for-kind-on-windows.html | 4 +- docs/kind/creating-a-kind-cluster.html | 4 +- docs/kind/deleting-your-kind-cluster.html | 4 +- docs/kind/installing.html | 4 +- docs/kind/pushing-an-image-to-kind.html | 4 +- docs/kind/restarting-your-kind-cluster.html | 4 +- .../working-with-your-local-kind-cluster.html | 4 +- docs/kubernetes.html | 4 +- .../deploying-a-container-to-kubernetes.html | 4 +- .../deploying-a-pod-to-kubernetes.html | 4 +- docs/kubernetes/existing-kubernetes.html | 4 +- .../kind/pushing-an-image-to-kind.html | 4 +- ...t-kubernete-context-in-the-status-bar.html | 4 +- ...d-selecting-current-kubernete-context.html | 4 +- docs/lima.html | 4 +- docs/lima/creating-a-kubernetes-instance.html | 4 +- docs/lima/creating-a-lima-instance.html | 4 +- docs/lima/customizing.html | 4 +- docs/lima/installing.html | 4 +- docs/migrating-from-docker.html | 4 +- .../emulating-docker-cli-with-podman.html | 4 +- .../importing-saved-containers.html | 4 +- .../using-podman-mac-helper.html | 4 +- ...-the-docker_host-environment-variable.html | 4 +- ...verifying-your-tools-are-using-podman.html | 4 +- docs/minikube.html | 4 +- ...g-an-image-and-testing-it-in-minikube.html | 4 +- ...guring-podman-for-minikube-on-windows.html | 4 +- .../minikube/creating-a-minikube-cluster.html | 4 +- .../deleting-your-minikube-cluster.html | 4 +- docs/minikube/installing.html | 4 +- .../pushing-an-image-to-minikube.html | 4 +- .../restarting-your-minikube-cluster.html | 4 +- ...king-with-your-local-minikube-cluster.html | 4 +- docs/openshift.html | 4 +- docs/openshift/developer-sandbox.html | 4 +- docs/openshift/openshift-local.html | 4 +- docs/podman.html | 4 +- docs/podman/creating-a-podman-machine.html | 4 +- ...odman-with-openshift-local-on-windows.html | 4 +- docs/podman/installing.html | 4 +- ...ing-podman-machine-default-connection.html | 4 +- docs/proxy.html | 4 +- .../using-a-proxy-in-your-containers.html | 4 +- docs/proxy/using-a-proxy-on-linux.html | 4 +- .../using-a-proxy-requiring-a-custom-ca.html | 4 +- docs/proxy/using-a-proxy.html | 4 +- docs/proxy/using-a-vpn-on-windows.html | 4 +- docs/tags.html | 4 +- docs/tags/chocolatey.html | 4 +- docs/tags/compose.html | 4 +- docs/tags/containers.html | 4 +- docs/tags/docker.html | 4 +- docs/tags/extension.html | 4 +- docs/tags/flathub.html | 4 +- docs/tags/flatpak.html | 4 +- docs/tags/images.html | 4 +- docs/tags/installing.html | 4 +- docs/tags/kind.html | 4 +- docs/tags/kubernetes.html | 4 +- docs/tags/lima.html | 4 +- docs/tags/linux.html | 4 +- docs/tags/mac-0-s.html | 4 +- docs/tags/mac-os.html | 4 +- docs/tags/macos.html | 4 +- docs/tags/migrating-from-docker.html | 4 +- docs/tags/migrating-to-kubernetes.html | 4 +- docs/tags/minikube.html | 4 +- docs/tags/onboarding.html | 4 +- docs/tags/openshift-local.html | 4 +- docs/tags/openshift.html | 4 +- docs/tags/podman-desktop.html | 4 +- docs/tags/podman.html | 4 +- docs/tags/pods.html | 4 +- docs/tags/proxy.html | 4 +- docs/tags/publishing.html | 4 +- docs/tags/registries.html | 4 +- docs/tags/restricted-environment.html | 4 +- docs/tags/scoop.html | 4 +- docs/tags/vpn.html | 4 +- docs/tags/when-clause.html | 4 +- docs/tags/windows.html | 4 +- docs/tags/winget.html | 4 +- docs/tags/writing.html | 4 +- docs/troubleshooting.html | 4 +- .../troubleshooting-openshift-local.html | 4 +- .../troubleshooting-podman-on-linux.html | 4 +- .../troubleshooting-podman-on-macos.html | 4 +- .../troubleshooting-podman-on-windows.html | 4 +- .../troubleshooting-podman.html | 4 +- downloads.html | 4 +- downloads/linux.html | 4 +- downloads/macos.html | 4 +- downloads/windows.html | 4 +- extend.html | 4 +- features.html | 4 +- index.html | 4 +- search.html | 4 +- sitemap.xml | 2 +- 208 files changed, 819 insertions(+), 391 deletions(-) create mode 100644 assets/images/selkie-family-1b33ecd1c85565d5af69c52a03180a61.png delete mode 100644 assets/js/021eaa84.7644475a.js create mode 100644 assets/js/021eaa84.9d53fbae.js rename assets/js/{0d040286.73ca0e0b.js => 0d040286.1b79d3d0.js} (58%) create mode 100644 assets/js/183053be.5528338e.js create mode 100644 assets/js/1949cc8d.fa46cf8a.js create mode 100644 assets/js/1b2af15e.a4034df7.js rename assets/js/{382c5d2b.2b3d8a12.js => 382c5d2b.d5188a32.js} (81%) create mode 100644 assets/js/38a042e4.78ce4697.js delete mode 100644 assets/js/38a042e4.a9b21b67.js create mode 100644 assets/js/3b5edcc4.38cb72ef.js delete mode 100644 assets/js/65a10ffa.138dffd6.js create mode 100644 assets/js/65a10ffa.9fdb1eef.js rename assets/js/{72486833.486eb6ae.js => 72486833.d09f3bbb.js} (58%) delete mode 100644 assets/js/814f3328.440aa4d0.js create mode 100644 assets/js/814f3328.98343356.js create mode 100644 assets/js/a00af9f0.13f510a8.js delete mode 100644 assets/js/a00af9f0.77be6ea6.js create mode 100644 assets/js/a7023ddc.0b7e2f7e.js delete mode 100644 assets/js/a7023ddc.299c19b3.js rename assets/js/{b0f1c099.dfc3aa5a.js => b0f1c099.98377134.js} (83%) rename assets/js/{b2b675dd.b499b841.js => b2b675dd.209aeddd.js} (77%) delete mode 100644 assets/js/b2f554cd.2278936c.js create mode 100644 assets/js/b2f554cd.e47d9aef.js delete mode 100644 assets/js/b39cdcf9.5b4d2d45.js create mode 100644 assets/js/b39cdcf9.ee25241a.js delete mode 100644 assets/js/ba5b9f11.3afcedc2.js create mode 100644 assets/js/ba5b9f11.993dc57e.js create mode 100644 assets/js/f6360934.71a1098b.js create mode 100644 assets/js/f9fb4395.5cad7669.js delete mode 100644 assets/js/main.10641e27.js create mode 100644 assets/js/main.8c5dd587.js rename assets/js/{main.10641e27.js.LICENSE.txt => main.8c5dd587.js.LICENSE.txt} (100%) create mode 100644 assets/js/runtime~main.1c63f8c0.js delete mode 100644 assets/js/runtime~main.ebf62b27.js create mode 100644 blog/sharing-podman-images-with-kubernetes-cluster.html create mode 100644 blog/tags/images.html create mode 100644 blog/tags/podman.html diff --git a/404.html b/404.html index 00a61e69e35..cd420b3c777 100644 --- a/404.html +++ b/404.html @@ -13,8 +13,8 @@ - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

diff --git a/assets/images/selkie-family-1b33ecd1c85565d5af69c52a03180a61.png b/assets/images/selkie-family-1b33ecd1c85565d5af69c52a03180a61.png new file mode 100644 index 0000000000000000000000000000000000000000..8b44663e92a875fa7e447daefcdc29ff1baecdc0 GIT binary patch literal 375292 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�#Mv^D) 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 G%qXeL>qA>konJ%|9 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�^xXG?8wi_$w$N=hl~$UE;}Gkf%r@~`*WFf?GMCL!$7IXT*N2*q zYfEU`%T+g$TT8{}h3P_irXiL6aiq^`$h-`Ep`+FJd_XXcxHqnc`tOgNlbk7U*`eo!3V&L$RMugqM$h6aOWt}{rBPl=w!(H zN#IG5SASPGw~MQ*?JyF@e;0$~gZ7?FP0*#fa3EvjBL=c(Th73M6ri(!YT{tgOJDzE zMh289k<)4-wc#5pE2}e35UD0Iy3gNE$%c|_sjU6TVIXD8@piV;c>?L`ey8Ck(c3Px zT?0Z#8ak=9hHE#7oFXI>FE5_ZpK$ z?e=V&^^k=eJ_uCI%jDgW3XN&kt_ZS;XyA||iT&Gyv0Cgj&#KjejSdepN=lg>{fsO_ zZm_e)p*K$M9N95Q*A%%;1^*q5GG#<#0FD?c{NZ32!8gJRt|BZFsa|U0opy4y5j_^T zV@ZN436(}vJwG$=U0hFkKU|pxv8!t7XMPI~q+My=^sbPnODb%pX3kJiGZf&G;h+?M zgj=6o?8UizO+jPj%Q^tn_27f_t-yp~dS77af?2KS1O zEA+ikH$j6Cs~OP+%RWYJfrts`eve!(22ZCp{dz)va+ z97H~BbHS_&3cpaRLq&0K(yywjG=uF0d|V8Osc_Pf8jFyjRhUdb>4t;Qa>lP;VaIoQ z6OIaNU)@P1YK8f=OoiY8?REtM&mRq$3oh=V6A}-|TmpawJ(w!#@ozh-q8_%N8 zSGZa8I+%R%JS{lW+xnORf4TxjrY`CAK);&R=R|%JvW%Gt8ndGo!Vvyrq})T|@bv>F zRm;X=sr>}1a2rQQ+Rx`ZtDtLNAqIxS;^J!~21KMYE^d$SMg%rHnMK1JLdPD3PSqosW$FT3-Pc zyPx4*z(qg7*GGY+CBU)Dg)NFOmmwR|F)%wVEFdlZ1ZaUy)pl$3~5^A6v=&~IGV z?aNu;^>xg9;3wfn`{k^JAY;lP8Y}JVKnpsuAG9PkmhNU$BH;wLvoGu)0|`n(J5w+& zFu6=^frX+~?Tr}vRuR7e8cDwfw|UrM#F1vvylu^m9%S{!{OLLY`=Y6;HG#ZySx&NNXA8^~CE+gzvfjE3c|z1#eM8{hQJHza|C(tcTn%)mTa*JMRZ*rdu^zTRwGrceV?-wE1mONGNiER zlTnq5DV|&H-Rw2^$has8EYA(McLe^iMlm=4YmQyW(eciskp6Ox&TdG=a7?JHD{|`G zIMt}(M~uoa@cJj=n!U-EB)}%_OB~&I>$&tH^~m|?i7ZmJGy&ewVZc)H@6YEkoq>>6T~MFiNV=sm z+h*VoTx8jE=VxGJqhp^IYMXZS%AdoCt+EXig9quIL4xrf31X%G{4E(x7w{r`eYn&6 zZ?CI1g8|f*;?xuUpt*ox1`m)60 zdfxYeRj{6dfWf6s8}b#Nvr_slw{sCbq1><4hJC=D;QhQCZys-9YqNa;Gu*^v+fdLq zec!a|LF3sLa;9Z}qP8-g3i_ysY@4$GB5G|+9qWLg*%qNl>5ImgiNmgWOAbNDaWbIzMmnrhWTq&CsD~J>Wd8N_8;^hhHIk0^{ z*Dn>|eOI+#T0M6INFv1QerBe;dRx!k|9hL&z50*y`G*c1f*| z*P#PaY2$W)+2Jc|%XdAejyV>PYjK-o9gnK2>VJblY8Qy+SABiK&`>1Diz@El@F$SV zUZsjZetcnLqK7EC!2?iN%o^MD={&u$M|5V%#rT( zywi~MO5W72Vx!{ARaS>{BK4d5#c#cVV6q=ylCes5YZF$8xD9Q^UYGNP ze^$ycrf2D~Braz3PCp}!83^{Xq;k`S-fTQ^QRKDtQb_QzDZbm?K7JEr8>pI%O1?2g zsG$bLj1wA%*`fd2RJ9tXP{XV+pgv&Sd$-oNQ8g6V<%mB;_cB8kjfzdrEFvyd2phZe zj0uCIwH&uJowv`Fzu8G4-O|1Y9I=ZcJaDu(w-y{`FN%njNx+j5bTPhThqhnHLIdxm z1{BEp(@`@7VarZFx6=!J?QB|}S%73u)%V0eOUn+`+#mVSuySI5Zz3Ik^UY73rVIt` z-KkH1QgP+a9}t+2QKV*J9*E{(_7&^is)fk*)^6I@KBFLDl$=}J82a5e z@D;rw;MHCTi;q%_67EfMYVr_D_wA=oa9t03S^f{ZTC3hO3P9LSHgu034%h%&^@Nc! z3p!x|-7HGU(8~#Um|K&Ht=-lWk;oSaRFL2lL%>pR0~tq+Q-9xgo&B!zyt&UBA^2%{ zNYQekF+@Hy_s{0D&r{ci;C`c_xjP|F>HcT4xKSxiUkStuS#~nIUaonbtD!ZvtHG|- zFY5BVUF~;_V-EPB%BA(=#%R%smRQlEdP@T>;1xsL<;$j1(;9cW<2f$`RcXJ$J*&+Z z`R`oZGd^WPD0k64b;mkeJnoS~6S)J}m+DxlEuNUwkJjhd1l5Q*JwQesFeO?4(Y^6! zR=C%zyz0wGyDGEO)tZn&GH~yH=FfLRR8f=`C8|6hjOxJfl$4az2*A(JFE3B{_wS{H zE~+pIsF~|F2OHAIFNvakL%#L(QEzSIprWHwad80wfzi4p2x9p)H3=yjPw~sTUOkZ7 zT7M5kU-2jwxvTA zIH=qYF#R^CC5NyX?KlJ-SMy_0*%o2HhL3h-=|CY9_2MxIRArbZEKr+ zLM0@W6XWQy`Iw~agy5{;(M8S%66*}Ka5QA)w488{_Gl9N7_(>(dU-mjOHN6x^*F|_ zYPsc~5P5wvabpph86FwgDoHck3%T3a-;NjQJxsaD91D|JEVYRX)B ze4;L$v5WlbZeh4f>d|y3;7dWCH5aB?TGBc1AtWP5Dkfw7f&C&uJ~#JIF;J{1CRxrZ ztK~TB{MZ9b_vxweb#n82)LRk{TIu-xP`Q#%4u1s)a{OqB)bR7?-BYu9 zcSD-raFOv?F59cyaw~?nedzSL`WYxR0lFPn^ zDj@&Lw5B2V$s% zg{O~&ct3xRNKWR8gtKp286Fo>)SRcc9M9|zLnncwXJN6JEmHw}<$1vQ0ogAG4V$~J z+#Xd_TOQ4pAKdr?qjTA>U#VDFAcMp2T%l}*^sT7ft;!FPRG)MwG1%a;KsPV2=DiA! zpxFTff<@Rc(^8T2SJS~b(*8~7eCQr8x9bl5f8VUbFd-yDMujx!*dcmG{=9 zB5gMaP4_xzbQ~rFGPf`8$(bX*5~VV;5zbOd@@GT1P7dr>U0w^>ah6{BLtPzK2ctzJ zLD)m*_O>6)}=QVa^tq3UDlO(`migcYv)NfMJTR#gbUPE6j6${Bo$?qYz4onl1Cm@ zZAlnic>U;#%hhdrLkc5Mm8hvdV;2eIigbV{Ngg9+4tGMp0sRSY9#$WwZV-`>o%?SH zek77j^5j*UT}ZlRaM;<0a~pqkV=@9izA*~8d^4`_lk65sA{9aoKk(wGWH8Jo&^!Nz zNhJ~@fwVYnhqU~+$DRV*={Ad6_mc7& zjPO6u)Ccd{zLKHnr8VR*c>6D+aDjJgcl@=b00ZO|hkLNqIO zGwrG^R_`yK9+W1B6n7ZQNA~L)oLnzfNv3UX(pduXtdp|wH`vQ*&eGf9>_K{qT`)qN zpO!d;xIy$$_eAJV$5&R=uyRP16>!~}TbBMv=Ln9Ral3yCIcq0tYp>7T*tkIe&NI)a z0(+D{Y-!?!9wT z2ys8>q~M=+pDTVj0RZx#S*hIRQ14i6cBgGAtYRr)Jnj9^b>urP^N?Kbp(Vd*EqW0{EYkxDJ;RNptC1p7l$ zNfRLNdfVklX$>6ra-F|c>z-Tmwg1mbOw3vQ-(1BM|6R=CHS-#Ixld zb+YIk1e|kEzlmIaulG2XF@-;C$wZ32{Wwpm5D-ze*QpCHuE!eF|J=g@CAT&o;M*2* z2b0+#HNppr?XV~T7%lq8+2n8?Lz0zr-MNE8qafrA9+h;g4y46-+A7jx!hG|K5AdkHvBu|*hCCt z%S&G4s^_c$fm_;Doh^wsxYX>0#5gS>pZ^Dlce{V6GagO>;AiM!Jy4w{;2~}fB~T?k zBOxPm+Rf`cFAqSixrl*TsI_D2d=yTOqHb0e%KHn*L>?P;vG0c_c;Btujk?pXI;KZGu&$BG(H0!p; zY&7sPzU{4-)kM}%K>Ty?3A+v9^RqR#PnTvYzQ*Ow8}RN00krSnY%m0TPt#-oE3>DK zrOQ^N1BIhQ2K46BM8(}{k+`L0WBdqD1m-G+I?X(t8jThT3X6Q_w$`kyEG8R2W(z=RqE7b z(&hRm0=|=_8{BrYx}~yTiIzLDsl%%$s1N+z&pb9DziYxq$FnnTGcf3Y4As@?v4S``c3^S+Ez&#v!|-H;hm#i~ZR0&8lL5U?C7jys zODBdY;x4?|m9Kkro&IOYALAz6nhJ|EwaEO!kI!@!)hnF>9utG*UT%6zXBW6`9)+&) zvgRhFoho;J`mtWzlcJ(xQrp?T3-{btajs8pU}|)|4TUBV0vB|RfrP8d_csFZ37m&x zo?-X*u_;{K^}n4Tbjs8_bNVD(c291M6CgkvaSBhef_R-C;dgMa@s|v5=YbC&X-Sod zN4SFm0zMGEv*yy>N>pVSaRcYq^6`Fx^Q(p(<0qjuTcCP9&@kxlD8Hl%qjl$=&%m}z z@8~EcY)|Jn5jJ~F)R&n6u(l0e{h*v zVYi>}L^E*hD;=@w*xQvwGHzR&uK4zsGZx^7buW|Zmx**bi=HKIR%avz)!sRr|p@f2&SY<^d#qbuzVGzeGyVY`Tk z4|NVRhN>Lc&ipy6zWrZj)mxM}(Be@(+0~C~8bDMy14rmVkhLW<64!X#i@yI($o?5H z)iPf1wef#kZ|d+R2l*)>d@iPu-d#A98u<{|Bux<2FZ@n2d5ZDzf12EWD@ z=>TBgJ3E68m@+QOK5yb_XUct0E<%rx*d~tzeI{<0h{$KpXGh#5;KptM2*3oy#1mtH zUAD=S+r}m%yUqDRcIhk0`@rJj;>0Y!RhISTIU*E(w9p5`djvMqk$;Vhs#}Ny~Z&!srEI;(y}rcY|I3PH7q`Wc?^e! zB9EH$=hw)quYX>f*V$e$8tcChOkoO;rtZsIfc5tMxT-C#aSh=cRdHT9xE}sBeSPIP zEHo605Ld!2sjXZ4hfz0h@K;TVh%N()3%AKCBat7vBj|hYjO_PHZ(!+N?r)POh!sSC zOm9E#fzXgWKU&R|l9Vy0C=vr&yK-w1v%RO%jgG@=+Ps%?R}%K?l7GHxaUhla_TO*J zCyB8D5z<|9@Kez40vk2I;^V5hW1aD5&s-;?_PWfGT3vi2{;YqWZ5o}vIB@25-mtta zdWj(j%27;k5`IY#(u@BLUUDB$92PH4JF}WopRL=gfB?7Uio%H&(7;hv{_*Aibv0#_ z%hcf-bs@DOL|?v5#7u39=~^~QzDx7&?;LqJAUgu|E{}HP*@K@%KZ!c*-R zd!gU&AjY(;i*Z$7J)6PCANE;bd}wLUAI*ZSU^SPQ9D&+YkhS7zYas0SLbhp!pdGba zvtntxwi8GskQ7x0xS`OH+qtHPzSR3!ip z&oig6R~*`T%*xv7&8KDLhE6>G&%gQ$YL4RI8JTayek9hWTtb6% z@Pz+{UIdx(wK_~vTJJK-J7*8#(3N(=PcgC!b#Ev3D-Koy);cX=x1M@7@_n`h43&*0 zHKQ9v2!D$B_8-HCGTQvL-*uhFd=$Y8$-{EftI+eG8HlCht|{&8#89hAg#fC2U`_b8^<`q$wJ773Ae(b_}(RjKcGJ z;+K!!GLG6t-mn$AK66HxmgY}uQsu4DTE9mu%~P1|tC)T(!Rc`%pNOp%LAts2xTr-d zpG}Ds1n*htlh@t8z^);?!p-t$sEbS}%Z}`&nd%m(+W|?z{8J%o00{Ec>G0)-tI&jO zVS?}902$S_d54>SkZEqx;0udNlK8eKqo~i0U1j|h`%FDS_QlIvEy7QaH^)RmzFbYK zuK&%MO?HM7fawbcnc$FBUcdm*Qw^Qi8YDf8A9c)g?QC~GK^vBp1(3FrESlQt^g3+x z^yxrQ?5~Qox{T;Ja_ChJ@|)Nj7XQbyv-=Z~4V*k|1=D2|gplV8%t@)bqM5pul@uCK3OJl!IpHt;9l96b?#+adcX_OQy2&lcn*KtoVhxz+ELrcBNj< z?#|Oe`sdRu=ov)uNN{#yv*SU~W3nPfCW=;=kJv1ToJ9dLtHGn1tQR)EJXe4Qs$L(T zZ}5|qkEQ_$W19tiOZ}<&YvhQYS2GGIN{}Bf?3+Ndnyn(yPxXN!gBZHmUkwQO(OMN_<*$zVr+2-Km)h*AT0wacw=+Og* z23;0jn^20V8?HQK>FM{STT?n@CCEu>e$q8Bz4TE-CR?q{+m!K$R`f2 z;9rlnvQjeO>DfhbHM3EMr6xILEIi^RvjJTtUP(IXcb>J|=ejYvOc!DpJbLFr`Nk6l zzIgjL6iMXsOJYc+D* z)@-e{A#vBwl?RaD;nP!X%dWN!Q9E2|ya|5lj8*k@W~0Je*hR9k(WT`zq4@xz!SBVh zUYAAe6I3(jrXiNM<86HR|MvoXRHQ5v&)^N<3YI&!$!B8(We16BNvW7P+ElM22aQkH z{dW;kQK~XjjnlE~A8VX@z=pM^7aT+kQXlA_9;x4Y$>KFGOJ4qRSOkVbW)m$jSB^di zA>bb;mz&?EDyaPazV~$0KE6T`wq=C<*_d+oN5|T(qBiZ-c&2?pDE?{r0S^E=lzbJu(aIv)O;d`g zdaI_f?;8v!mGdsCf6lQh%wg5}LjL7uiMBh1ThI%t&)RxG37pIW&zS#a9Yy(_mg9G| z7s)$Zvdq*}aIb`Ke!lbS(WbI)W`nAe z1IdrCe>Lag$ppHzJ_duE&bNf+B_gc6Ap z6t=&DdEQR{J_o!W3|8JHZs@vwVi&3}=q2D%nEmCm2mginzOKmkV>nE@TB-Q7zDiFl zvEqgKNg<0@PZ}E4{%@<}ojmSv(>5Lw;gSVJ<{t04ZPBMUr>z?Tn$$e`Nk1|#PP8%Q zS-oDQP=_^Qk(`|TM#OxFvAb0P9pL957S(k9h zQm|F=tM#t^Hjz^P#=h>R>-1i9`|NBoNlADZc#UR!HVGcQ`H!D-+O#(CpDrroNO`HJ zLP79a3*g~18<0um`{?OOuD5U;KubMXIM>qY^f0)?83fLL|Js96+48SC zh87CzCk^{a+`|(G&+EfhR^%pc*g`?k8J*|A+5(Qi?OK4}@R`Bg(&^$?|Jz^w zwn`xM;84eP5RJL*m`3vHw72>2%6$8H{$=VoVCmG8k%@_VK?=B|9h%lAo-qZd%t&Vd zs-9!>3xBTvmW!^QADz^Do~Y=O1whNuQ&L$xt#%kUEj=6^pFVBPcb!jKb(tUk^2c~q zSDa4Zw;j>7uHeN+96M!Gid__?AHM@>?#9_?S=Z8!|#9OvIcAv&d9nz zrzQ|I|EJn`i+I;4McE7sFOR$#fI=!b_`Owk%JSgC;S&Mwkr*6Vp+``7R?6mqiyC!s zfg0jUF!({!@!q{CmX-p08cuBVS4eJlYprV3>XD4MXslQ zR56HXPg!#bo_B|Q50xbq`E~S_9+H|{w{Bhi$`nQUU|8#j2^CVT7)~kw`TVccE-)$_G=s5DsWFZc%0Ey@kwqV{%anhX3UbX zSF}naOCAehFfgPujrg0s+UkxKaPeEnpt0X!1q!nxNLY(kSvWZuIzN^(_Gac0yhAtJ zH*#4fKk>Wiy{hO+=hEwhR_SYY@JOf>*B0u}vlIcQ%Du}waQjFy!}_tCK#t;iz#VBS zYfI2L&;kEN`Ugn`mw_cEm4#5qw|){j#b#MSk?XbrqlDx>eUt=#-Xl z(+r8C9!c2aDKpB3LTdq`2CV5zP=qM=cG8nf)KtMtvu+;o+(TVQLvGhvTeq2kK~P0i ztDL4XPu6(*#X!Z70^%r{5PpXtTU*zC9cAQDLKE-gd%{1YHt|XS(vEI~ny4r~v)Ge) zm59jJ8wywO+nZAy66EL)c&Mu;!4u~5F4Q5l1OLDOeGsf4uRfj08+#Aq zynFYqG)YtmXsAt%!D*s%!fQL7Qw5k~gx|I-sMRm_$H9|{-VSW5-BuHT4`yYM{o4QSC@^zz3M^Ce-}%-3u< zBkH9z({6v#oiOxA zlgkkEHP+X|*2-gH-x#lz>O~957LQ8LgkMtS_k`FvLv!H!@BhlYhif^>*uY&c#N-i5 z>`p8@ovS>yGI6kzuqIV1P^u2G>040fwcKz>ywM!LEq z3OsAw7HI|(0e5%VLW0>q@O;neo@2@{)pA0<+Wppj{EFDF_Ddv^F2ito&Tn5uMN4N2 zXO5S97oS}R7tmTWy~hYkWBxg%_!}8sdw7|cKPF4?Dup%NF*+>j%BC*;d?qjBrdT65D&n8BuKU}gEaDFVV{b`N>WR@edo~XqjUVjm^p^bm zIgwqPKAc!lvGiJ8EhtJ{qp-F=(e5$phwV`xp*k&|Q-x!GbvOo&UOK0jW8U2gL8T$0 zajfEkf+e5Nmg+9@#SU{m;CLyd$KXQ_2H?uS9oP7Cy|+;Rr>vI`LEPLIJ2*~{o3k7)Thu@-c=yp9l$%JwAr@$If8v{Oig}(LlYqMn_^rQQ<3rB5r%2(a z&o7O+$7w51EYfDfpk^6su~k3){rj*UdZ`61Ha5P*mz;h3w%Z%H%Q)Z0LMWRQt&+ud zRY-9TJ>C+-mghsqD4TF}XYMT()45#y9QU7zl}0>t&+IjITd@+;LjyK+#S1UE4EK2i z&Gy$!y|GQ_^X>TKfXtKG)m3@5q&v43CIH!BJ#9J=pVxggDa2IXvW%yK`*2W%`LG$z zE%>;&o$WT^pBK-WoG|*LAS>HreXVabXX|!(@$32N?(B@RvH7)QmXRBna0R{DL;I%z1OIoMqR(Z|?ND-2GiCPOb>^6a%Z#CpPmFSpIuV634hrb( zYqh1Eg641pq$1QA64X7&R5}J5Tb{fY{-0wB3_=%|nDw=r7sO0^AfiNf~35noaf&e6WKj zlK^J*c8A8Kn*Jk|O#-M8L7;yl;sEREX&&aY*TBZR|MXQ!?g`2JYMjS>8`udXb1s<7 zf~(}Y2ETQ7_s7;HLi_XgFE%rWj^P&;v}RHf5s{bsL6KV5T{%^?T?Zn-+}s~k-MoFf zV$NBN_co5iu^mf9W!M$UYCdrzOkz6ItX0W9Y+bCDnfUcu~r@wepG!W&|lCqLPd+}HCLIj#ItZn z!*Z#k{TYyfvUdC^zTfHyJ8Z<1U1gzlx?*l}C>j=v*5Ma3J4!VA@k0ormAB+<{x|!7 z3byLhMK8MlXd0uD&eYV@`{>ZB`6Y}*P#4;yW?(R04ZisbZN0)ECLw{jw-*Eh9-2bc z%z(_C9G14u^6?3QjeXaLfV}f*G^ggsE`CTV@P62$G($yy*PqWh6x9`B+^GAZwK$2a zQs$5SRe)(ho+6-R$=Q2yz;=3H@lsaS^Dpj+nQtV8qr2Abvarj|{A<6Jk@anOia*Vg ziY(x@9^L<%vjzII=KV%l;{#qBkS)M$b58#Pn`h**KAnrXvuV=V#e5^+s0dvA z|NB@`d|`c~4eTkH8DLFyRM3X#~Kw9Cx74g^X_!TFTk2TH%e%GDC6a20F4 zo!ff6=}jrdAt~1~cQG4__vWdFKAfBr!sID(r#{jh|A4&%`?Xq0>;>Bfeecc0K)$eQ z-kb>xy(sgrSx8{M6&DxRu61W154bPTYj0`DJqlB$ z{L;Q49upZ2jIW4|@A^GkYC1Dk%_M<3s$kATxHbh>^L%%(VyR{~sMyoVMT{?FiQzw6 z*ip660*}I|+{t~*8G`fKL{Cg#&_%YKd6g@6&ngs4LqS;p7Dcd&Jz-m z?)!mNX+-6c8Ky3j~R*I5vVEk^HzL;@-JM4>= zX=y0uX^+auqaJJO+sULS-!I0&39?=m*vSWcIPFb9BxAm6IW;RicLR6racS{SRh>ge zOhW_Bm^Dku8RP|W;H{WcYDW3J_fXnJ0I0IgyMI)`3w~5#-2dI9L^0>O58n&y z;DtV(5!g0_4RcOfp8jH6-GboLNj;ZyPb;JTz@@Df@j}C?_0PHiw@x2kOB_+wELUw;PQQDcz_O;TFN0B2LTTd8-CHY z&ZKyMEV)PC*q8zgTiN&z7YGde+bWa3&)M$gRdA5rOWlu<^K8CS{XN79aA-XYhrM zo#4U&-po*`iXP}Ezs`;qr;1^DNu3Q2=DCjS4@oIp2`MB^2||UOo+FYQtW18(>sf^Q zYvzNjRFo|3yDnU%W!XYJ1*&y3~zQ$X5YWoA>=(hRc^!fpqbT^3P_76ETz1#Fve>=Fe%T#gY?sUG(px?Ah15s2Vh#vZ{Yp#OSYJO>m6x2}mpY!cW(u6wU$vA{ z)Wdob|4GjGB!YtVn1e2Yq444v?w_rdft5J8k$(M6_k8^+F~~IbhmUe@A+RqVcNxR) zLb80&(qs{h>ooc{5gUHp%};cEVv*`UdXq(%147T)+p%*%$K{8_o&R$de^+I1m&sPBAuQx#)`nITK} z1<*1TnpMetz%EH)blM&4!nd$$qRt|~y4XLb^@W0!Mh%opr-tlZrYkyH<9?`0E1%xY z7I=XM@*>%>w*tuDtAQ&{&Bsu`bS|5}a81tMI3GWbRq9w>{K2$a-P&zH;*~62h@=Nx zv2a|oJSs-VS>q?SD#?t=aS3@h1;!d>JUkzP_j+)nb2=xb4 zo*wh55srZp9yM)l&&qTNet>k!@m5G^Cv|`UJN$g54hs_;4>z}|E%%Kb$#UJdQu&M# zz@j%LdnnZ9M8c*e;bOSeifOt!O8%jJ`0ZR9mY#TTH z54hNX>9tLH-qNLYsoh7-AI1o9*$@~KFm69SCon99OvWjfV56L)QFODxNnk~fNA+9w zST>o}t^5`^A*)kD5)&=bEK;$XvUNXj=Xcj7%@kh#+@vE9?9s)wCkA{chR}WAnCOxh zmwP)J=!vE_!GD*$eB60c%_G2J*vjGX=nll>nK$w_%+AgG>f;l;93lR@SNDMjptI$Y zrE8ATxcw$(e%U{M0FXH*@7pD-hnc(=>MY3o)Kqs-{8Mhp*EE-BbRJ+8!XWyDGq&Yw z4>&?uYvKxDh*SzL$eQZ3^>zMy`}QIa6!UT8Fh4;}=rkqqQ6>s1TCcAuY_VAe`tlqr zsC{wbHhHyV zm3IjhIP)IosDeN?<5rx^rVIN8pJ38q?Z@Jhk}bvHzv3uhJ&pdo5M=Wv7ef9~i84g^ z94TKmVA{f!k;&eW!9M{XtNSG%4EHS%-tm@+AA%7w5wv7G!0@h8II)`sr(Mr054B!L z@>k}GI`?vo7uHaPy$SDuUY7>0BnH{)Bu$#(u$EDvVnD~Sp9x39`KI)l>o_+L7U6+j zM%>hxD6Pd?jz@lyIX`0SA%~xv+Gu-kNp3+48~OxgpXhsJj0+QfCw!BLLlZkFnFAZ0 zW1{@%6SRP%qoo}g7=7o)H}mt)9B6KMp?E29b%^juJ{S)te+;M2~w)2A5#%Ou$ z>Y!$k`*Vj3Hno3bzHSw>4`D(%@bE2X$wyI~j=Yk{5lP8M5EGqKGBwKT?^8n7QqvCn z@mYk#CLwqwNZ$2P2B^e;s+pax7z#>b_VMaZq zve-tpc$*=q(&yNO$&{c5(Y)$@gZbOI2f?xP!SeF*lKMEJaEQRjf1+xwt@*VRCaWmR zht5J87(*_S+ubcHJD}=d)}jUPeG{di@7~`6WZhqOZ#SI-zK$yo{q~Yh=MX1$A1Mr{=hLplW?&UfrDjuflrDFo_txPP*`24dGCtrWZyl?#N z1YO`k^ubEa*w@BtKmFpyB@5D(oF%QbucF>D)ayp?=L~^yEAt^A4sWAVsa|_?bNUx# zOb$kYHY!aO9hVVU*6C8WTB-bQKY`KCfy&v&7cI~^2q0_1ry96VGdN^b^GecJawO?Z zOL-*4wpt3rLOfe(ufy-{BHqtqlUCC3jl}oK0Td12&Zl?bRwrjHU z)PnME$J`KV_#|xgKC1I9*|2}5?JhF2Xt-ccySorXZ#>9{s^~!gGjEw&2`I&}2Np>Bcf`LI6 zWT>J)m8Wn-z&!s_-cgzFyhrs{4b!sh)+vlFXLM`MV&kCMra;>^RD> z;@D%&!+EKLcEDUk+wQoXECR|V8n_f0&>To$z}7dx>Z}AiVBcFVU1C&SVD4yb(I(60G){t0sv@#efq5h`~)|)V) zoA$QOC=q|vp$@0ri)F9f6Be$`llf90ty*1u?#BZ5h?hmVeRZVJrx#x-8kFo5oIkZ+ zC!rAy>6tZ)W9mG!$|`E#4!_?6zQ@S-u@tm|nQ$WDR*cc8py5?H9|t@Q4{mLToZgK7 zD$D0-H69{JQv~H~BQLMMqlt7N$%BSw7L zG&w3Tk?<${Vd?+Sbd6zszHdJp%UZQ;+sm%iGM8<;W!uKGmTlX%ZTq?RdyfD2RjZ?8 zFS_pQKF<%87n}Mm%uCg-=MViqo@u*u(?HK8LF8m)gbLy|JVwGjJ2|r8SlhpBW1t72 z`e{TiaE4G6)7-_*@?D*;NyeaAL{An;Cmp(MHr{3?~qhu>khAy$GHvf;h z_Wd}Y{2Mi=P7fOLTVjI>i@Sf+Cf_^FOwAr0-RkoDtRUc#G>=R>8R4!vbvD_l`zlFG z*6YNZJ}zgM>oUE9=H1eP?0ooVe8)6Uiu%k?1mQxBd?x?sbb;@-39}M+>wj8+XtY&F zO9tmNtS+K3CDtV}61+V$vhQoWK{mxAxv))AmwV0Km!UO0cTZY5l%Qthh2`{`|qB>%3@tg2h<>-$X= zvuNJBsHP!}-2o5m*BuKg8iBBk8oIZ;OYC=aQDBIqtfDV!$i++_4+8`nrU<00#kCF3 zEBUZX_(eWTr49Yv7eXxJqjYnPoNJj-5Ny9CStNKLnaJ1fbdx@BAS;`0G%&MVKz|lZ zd?R5A|FfqQ7xxozeo&ZuG&2|y)7 zm^i=qPrJ6H19o#pT262X5JDZ36M=my6#z)uCWQ%)%TCl$Uv3nfXG!hm?|m}_3Z|Y9 zb$eQ?+P5%mn0R2AAG#~m`fBxQ{V1ClFnz0GiBDa;Mrybk?=IAO1IT~!X+Bitl~%^s z`lv>3R^G1J56JJo=x$CvQJG{WJ$Stw`;=59!aV^6uQKWE=d5)@qM=xzt|C&C%b^s) zC&hMOS6hWq1zfMb%@)eKgf9o1LD{MT{!yuaQmAo`&9R5`Rii~9j~!k-`XkNbqB+=Z zcM#bYJ{UO_X9jn{IT)k19>ag)_50Ga|1tIyRHOXmO}Z@&EW#6w>H;O&RpuQ_c@ z8~eJFEj{rh6YdOq=h=H&J|Zf z1*o-H=N1(-7h8uB-~Z()$@AT_>Uv&t*?b-f043DXr|cYT*F%?t#_ugoyf;S%B4Sy% zJnMP5EHo|)wIo%LMYTSY9i?J;gx2K;t9&u{N&a%^A_FOaB5guY^Q_}2E^qA~}-9-hW?B3Y_T4Hf|kY&%)DSYOQ8*;-Ga z)9WqiLX1_?-q`HFQC8F{DAA0|J%*1Fa~gnlo0;Ta!ykv7I-1AD|CE%IJGa}+qeQJ{ zD(&5P-unHX;q}lwmcf=xxY&9!o<446xzZH%43Am;7B}j4x!%Z4eo(31nikM!n3um# zLFOU!1p?x?w?LzNxCR;DWgDLZIT?k5&V^3LpO$j$;PoJlLa6)iF>Ef}1+URR+;~6h zzUm5YJAO%G^h*`!#I^%54@5RjkQWEesLc0#-k}HleW6Mq=bvC#5Tp{@9jB{T9Ry0P z>CS$`XP2x|#&jCC!Z;R0z{UjvWxC>|TVk{n2&jbH)l} zmdpD+;>bL;0!yf5$K`tx^Un$}#;%EqSJ#Ja7uTm|w}3!A*OU2HAhj}?D|X-G;;+#z zz5C;-R8@yIr!#4~GyX}#RHs3>i}h?mB?0Ku598jOPihP)rID6>q6hIyIg+L1cf3O~ z)rHLKp^Ar&k#z3x4(}6`e%w`zq!!PEYnh{jktu1Ls^e3MxmY5!LU-6MAl9aEYSN2x z3C6EW6ia(-Dp%O;d|nl>!iYzn`+UB0e0;nzT(n<$)3@K%_^yw#M5(JaRQN_1Y*3Ma z$?BP%4=BfqVbqE_?d_lpV>@*~Hk8y3RPUuH66B*QbmiP)`m9@HkxNsN9VqtQ@OIj# zW-$7rw5#~2sJZ=SY>)Me69VzxT#eGB;(`&n$`%b9qmNQX@!6;5i{&dqn|2~Tf%$aX z1d`%l?k?7YmCL-ryDaJVueOE%6d)SCHqc?1G0n_!uuxi2TCLO>+@-+2RnMUDukYJm z-^vRBK_wi|2+>*?sWL%wMWSW%IWeOs5TFX^cHEh2qn0V-NjU2= z9M;t@)9p!j@PL#h zMwie?3}E>ypYPDXlRy&G6sLUtE7gmND`1`Y4y>oM(Anc$hsF;{b-QOMv zdBaYveL^nUC(G;vOb)v(;5t4pc(St^fVlGre4d3t3cucuF`3TQl|o0+67v-c+Jayk zP}j+3e$cM5pio*J;cg4{OR>?l+> znd7e{NRE9jD-}TafrC1Z=Tc+m#Qn+=rL-aui@p-ubNnS{#rw} ztE#yATMMTANVB~Hd3tfM1Ad$yPO2Rex_)Bl?sY?q963@|-NIlf;Mnti;TGdEQj7#^ zGGo|bl5cdanF9?4MWMIIU)<9Z?9=^$%Uh!*AzDC3MqNF1vw=K5bnsAM0B|P^075ZY zA)#K(zIE$Zx?m~wES;fgtA6~DYWEyBfXqF+Hz83w$=gdhd71JF-0vHu&?tP0yyI2&rjj30R@Tf8mKeK%x#!5+))DShC0jyrEqKHtz1mBMA7i1pR|-?}mtw@VP;{j%SOO z+MXF^W`bV$g5=7`Xvad%Xl?iezx<$1q)e2$nQXSoyM z%sr?A*Xj3-(RB}^vSXjW3Rx8sM#f_phVLenQPEejJEaAPR}tU%g(ai>6&9@273(Y%8R% zoL!kN8{KQ^2lgM3SP;#@6e&fr<-oJ)Dv$coJk~yKRw=^P~tV}&b9O26=sjVZ_ zkDSr7n;cX-?lQ4o@N4H^YbH17X>sME8N8CahX%4S89W5ogJO@VuxQjn)y_xs8&^Cb z{!vzWr_euVI-g~0WSOSkJ%i@6V`{70VX`8(2mk3;MV0@3lzs1yu7+@^aa@C6`>?C(STRV2qJk*h8 z0HH~sUU51Bl<@PtmM!bn4;SmwpC9wR&a3B0jx8_y->uF8rtRvuDEnqVS=WA&@9`IV zdizR(dPUpAN*O@kg|1#Uf#*+S`(-uo&zak7_wQHwRGtVVeTIsa9TfUZkXKuMm2Y!| zj$VI;D~vnw8LjWMI+)>#H``}ETX%|~1Flv;)jcwDLe85#{CVo!%H>}C5xx&q z0qRCaBz7v5O;7Udwl2p#pj2gJKi&8ykc@XDm62lAaS2XR)fO!WKDhWHszD;##Lwuu zrquCzg#iM1WEB)T_50z-Wz%GmD>t6&g(W>bdF2Ie5k`|gd&CL7L;80FXdTSVsG=u* zBFLn@_jEtqlOE3BC#TEVv3$g)c1oiG82Wu4+ zz4w{KSe*D=oJuJwuEK#n&6QY+OhwOsm}HTIqgQ2p(9aKVz3W}6aCndvQ*`@c{qNCiR$XKayJD0kvf06W%Y`Yb6X$1J zrLXq(5YVBlu(_>hp9`8ra7KDZ!#1L2oiMy6txx4Sox_RA%OrA_LpwFQwo-4g*-xX~ zJ@GV=-L^VUhjS-x=(x&Z!|e~fn+ouRyN4Kvl~Ei zDaOMZsBxBfy#V9>>$O24|eMTfZ6#Yzm8q;%VGYlVlMHc)zx9kUYWp zeRoxR7qtN9Si!3NJ|$dV8xB=Pt=WbH^@=*K zK-&YXPn{5~NFL-=TNXhY;cuqxB+kPx1v78qOD$4I^2ML1_?MZQ*LTOW7|16Tp}$;Z z*j>bAQ=}~0Ts}(lrL7JN-RXNqG&~PlxE(^DS8`N`kI+x`#}_Uw&TXXk4L1}zbn8Rr zH9Nk^qzVt3V!79wtmG+`rZC@1@qg&?Jqp}w`1k3Wx`RFy6-aa1?}ezgPn#N^)S1b; zpRFu48$inev2Ic}2owb-n>ly+1}>YqEi4ab*QE}e8L|X5tz_{T8DsJS?|s0l{@CT3 zm4PEU7`Tgkd>+io+QcEzbPt=D77tx?%eT_ylR>8n#Gwh?tO=-{i~tMxs_e^V>nZ66 zwX)QN^l87W%lJWiRrYp$^dZaPLAazPS~xKLUY_cnu6HtKqBOT1@aEhX_%vRhaZxEv zJdT`}O&Fk*$u;+dO}(4Q)h}iwQx`~ir3#aF&WWmI`FqCuT)Xt`KQca?h=aZGkx@5a zm8L6LIPy21FSn=HTP#8}i#t)UvnLg0dj~-ix)(1eT%Tl-M zsod?*VX%5f#b1?c)hcC13rFYcl9H{rylbLQDQRg_@~8smnCCh?jn!Q*yk(J5%Bm+_0vc9fvRL#j7ujCE77IT7a(N~_pbRx(fEGCO*{U#p{J*iM5GA6 z$3Cpe`;+p}BH^DIzi=QiDnO(Q_I_$(Eu0iYT0)`@Mu<;sK}kP;#qEA^+cqY1{R%SS zAdG?L+yN1oBF1QJ?n)VITdP;f1m;8eb)Gyf$`~CvTRWsmqz2Wv3TJx1@?Ho;*huf0 zI+FwNDEDcDw_v~t`mh3h-G0_Qbz<6avUV?pG`s!dTe5^@`dYC8TLH+Kee=KSWKZjK zyJ=CP`wvJU-!**Gs>ENMC>~Pf=vrI~c~j^%i?7vdVf8!?%T~5niTa-dtK;*-qtoqX z&6-2k>mCDn%}1a}uD-(&vb#s)pxv}0hJ#-G9*gi}D9%O&Y^qEbi@?*E9?od}0S6zg z8**0cYO1#J>NqZNOxG1Jo`FDCONbT3NCnTQQu46mb>r7P+@{XX$Bz+=06Z|l7gnkU zaFwE<8Ro{uYeEyLby3~Yg;r5uVUSC18X5rt&AJ4um-khl5{JGcXx@XnoH|7WgwZXj8_;q~9m8;eDtbgn+MMv09bF~y$K$)LrVuRiFbMb*fs|sxEb`$A^Ri+%CIW>X`E4tFv zhFSITn^U;83?>?dg99Zceb=@lF`6N^BNVCuT4+?r4Qd32J!FeLlOnp_e#ZmisTSQ{ zddB{a&9fcbwqw(kXkB$Tth6>Q)GO4+=Ks3@CJvbhNG25{Sb zy|`{)@{{}N5;f_2Br@mtM?~@@EB=VnjNagoudzqEny;$5U7YwtEn+Ct{sS+IvHjR1 zUAZ$`;A217JBgOOb?&tJMN5_vMOEKYYy||`uLdnodXDEDZwzQxB>vzZl+Sc1+w=yqVz1YIKJkXC zR!Bv}#BPrAqp!Dwkx^8nL$r%}2ezHUm#@#?)!?IFE#u=1_hQRlZuavHnjIa*SxdLD z^)mG=J4N`tY|%*+cez|^0%Tut`Kx$+PGB6}qkT>RfD?BmsqKR^l9iWb!CEot-L>^SIL@Z~_(%$>!6V$YE2bi)4o#N*!GI_abyQ zL07#i;ov|&o3hJEz^vY3VC#XcW2Z|UF7W0IHI^(E{aTXYA)2Q?&B=2Ag;-k}fOo>E z7`DS9I>Br)dxH>>?QPO9sSJyu>%~TuIo8L^Cf8IeHn!2Lm)0gmAH_5C0tH0{)iUVQ3 zN{PhzX5{Z)MI2Vz#G#`r^K7Tqb;Aq(u|hA76CnXa9ritKrmUeS$_eS z_lS8NvpaC*toy#&jqDQos=qv3FTZoxc+q(52Yki*!aqmLGHO(2~@MuSn}o zB?d1_zHXfI_zeS6zTPKTw2c%3H^(3yqbpDr#gEhMxj-!WX|yvNX( z&iau1eIsEbi=!EI(O0W-70P_!q?Q?X;6T`mwpxC>J7k(^8DuvV(8vt3iw~~3(~P!L z@RkInFA8Vrlnd07Z0Zh?%fGcy0}8q*t5X;?rR|b~4KV)$4qJ@MR~CbC-jUdfeUwo| zInxfmwHDi3=SG=I-|RtBMs|06lt$~AbZ~qZ5g`Rs?lX$f;`gCw^N6sDKVN|aX(=sw zEUAK0Voyf{Rff`s+!D&$ZP4;cQ4l0#_{Y+pREfNvpM3QM^5kegDBm{A&YfFTxq~@2 z)I|VoZaufO8SLbmJ=Ns92P6|HvrHmTClwQ8$|ljHU7Obr*M<5Ie(WUm+@1t~Qd8N* z(n-g&9tLmnqr%edcF}E7L{B8Hf$TlhI1w`}P3E{cv(HdtA0hXSKUSHV4y11K2?}*k3uTtLc`H z5bM~*?04*XjsC4zFB~sHTy1w!v}|nuH`?gR9U(N$&z13mNS@^eD)8`S52p6q;soj* z#0~iK-=aCXi_>QU_dM;ZNt^4QAsr?cfy7w}@C4JUeaEGrXId5!#7=7k2pLRR21;#@ z-K5lJ#0vIzcgx=Y(oQA@!v%JJLlc^(`9r6KguoEEKcOsCXpZvObjsS(a1>XTMr$VvP1(PS+jl1iL#Vzl|Q9rwpJQ` zDft>Y`E3z`f6vP*!^)6GV3dTLsRZ$rG7my!W-1gwqe=-Z+bihj0(ROi;1Z@Tm&AxKFjAhgQDA;cS$S&5cp>wtz+2uEx z!+pGJ5WLhxx}s^O?PI@+|A)_{q1D8+24q`^3JK-S$4>G0o4ilwS1>@-{k#FG{7#6Z2m4r=Oy-Z~9Tv{3psTqTaD2Ti=(-CI<(=lcyqTV^XXIlMpLT`pQq=?$4T z;a`g6vkw3qd@p=bz-H!csp2>I>*H%V#|e0H^3=Zl?Mysj%ts>yp|fJE>mD3e9;H1c zOSlcc_5gTeTUR{`;nw{jzg}-?1t^BkJ~L!>?6lx8=rUci00kUmhTL`eTW6L>#wcWg z3P(|R=GXE1c~`eL zsck~V-2Zlmn$hTPDF>szkl41yBQF4x(Xvl6&;A#g=T+UV|}A1 zN~_yWe00tf6Blyi<&LzuUcC4ludCEGy!KU!uHai3@BrlXOHpIh9^St0j0&1u75NU-wUzDHd^?f79cFF#8q3v{DwJ1 zS{hI4@uI!-z0k8@rkG}-Cdj9OACS_x&ErI}O(ypCc;S&hGmpVRG*A-_O%iexYGj@4 zLO)h-O_bTP?r2HZ@e6rhCXH~Z|2s%;xiL_o-)2M5=+$E-Sz(TQ%V0XGSSOo4bdsNq>LeKAJ*x@jU9T;P^KAB%|_gfK?cR#-)1y7{s6=7ash z#p-u0Lywid=Lacd4C`sxf!GSm^;Wp{5jpz+_`tTAT@G5}xNu|LNnp?D`GqjilTH~X zi#qcLBui~={RY>$$E`>@W}ycN@RL!W&i8?;rlN%tZ2N9eK_B0<8IExiuNRd~q5AcU z@3}F4OLJKD8sqpiK{`*{->GoGlN5><1F^20fzhnmnrwHn*j- zW)XGa7V_2#I$dprUy&$2-LI?w4Y}0no=6noxbbLqE9KDbr5-lS9y5-eLiLbQ_jBg3 zk-fX~*Ph?Act>fJK$kE*igYSot?Zw%X-5BmqlV1m1ZU7p=uG)^Yw$0gd)SFEh_Ou9 zcet#6nLf`PTAFo7d^%p|PMu;j<0$^!T~>{oaw}WiZTAOwdxwXwR;RX{YJY!$jwaC= zT<`SXU2Y15@L9PRYO`kvEV>Vj0QE}NjjN|NW)4e~OzD4B0zfgR%>&V^P zQ9SHGL43|EMwcoFV@L7WH;l1V;EL_QE6E!^l>?ZO8s`bM*Z#HlSzne*GF`34&Bf&bf#@_z{^it;w4JtZ|q)Bl0PetnP9+5nglgn zT}UKN?k5;s{?iD!=b4(y4NJN{6z-0(@5C{ec*3vbSy1fP&^K6!=1iR@71%F`fyE~%)wISGQY)YOh3x7a?Qqx zvJNXPan}Dr6(DZxmVk@ubmsowg5a&)(lOkxn=12-ow*?`_$Q;pId1}q8(4F{T+|^C zXVT%f&N*dRKhboXQOHy|pOCH)e9;1Mz1NS|dUfa`J!13q{ zjS4NYaWa?~U~ISPxW_aYj4G=?kHY7{W;TS8=e-swlX94 zIRq+;vJB{$&2Qxr6^GrtUKy>Voa8?dM?VKC7{+aCieYDPS)+sxHJobEPuNje zw!*+)tuajv3FZ7nz2$;LCaDku*1Tumx%%*myhG~)4m#>hZqO7DR*x7i)x?gDm>Sq@ zJrjIB?>IhP#w$$gUveI+sVa8?SyvcfZFHSKy>~aBXd~SkEMov_d+j1~$tSa&WUsh? zLN*IY7HxF!Wj9#eB7vXVN*Mew2#t)~KdtIK07ATkD;^$dz~m|Wv9LP2POI9*)Kgue zIvf&#bh6mPUXK=GeN_;^ldP~EOE*KTK_8EXg%K@P0{2p#2#3M?nK1JUojl{pPvk5$bZIo zU}6JY$VKy`PL}Hp72xYLw*)Q@*PCGq9L8TDs|{}A*rp{i?S_{97V*mg!n-FIwHj7FXOSH-YS9378yMdg`^ z9om1rt!)J84KTnSsU6rJ8amOb4h#fTKxO*Oi7#Wdr_p&ks3U&pAI(6Ho{5)|(l|jE z9I%OP9R@oG=daw`8JFV<7^CM0sZMUU-_(bC+XIo!~FwM~yqYCo30kS&14KMlI=gIV^P79mc<9i%h zuye9s^%{Wa#>LCJbuUgGJ95C6psK^r(D1MMJfU~vqa2>-BEP@T!?%@+&0pE?D=kiC zs+qgx{hXme0JL*^Fm7;vGJkh6KWfv8L6hWg+U9n)o({}8Y`PuK2Y6N71wx`l?1_g{ zIrC_E7(Zo;O)n@h;CAwNsqHPH(27R8W6!)Ys5!+thLum>r?*ju8Jwy=6EeT%A|~^H zaCuSag!0!I1<)ejx9B=hQCCED?-o^Ct+F4CrS9HprOJ?Ze4LcIXKo%0bo~Z*J3V&+ zOe*#jxvnl3Yr}v}ME&nC!LpDh7SA&f{T<${GP%ZZp`WqheTl;`909ZB?4c3{q;PId z$X-RGl7f;%6!!9p`t$>IEeb;zB0-`t*y+CIZ@gL5)77trz4leAuRlX_Cp~n3{Gb96 z7x#!Z0=6eAtchO>1<5RjCwRxRjTc0{@Zn)pR8$pq7kiG}!=ns+`mkE`&nuKyyZviF zkbecUToK%v94b`0pQW-CP8Ye{KhG91@QtKpf1q7?1NbAl5MN`A6n@zMqu)yAbf`o{ z`{h!=fskM|@C@{Y8sc7ogWMvAshXb&jfgV3SdaFYZxy9v&UWf3l?f23Haiew664a| zJ*U-vMWJ_@g?~UQ%B*-@xVkiAu-h84`6IF_34<1!4Br`Q72oXfA?;aXNWxOp#`LG> z5(hX9SHl#9@yUnh7(g%KMBVW$xO@4Fe(ka=ptv#DdTKSi@FMaezoGzn9S2_n{J24B z1bpsSKnb10dHv#xmBWb=5;Ff4$mjcI<6+&?$D^)KwaKG()eE4f$Wc;yT$m}Y>l5wI zjp6w8oCnNJPsIT_5A)`=F?PU`Q28F>!{8A+-r6C0!7CFj(ky>zrmcp)+%LymV`Vu? zz5AmwlQ=wFt{n=ZViNVY$ymfF6%CC6zzT`H4!<@V4o82r+P*bw*O>$ciHUf5K2b}$ z=K0Z)5!b73XdEtk($~jJWJTn3sAi#wy>Kzrw&eeOJ$0e7#A{y;6490}Y-4nlzB^m9 z7hp#JDp4v8fr}<)Vn@lJ2+<-R%&B56eYLWAg?gy8|AQh-3j#!n0F6=98{)55*nr1* zZqD2BWG)fN)~{Q68846?H@27CS5(sSTh`Al9}B84kC;(paeEE~D7z{qDVd*JG!gYc zYF*W16oMf&l^!tU{HJtT>R3PgNb8YkHviDQ3h?Fk{|2Mw)o;m7s;c7;WLQq@y3D0) zY5{&$A!6GAjn#yIXXOQ8O3dHG{zI@OAbbOysrXN8Yij(~;tR#$K+n@9S?CYj>SA^7 zlb8W4qjhKFv|pXWI2#S&(zssk4{DE5A8wd>!#2y>MIp-hxg4I)`9~x}Qs>xpyv5Pi z({D^#-*xy~B}`|teE1)T2|xd4QL$9r!I@x5f#HZPDJk{F)*YGe9XI*yxI7MJ&=&R|8kYTOcJ{bsJ>6 zzxL{OUyH$chtH|Al~Y&V@?*BbMq`MucrtYc;_fS_UlaQQ7y$e)4Pm3^?=qU+&m#y&a0>^*Uw+JPf1Q9YbLoW09pOT(1`?Wy4F=_M z#G^L=iXH`D+hOQx;On4%wW5|~Ue4c;o*sQEnF2v9?@8O6KQ1c?rBJA?&gc5u@bD?@ z_d-DklDnle42Qp8FaIU3@jpIJKoizDzX$ocPp(dIbC`G#(j-V7=(r$OD~os(^-hGl z=#IyZtrHP8O!gBK{rgPM1-$5}Zsx^Y#1Ivdk;BBt#9R^Qw%Z_Y2?rxXHdDw(Q@ow1 z=gyJ>s@_%t?XJk=s9x(b0{7;wGh!X8oETVso7VcQ5%-OJ9(J?cRt@ufI$rl zZ+D;{92{gZo7wZlFCr?}YL3hH);Mu#6)Mr6;G2Y~7Vnr27M)@*z#BwTLS_L{ivd9( z570?eqGD6K$~46*TAwsFSMu|Cvs1v~aKdOjjSb+8SCb~J8Ygy>+-|Yi%pGGqu(|o) zw!rP}?b}XT8|2A)j(n_-Y{Kab&cJg-IhUyeweU$1I58|X4SKR?pz>gs}A@=|kVkDJUcw4jg) z#()89qU7hs?g$PLUFEXwgav3f5B~+A0xy{mK12kl{3s?g=-W}`ERV2ZOCkJRD3o$% z8bFa?8FjsKN4@!c+&7-dRSkjiFV>?Qf!hu*zh|Y5dNti;l}6QWeBb$4REWKBHMY{&%08r z^&h4;okyDq0=IH@%m`sW-`ck0#XP{0m+36mp5b-reFD!i5FJCEP%X;QeSWq)7=H9T zx_zb#aQdtmjVr!E{)L|MVCCRQp5%X@J8T%OYU;7cs`(WY8{3_3)23sPUgBU)#?<^X z#$Ac!ei+=cQQFNnJ?zgP(tlE}EYBOs&c&)>!<|4#c(tb<_=F?|=LX}2O7-3vBLR#@7xg#zPD9f44L zA5Ee|t%SrJ^mBPSp)2uRCIA&*6>dxW$Gxi;OX#-xt(~1DjR8{0)5=cJz&tlNJw(w0 zr68px^NG8Yabw2_IYSGCYei@4qK|bp{R0C zl-g&BuF(&>g`h-6Y2e*<;C3Tj6lp!Y}9B;^|S(8KuLF+c+Io(@#- z`|IQF7>oQX0u>kSy=NR+%YvJ(-?tov5~dS`Aw&DGm0LK>#Y*M?%@oQi2En^%6WSaz zR(@W-*^zMP2S4$+%1+Fi@uyFu;e1Km&W3?%Xtyhh4k3GvH=kIN746Tq_`iuM4;Iio zNlUQ)#I=SceTSd#Y{+c&c*h4Yv0x;8gb_A08L(r)<&~IWL*Bb84%qOJyA>7l`#tcW zo6R!p97SQDi3mh0JLZVepKpI(yw2n_5wnZ?w2bxV7e24gFKvENFAFAfQYgHPu+>bg zd$9OyztX-;N{M9(R4l`Hn*8Mfb9gs4GP*wJ_`GgDCv>P3BOtcB+3NP^eK^Vo2(3=5 z1ZuWMzFVXbTp?O0JRgFt<6}*)Fq;|9xjO*-$_9W}`~5`K7pr)nmf~%YU>|s_Vbuw` z3wNHb4S27gJgdIMfLQ7C*y}8!Ag)x&kdw&RkW!Jy7GF`;nOnt&Aj38L*$QKaGKG?g z^t(l&fru#VIc~$si-cfQ{WTnK{mR|qhiyflX^=@85PCG97@Z1Os=Uqen;xQ`+a8wT zvfOv2={s(W<4&->e)SF@@}K?;jzAoGjD_LbHJR83P)dlce_%k_y;p_z{eCh!`kd^Z zh2-6(fN$fbTQZQ6Jiqb)*l`V}as&Yoi3Wxb{_89QzV5Zgmv3udjY`J2GNB9B(8Xqp4RESV#+Iu!u1WxLdJWTWKBCNS~<_kq=CsEhA zb9{Wf_T^-W5;f3mWtyEK* z+(|E|i?vj}-XO?5?0cit2FI-T#m>KKv}_Hn7u{GA7c;Hud~f}Y$KMSt!2+A-Z;6tU zlI*v-KwF$nRVp^DYyAaBz}M!0N}vtzS1SOd@6&c!7xnh;P{mU~S8p+dU7cyP0~DZB z1s3b=`sp;m$b>uB&(W`AmlevV&A+b7#qipJ6du8{!JPSB%yl&@6-#G4pejQgTxfj+ z0<>PrU#vo`LMb^o4`Hl*;MhJUu{L|G+))net9TLSG>uhVbWCy)XtA~GS4`JOxRLGR9~ZH(YfxQ$}Uvsr#uJbiuQttfkcnSy|%-sL@O`20Z%oUtI!8VZUe2#JV;BU;&F zQF+elX`g2&ZpGml|Mt|$6E?JEDuUpUR0B1#&6aeQDin%Ho0CY;I}{yEBM<7&W_k0L&^gcpz8Q~Ci6LJkq#)~Rp5Se`S6op zu#N8{;{F&tFJG@uY_QWV4ecU35L)>2IaJ6ust_le4ug_es`z%k&Jeju=pKc4;Tq7_ zFdTX50b|>&l_K@-F|d$mwK}8z=9(3oAR;Fw${9q508JDMRH^7M zX3?Ju&Yd-#E@lNpP)Z{=c|Ybd8noZKM%2Hx4r z*;$~Y&VTJrWG`n_$NBXju-15@dIdN`Nl0Dv6^CLuEZ4i-M5hz}+PbUZ5+uiI*cAf);D4lON@W4A}=k0d#F+IJGD_4o?*<;JSHlS-s&*3Ifs{NOjZ<*M+&ofic|^>HERRE3omoF4KFqZLTN7pLzsi{BBg@LL3fnbBiKYQRreX{ z%t6~{x?k2;r%s6#h7!wHI}$2zI&+gU$*HtNe)bDzikI=+=f07vc+m< zxq_!g+lG(-?pgcVV54@dTs3bFSnO+5+cgS=a!s=~3)u7-u~XPAFhfH_%e7k!Kvq86~VHmVpPkz~fX1{M|jpO3x@`qmmRMfutYk^{@Mgj2m z%TczNHs=)uzECJppi-vX3-b*wE0A(I?{d^ZSGF=ptUW6-DSR9WScXoD{TIPAYLdK0r3;@}i9JcOZ=ktbF z>RY`T3y7Ycm>5!3x+|EweX*I{Ql=?e?uF>B7SW7QD|UL31#KXl|PV1eI1NV5QviCF>YV!x`h zE&nTsAwJ)T*W?%KBk z0sATM>Y7}!9uSc|k%Cr5Rw)Q>{gV|p1O@YW$4hL9*6q+!6*joQ^ZIZepH6z%JbP>i zVEO!w1xPslOL-=d-TB)r5gPnBTeF*m!dPS07!-0DIkM^OKr&qctxj7CB3_%r_e-Ec zeZCAJ>&8;Lobzyi(+~JHiP+c@0Z=cCgue}U@~_*iaS#&zNR82G+YA{iMS>J$ym7=% zS-&(WB`sAs@eJ%gl;U1YiMoE%Yw0UHU{xyz_^)P|L^v{}A`|aqyHb+%-Kd-x;Z;hb z#K}-Y<5f-rilXpSxmH+tC3q^jX$Y5PyZ>nc9N%t6nX|l4hH)KS%ao{%$6FFcKQ2Gb z$Ims<(8x379hF!Cy>^1CQbq)DzV1ft3uUj_sqaMZzjocH3()M@1N$njj@z!4+~EP( zmUFA?dpDljUHj$nf{kta1I2$x8Gx0231FDHO}~$?H4LW${u$@`kR-kId{}DkQ*Mr^(Kqv(@{g_pyZRWL-hy!uDOq8`RmOSM(Q<2^sj499XwttE}?HA`d>G z2~1@kPsV`c2{%AMyi{+Ynz`~Qg*W_O# zxRHJR{m^aMr;Am)L8n!>r5r)x*B6&KL;G=b4i*OQ44(y=Z6VDLeB14f*6Slr*SkQh zqmGpUkj(kmE^5kJv57lvTw85A?Lqt5&-2w?d1rT5z1A3!iHV649j>RR$8WB;<)@<3 zNMtf!#JURq|Izf7K~;WV+lTJ%E(Ii|yYmNHEuQ)p09p)ujJb;Oq8jVBA|mX_8l6wA6H7iq`bAW z=Hly8lCakphdIu$k6lj70XFCuE%ACabH5PG4DjD@txDu4?_en@1q4v4h@QiDJT({e zd-&g9Z8t1BU|FH2Ky7Evy3x>D3pR<-5k>uZ8OcmC)(mU)Vy zqM~`<#{GPop}>3)yRIgDImG_TeNX@N@nx8J`89>~a%J}F$jc((#;u>NP>|0x&6fvs z-=Op|!1Edzmx8ZiujnDuU9yCa(`ioo!_!}pt2)V?PX!DN)%utONp^=OUp3#qSHrJa zc#$OAU48X0GItR$qc`lO8|@gDsjH%6qOUy3wxR)*{J;OKk1=eG&*i9UP5WGO7Xfng zh9_;J-9X6Ar)`usZhNf@uJ!sv=%tpFly4D~f5Lgsw*3czszCi`kc^AO+E|V~xme?@ z?R$WRki5d)OM`Z;fN~N3Q*`uoK{C;2Vm8yM zMm6Se)E8QS{K-^kS7FK9?Pmw`i!H_dsW$d?wHnbtTaOls3gsBi&T$0MCohf`kCTh< zRD$QU6a7jUdo{1VBKPedVl6y#5rRca9gUs ze{+AOnb2+ia}fm#tHd(l1bSkoc*pB;vH~ZrZ^sgfcv0mE#Eh)jLPgcD+c>jYmMvcU zAEQPnWqp!e6yA}>9YNl&k$t%xX@mZ^Qhvkl{<)&Ot>WMP<)PeYPQ_@ZdXYL0lk{wp zw6q2~TtuwNh@)cl;;+_*w0W5&2bF-n?`TJtsFO543o!*zMen}N9rf>Em%U;ApNu?un(A08%E@CgW#K7S7RP>$vxH(axL?03B!sB`w< z%HuPB2sP0c-Vyw4`Z;v2rIQ+{_+%L78v-c~f3klJoLSXYw|i%-kd)@%lcffY(d8&ES&ck`1jN8msB6J z!{ThpYHRW2G!;KZl}dV<56%au?pv=dEG#%Jj^;iPeH@@VUVvKm4kiHtX=b_@^QT2nvwZmz>a_vAkTnE8}2sW65b3Nqfx`Qo5!E4HM-@a&vmXY=^U5cx(WB! zJFG|Zhd7CNcpD^6z)of(EHZqY{!P-wu@IB+=aFL5D?8ocv!OcGDX!Lf>3{h{6D$BL zA>04_CD97{zlY6Pfa2l&v7_x^vB7o}oR!pAVX;giiWT?MKezuh7zBB9BzpR5uYMNI z{b~)Dj~w2_U`a+9wEcy~az_{;gTunh2XvGkmLrrM3PsVMxGet7p~a-TjcNR-z-sHwD9`Edp7e3Uuyk<^i-_=mYgs6>=yAv|WsBHmGz{BbN zsrPnDnofB;d?&|KtaHXyDN=<(hW2*mCrPgEF`;x|;g~L{t>Y;DW zr8;@4jKpAxtmcD2He1zm@>c}5Y1x63i%X~090gz}fbI@9X2f3(r|fv^j&^f(Zn|N4 z9p+Tcl+U)p*xpeIL?W9Fb3{8glar6kj~0t`)CAnCkdMw|#&7nLWlJ9{0b_C(oo(+K zvY!2UN94_7!>%c2hhoPC;?E17HmdcIwBhh~Y-rm2E7?Mxf6q4(S`RdBF!+S;I9;r3 zTBmW7r*c9wKTK2^i7gcj=4|pdP_eCVJ+T_v19%e{$yB(+A7cTI9UyiIxZPkgJcd<( zpe|}Uy3q5@0X)3PhyH3{kO0JyE(hNjmP4rr$4a?@<^k*pwg`63SnDce+^*tG6l89QksXHS?4Ddj6>f^(|1@mL6-sBL+ZTE=y|z%Sq8ruZ(UVO_D!!V^Mip|?<&{<{LQWE z_2m|$>X8|8Om?6<>lW|i;BXeD11^b=`pP_=GEhOXNue$hzAgd zLv(aB>C|jasO;O*49`!|ia&CZyc0|9Bh6Fqsb=!K@jfYc5Vu^vx!0Jp? zN4fM`(_O!w&ebZGKw`@9xg?UPx+g5<=oQcu)CD~HY;0^0185##VOn8q7_X49D7SWV zQ-N;tfV3?Mg75O0?oPQtWw)z7jHGGWV&`lK9g}=f*4diUCk3r=L1wm*i}t@FZQzcD zVlOmNF-qNhMJa9C5)X5%Xd(gR@if#;-dayjnWJ~2J^lHZNxO~GPV!c>U{nm0ShO#> zv6<#j-qBO@%!=hTMVX;>>~aNGL`O?ap;J?-6vb_#Ak&u8|ANCXVE;Af3y$kXfEAP1 z?RJ_spo@&zKqXF0j^B0I2`}>b<|F_*aN{!D?+=Q7Twf$BsefZf7?w+wZfe_2k-W_i zG3=C!7iv5@_{rf!45dj;|3jy0C5(e%!<+QQ3RyrvK=|p#4E%(9AK{+F{O8dX?*TbA zfBT2|_92V9eFRC;H($b3CE4>8iN2vAhfpiv;5@3~k89bv?N7jy<>8}ge*2F=G7^&i zI#}Fi*>Lxf4!1UAe(Jc%Nc11fpKO=U*=?@7qSslIlz=-KSyEDxA`ItqarCJ|ucMIl zt~tYv%p{+{@R*WJ_u zifoR5*n-JbAJSH8J?Sf>oNUQ95=2jchpNl;Kb@itb(4)$Sr!29oRX!#DWMjMZJRxdX7dNKX8(le$JvY1@KB6r?1| z3YfBg<02c3ou+UQ-`;WG+#r3u+;xU$L?w{D*X*Bo9iw>YF^wPE6*Tn)|6B1ljdoWI zr(`dat&4=Q#}sGdnhZMgqu}qc&ZZ0Qg(#g6r>7->uaF;;`^ImHI~z80o7iZuoAaI% zXRBQgZM>RY62F$qB-L)5DtmbFULD`#-CsST5D^je_V&_pa^m77B>@MFA6L>f8oIGU zo+leKBbkj}pkNLV}TkBYVq?`K`;TJBji%^^WY1XR|p(b0~XT|pa3Nc`zS)yyva96J+~kk7%A zHhdLh_Dj>vD^5qcyS^ebLh~6>eXo!D3uKI>0RLlYba|P=vF(u;7q?k=wCNf9lXO&UbocSA zP2FBB$_b*4R5=6sOTSxmZk~_EV02_k-Iz!zFKXaI^6aV#K#ow!);j(tFna_WEKZGm zL{NLv>Ae1Vv{RX;kUs>2dO6q|*_K=mFQ`cU4W*c}l)QYYeO4_s__@fPJe?y3A?#Yu zu}1AiF}b{z#_v!tAc(4})^AFGS*5WMGW|HzBg~IsMvNm)Sl=w}oLrnm&k>?0jf)`6 zFw*>!EffPL`t*6ae_f_^<8L&-psv?^2h;%JaDawxqAd3z__}WRk zD9N4X#BYg^k}`#8%{Fid7Ev+C`hwZ34KH#vn8I7;D7tl}$wdRQA|kOU$ByiHkyx8A zJkmkD$nt+zF&f4F&~KKFAhS*|8|GbyNL4lO8L~rg_kfnQeZu5~(^gf-*iWNnUFyzl z7Y@%A;or}DQcEU-yykC---2+>){6;6Wc2!~zCggsfQxV+_&MAF2br_u^?S8~JwuHk zBBM6Q{5w?g(Ue8ROGBmp7T2NbpFIBjLi>RVAvCcP%91WX*%8Au=%GLAj1$S;0jYX3pTq!j_L5mp3w0&GEN* znjzfzNcViB&$(Mle0g;IJ`=9lS-GR}-rUavY5&z?#F{>#{`VM-=>!EtfD<6RmG1Vt(CnX&pmT=*w}UqNWj7CBqn8zzEPN zWfp^4Vwa|+tpG|&N-y7E__{lUder8`bRV|vU4Li8-U-<8lHnOq#iZEIZtBQdls(?} z{af26in?)dx8*?VI;S=x4}sFWpMjSgsj14qgbg+p8btnM7sli8$4W(^IXvL;UT>ak zxNveG5Qlyn*4417bx07W+AW1=YO$}SRoI@LmUYXEuJdKP$f5=m%%R>I~y^!xAUB9 zjR+sL^S0TEs0MyrDRZ-HWLVZCy1?n_!5cVTj15+Pu+8EeX{Y3EmLHv!Fw$9fL8Es5Cu!HiYeh^V z4Zq-FuPj@~j+Zn{mWGL!a=fNu9nV;dXPJkTCmI!vrp%;%HaHZC_}E->$=fScC#;;0 z>+Hr_B83o&a2xfu7MQz0_haU}$+VkXUfWZFCyYYK!}#ykPnNYB|IPLF;HH0~y+C1} zZ-zbKdAbq@HX?;8xuU#hf4E_3sMs+MVwc4z5Fz-(G3Deic5jJQU$KX1u*uDwIPG-yATfWN>B*6Xjt^4tZjG7wG$j%P^_lw3_ z*tZF`E3sOV!4Stb4$9#V6*A|6`*j$IA|FP5@&55W#SdCkjQEIv3h!h-IGJgTmi5u& zlVZChv`fbU4xGAjH|aodpXvC-2z`p8(Du7hP;hZz8fSVNtYYQ}?UUR@aO9pI5K7`t zBI`@56$TW9Ti;$lhlqu3X!T`G(R>fIRq+v6d%~$Qe>(5}p=g|<6=`|BC-jXu;CY)77~X4;@^I_ghbN^XhQg?aqxZSI zVLXs|#ctHubND_Y?|s4t0z;LmDnmq6Nfe(pO0nk$ymp-$a)sBf^Q4foi;G^6S2JGe z@5}6?B>)2NxHA(xw@F@45z50D5Mp6rwTf87eyF@Bv~eGTa@!E3wqKJzIWC&q@F8>E z^JF6|CTt+X!v?P%@yFOGSRC4h*DWE!4}_q*A5&=6zz1APC8ao!^LX8Re4dmo1yqQ} zPx|)95tC!wl{{bjq5T(4MjQRx|KyufqgsAet~vjL!{6SODElI{w}I+N6)4RUC$&rY zINso@f*f|mQ)bCtYODQx4M;;FvH7CuEooR0$~hza=x1kFavih91*^92ll~oXROX6A zAMVDluU8B+{u(ZuxtzDd?9OZuw`-}inzel!LQC3V^#e{SajwDO{J!`j_k9Le3CX=W zR96b#SjcQ?k!r1XeKlXLT)`ech_(qv^o0D3pJnQLBfp&p3m;)?_+l`5UzK_m^bwKj z?_0^Hdno_=Xc(h#^b!a z?tQ!6#qW7SUNQ3q@~x=I1fV@Y4T)v9mSNrM_iAsdf-=^q)4Q6f>~@8ST@0AG!YAKoQZqI7>V0?l$NZ zWNe@1NSGi_Jw?#Cm2Zu{KZbIJbvq*nYZA9<1zWAb)R)YVfJ07hN>{}aDO(uc1++5} zJV@C%lnDtRj&aAn8-ye+>k#2;qe8#mT?Vonwa13ihefGziB_n?S30&CUywf``d|ja zK@!t4;s>si6SH$7vMdv5SO-Htlt(DAg?4Jf6D1MT*1!knl<@?W`4uJ(gv114Xo;e+`SJEj^6Ebe1$xv_ zK7;g+P`s7e|5o2<;?rKv8!QF7V5obGE*UUJA^1q&iag&AKT&EUBcn1`?2=*Q?^Hkf zn{LRIPTK%~ydS>?$c4QU$5&2@Xm(s;j7@Sn%B-M1uU=cO%c>)8p(=$BKp>eTlCzDF z*!_8IH3E~<~ty~nO7>}Oq zR^zm-m#L2^Zg7#F>;ysE3J9-EQTXjJ(GlUcm;|;^Nx0E7^us7|(E}^^d@dX`w*%DW zXoJdQ>l=v=XR7)V#2!>lw(5WW*?TyW!ku_}BN=<_*RLja4AV5Oq*M9a)To}=l z$t|}FLub1c=_!ugdR(ep($=$mj@lr|xb^JCI;F5KkH2(jo*1 z0!Ui3zZj|jY3zKh3uL_YSrjTINNmZB;26Uw6k+~6u~?hQ23KrKn$eo`+};W&_NI>< z?OfI0uUU{zu$2NyIc|qDaW(!x0%bK{o6<*nb(E2pM~zO!0W0==fmgxG$4A7hRoM%+ zYxZj-T>AnpM=h_zm5(qgxv}sW@d=5#A*c#a)ORuk%a8sXR#rrArxaM2B|b4K|Do=E zPs+-QMcEtxM%$fRqTq590Xetd{&SRk^?ku}mQcUNC&j|7M%#)I@BMxa6SFi#ti&L5 zW^iP9V0A#{%L3(cdxWMdgUQTaDsp-_20H^HVpX0i?gD@O zc+M9$H2?d{x>~*&iF^%Qm~>-LE2!Y!CHi^@LABX{$5NYbnuTS}Jh7N3hqfJ|{HZ;K zuKV#YBZNxG1D$I%Q>Lzb$_Bisf1I3gO#b?!olQqh#vUQUsWQ%X4Ig)m#%P}Z{4OYE zvf#~_rzXPtM~pv#x&!&fHzSZH!mz5RZi#y-&<{bSmZ~cpDeA^%3a?JBK!x}j-t-eu zf!QVw0a*fw4sr61&uz~tU?dmx!WMft^S8cx0HzCei&qrI%Grkd=fxAi8Fv~cr#(f^ z2FET&<9qj|5J_Wl7KQ;qP75s!k^ds1$-9Jzvn1ql|2E()ZF+OI4*Geb3f9eeu7}$J zDq_JO2jjbcddKp6oc7jewst2EbJ&d9$xmDVVZOp$oWbrmXQUFN@{juWvra+{vdVyd zGJy+BfDs-cyhs~9?OvAss?vOw-f@-`|G^l%mXu^NtUfwCjPbPiEk2w|Fst8y6iYwlY?Q7REK&^~l}dzD3(I2yl|d5$a}R3e&b@A0ekGXx=J+ zWMpCKUEnDvS!~84iHYD~9a$&LkFMWaA|uBn@@aF%pASX4PD)LUPE1s#Yf&hQ$fS_V zpVIWXAd5~8d<_2gOwLhT&W*pt1g9Tv7xdkDPwf-GK7lq%o(|mFULOVVjK3iK!vedu zda1eB#S!m`SUX|{EfsAr%n2-onT;jn48ty{G~G+OuU<0rOjbE%ga(wMRlhpe*(!rV z=;Os^g4g3EN{Vb01z`G(uT=8=_iQ)1Ma1Z|?;}WAv<;NMj0siJQ8>%pZ%d`#>LWnO zxY+a>fEg=!kfa0=I#BloJ1n>Kl%u+fW@CuvCg9M?Z7g0MTG=BY6c@aK{*McQa084k z-vW232s&0Y85qmt+OvP-k&P*)b^;zoS}TCrj13S%#A~&xo94n zmMEE?Ik;&KQDy8M)RG%Nq2bMp0}CCKqq!RF=DFwY)y1EVn*bT%_B~8x{qELU{QJ=q z117!C)Z`+{gfUei$?sG~HWshr5jnRLk@#Wfp71)@cr~%iB!tx|hmR08-$Bv_f(J?b zlhp~?C$|ZgKZ05H=^709YGJO@?7vuc_>(Dx=}aC&IfNqryT#)wNIe4dkwgp6WG~aX zdaVCutv*WQsz~!Vh6<&PjxQ*aiv^$K(G$yjx;-KHkt_OzG#zjv??lYh(eR z$<-=O45+tHGs;}l+2nfX{3*w`L-T6w=?<0Xty`~~Eka7sHWa8VB40ZpB^y4hG?cuZ&yWOjP`*$QH}vFf`xoz12Xo&3=qnT5?rd{^O+@3Ot53>%Zh+e=n)4%QW(5 z-D$j8FEBBtE-&L*c6Geqd6jp2?btyalv3?bjEtQi6Z!6U-_)oIC9vLEUsa%cmXC*(9 z$3YpOIDLIy7iTo2veI*d%)m^_$Rjtuq@32C4n_zMGk(2uHIezhM7OsD1GHdX|7|HQ*k9D=C>=h^G*V zetNv4<7E1EGz;|vG}#Drk`TuZ0~OmA=S{>){icvqR@TgE>9U#iQP+g?;UWAj{0})v zGKYAvW3m!nu6D3r!@L2reX~)wGQburQR5JdD;f^WBw^QfcOyX!U!N$Fj`g-@0jrK} zRkWk_)dmbKD$%@oA$P0DPRO%Df>zpp&*<6=ur~sJqFC?gm3k*M%hj~C;q$)z?oJ)G z?CKeya;EUn9w7?JmY{b8we{UGjvZwG;5Qmh5DI+Ah|?9Oh;Rb|8~J0XMTf`n_es=F zpEej9D57M3=S(Fw^0dM;3oBcHmcVmpmw1&PF)2mNiIkD&lk%{#b;cN$7`u^pol%<$ z0-!pdot?d{E!VK2g)F}DM@s02##lNZ<(*5S!69rZVw~Z+iesVwVB~Wfi9&~GD_QDY zo)YIqEt+N5u+@|wmX~!|Ai&4Blz5f5)<0X2&qwz9E~Q3F^hqMhhA?3--HRJJ25~r; z9_&nk(|DMGI1<$KKak6)@jp5; zeg0g>w9Lo5glFc%Ej^I_D?D|98ut@OZl(p~z=#=HHGE#X8$!iYw({f{ycYMJ@<-VNvWsDy*a$GV7ObUI6#bb{Ng0Y{8GQtjKt40|iv-q?S ztz5uRl*s=g#pw3Kc{*pgr6$cpjUlq93j{*st1@=3JH31?YPu{274l|?(K_|n227tg zX$V_P4l}=_bE7v_`a&+9W{0qgcF-#E~J^y?kA&1GVE8s zO0Z*@kFuHhIv#Mjz=KY~yYy>C8>>iN2HrTtAkQ@YjJwY=_mK*SU1aO(v{_QaDUMYm zjztyW(+=S1E(|g{recDEOlU-!V;%`by`zT0YhJshppFFcGN+DwsYsKPR;=}%58gUa zifOn>NfM`lO~RtO?iJd?^sSu}rw}-}<-M~UU8vY1!%tWbUb-CQDu#w?Id-6M z1V=X)^u9!SeBlIGRsk44Pw(f+hkpZxVEeE)mQSag#jk9;*yhUzc5`MkmfLm02p*Jy zVWC75`IVAxjf3GaG!#;Ag=x?YPcA$oL3jI=m7N_+x1vFIJY84)`R77dL^v%E4*{ao zc5aDC-iPv82m@fCT7VVevFuhJ~6GF{(5JG=OPc==zvax0>GqxP!A!C zR#C`p)4Z&`4_vr#1|_Z*CcN;!xGBcy5M3lIZu}`hxE!RrNG~;hZ*M++a#4O3kzPNZ zRs-$WOTTcoN~^g>fdVr0>k+wSkLPfUhB_r=D1%-P)Bj0w*Tj0ZJL^R_kc zL1Hu&7BV8}7Ab!uA*d#_?zdrsrrKPhQH;vV60I?>F*at9}Kg&)!PbK0L77_yM<>Rw3$TcjfhW~}>^^!ELUW;UDPpQVi#DAZo z2Y>(W?FMopyMN_WA>(y~Ul(~KF|6jH>`xC42qOVIzpcUCjtt+Q1om&y$ekYV#2=0Q zYVIt5f8~c)2>)Fg#|a7N6w!xgX+)VX8n>>eang}$suB#x<j5u1Qyj zinaATvt-4G&B3G&;zhwL*A=@r@%@vrv`ekYU2`+sQ*i%e2S|!epa>PZ(C#o4ylPNT zb@dDlDLsxC!fQ7B=R3I;0dEbhW{yJrjflZLAk~e~LvovwbjohXju^U2DKXB~K{wT? zsmDl)k8l180@n$eDQt3bbg*)blBPutmuzfq?w+0|&}VZMs~ERZ3pb$&hViUvF+l5l z^CsbJ_>Ym()e%XuS)dUW)q~@X&{{^LSh}h$x0koL*izsbvOrT4B*^IcDPj!~V{O;g zU>s`i$Go*mw05>Cr)aOEqF(K`W98Sl?uo3gUvZ#f5caMQ_lW9mBAqtb1eYMHyDMQ& z63wGP7h$4kTfa1~trA|)o9OPi!`Y-UXgSzW0;?==GVqxNsviuWXN}()pJdH5vK6b? zIP>ejyETOit8{1oHA;!%I02i}4#POeQTbS+!Q>47&2FbFJ#&@nJt2R2@Q?ec=f89z|b66bd8d2P0yFBp8i}@oX>g!I6?yz%(;ilyB7z}nS4qoFFOJRG|`Is8FsvZ1d7lv`SI1|+98An zcZph5LV4d#98n9st`v5$TkjR#SI=La*PgvdLatAixx26-z0OH_V=b<2w>F>4#4lgW&4-7F zrN9HR`J~VGQ-gTt-)&L%+sqLdZ5D8}$nf9;tIkvq4Sqwu@zYh(*Hc$j4FXJ)jf=AP z@(KVqY!7H}Pv<%`@RENu-5eoVDJ~&FBa1;54JG4~0*r!+nYDpqAr99&d?)^y3Y4W1 zEi8O|!VSrdBK5@{J*{eslUJ=jHwHfYW*Kt~dW9LI4Ze>Cb4<>-8a3?OVDVD&iIUm$ zDD54=PLLDqZUduTGAU7{o~#Q_6z~J`%DP`or;cPgt#^0C+Ov1uijwyCC!bUirvD31 z=`+m-dqpR|(d+sKP@u=*joS>dpt5i`nEro8nFHq$I0$Y4%B-@!B4J#uE?(p zK2!QPx3?xw54Sg~&rfo;lQz(~W_M=MhdnxQmU>_Nc+BvFo^N-l>axUIR1qpx8sRKz zf_UTnIEpQ$>Z8so&zmw1AX*^PGE{@9qI%T_GhrZ7oRN_rT=6O3JWwO8C^v^z|1n(-?CriA^aBo1^N>3+#Y4xCf83r^ z6SAiV$5`&UGr@FgTm=8YR0mrES2Vgv;c$?{4$GwzA*-lidgCQ8+|ImT;qXa&~rHvc3)uY{2GW?eI{q z{GZsbyqJoLLjRhJV_v8rJH*S|y9*S_=;vO3*Me!AylETia%q+wCw|%PGqn6U1bxcc z!IK}2pZW%QLLm?OS%EbK;7XCCPs!KTMV}A6YJKqA+TP(PW~)L4lSWS@x@@kYh|NPR zlkX^xBVi0ug8JE+8Y*OMZs>hfbdX?tJAsAbCy zs8nm`@)XJ;?rI-CKj~C_F#D4=5B{*8H#mlQ#jp{E95W#{;5fGU+~8%34YAu4{KAxi zD);rfCKi(YS z%|Vhz76soC9sL$Tmr?Wj`X7<;3Mny0eD*hgHmuyyfxp|s9LAlH{wpOiKI7>F9v;GQ z@+8o0I`Nb5kqC|g+n!lnh-fa@@P{L&mxM(~=0g$&q@GfXm#D5ORenKHrh6>baAMJ>&R^{k7(!j)i4gJZna|EB&XIz~}? z(bSsbo4U?^hhmt%PFd%@U%6edg}n(tS65gF&15mgn>NztbPOP+_uO`_j9muyRYGpqvLo9A!c|4OsyH6h+2uq#+SG+WTT5)IfBUeg4J z>f}IPUP7ylAV-pimxVS#GL6c1yYm6QsRfks<4;kxQg}fr3a>vWpU(LFomxp6!auus zwa<+*1E35NrMb622{GFkm`h0l581R}mlStue63G6g-e(j$17sgZ?xD^1U+8uNT7$1 zp(B>^kRl_z!V4}Ovt2{(g`Py&9};fvJsD^!oLZrRjn3Yj7d*V2>HGo4*k0_aw{9Qa z`A-(G(QNT}j0SO#T+y|oBm#dme`oVyN#@54`G5bF8~D&=b;`Y_8Hp>Gb!*?O`aMF{ z%umd#1#L{Q*&`&s=*4N}?qWX_tkEYI0Dazhtup|foPQ88XC4s{~3zp;E35nU+xwX4dA-{`as3jo(x;JWdOfq@R7I668yMInW6yo4!R+uGLG z*I@u{$kEXe9sz-dpMQ>N!%64D=P}UTbeiA7< zLNEscOnG}xPJlR90F!)fv@yLi73^K=qhk7)LlJ3NxWCQpzGvLxuF>5(hz?-C?5^@v zR3MW7$ocRv%+@O695S7&<3Nj3teg|JT|Oh8&r;T*q=w(X;)g{k`V?h9JM#SrJB!GY zaufTAXuundS{vj4AM2wg{Oz$e>_n0l_?@3FsRlTLt+9Q51PF^VNa@jJYCK%d5}e2| zHe$s8g}OMJB@mY_)WFpMJ(!`&MvAWu(}U+4Zy!~ag}HgSbpT37D2Tm8rakB3V4{f2k;1S?_vIB9UphBR0<#UX;82KtejV(@} z3>pVbCKf&1=mIcDf=|#!^n3EmXeKtJDs5_PZT&F(rs&Syf5!?B?l`F9*F}bVV+~3b zv;o6(TAUp!fS69({t->TSzZ0lzQbRUEMa%VWn96`;|0yW*#R=g_H)4*hdKRbC&j8s z)9Gh=)_Oca|$vROfDog$cs#4>E^5c(8=C3jK?+_^l?Z zRi)pR&QYZ^Pj*O`#=Lgouso$5){G*frmB(nBmjnD*WKSH@5FXNasBj9OM5~jgajEh ztuS2}Nw+uoNd{H3n}B-`^e0(K21V+j1@fd;a<5owIYe(d2+~0eU6x=o)hyoV`dyLh z;2%HTW-P#ZaMFg?g(`}-u(g4jjqcHeAh*A-VzrBjiHVq|Xc!7v16`hWorQb2sr)@A z#o6U-%=+%GWy9gq`M_!HRg^^q4zXmfx35HDKAK27?m(&Q0w6fN%N3#p(-qYg@-goQRcXv(Xo z$brHePc8rph-pBI0p4)zLb(K4C#SbtE&}$+L+0RRE(&DEM~x|At&I8(k{9QXo(m$4 zq_NRrrA=YNU}M2BdhV%^ z8}YhHJ~E1fv4>z1S&Zn~EkXNow0Yljw>MvS{$k_0Uoxj_}KtizTkE zoWp!46l}Rs?B+9&WO#$erZJepe-8$nZy=C)n;UGQzFz8eFvf$4FgDS!fewAC0U*le zEfozrd)iFDY0cRVL-{)Wd2M|RJl7a_0UsKiIY!z8pGChy^l?8H2CK>!1W^!ZB@z1@ zQihANr%CVHa@!0>#~8oeTi@O^5=^R?JxoebdJYitzx!hG@0!o(OJX5Ff6tHaF8Mu< zN{9SGL9=M*L)#osd28FI0hqV`_fO__hjWf$^OaJiBJZU5QsGkm7y#qj7nLqCh0oQI z&MSID>BAX&z$CcjAb<|-{f{d_N=Z_ z1z*BCU;i=qo%0BD>?OAPy@a%i3IAh|`bQs$H~$~wtG*mK9<$;eJG{IxxmO0$CVFNp zU*-UhRL7D&IltexsSk>RQ&NFPITp?vZ0VVH`Y_<}NlAs%S zU0LVsFljS?c8$0W#2o?ZH_*39Xltj(3D;rb%Sg~@b&e>R+iD>z$4ff+OdO^ec>v$q z%~<<3xwde?Z4(z5!Vj%Wa2C9vh*;%g&6n9)Y7C$#D=S0Bz~HH6PGO>j2;um(LkvYP zkY9ynZBY0(QWe=ikUpUjuKORXaDdWLfrqDT=-lF5F<2gr;z6T1>xrK`# zLhd>gFrvBbhWg+0N;Dd@goTCArnQVrz>FVzd^l6tcXtWaNK@^_(6*j0sAQ#0kRKC! zH7=+2UqxDT8tY~2fph?Px1Y~j=F*6Ww8_raz=N9^6zKl-o=6;0(r5%ULgS@IXZmpC z^}si2%!(wHlluw?CiF>-c40LYh0(ckd|L3CBZvtDTnb_pZ5>lu z$n01`o~K{F#BVNY;k(--%vWm|HH4YL+gZ4Cl9S39GK1^)57Mn=vH9b z;9YL2tE*RgjnBr~OW?$D_}%#_He0x7`NwX~Qlsa`Wzub5Y3eR^!QFGXFSyZVDpW)S z7swOBGDHF%PnCHo8XGphEUKQXlp6lk<1It`y@R54n>amUn=o;1z+IqIO(J6hFn^Kt z)h{u`_MOW9`XfGQFoo@p@JN}#FJr~R59M9E{}kUpCs2t|07~vuF!*Wx2R~E?5#;KvM_azd?P~R`dsxCgMn6T zx{#LHNqf5fC$6pof_sGb*TfUO}ti2{NgseCHlg#y169+Dz1{g zheSf6%y&Y|)}4bkA5E!Ul?hC8R^wZ=!9ZZ9fyRIPAI_An2z+bw#2S?E7rcN&uC#4`hFg)qYe2#4sX2FjRp)Rxy!dBAM0@o7OZ=_z%kxq&>Iz zeW~F|lz$Z!7gsbtZ9_0+L!hc33!)o9ueJu-#3I-;@VD5qJi&^;Y*zcXUDh|vo@As@ zBf`y!y~?z(%*`!mI`SZp>cgL_IJip?0QFd0mvaJ~sUKifnuqN#&p^>tjNEh3+$34m zXnvXs4K{L^t^|D(N<&a9{0A~x2p%$g2m!!ckpMAEp~;!)7uxd^T6BR;>%>x0;xGYr zQ*+3BB!(4~R2hI4m6=wyG+10RfzlINW8ZrL*kaRDpDS@#q+8MqyZ$(e1{*rEoQQb; zg}3~ZB>~*JV~-R-Efp!Izt1Sp24Fmz<@Wzt7T6bk#rgDX%-XKylhyayBeCjSwJ4YC zzY_Wb2PmWFf68coUo4uy1c;h`6JuuKvA#rH^4AY*j4&i1w<3dwg<*`Al$DK0f{+st zMFL>-#f2E8EBlCisL&1nIGiSQ?3GpEREQJsKP~{Hxuqpn1Hdw>baw^4S>eh96$|DC z>4 zfEfA4FX>UhT7?O%TdPuEVzu3Wyvfzl4+xv~fahdNd>y`K9McT2-N5NpFT+O-?=BtD z-7i6V!jl1`scgG$3&LpGn=4i+GzN#_tnTb063Lc@a-_UzN#MzxBRs!;PG6Nu zspwO?gDmV@h<;nHr7KKhULFK=qX4mChu+@YP>YCA00$NIvMI*yzrZ-77c?zE*efYC z+vYpO@3)72cXenu<_ZO)@ehxMCQ+p%J z%E}7yTPJFt>wq$KlREmdTR(1_DdIR%o_^*k^ze7|Jt@p-&JS}O`t5#A3b1=1y!hoH zUz%FQR2B(0xBB@Q56w1!gpbvW*wHXiM89p z5kCUOI8Z(m&BMX{?lAtZVkVtjC7rf&l`31Peqd>zIEmN3E=^ zOnw|6dy~&g6Sm!;D0nIEpQv0>f87d3~sII(QoAh(AwP$%@vgZ`m zFJE2bnPWC~Q1It3x(>8jwB6Xh5y3DrxNjP-Ue?>%Pz(5H% zlqIGw1mLXJOnbGkPU7MaQJ~Fxm&Ko?23cybXV(2`4M#;qRsKjmL(9b#GyZ4yUpYR^ zkIDCQZqy_~@nX`qM%jktl2;jyXJ%1=isOe)b>pxZU=3PF%f+Kxw#>AS14s4AU^1^HwB=C7P}U^2>n zqn=4ZD7o&Sy0=+hzjohbW1L-AO?zjQ+B~lQt+!uBElZ%HNI9!<8=Hxzje#l%WlZprMKex zwoz_P+!}wc`w{$Jk%f1!#Pq3XiBEQEwFwAuG1EkF|6DG+&*73qTnIebxrxdDleQbQL zpR*AK=5U2Fl;HUm6%_?5(~OJ^+55Zu`_P{C7rqhwyUWv6DmX-RmF0c`k(|LUH)B$-ytzxqw)khf4iVz?0~QVH>G##SCf=@X^Y}0uu#5c=CZ+pw;wu zf@Zh<5P%?<0*`M{N`wK~FB*^tx|f%;JzmTONO|p|JdPJdi3rx6#aU=IPj#rU>ydJaW(Z1|B_i}mmC>mJ2)3ID7 zyEXeH*6^fp>`Mo3$*(>1283Y4!O=hoCoo4yx{S_7>x19dhenj;Qagn25?(v=rVkk& z@?1nvqB2D;dwmHmj zlpJQM-WnZH&KDHZAN z?(S|xqy$7kK%~37rMtVk4{_k|7WaGKc<(>Q9S$$-z1Ny^{%USIPftt`T2GgBX3IpA z9?)rHfW``J0OGE3CFA*L!wbJ^z6D5Yn@`xw#7X4d9>StUyIV z`c{+DyaEc1kFPI$Kn+?)Z!c=4*$|heHDtcJaQ1p9Yujaotu9l#bPn@pM^(>lw-qb& zidgUQj_COJv+;RTLEMBYDB`BM$e+`BRn;+#YA@cNSno_uhSp+Wk>WJ$AfK)BEzSu8~%RfBE7rEK;^MTmM>Q)%Jifq>YnxBat%rHQ+eL7wcbnrCw{VjK6wsDcjA%`el15i|;? zriB`WS$U9b*R_*ikL{gubzeLRYD%V}j?s0$jP~C&>V3%!%spws2(9Xq)x!tH%GcoF z77O}6FAMVWo!T41eWaQbo__Tiz7ITH2`G2#-I&iPwtPUE?VpeI1o0})soDO34wj=H zlG3B{mHgUmW_)gb@WSc(&l+;SS$ukW7v|X#Dwm&$u$x`}+@w`(zg9U?Z)i4CB7Pe} zAly=eYyKSIpyCb>Z4?^K9D#;VomD?hCc1@BbL8vDjxi*oezs|=QQlfiE2^0h2-&Vl z&_0)U{aeQS8{Jw;V#L1@N(AIfaeAEgNNIYda(a3{5{5cE5kXl7Kt-ZAtOA$fn~@)bm^3_O*e&Kkc>la9u+`guQ&mjP0!D`$?7YnED3EDtB+P1_py^w5*c@$I&nOglb3t7{&8i zFL2aLHKX}#_b}bk1iUVpw5qK_EhqA5_-Agd2hy|aQh(sIfKx@-qYNmJ!mC@LU$^A@ zrGm!JzWo;VotA&XUF_EfR657I>C8qmL3>+|t*t-{;)%&V$mN)B(RWdJt>T{PPS3`9 zz!?X=DdU;;tHFm)eL~Ix3Y2C(Qm$U?jA#$>d;j{Qp_Q+uPdFI;kue|LQ@F;ySNx?i z*YS$|qA=rg13Zd!yV4l*Dt&pyt|cc+zxTP=F9rCLBJZU1NaZW{T!f1BYlqd?G(#KR zPmFqmCmey!CK1YGGmF=HUx7);*ra;Elflct&yV`#owGR*SpAf)4Eb7oj?Mbhkw|oD z|JYy6vS!}lU>Z0AZ@$!|u6Z`>oWIJHp~deq;sk-?uVq{e3|<6$o!m9G4go2KJeK1~ zU{tT{N55(vreS+9q?lBAv*OHD)C-%zhmW04=Q6n%^ zx>gKgC&IBN_H+1j^=V~k=TCsdvrsc!oWJ%E^Y8VTY2YKRZ>8(rvnk^S9-Z zlnRQqaVJnVo_IMSkExj*Vhpur4gF-l%pZ;uCAfr!{)P{HyKayhY3bLKp|86JLRZ~ zSB|kp+D1L|(u(@7R6F+OIoZ9m>D`i&A8~ifhqL(l>{>{;@nmM&<#eFH zlsQc?E2fJz%Zn=;8q$~zXG8)B`e{`X2Gu;SB7(!iorGBd_ajKz?x`A-029UC;uhy; zBn~(pGz{j4S|Hr4#M)-^vF=!N;J6x!JiR*Otk4%YCwD8pUHtD7YulC*shDbyRjD-y z&Q@{f7dVjxc6$Q8^x&SeOiMT5AtmQ8S!knMpiS&Q$T)rfM^r6s(c~1z^JIIs2EJDm+Fan zcza9H8Y*#%f%GoLA0l(V#X$&B#}vzFtGkWa3=q&n&%nT0^9((m_EmM+xO0`|X7u|L zcj@z$l~pt36Xu7z>)u6A>Yx$#A7{krL$WI^4`qfMj86_J`MsD@{nogU5F{WTMH%@a zS{am5lkYR{24}I{6skF_>xXrnfg-W}ECAc9S+h4xZ23uwnETjjpB-0T4UU3``9G70 zrNx*-RDX?FI$^%~K9;A3T7z7BWaZ0HgEpoAM$J{}N>KVxw`;{zeJE-O^F)>IXIbc6 zrFro|1mzo5Ks@Xg_Mjtuuy7S(BI=Pm+5f}>x=HMw2f3z;g8p5Vpo>w*Ri?L1dj%o@ zbTcO6=oeen`DjX`x-+cHvAYFYZqV!YUhGVa_s)|8a^Q4L%HyOt%|oMI+Nlw8bhdEf zpDl;GeU~@A-4TlURzV?m4tSJ>1T^l<5k`L}i2pO!eYkexQ{#F+6I_h*|Mk{A_|7dY zEvpU!Ol)j?X|xSZtBl0aV`YX?K&17(Y5QLi%NW3ndiX%9Z)wXNLBXq6ytj@v!;yr& z?cdIVy0_c-|6+FHGnCD-y4d4K3{ksuRJ^ivusGoZaZ(GLFm!ZXPSbxM({s~md1w>R z2$ww&52pR2aVVMDUjqGHjr~d-*sl8oNPd}!@<<8E| zTB0&Bhb-qDqNZkAD!)6Uz5iL022HMMV^IRS`>i0ww@U((a9zuhHuu6wz)9Q154Piz^0kI^eCD*oOk&Ju$qr2qBgo=CNDBS}A|Q+o|Ja;LA(Hky#` zS8kFc>|RJXIdN?dXIh^NIS!>8gEKBze50M**7nBdW=u|_!A6jb*XrXQj4KVxd3#Vo zQ4tG=O2h&gw>Vy}G+$;JF<@5LCi!Bev6nStn!ggxrsS^G6de=$)x&kL+^d*^B3qf} z060Yw{+?ZL1yZb8fk)fLRTO=H3cl??QB-ri0-E&u_RiTa`7%K%-%+b6wSVCUNCJXL<~+QYRuD1%dj%Tr*)bvSK< zSIpwW2F?(!dVLoc9=}^xenv%)&JyWVpzEX%_WD--+VE6>#aoKw`H<0W$G}R;58A>u z5q!Y#zyY`g^vOJ9SDsP3_xC<@zf!u5Xh49BqoX7E=B8TAG&D$_mUEQ7|4lzKG}Ik_ zu{~~uzQ7G&3S**exVBPN_ngN@j5?BJyeNIKy|CL-Ub!;;cl%m^ZUf>wvfK?e1(T0N zAU9AVNsUgJ5CB3QUvmdIHkRBAKT_WS#OWz1`N^?Bgc{4pF9Xy=SSY~>Pf8OJ?j$`! zdH5rmgf?9ps=!-8C(Ic1&H=PGtzzPMHMJqX*!j`lz(`I3iAs21sA{|gHBLzIS^?FC zHK_PySikyp4YPsu^L};y+6IhBI7SU3ZU1ucU-{%{@;ygag2cmo|^q8r2I9|H#(a=;y(Tmw`ZHNQuMkb98BXTKbS5K z9hbI}#|aO9XRp*#+6ejhifm~99hp;lKX^;1SDA`Uw(`fR-bbe}+@qpk60V zlu?cELPvC!av2A1m4VnmGVAT(ZR@eebyD7qKLmtOMp-`~-nf&OHC`@Dd|9^9z<*{u z(?yaum znz!flhb^sM+-A0zfu{n{`EKVC(eUJCnBxlg;4N&~*h-2HwF^FSO{4md^~A^Y_`Ex-bFAOJ=m zwB5(lG11`&k;Y1A?|#ouF&Iut_rP!`c}C%Wek}M|(>BCECf>L8+6*@k_i!ctwKgBO zov_=sD2ZUG-a+E-36sg7KN1_2UKOuw4!*u$dDQgsc=qpVd|yl%)v7tU%=+tPWRLa8 zm!vbVlH`4E*2K@U;>9ZZ5xsK8B0#H*I3jj|g>indu*Am1g!cGw_7Y^;3^+I#nCCqM zduKbS$^FfB_+gOH)ic!Tn06Q=XM5H(WF``$>d)LeM`q&aHPGe(;|nGSG7{304oiWX zz44&?xqjD#viQ>RT|va{~?7yRoNT`QC$!_mFeCuXY& zq+<@mV z&0?CdxU}bdhxpABZLK`D&4W!CE229MS~hk06?%7EieDDO_ZMg#RNZkTxMH1%3md)h zb3geZIhrNAkYJzeM_~3>S^k(_SYD2Q(gNk%sG({JtUJlYwe@?DC~>suRAuV;hO9s` z^YC!Z2C^vAstcyRv*qJ59s*6ozAAd4d6qX-ycooz@c?j(Vdhz$WWbDEtrZ!xxXA5s zJZFBo;r}=w;7n|h>FRdUj9F$2Rr;M5S0&%-wLV#3)8jHv!S;N^ULQ%@9BUVfY10sb z?A$pX^&$rAhKKpI)wo(8~da2D7cOZWV{o0}m(@m5z~U+xBG1dVb8=bakyh@yf5 z^wO3JqWXGsR;T-AW?&PoX@wc-ymY(nKKE}8y0Ta5S|UVgml%cl1b|YV^Y?F*qb?v? zbhG?zXhcLP9&bmun$GtNPa%0JIdxOuuQ<-=x*P6K768j>l_c)#;8(fT>Eyz}+!&Y` zBn!cFC6CtaUtjRgz?T#khAWz7ZT+CqX&PlU<%Rp0Otc=Ii`((jyoHJ;0@l`(^1*~O z08?TX;RGU=(qev~ghy;9p4*0kbx!wEsPj3RipM?^nRQ88H4v8!{t)e@tt7ich{`tL z`Tl|kXVAq7iBd+@!sctW=zT5|27Akm$VMj@PD-@7*eyEz+Sv3lqoJH+Hlc&b0Q;!* z5I2SjQRw&YR)cBIjhc;-*)J%5zG8(UHn)%F9O4764lI=ojgQBTqcp}jXHJsO5OAar z%vXL=I>2D?HZF59?FMhur{DRMTRr2mTSQA!oIbAc^Ygnoym;nu`YZgfWqbR4E9+NX zs-6^wp^1=P<25JwWrP7?IHH3fg-#)te{1p-lf%r7!>LDeD>;y+S`}V_-;0JI5+w4L ztUA@Ff|bqZ=jRT41Q#))pls2}#RX(Dfuk_@{>U~>F|2mQix8xWxJ8$$zwYg*uXUZ* z2S_2%e@L+9kH84Q={b48_4;V-`2r0Sv-gse8??qz(d_O*Wz|JRSk^Nop`gtL3@dbU zq`Ibt7|1BhY{Bmx`L4fNzSnQbo}7r#DnSHWVW_2*RR@q&CwOuZQaAvQ#9|>_(U^s_A4~?gdMQ~xv-Y+$ zdykEdjvhn6W56U{41XH_$HpMyZ8FSB>zTDHTnY>ROG_h7z)`RSrRrnI^*wiazNTi0 zh!sW-&sIGg0mqJ?9XywoIk0i|B1!(&l-1h7!N5PUMz2NBi*2y_BgOFr;;7J{T`)HM z`SYg@(7QHbOj0@O8_n0tGBU^)tcPHl^|=`0*S#x(Zp4e90``leM7!z656o6opM8%` zZhXX^nv%;)^gjg!W<|!{++a`B;Gp9D<%II-)s+nRjE3cu{iGYrXn9~j3X0&G)Zv9#R_}(P zg*<`M&JW%JNi|J1w0|bjixFp(P2hqAdl$WB5Zb_NMq1W5#s5(+s2+M=Uz7}%N;1=6s!8l$5zlUvT2Z+y7kRlwBuF|2?iZ=9XExft^*iQCN5bAssz){PP}oqKHXX0|F{ zt{rYiMuY@%-Q-Y<2k-W-kV)VnwZ|x*$6qUNa%a9c)VFXU&=G0+_2v7Di?*>66@e#-~1_t-Pylu zhrs4*-wLH7pDyh+&+=D3{QuPgob|70_!B%oif+0mBe~>9Kz?>5Z=zQu zr}b68^m=5?;mKeOF34Ybc|At1{tFws0QL8Oq-1ZtBv3EX7&~_3<>mFbO3FSw(jY*%U+mta&EDOXI5h z`D~LXA#Ap;e94AzCR5CpY@;W(6P)-sT=DxSl0bdmat72V;AR*XTL5YY1ccdw5p5Nf zzEl}nBNYJ_Xsgm(ySb<~u-uiMtkS>*sONWfchLT(XVkc_6W!W50Ns@*TH%bJIYfB* z^j7=y6uYe~lG}Dx*m|#5`5*MGcDnXzBOK%5Mw>38r9&({6TjK)AbZ<{)B|(O7c?5^ zV0G&}FBx`4WkvA{jd0G?{!bN-84kKT@iav{$mrTmmR|=rh9tF_kC(z|aWR$ZGlO$? zo5F3xf5{c*GeS?Xsk&~gwPCmBRj4T#GMF1RA->$ZbLeo0#qD{a(Zq%)Ef00}YuR=~ zP9F+B{;BhN#=yV;HUddlTD}5(T_ffF)|p4$LtOoA{eis*^w8Ot?It}lGjx1hO-mT) z32y{3ZAa-kzEV)!M35dzS?l|Mfl=+g0wQz3xb$tEyIC)25rE~bz*jQ)w?1K0qX?IK-eLVo|W*6JI#Sg~ zZ)QD{A95=cL$}M9;XIRdr3J-tXSmYC?r08dR8pz9r>jwOXdDt2rg@*5T;{lO z5_9B8H?c;@)weyP>ub8FK(KLd$so-3?H$+&`tKjiQ$$buVP$?^OC2&tI3oTi0y6CZ z(eKp;HRGL{^4K}5J)5^KUB9n)F1iL$t42=`|Gr%Atn+%sJylkWfdQGE&t_M>VGi_O zoHe~&z}z{~y70g-2!6)3?i9VAR@l`ETkdAEe69!Vc8Akx^DU5*YyAob8Jhb2l#B8fQ^+p4_Gj-YWy9R1jx6_QD1JNqG0jC^ZQS(=*|58_&L|0Fq2-)boyga3e z9W6B=N(1dc!#Abd^-xR?&{dqCE3mJDb%V|OwcwrxGMBUNze!KKu}{Gp$N|t~=S){m zj}bs^9o*edrpxCsxo`j-q79`HO6D>_Q};b%c*=5)kj_@B1)z%zNRX%UIhB~4oYeRg z?t+Yr9D|4?K!KwchGl9CVTaq)|2^{6)yYNL0M0uY4}@5`2pwSEN4LC!EBaWVGN@v_ zKsEH8?-@3V@yVhRmX4c4flM-d9bVU)?(~b@@oSqU^p1abj<5&6`(pfu zZ*A@PGJ?Hh8qPySy5Ji+-&_#NH04m)brC|7kyOL2%L1LCg$-90XBEgnuz^~$Y(Owm z{6cOL2#dyevrE?w#!j||90A<#|R2kf1V zNp|ykwqVu;T+OfQMz6coz!`DmlmR`5fHL+HHc1^ePTaS8))wu*X#ySGkA2CU0cKLH zzL1R2&?xbqufD#1?N>Ne5ST4M;6*+n9|Hlp(vQI|eeK%y^V|WIzAZRZ2S-O+euKOz zD?k_r7A3wso0)zMZlkHEI3sxlg+`uJQ(%SzOFZ=#2KP$1(iETKwn^h1PlAw7uW@&$ zfqmJrUZ<<4d#&cxhZpwA8~>8dmGqrKe5VhHJalkycmt%Xg%UGyM8w2TR@RsUqm6ZZ zBBH_h@{i2V0AfaZWY5CIg+SPwU+zXBqk#E+%L(8D_~may?mMz;;EO@^co%sF@wXpX z`Gmx>neM~fg_X=HwQc=lV=(G}_(ju?N5KCS{_Pvh z+jpcvFMoIt2xa0_S6736TK4^WYT&pZc;FL3;o;$V!Nk;;7t9DsH|*iW z-*~>t(&MnaS4Br>anBko>i~j}FPWKB)7yJ{V5^5Rs9C2TI>4eB<3%AP zKp%ttOJ(+GM*Y*L>U1?B`rj8W-O?i-9v-Wq0A@J^X)D|5rK%r4POd?KV2-`@p6kg1 z0PH$Xaka!pE8Wr0%iT}(dfIW;)`Ia!1yiRso^9@QcBw4W1Z`c8O#gZGuB=P7Ffq$Q zfFmN(4N@xziLQ+P1RW(5TV6KP|D5#9P@~6&{3=XzlQ|1qgk>n+5uXy^I3)0r&2i0z zG53#ZQ+Vu{VH#Id|Gh7d^Mc0%@WOCoWidmuk=fXWYmPD6xuUX1>60YR%bZD2g2IPi9%iH!nHlO`+2r}lewKX?ctV$s-USz}LX+{~F z6u;Su7KrIYl$4Tc{McLGD(uQko|~In5MaQ7*KdD+9}lb~y^UtI0ZM$J)9aL@_6;!|NOlz-a{lmv@cZ}g8hZ-B z$MPg01*;}2d!ZI}rg#Icpw<8JIE;jgzW5Ojg9HR(uD8n>0^tFG2rfSL(G+sXpc~SYoaql{+wi7 z95MONW1*R=f9AW0cw0<3u&`?LIkBOO)!(O=P>T{!IKXxly(9dvs=X`f#A55ZDW`-N z^7_luD+r0b4aW|%e~YwlUy$#7wl4FQ9{a(sN5!2<>l=U%@S=rFlVmO_hn$eBv@XbW z^nGuUpSlt|{}l!5_D+5@H%-Py>XoUhEqhyse@yf-KSJ({q^ex4r+tDwFOIp=k&7%; zC7FnVVmQm}QG#s|+q$sH{U0;SMcH^M#oE`VkFX30;bA4G5CW<3KQ`7Ad2HjZaCUwf(wfC?b)Yq| zrC+BJK-1sv;B@!^N2+js&8^I!uj|(@D@vnb9)CUluo&=|kf?xONGI-u0B7UhD-A%5 z7lO9TPjzCg58vx`b6|;PNtyhRT!#=*6!9NB(m;Rk0>GxgFh}UOvk6YGo~7wstr3+6 z_g{B6Tsvc*N&HP`%;8rCEqEj?w*#>EwGMjR_*4komp$`m z+V$apyC&v{{>Ivujg8G?zu>VmDya}J>&xgK#HyMMz?N)aht?SwG}gy+6+rYy&oPMM zG3-Qn(%|X)-7)~%NjO+90{k+BOiWB~TwPsjgIil#{7CqGLS&Yo12)vgj;(m9dyW+5 z=T}52SD@yu)w)0chROw)e|;SiSK8pd?=Bm=vU25$>(P`N3HIO)2DtHY=GwVq18ZjQ zNMm$aYaV%LeQ4kf0Fog5MZ^um7z%tXMT?0o63o_lLnI7$RJroVGSTBj?*SJw#II+Z zA-ZvR90}EjPCi}nX%Ss(Z%ITW9hbiIuDr?T7SFG$VzNDV__F&Qg77Tl%66_I&2jr@ zbog_%9_89wYVl-au>34PGQi3*_rz1FCYBC{h8U@OA*+!~j-$19ZaD02z!AYC1Z*y6P@lqhsZRwlpjAM@Pq6Lg)4_y)p#7hmR}MKt=GVYpnIP<=IvJtZ8>KVpZ|QngTpY zw(_gU864uT|6$cQ(%6*PzbaWKUvF3c;8M;29%XKY_wqlB&59ZuSwfVQGFt=6gsoyx zoIEj$eUHA|JKUa|_RO&AG+>qJwZt5tWwUIH++i4#S>$Q8F(#tR=VA;GAByU{oRuBW|NHXt2?-T2 zD{8d(2!bjX42ICo$WSN)wZ1-x-W<;^m~kHA$oG$nBpcj!{3ySG6p-0%B#j#bkswO3NK?t0 zovkH?*Sf{fXDFiI-Jokzn01LaJF8I)v#zi@KwIk@UZl+G*UJ<)IXN@9h0qWA6{=cV z^437Z_cpz96h)NQ#?~Q(|D5fkWKJ`FhKNS;Q_2Dj6ttK;;A44B0q}$kkPYh;E}N*EBP86dxTwP_q?L z74@40^_v*Ielasvw4aYI{hUzkI<%8fORXA!r^7|S6AQq&ck~{ z&GFsB%%@x#k{_JCVWPBX*`+TWUv{V;UVoUn>%%e#dbSy&G%M*ZoRtXt)E8I(vYQ$tIqXld6RVU;P-{5ckH1%_#f90VbKG2@OLuP35B{aiiGS zB`A;#f87gg4`VD}3Wca6Xjh#%#m305mC!=7*D&I!TT#GMK|(>H<>0`Be#_j~OkBhJ(|C`gs4cLg~kUnHCKV^EkCB z16vxcexg7?aN355`$A9<7znAroD~kzXaTYa47KCO2TMz$945OQ(Ww6Lt5}^_2B@g; z9a2&n!eO$7p=Wu4MAO6s6iDLw)RR;EaBxaHo3sp^VJJ9e%X(ZO zOAQf?j6FllvWNZoRU{i&)Zs;b_2=4(?2|^lAhmm|Ki=b#?xN-C=gq#(BV&ZK2TZ!t zaa~Racdqr#{=}-IC-@UMUD>XH4}5gq?qP5r8%(iajRR*%VbNccBLO5~*?7`mUhA3l zv)+`pcT9&aP=Iy-colWF!W5H$fPllK4-d#)X@rFvmu7$@C5DQdScEEmsD#_f=G)Kg zb>?DU2Wg}mAINqIlkGRytyyO{jwRH8E{Ub?qnb_UvJ2abww1$!{R)L6S63s3o|q^INDP*QX!7i^n7nF*+;OE3KKR9!q3OT5DknWceCxzMG-{R@ z=;&)|MzXhRbl0(gZb5dDZ)SUjbdxOKKkZ^ytp_syoy=ygVy-AQn+d?f)-KVzw17WF zxt|RL3DFXTQ{(fxB25Wj#g@Pga2T3{NF7Y)V{t@|^9|6D%^!3adczNf*IICKH%90_ z|D19cVVdZigU5Usy55^2XVgFV)}vks0S<>!s7v6dGa%%2f3zR$?!L92uncEefku06k-d$-$lP(N?;y;&Bc|9TDvp|8k-b-zb73EKsW<|1i2bYrB*oAmnzcD z4B85yEH|_O`x$mRcHYs0-V6l4mU6`!8 zxfEWrG0*qWS^8kDp?ejOthd9|bKuY=;sgL#u~Z?VU& z{f(Kct}6}*>R7^xRf(qT?sgn2PmBjGB(Yc>%VAYsIpzvvst%vba;RKK0AeNb_=%6| z_J#zKQ4&<1sE9`+Ml0fPP6UHGF%z4HNF2Ht_Za#4iCJ0iS$Y9&Ej|_1@|GAnshMX5 zC0tx=tf>t<%Yk=0G_Y%60F%Atl1uD5meU-Gx4eJ!WgW;Q3TzCj=z8;OJL@=vR* z{|aa~U80MrF*H2NJp(dX5$#qbyzkxvD6nW~+JDkyFKb{lva-$aPid9=3DuW5C0%2# zY7`1kS2oSfjDd;vYfl{FdFw+Bye8HweE8Ml9kGCL`=7ZDa##+|RNkTG&3Sob!tRG0 z)_??h?RMJs#Uj`E&od>B8L)uS;cEXGKv)O5>x7A~cgZ4l^>s2R@u?))S57aM3CJ(= ztQ8qCP>0nwsIw?~qYEn?w<~^6%yfm;tsjM+X*>*aD3WgD!jIew>HSi9!NL*^5ds&a zVk*Zk?T5-9tX1Gg?}30UZndv@xFlRAOf5I(EFyQi#(0rJrLVNX@d1qT#?zMwMklzR zfNG~xlWPabcH>LDiQZvih^b&xlLNi?)#jC#=p_oYF6^y*gq(`On}r!D4wdZfGcODq zZ?LgvZEwwRT3uJqBxm_Q0+N09uDumG1roGO52uKSWGJW8?8C`qNK)Jks83|%TfSY@ z6=_wX%_w4?x8HyAe-TP}3ce(IEziUE&XA`@+`6Kq1ZN<{f4Gj#t;-`O(>E)(;VmA? zHx4ZHoR^#>P{;yr6=|zH7v`+p?mM{IZN8$%q;gTeP3apH?iswJ7|KQN#Lz7UvGyiA zdN`BqnO}ACO4hXu#mf=Jy`@HLtvDOa)FbOorq1CD&H`_&VqPXc(2-_|{RkR!)LUKV zS|GJ(rV{cveX(KQ3-(7eWZc~ffx_gqLONb{Eemis<3`zHS<8Y4l#@tuz!7dQd%m15 zdLW+2ANe`d)%px1efq;ho?KYKVggLa)Idk2zHiF{1Yh7?Xn9*Wa7gR^v0wc3+U?^w zF#j0zOuoWH(=yj2kCnZ@Iq+(Ht2)%xyD;$I9m%&3_EQ7;Z>hcdw#vHV(#r7YIO7Fc zBc}<%JH#Pk5F-%z8y!IYY1lRlUJtQZp5|g6kD^SQm*H(VN|LNz58MHr<+q*I6|-jL z$)vbqBeQy1T2T+sp^tD#5#FH298OMFmR3L@)lqlYa+|C;#P|I4v~6NUBv@JOfhZW&{fF!v z=zf5iQ=|D#!A9e;@RPYumQd1=M^mbW+k`lGQbsw0J-hN?s+0D@43{RipWb7-?sDzj zjYqn#uCA;Z(Di_tq5sAV?%J_P)F!u2GP&fn?>V|ZH8-m<`GYRg# zKl24r3YW`QS(U%btt(4vAF7{$O@0PC?mLgo*jYavlD*$vGT8VpR@Gur384gsFaBwF zt1NBRi`AxXdzHkT%5)BIrr^~a2=S&VvVJHX41{NYG@y^mvc#hq9#%K2j{txt!o^dh#1Rg8`J)jM=s{pZBG9m|NQpyxJg58O8OeCh?C z`WEsh$|J(g@M^7*5~=FQ@eBh^W^~nKex#+UipbQ|G#U2nS{nfF;E|J&=Tc7pW@u0@ z9{btyt9*dF*p!Pj`85=Gqd_9FlXI;keD0W5qRP5QYOpdO8Uxeu{)Q8LKiNNND+6q! zGFojF@+SkJ;GhBzr`M!^xrUjaDOvSpy| z=k%g*gBwoxi@sbi$5o_kkYU#op3Y=q*_;(8+ui`r7<^V(&!)j|8*rvHJJA z_>>1!K%iH-wY0%sx0WMN;EZe|a=z^e4x}@5LFrfz16qWKsn1n4#JN#}Z>nitqr)vs zmgovEi25fs9ElnqgjY^$d`%2?v?d+DXW=>&{xDUTrTbZzHD&$k#HnnzlkVoC@7eAp z<&5*St9ut=CGFY909`o~9ac&9F|v(vrVw($M|o>%z%_tv#SPV^>GgGWqx0X0|5yrn zLu>?uxksFqfraUym#(N6C^41Au85xM$CIN_p|pQcB+&b~1rx~Hc;w}0l~?pWf9@41 zd%|BwmQ17`Z=L&Fw}-YcyYnSD$^>?n#(ZMrh`Wzohj_qd6{>zfUB#*W@GEm%w9@ zzPh>!XI_q`q@85gs=!_VF@I{U|-Y zmb;^)$ze-AM-#f=iowY>je0zcQ$(GZ9Z(eHb?^0)Xh&f$m^d}$Hq!C>#^CqM+koDq zIZAU=QwAVHvXEc|yNP0`#arZ{O~YE;0f2qq9!v`cZkf?(O0bgwSLF1?;-XNAKluL3 z$~f*XvZ!f6W`?-WBPBC4v(Vy?Y^KA7+UFn;POfLOU!!949X%ss#dr$g%Q)_umyDy_ zMpwjHy}`l3a9YI=*o+sa4!zCpL)~HGd?5P_tWmRBsK*4Cc%Aj}5l|>Tip)_;zNA6& zY0)gm`dcB1B-=Az_8ENbE}LVRhPDu@{Pl$fL{T|d1}fLW1LWvI`Fk0?H4GAr(%Z?; zLvR&8(3SSTT7YM{W=FTT&mBSA6A~J#UC#fIu9Pp8sDuiig`4me4Opw}aH;RE+{ucG zU%!^$brDS$1PMQ90L=so{IH^8I=_V~U)4k-jnPRl4okj~#1_c96q;sIV-RjSvhLl@V0_V?VX3(YfD@-S?43DaC6 zl+M_>+E}O8Vmj_PS*)b*(rFey0A#EG-s|4oos&)1`gq*h$0s8Jk2>HT`Z5Xr=!G0T zNC5=$lpJ3^fH)0)=Pm3l$SO7d4!;OeVhVk0cE;qWf%fabMaX8Zi4<2<@t^A@DxGXh z8wj&1H@~*KzdI1(;dj61H|9z!^Is9`>g}#1h8q_0{0eUUVXi=#Un&+U@CG29xMj!JqK5@)E<;8L>>Rn+7f@5+J3?o<&U>67$9kG(KUclk-9-EK7EO*k zzN!Y55hOL|hNXi1+;BsBf7w1! z<=Puh-3eHeAu5;eij03Its-PVOTuf(3%PA``+2jKl0~{8m7R$9gQMt5C{l-6yL+mm zvTvmkzC=W{M@Fv0wJS(TA857Z<>djr6MJFK?I?JS6qG~2v2!-_C4+Bh-Io}H5|8?M zKojP+WmY97dD)u5D`KU%!zmcA5M51H5#W;kslNQ=-XI#@DdA8iOt6l)b~GhaSyMF^ zLBdX@L(xFZ1&rEHn=nA;Jc|g}Pzr)dUA?nv2{3?C*Tc+|AGqT#y?jf92WtQI^*y~P z5SObt-(b4{>loCmT=o7iq?UcMe&&%XXiW^l_{uyl%8PuUT_6xEE$d!r3i5$q z=zrO$0hE-K_@tZ>NydxvtOOE_2lK0V+GyxF9l_DZoz&@%k`s?={R;H48r65?zv&r_ zjx#h*9o%c*t@!vh4I#8mnac3($+>?SAn2Iy`-vFz;t<<@T0HqbX{TG5j~0H2E?%SO z>W%tcr+S(qh&6hfDXK6|4y@9=Dg{#jFL zov5fnjk|M&L0nld-JD%e?N7nbAy^si_4RFi8X3!tq|Eg(HA;+0Mm>XRX0|B7_(q^P zw*sjll{!lM>QuY;P#oqA=*Cu_fQUfuo>o zRPPAtTx$d49$0Jn6riD?fGHn!?&x)5Mr1-6;BG+Dg!o#xajdp2Hp8v zGKOX)%lEU-Tiyix-ZW9n;K3iyW7KJMi*;;7CuCgJOFou~j*dQixLz5XPb6GV;B&)b z>8*Q~G9Y10*eqKsiZ3KcL&JvS6pDcTmAv4>`e5JjeDYPQA|nziO5jNCaR${pW5Or} zI};`_EG8bq!aqUZfW~4p;U$5z+<)>E=o_(Oi^ZmU2k=Okwzm2IfP^D%v%wIsBstcL z&jIWld`kA!Ld;b|&aA1XB8=}vo{@h=Se#p3V`go;VpdNfpY;7q!e6=h{GZylKS)d**tFh`G&ejt88iQ@Gu5U1N8Lt zAb0TB?^A>d*mA^qv>;kkOmJa}shOLT0L2ZoF}p~|h_5UL!QoJnG9%QdE8NrN6{U-9 zBH7AOQ;h$E7nNWN{ph~%uo^AiDIVcQc$H%U8t!#i4&6n)c1h0a%WX;4-MgKy|04mj zI0ETEKrv|U>UInmLrYixoa}5?wM2eSPJ9qt3wTXL+okF#jF6BpTGqjuSC;4yL1AIK z*R~=(u?oRWno5PZ_Z`vfG+a&`EWPvPzT|P#`7>}ozH;IR)6r=N_7sE0hW`C~H}Rh_ zBRh1ALKu2KsQwg{gy{h%Vvhw+c3l-#+FZT?7b!jkkwx{JGClh@O2@H9aQno9dCQMH z9wJV!!C(voFi}rB-4}mtV%SLq5V^{G4;<5-wo~9uV06%AU2NrgDBXL;*kJN7|_`6Y> z_eB?Qh4+Ls+c^bzh$MEqjtyP`WC4qu4=W)d;ZJF)+`D#9ipPWJparJkVI-w}4hfEm z!|{pej;nJU@(G}msm==?Zl#q<&Ejra+FdDBx0iM^L~L1B4|(RlP51a03&ps1hE+)t zo`3)$fsc=%U4jY^O(<(=p$Hkp+r^f+3~Y-5^qA$&OF%gbI&Zguq!R_`-e0ie3*Z!E zMXy;|W3D#fif3wm{rVMC9RR;7sYf;bQgQbx0I5T)zOj+c_TB@Flnd!=kL={sGzevQ ze&Tuo;`)<3gD$8 z(GBkp3PGtLvUo_G0iRNc*E^vv$LHy2Y0I2v><-)`ES`sV27;V1z_24Bh~0=#-T1UD z{SN0Piyb|{<{*h3-E$e;yW~hyBo;3LCfY+yZWaFz&3_KE!+||U-=-!#D`5(&%)YjC zt`%l&16vo>YJBset>ppL(v?C~WKje6AKo^&du?@tmqw=dO5>6%Fv`1}3w$ z4&-}qwOLqL!0E3BTzcXf-$}8z&1F6maqkT4OG!w)Z#5jm54DO4>Z4Q)l&B2g) z#%19`Ida)N+&zb0?g)z@*+ir&g;F_}}8;OI53r5B5>CN)7I%^{| z^xoPs9kp^z<+bKxfr1Qi5^gX0Nvn%Ps$)C5oAZnK*IxcAGot}_UU!3T-Y*k*H*We_ zfdF8vB$5K4*kox@@AfQDD^&70f|mnQmOTcFjuNh0W%nl=S)D|JUfdCLod&!(B+L?# zrD+Jx2uAN{K%m>e<6t7=-AWmnANcoAMaPE}1bFc6lRC11xp!jEGN<1Yyj&3~kNat` zON7cp=P4+;PKT;a$1X*U(yhyctKEVtkV}<=EcOxFitZH*FB^=Hk^^58mF@%Cdl}QN z|1=ynpZB+6!Vrq<+0Yx4#I7X{Z#@~l4Q*FW0NTk9wkOBxyY;COl1%&z9Zow{Etj!f zpIocekJ8xt{?9x5n*};ufA)hyOkpe-Z~z#CRcvVJ=cMLUyb%mV&~cu zM}m%y{=`y)2pEUcYu>&^7z-CMYx^ejN5E)WGpXmR{&vtM)VUPIIX+Z-F_cWPG&bui zD|4=IJm3=?I!^G)UXM_lAGn~oIU;2(z+B~lkI(pY2ADX2-uB?UT#=Cwgq8w{21tmX zYaJRI%EXzqw)|yYY%l@hRKN~CMFml8IKVdE90Gm)zIEw!zm0(OjEqco+4pl{VU}p( zdt{(G5r|%)j*#)?_Kt3BBsUvL4J*%)U6)qp!-!(5)};odE`@Lca2-~1fbgopG)_u8 zyTjq^?K4jxwgQZ;wKdC-aI6G6osdsv+ZejtvLB_L6rS`-@B9*3{SjS5#8hFZ-@V1x zi)U%@ig+QJ2faJ1Y;(5{`LnkVFRLJ6oh`7v8$MKFd?8$Cjn@o!&~!Dw0x@+si_|L)Kwe zWhVV-?jF#2O2jH4Kmr!cgw@u%*Is*H?SBH!83bP5qmdS5IAClBrmBt8wN90Sk9hTU z#{bsyInIvd)|gD#x9klKUk_)N9$r-|2DGxQZy>Jj^y;-4N3c_)FAr9~W?^9|2Xc6= zpZ|aw7X&SeFD@|9P2-P8@}zm_nt+v$=(S`5<;?-tlQ4sGn>fBrcn0J-kVB= ztgP&ny*JP0`Tw8eeLEal>ZtGcGp_5r&hc~NPDG#quRY!d>`&o)_uhzqos0*j1SlE{ zdds#Ws%^&1zP-D(S=x&HPA+vkwU6d(GJ}}gTq3A_@pr6w_iy9&Ec{h@)w0ct0#P)t z>S;FR*0Uo6J91^1%q^|ou}X4aQQ<{cW(~!}#H0u;iF_=G-gNQTaPw~RzV+pczEBZ=6s10M&(JBt0chLsYv zEUye@6j)i{Gug=uwZnPDPOe`WiPm%2upW#oK3%4R^sUg*tu>}7FXJ;vq!C=`*L3Ml z%@%gj_X0*AcqNQ4G!$)ZZKv)PCqmCNeOHaQ^$YlQ-9kWiJ)ha+|vN?cJiWe(~C6ijxlNcm`vl|EG#VW9XPaR%AgUkrH+V*h|9|AuWJFZ(#W%sn=qqPoGBupE}op7R#46s zaN;sGT{9w&Bp@sxkBB!^j@e{MY;(>*%u|$0hN8@ebR~7un>Vb01a?OgrkECg$ zmBPct6F1@&n*#TlfK;}x%)dfH0YvCemZCOl`(Vh zUoO@@fmhp`cB(Rihe#l6cpuLsCjTd~vXSZ+(>TV11dj|>An{Dzp24(dVxl{YVx9oW zGv5v1Q(JfH6AS& z^So{38FsZkR<+X1Rt*3OMww<^isz;WtJsS8d!ZVZsrdM}arrgn;`*YuZ~iHQ`a%51ct?ffE#14gAuZKtn)L12IFa zH<767AB7cK=a-j97vwqA_V)L8XP8f z`(f;82y5&03CtwUXIzWv(qWhn*)T)G+6OD#&|VE&-`nH;K!i?1PXivrPux9zQz>I% zRaH%?tQZ?VjUe+Yu^~Xm3hA5{&DOnS!JcGu+eKsWz#={>J-+XXY>VNLI`o)nJ|)to zG_L#fJ_rg2HuH8ek+lSAW)5dMW?2`ZPQfj?XAecaID0na4zrmTJ16EOgZvn+m4NF525BnoQQTI`m5)f2gjlDx6(=_*<^> zVZqq_Np+2g@+QMZ*WAya!$*HniJAN;KDQmn3+Vi#ST?i{e(bvoy_KHyF#ZM`eBffU zLWV4CnoymhS5rFdq^1zl1qR%`peTuZ|2||!#)qQOPe0%rUZ&i{)VbGt+7EDRO8p?4 zGtJZ}dJ`wi#gc53Jyx3;l#!0^@WwGPIhi^pX4EU{DeFDfo&+LYWkR^GN6UFi&yne!JH?CzY~Xt3KWyDwi3u-A4FW^%gyZ~i+u{FS zYJf5zu^_>5%)Q6E%x1120et-71^Gyns{{QOKIwB|R<;SIsTW#WL1m-9VOrw#NF>#h zjm~beb7ENuG@qsXalB9|HuthlgcwC8Sq=S`{X7{ZPTXstfcp%J9+ z^^F|?csrbI)O>3@4_y~ z5N`qxKlZQQ=z4`+$5T5jT=erVVHBQw|q&xILw3{qOS5b zHl#M0HYY9~|XHWU*>+O1JQPVul8@Q&6MOBw4@>Y0AN(}&VDi86}z z9xjk^p*EIJfgIkODAGQ?e!IUz+bq_rdUOZhW8&$o8kZTUZ%&iE>b@nXuC5+dL8tQP zjX<8#Q2A~2pFEi2mRhcP-|t`rwewClRT1?VkN2V0yZ;6|4s@MS5S$wC-kqF_P3x}AXy+j?!!Cazh`7*#0#)6 z4B4ec{hOfG)|tjef3*H3?((>2RIc0)y9sTQh?5NZ)VP&f=z}&*G(ZRA&|CLTuJ>U$ z;1d7+TYt#eT9}qz+LJs+3d`Vbi@(r$?R=N9?EQjgY|N}lKjvAn@BX&d=KLX}XhVgK zo+5mw6Bsqv&cI#;6_MPtSGSOcCW_pYEk`tB27;3BvMa~VB}DE05;OZ1%pYSQ4dE-c zT5b_kwaZzcR6e-PR_%whI$g=iDJ+Z|WhBiA9*=Fc20Vm5aS(C8Tf9<)F}7EKbEfo0 zI{^w)VA$r|jMY>o2+;A+QNhmn#;hGen;txVMuF?BKD(OFq~TYB@0$}eH*cEJ_VH8U z-jRQv^~UcSI4ePh1Kkif&kDawND#0dF04sydid}mQplqjQc!?qxv5~a8NWsh5b*X8z0Cua&zLJSmcl<|gm70G*84&4#bnUU7$>a5#%IG6V|Rwa^YbzG+qWSJDbtB^!9J_6R~lvd zB{}KCe2wuU1erd0m*k=z%L3&AA0@CnpFy%_p@7NnrNQx6+16WZ_2Dw#M*4^fjxQeC zlmYew1?~cx8wW?)u9gb)4+6U{X_Q^>)0)oRj7hbyF znv1vpMT!$kGHmq=<&Wsl{3%6PtU8Lh#oXy#4dBqgn(rHfTkbB{;( z!P7c@M*=V=Czikgtnbg7N5jQ;ieXWei58JmwG_$MI<@D+v=EA9Rr^>8iDW39)_!52 zuN#u?^FoCg)P{k~p5dbVOnj|iz`(!$LNxU9ffvdwbCv@>Zd6FtYyNjwv4LgE#4mpm z)H$3n#~{y8eov^@d7gDlhkXoU!+zvQ9HEiqhWqZzU5ibS)<6fZ?_rmC=afIBNQIj$pIqOPwa z&`OTEU-xHrXG%Bb3|bPC&^)w2pA^8tQU<5B%7!Q47De>eFE(keb7TYq#ExYnSZ_5D z9~pj_Y{z;xH46yeqLGpzx>x-MIrah`85JI`BTFkWc%$v??b*69@$lf18*#PlR%?cP zZ8eZxFcNMMM|P)(nM&n9X@;wWRNJ62{_#Ig<~rtcegi4**+;1DuHjPc9H7`SZlZ~G zkw&PguU;B29~n;)Ai_=zTLdSa+89B;)dQJCA~)UEuH=w_iQGdCK{jb)ok_nzYPJ1y|ILXX~Qjy%KD5@548N#I6LIwp!9~#kVmrN(Kh>&?3>&(M>WGw}Uzxb`NCZ zngMPEHa&IvI)QkpSPt$BwS`=F{DU;m%d+_$#E$NnDE-xoTqbLk?|OapHx1LK40E0hb# zNt^%HGT7x55clnKj&ngKV5r#j_wdWui>9Am%|@4NBX?at1+y~b`KxX-KOkX2QNSiv z_-ElYb9zbgmRBf|JuQQ0d&Og!rHNzQr*d3eQfNEfId@p#Yu`qAdX!z9>dS#KO&-TDNO(S3q}M{y}r&3DmUy=I==x-d83mb^l`Q-K@o8`i&Q@_##5JoXbv)V(aCN z)4YYxxElCJ)EHx_JblngrF^5Rsv-Io;GFJsF*eeC&)~QGUvFBD#i4G>OI6^t(0A8eAvJ`4G!W0Z~VkRes4J$Zd2h zd-7w=CD*vsH}IECJYX8nD=l(LOJlUMmlqtw98Pvjy$?rd(T?(3Izz1{5gRNwO*S(ay?;>UdU^TYa5tWJLZG#;7taV1iK6k-@A^32bV3X96Z z22a-2)ZZK){%JnO(l#noQ1YbJ=6a@;2Io)`Qqr4oJ(SmQKt{5U&*SqmE_}Kl#@HgG zx(fsOtQS>C28uu&mSA-4Lf;7ul#~-oJCqaBPX^Jh4;cna%>7*YY5b!;#;Ck~7-I0H zEhIvVQ>L7tu|?nCXT2r3q7?T_A+=(!Xc@JdN;bN47;lowQ;#py?+d&OeD*z?zuG3> z`8sSLd~vmu?6AjvY^LsQeS7P?4~sZ5Xd&<(3s3i3MFbxGWMk@(>s}WQL{CkxbWjht zJ4WT#*fN5uld8X=lHK9zs&}Uo^1;q;UCq# zUovvf;6PP2* ziwx0Ro3WZG(Ybqdu_Eg@nhdMNeYT|$qp`hv%cae_8fR~+T_Nvj-Xwt`{Ewi&vHr8! zdc;HZT?-6Sft3Fv|Vx8-1iZ7by8`>yB zE5q!#&lq?a3yjTk9U7X5~I=`crH?a334EUecU&>o|J0KkIsCH-qgTLxyeDQu%D5+*z4niQVF2CTec#T_aa+cyZP}! z-~vd}O*^}|wA8L)9K^7$Yu@|s^iQoX&6ob9js;g1E?yGN)N6}+(`KXe3rA63y+Z*5 z4!0biDDuzYyTrz?F25T!dzuaxK9wITNKQ&}%D3+S{(au?og6k;;k%#Ag~9wM1|~Wk zF9i+H!v@@C_WSsh%Uw4`Z}7cey6ItK3-WM1v9nZGXhoaX9Jx!a$L-n`Je$KF>s>qmE!z8Tw+L8a6QBR>A@q z^&y?e*+ntjLvKxyLibvf@_Im9LyOn`?3vgL$Cl4OwT*-Br$surpP%*I3lx$>mH+)D zVMlpe7-b+*U8Qm`j-Hfww}HHCT~i}Y7PFe*JtyxqN$+6w&7r+Upl12jOHa=#+*5ffQ-c0{gu0rG;~|Tg8g^hwB5x5livceZ(S1q^#1Ju z?b4qlvs8D>SJZQ^)#L7tP>b!_*&0ZN4b`~svPy}avt(88H5u{Qx=L#MGRl+1=p{Y4 zk7npip>H~e`WMwmLCI_Jkm0tRQv9QjkCuwjK>HB|N)He}oE_Ffb}ishfJ=i3)4)Ns zQ5n&nszQLI;8olNJ#5y_#QghbeX~;=MT*;M-Wx-dXP)5-Yt-mPgfA78>yVUu*2NqBm5>rB z3q;Zf#9Q?%j7`UXz1-JJYD;YtcWyxq15QnHPX~3W?ESyW|KAWfsFGEW_oeumNr7AtOp z3hb|!%w~Cxb7%701ifsz9%FBf^6{?Ystnp zl;`w1J=X4$C)bAlQ7X=gC-qv9_>D-B8t#SCP9Rl=l|{C63|rNncKx)tOW|J@)NT?y zwoV}t{nkQ|c6UVA#(gsMamI+=ORJvMUpBZwWNUYAF8O*DZ=smc%sPs61A5@PHFX1Z zik|Nl>)b@$*yoI`xfq?JphBV~3t$-k3s!BoN^;%3>$tc0kp6ES{R~wL79y@lSOu9C z_9qcvvHLc&gbc=0$M86nSLM&uAU|5nmNH$e3NO_8)9OquM}zBH;9zs9z0O?(j66Ev zsEZn7rFa5*1*`9Pww_uzUJqh-{6YzjU%h8m&xyj5<~{?eC(=y#-VYVlUF8m ze%{zV3eGl_C;f8ZsPS9qcYJ(iK-GZ@%qj*+@p-!V@uA7Sys88Fq@=6uO4oZ;jE0q& z+2a)(nCGCv#N5RvX8;s=mTYa;`0 z$hCz{-Mg+}_olP&eT5(o3Cr>YW0qs#>XOS10`}^4f1^A*t9>bK7WRQv+89K~?1KVS zev&9Xb|v*5g0J7|P&~B=ViK?X&6mQ;_geirM44J+{+j1!&n`E{jo+%X^pn?xmc+h0f}&i%B)!hylYA@A(52tsM?#DS z6rFFGA8z6wk7s$$gOD2!Y!3!MYjOPQH{ja4s;To@TbH8}fe9>7*1$Z&`|1#mLe~vy zpwEe|j~Rt4K^Xy7OjjsbPL1O5*NRn`@F0wH;Z6S#>YoKdWB0pTkN98zq6bE5S$FK~ zYJJBGcbpg|zPYLg%F1jY3Wf?zMMX`{+gr+|fx2te>{mYcO`8{r_s7bG$zR(RjsA~J6 z)bpQFS9j0s(n?l)zp`&To&7Zx0VbPXQg@)ARCvmw%gZ;L3~>g*iqh09!ErV@sQfs% z0u$)?YmRJ~%dy?z&dLsp!$f}$M-(>Bz7XFT_ux!%5j~5^06o;PVse~H;`k>jQXz@# zGuzKknwlKuWVs|P1fh16F-s=jylwl6L z3cb$=Zw$NIw0vJeRPMg{K0d1b8c0cTdPbAs96&XVx$18!q-L{svWU-g}5LjW|Jbz$F3e_?)pQ#MI4_P>!WQ(+I(FA3Ez zQBqZnkoBcNM6)po2?-4rJYj;t|JkPFB<_rUYr7GmMUgidI(C|yWRaU}Jz(6Jz#2=x z7yY8sgul&%e-^}px)+QUdQmX(wXB|qe4)M2`cz-hDla>_fqKj`Cpsb!hDthg6yz9v zHKZjrY3n@eV;)u#wJgyZ+^58a4cH+?qyA18{QMy@Yd!lCb10lx^zPCgGR5N3yyW-tfZyd^uVW_ zj5Bcq%A$vWtaCLO@B;3%f-Add?ET>Hqw5-rX|-_0z+V}Xc~A;Nm3>oo zJ$#4*bs1Xi8>;&xA2G`99UMN_A+@0M&O$(rfS;e0McRQf@iC`499;^*v-FRWh zoXn!#MC$3)*wTQj21e!h)N=pkuDgb@@ytd?J!Ft7<;{&($y~=qM?SDs;}+H@0N{ot z9{u(6ZtDfUEXU)F zI`fH=u}eK}ymBMHrj4=(hOuL4Wh-L}_Rg_Hm6d|Ks~cE5Tj{ZF|8f5a_4GcNZ+73x zv(Fw5R-aK<;mocSCAD-Jl3zzZCgBXXlt4wQym5vQfc zWain)$Ig)rmO2yVXx;KvVDQ{O$l_E|)C}A| zq2SePqw8N6MSYmsE{S1xV$S@q5rx+Wqs{0Vdwltw>ZkP2ANZn|k&ok#J-;nExvc%h zFl=xM=vxA7rxgtyolp?T3Rexjm8#Z{o|-an`8SMXh4P_vct(+x1o{^7?nli=+hg&A z0j$Y=0+4+O(qs3|~HaQHn@Ex-n~FhH1T3qTtn( z8gcbgV8OfFZ>&xh=?;*0Q{aksv64s`l?{AGzXj*tr@Oj&7eB<+C#&w%&TdKOpLgj| zQsLFxxl0?l>+v;F;WaVF(lI`nZ2EQSdE5bCWHSD}C)JZTT_%R_>VlZj!yH9%e%8G# zq@=thg=(~wo`r?QJqGnYnGfo_Y!1@!L6#CciH~mr#x1%khOnL*T(ODpdNa{cwZ#5e zba7$w6_PmOlp7`R$sX*+$q=++`8SZp!Nr16?-QEsK0}#RH*VYGHscfaFu{)GwgBnq zcQ^^nx}E;kJdC{}fkToqHtx|LR;;pur-=2h_l^^kKeEEcuGSgn@hLW(D&9T=}LOZ0 zExf;_qDY6_s>C4?kNL-S+rK1DD)f9aGEe7Sek!DT??=};=(Gr3-;8g_(9z-81NY_emAJULS+ZKa;#wm<1X=07TYhbrnbJc)GV)+A*XCN{*};4f zUn~AUF!G3SQ6O9e;L7FWBMs#$c$v`?Di1C1x-%#D-Q0T-e<2=QMNJJ1GD%KqcUv`# zufhpJn@G*t*1_;Ve>1BQCJ)4bYZ7(BVJx@_nN>Tgy zg6TPHyj zTj-Q(pMEf2!?GM=AR3E(N8!NCXdniWUt7=v6*a#SFlQm092@9Bh7`WLYX zt(BOZGuu19dad}^`o^fK^Jm*H2?j4y6wB@I+Xt)C5fptp<~?clI=aDffTlpjDMT9M zd$y)*J5d*3i=1ck!;c&k4j@*|s$TqlHsiuE>T|`Uhu=b#mZ8o;$!8Q?km)(WVORY; zXXFdmAfu*QXaM7+aBMxunyX*MqC#(H7o+s&gM;FRZb19vn#)SVB>68UDMBBxkEU%Y&*wb&0HBxoSAJOD#{@#1o zddrO3yVeSikV*Wz6`f!q0swydfz0!Vw@9UqyUg7WtNrE_p4~&3bW8dL^9oR$2KC~k zGr$EuNW+aYl13On*6uRly@qhV9$|GhzIfX)Vi&`d>T+x9Ge-fiqJ z;Y{jYviakaptxtuhp3FAmD8^0Ne>2fZFW}8V{7+luun(mu6;9V9fsb_QZF7ca?2?N zV=L!tcgS~8;Pp%2K$evp!p{h z>bK;m*NpZhv$H>RbaXJHBs7dNAb7t0*@58-vp8CkcIQTx4c`Wg;yA9T?y&i%vB9|b z^z;;vx0R}KTM?k$VcFHvQAT3GLx#_gCl)+tY5O6w9@L?0Gmp}~k$dOSUxHaH>zzBF zf7+?PsJ6ak-<0jwD&o;Hs&V(333aHQCR!UmtL;<+#W@lEeAVIhBpuPubdrNCpd!=u z%O0X%?e&jA=QMZd$$xDhyO1hw6E|8>G_XdZfXyXTn8mVb6GkHtWH&B03=F0dOfiycS8(m^MIq!jTxWs%}deli6{qCY>3 z)Pe5RXPz>Wg0`A#{_GW0{l+th+DRT4u0__QR~0XJS^w6wEZ7HWl8v0LSRS$w6Dr|9 zJbt*7xEWOYukJ|#m{G&31cQ*^Z_()V#wc|;IVeVDqPefr>PSCnhQn-ecx>$Ekpoi$ z;Sb}BJU}MLE<7OU8%W{6xink(m2uNP!LS7Kx0O>Kae7> z1l1e|BNJ7ax;Vq+qWFvZ>|hz5+-~QFoe_~ujrphkHPO+Pga6QIf$kHjtDTLwHDgV! zce_&wu?vTyGogK(p`F$}VSH23D>6orDP7t*Lu|ps3aAPlxK7rL U}-2H9LP&6G} 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

WUc5Tzm?X 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 literal 0 HcmV?d00001 diff --git a/assets/js/021eaa84.7644475a.js b/assets/js/021eaa84.7644475a.js deleted file mode 100644 index 0e1a67f6afa..00000000000 --- a/assets/js/021eaa84.7644475a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7875],{61708:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>p,frontMatter:()=>a,metadata:()=>d,toc:()=>h});var t=s(24246),i=s(71670),o=s(92975);const a={title:"Release Notes - Podman Desktop 1.5",description:"Podman Desktop 1.5 has been released!",slug:"podman-desktop-release-1.5",authors:"duffy",tags:["podman-desktop","release","kubernetes","openshift","onboarding","compose","extensions","settings"],hide_table_of_contents:!1,image:"/blog/img/podman-desktop-release-1.5/onboarding-selkies.png"},r=void 0,d={permalink:"/blog/podman-desktop-release-1.5",source:"@site/blog/2023-11-03-release-1.5.md",title:"Release Notes - Podman Desktop 1.5",description:"Podman Desktop 1.5 has been released!",date:"2023-11-03T00:00:00.000Z",formattedDate:"November 3, 2023",tags:[{label:"podman-desktop",permalink:"/blog/tags/podman-desktop"},{label:"release",permalink:"/blog/tags/release"},{label:"kubernetes",permalink:"/blog/tags/kubernetes"},{label:"openshift",permalink:"/blog/tags/openshift"},{label:"onboarding",permalink:"/blog/tags/onboarding"},{label:"compose",permalink:"/blog/tags/compose"},{label:"extensions",permalink:"/blog/tags/extensions"},{label:"settings",permalink:"/blog/tags/settings"}],readingTime:8.14,hasTruncateMarker:!1,authors:[{name:"M\xe1ir\xedn Duffy",title:"User Experience Designer",url:"https://github.com/mairin",imageURL:"https://github.com/mairin.png",key:"duffy"}],frontMatter:{title:"Release Notes - Podman Desktop 1.5",description:"Podman Desktop 1.5 has been released!",slug:"podman-desktop-release-1.5",authors:"duffy",tags:["podman-desktop","release","kubernetes","openshift","onboarding","compose","extensions","settings"],hide_table_of_contents:!1,image:"/blog/img/podman-desktop-release-1.5/onboarding-selkies.png"},unlisted:!1,nextItem:{title:"Release Notes - Podman Desktop 1.4",permalink:"/blog/podman-desktop-release-1.4"}},l={authorsImageUrls:[void 0]},h=[{value:"Release Details",id:"release-details",level:2},{value:"Onboarding",id:"onboarding",level:3},{value:"Command Palette",id:"command-palette",level:3},{value:"Expanded "Summary" tab for Kubernetes pods",id:"expanded-summary-tab-for-kubernetes-pods",level:3},{value:"Environment file support",id:"environment-file-support",level:3},{value:"Enhancements to the Settings area",id:"enhancements-to-the-settings-area",level:3},{value:"Improved user experience for state changes",id:"improved-user-experience-for-state-changes",level:3},{value:"Extension API improvements",id:"extension-api-improvements",level:3},{value:"Other Notable Enhancements",id:"other-notable-enhancements",level:2},{value:"Notable Bug Fixes",id:"notable-bug-fixes",level:2},{value:"Community Thank You",id:"community-thank-you",level:2},{value:"Final notes",id:"final-notes",level:2},{value:"Known Issues",id:"known-issues",level:3},{value:"Known Issues: Podman Desktop 1.5.2",id:"known-issues-podman-desktop-152",level:4},{value:"Fixed Issues",id:"fixed-issues",level:3},{value:"Where to Download",id:"where-to-download",level:3}];function c(e){const n={a:"a",h2:"h2",h3:"h3",h4:"h4",hr:"hr",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components},{Icon:a}=n;return a||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Icon",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"Podman Desktop 1.5 Release! \ud83c\udf89"}),"\n",(0,t.jsxs)(n.p,{children:["With this release of Podman Desktop, we're introducing ",(0,t.jsx)(n.strong,{children:"a new onboarding feature"})," that we hope will earn your \ud83e\uddad seal of approval! But wait... there's so much more!"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Onboarding"}),": Guided setup and configuration of ",(0,t.jsx)(n.strong,{children:"Podman"})," and ",(0,t.jsx)(n.strong,{children:"Compose"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Podman 4.7.2"}),": ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman/releases",children:"Podman 4.7.2"})," is now included in Windows and Mac installers"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Command Palette"}),": Gain easy access to various commands via a new keyboard-driven command palette"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:'Expanded "Summary" tab for Kubernetes pods'}),': Go deep with extended details on Kubernetes pods in the pod "Summary" tab']}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Environment file support"}),": Chart out environment variables for new containers to access on creation"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Enhancements to the Settings area"}),": Get your bearings with improved Docker compatibility mode controls"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Improved user experience for state changes"}),": No more dead reckoning on container state with improved visual indication of status"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Extension API improvements"}),": A boatload of improvements to the extension API enabling more goodness from \ud83e\uddad Podman Desktop's extensions"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Podman Desktop 1.5 is now available. ",(0,t.jsx)(n.a,{href:"/downloads",children:"Click here to download it"}),"!"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Podman-desktop-1-5-hero",src:s(90973).Z+"",width:"1920",height:"1080"})}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"release-details",children:"Release Details"}),"\n",(0,t.jsx)(n.h3,{id:"onboarding",children:"Onboarding"}),"\n",(0,t.jsx)(n.p,{children:"We are introducing a new feature providing guided flows for the initial setup of specific \ud83e\uddad Podman Desktop extensions. Release 1.5 features two new onboarding flows: Podman and Compose."}),"\n",(0,t.jsxs)(n.p,{children:['To start the Podman onboarding flow, you can start from the dashboard notification by clicking the "Set up" button:\n',(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/799683/280362279-598cc052-5ea4-4c31-849c-da9bbbcc3e42.png",alt:"podman-onboarding-start"}),"\n",(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/799683/280363859-f35b85f8-1dd4-4b7f-a995-25fe5d1ccced.png",alt:"podman-onboarding"})]}),"\n",(0,t.jsxs)(n.p,{children:["Visit ",(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(a,{icon:"fa-solid fa-cog",size:"lg"}),"Settings > Resources"]}),' screen and click the Compose "Setup ..." button in order to start Compose onboarding:\n',(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/799683/280276847-ca0558ab-70ad-48cc-8dd5-67e3eb465a62.png",alt:"compose-onboarding-start"}),"\n",(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/799683/280277936-77ba0fb2-5cb0-41de-a7cf-1a3d6400fd89.png",alt:"compose-onboarding"})]}),"\n",(0,t.jsx)(n.h3,{id:"command-palette",children:"Command Palette"}),"\n",(0,t.jsxs)(n.p,{children:["A new, search-driven command palette is now available to enable quick access to various commands available across \ud83e\uddad Podman Desktop. You can try this new tool out by hitting the F1 key. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4081",children:"#4081"})," && ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3979",children:"#3979"})]}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/436777/270362431-5aaa6a1b-6df5-4b66-a811-cdd148d02ad6.mp4",width:"100%",height:"100%"}),"\n",(0,t.jsx)(n.h3,{id:"expanded-summary-tab-for-kubernetes-pods",children:'Expanded "Summary" tab for Kubernetes pods'}),"\n",(0,t.jsx)(n.p,{children:'Kubernetes pods now offer a more comprehensive set of information under the "Summary" tab, including networking, volumes, environment variables, and other key metadata.'}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/6422176/272972815-bed96f3a-6b13-45d3-a13b-74eacb27a4cd.mov",width:"100%",height:"100%"}),"\n",(0,t.jsx)(n.h3,{id:"environment-file-support",children:"Environment file support"}),"\n",(0,t.jsxs)(n.p,{children:["When creating a container from the Images list, there's now an option to provide an environment file to set env variables for the new container. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4026",children:"#4026"})," && ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4025",children:"#4025"})]}),"\n",(0,t.jsx)(n.h3,{id:"enhancements-to-the-settings-area",children:"Enhancements to the Settings area"}),"\n",(0,t.jsxs)(n.p,{children:["The user experience for enabling or disabling Docker compatibility is improved, with a new entry in the ",(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(a,{icon:"fa-solid fa-cog",size:"lg"}),"Settings > Preferences"]})," screen that includes contextual guidance. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4093",children:"#4093"})]}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/6422176/270497318-902b2566-62ad-4ee6-87af-6a9a2705de99.mov",width:"100%",height:"100%"}),"\n",(0,t.jsx)(n.h3,{id:"improved-user-experience-for-state-changes",children:"Improved user experience for state changes"}),"\n",(0,t.jsxs)(n.p,{children:["The user experience around state changes for containers, pods, and other objects in the UI is improved, with clear status messages and improved animated visual indicator of state changes. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4056",children:"#4056"})]}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/19958075/270027524-f5176cf9-462f-4024-920a-b4a906c7d30d.mov",width:"100%",height:"100%"}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/19958075/270027533-70e152ec-5bbf-45ad-9f1d-563752464655.mov",width:"100%",height:"100%"}),"\n",(0,t.jsx)(n.h3,{id:"extension-api-improvements",children:"Extension API improvements"}),"\n",(0,t.jsx)(n.p,{children:"The \ud83e\uddad Podman Desktop extension API received many improvements, including:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In addition to pushing and listing image from an extension, it's now possible to pull images from a \ud83e\uddad Podman Desktop extension ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4155",children:"#4155"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The \ud83e\uddad Podman Desktop extension API has been enhanced with both the ability to list images & networks and the ability to create containers & networks. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4172",children:"#4172"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["\ud83e\uddad Podman Desktop extensions now have a consistent way to run administrative tasks. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4049",children:"#4049"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Extensions now have the ability to register a custom Kubernetes config generator. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3970",children:"#3970"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The ability of extensions to add commands to UI menus has been extended; previously for action menus it was only available in the Image list screen. It is now possible for extensions to add commands to the action menus of items listed on the Containers list screen as well. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3947",children:"#3947"})," & ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3963",children:"#3963"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Extensions have gained the ability to contribute menu items in the UI based on specific conditions. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3959",children:"#3959"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Enhanced logic for displaying or hiding properties listed under the ",(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(a,{icon:"fa-solid fa-cog",size:"lg"}),"Settings > Preferences"]})," screens is now available. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4159",children:"#4159"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/6422176/271650937-3991565c-12a4-4e6c-a315-9343bfa25f65.mov",width:"100%",height:"100%"}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"other-notable-enhancements",children:"Other Notable Enhancements"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The progress of loading an image into Kind is now visible as a task in the task manager. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4061",children:"#4061"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/42176370/270154775-eb7007b4-fd0e-4287-be9e-40ffc412de35.png",alt:"kind-progress-task"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["It's now possible to start a new Podman machine right after creation, or you can create it and wait to start it later. It's up to you! ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4046",children:"#4046"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/49404737/269941187-f4768833-ecfc-4d0b-8acf-d4afedb428d9.png",alt:"podman-start-now-or-later"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The Podman machine and Kubernetes provider creation forms have an updated look & feel consisted with other forms in the user interface, along with minor bug fixes. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4317",children:"#4317"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/19958075/274694157-fe89f3bc-e5b8-4735-96e9-669fe52c7a41.png",alt:"Updated provider creation forms"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The empty screen message shown when a search filter results in no matches now provides a message specific to filter matching, including the specific filter terms and an explicit button for clearing the filter. Previously, the screen displayed a generic message about how to create new objects of the type displayed on the screen, which led to some confusion about the status of the system. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3988",children:"#3988"})]}),"\n"]}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/19958075/269291090-13e724f7-252f-4915-bb04-00665001d21d.mov",width:"100%",height:"100%"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["New support for adding spin animations to icons is now available. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4188",children:"#4188"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["There is a new indeterminate progress bar type available for the task manager; this is meant for providing limited status for actions whose APIs do not provide detailed status information. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4016",children:"#4016"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["For authenticating as admin to perform administrative tasks, \ud83e\uddad Podman Desktop now provides touchID support for macOS. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4050",children:"#4050"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/436777/248588015-f08115bd-d211-43ad-bddd-286d7b3a7056.png",alt:"touchID-support"})}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/436777/269859758-47581e2b-8469-4e9c-822c-f4fddf46684d.mp4",width:"100%",height:"100%"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Support for connecting to interactive terminals for containers via tty was added. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3900",children:"#3900"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["It's now more clear which container/pod providers will autostart when \ud83e\uddad Podman Desktop starts. Previously autostart had both a global and a per-provider setting. It has been simplified by removing the global setting. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3840",children:"#3840"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['The "Working with containers" section of the documentation has been reworked and improved. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3951",children:"#3951"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"notable-bug-fixes",children:"Notable Bug Fixes"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The disable registry command was not blocking subsequent pulls from disabled registries. This has been corrected. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4183",children:"#4183"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Some users behind network proxies were unable to complete workflow involving the download of online resources. The mechanism for fetching these resources has been fixed to be proxy compatible to address this issue. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3994",children:"#3994"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The status of pods running in Kubernetes that are undergoing the deletion process is now accurately reflected in the \ud83e\uddad Podman Desktop UI. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3877",children:"#3877"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['The image details page always listed the image as being "not used" even when it was. This has been corrected. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3985",children:"#3985"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Previously, deleting a specific image tag would cause all tags with the same Image ID to be deleted. This has been fixed so only the selected image tag will be deleted. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3837",children:"#3837"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Could not view the pod details for some remote Kubernetes cluster pods due to an encoding error. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4371",children:"#4371"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Error logs were being tracked separately from the actions they applied to. This has been addressed for kind cluster creation failure ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4427",children:"#4427"})," and Compose installation failure ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4407",children:"#4407"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['For Linux users, \ud83e\uddad Podman Desktop previously did not appear under the "Development" menu when installed via Flatpak; it appeared under "Utilities." \ud83e\uddad Podman Desktop now appears under the "Development" menu. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3911",children:"#3911"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['Podman Machine names are no longer prefixed with the "Podman Machine" string. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3878",children:"#3878"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/19958075/267378447-aafdfbd7-f005-4b94-8626-9e11eec61b95.png",alt:"touchID-support"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['The initial action state of pods and containers was being displayed as "STARTING" regardless of actual state; this has been corrected. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3889",children:"#3889"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Resizing the application window no longer makes the last lines of a container's terminal invisible. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3993",children:"#3993"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["An issue with incorrect terminal behavior in response to long lines in the terminal attached to a container has been resolved. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3955",children:"#3955"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["A spacing issue on the run image form has been corrected. [#4089]",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4089",children:"https://github.com/containers/podman-desktop/pull/4089"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['The "podify" icon & button on the Containers list was unusually large in release 1.4. That regression has been corrected in this release. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4122",children:"#4122"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["An error in the instructions for Windows users on migrating from Docker has been corrected. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4157",children:"#4157"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"community-thank-you",children:"Community Thank You"}),"\n",(0,t.jsx)(n.p,{children:"\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make \ud83e\uddad Podman Desktop even better. In this\nrelease we received pull requests from the following people:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/afbjorklund",children:"afbjorklund"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4373",children:"#4373 - docs: fix broken links and add lima onboarding"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4372",children:"#4372 - docs: clear up lima column on containers page"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4091",children:"#4091 - fix: avoid errors with unexpected JSON input"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4098",children:"#4098 - docs: Lima onboarding details"}),", and ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3854",children:"#3854 - fix: check if machine init rootful flag supported"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/axel7083",children:"axel7083"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4061",children:"#4061 - feat: adding task progress for kind"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3970",children:"#3970 - feat: extension can register custom kube generator"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3959",children:"#3959 - feat: add when property to extensions menus"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4016",children:"#4016 - feat: indeterminate progress bar"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3963",children:"#3963 - fix: ContainerList propagating containers in ComposeActions and PodActions"}),", and ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3947",children:"#3947 - feat: extend menus capabilities"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/ayushrakesh",children:"ayushrakesh"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4415#",children:"#4415 - Update README.md"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/eltociear",children:"eltociear"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4194",children:"#4194 - Update README.md"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/foxydevloper",children:"foxydeveloper"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4157",children:"#4157 - docs: Correct windows instructions for migrating from docker"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/harsh-solanki21",children:"harsh-solanki21"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4162",children:"#4162 - fix: Removed fullstop from summary"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/rahul0x00",children:"rahul0x00"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4240",children:"#4240 - fix typos in README.md"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/shelar1423",children:"shelar1423"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4221",children:"#4221 - chore: document property setting in EXTENSIONS.md"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"final-notes",children:"Final notes"}),"\n",(0,t.jsx)(n.h3,{id:"known-issues",children:"Known Issues"}),"\n",(0,t.jsx)(n.p,{children:"We have a discussion board topic where we have posted known issues with this release. If you run into problems, please check this list before filing a bug - if we already have an issue open for it, it saves you the time and trouble of filing, and there may be a workaround posted in the issue."}),"\n",(0,t.jsx)(n.h4,{id:"known-issues-podman-desktop-152",children:(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/discussions/4635",children:"Known Issues: Podman Desktop 1.5.2"})}),"\n",(0,t.jsx)(n.h3,{id:"fixed-issues",children:"Fixed Issues"}),"\n",(0,t.jsxs)(n.p,{children:["The complete list of issues fixed in this release is available ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.5.0",children:"here"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"where-to-download",children:"Where to Download"}),"\n",(0,t.jsxs)(n.p,{children:["Get the latest release from the ",(0,t.jsx)(n.a,{href:"/downloads",children:"Downloads"})," section of the website and boost your development journey with Podman Desktop. Additionally, visit the ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop",children:"GitHub repository"})," and see how you can help us make Podman Desktop better."]})]})}function p(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},90973:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/onboarding-selkies-3ddb7cb6ee2cf9abed002b01f63b1822.png"}}]); \ No newline at end of file diff --git a/assets/js/021eaa84.9d53fbae.js b/assets/js/021eaa84.9d53fbae.js new file mode 100644 index 00000000000..14a8f1d9265 --- /dev/null +++ b/assets/js/021eaa84.9d53fbae.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7875],{61708:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>h});var t=s(24246),i=s(71670),o=s(92975);const a={title:"Release Notes - Podman Desktop 1.5",description:"Podman Desktop 1.5 has been released!",slug:"podman-desktop-release-1.5",authors:"duffy",tags:["podman-desktop","release","kubernetes","openshift","onboarding","compose","extensions","settings"],hide_table_of_contents:!1,image:"/blog/img/podman-desktop-release-1.5/onboarding-selkies.png"},r=void 0,l={permalink:"/blog/podman-desktop-release-1.5",source:"@site/blog/2023-11-03-release-1.5.md",title:"Release Notes - Podman Desktop 1.5",description:"Podman Desktop 1.5 has been released!",date:"2023-11-03T00:00:00.000Z",formattedDate:"November 3, 2023",tags:[{label:"podman-desktop",permalink:"/blog/tags/podman-desktop"},{label:"release",permalink:"/blog/tags/release"},{label:"kubernetes",permalink:"/blog/tags/kubernetes"},{label:"openshift",permalink:"/blog/tags/openshift"},{label:"onboarding",permalink:"/blog/tags/onboarding"},{label:"compose",permalink:"/blog/tags/compose"},{label:"extensions",permalink:"/blog/tags/extensions"},{label:"settings",permalink:"/blog/tags/settings"}],readingTime:8.14,hasTruncateMarker:!1,authors:[{name:"M\xe1ir\xedn Duffy",title:"User Experience Designer",url:"https://github.com/mairin",imageURL:"https://github.com/mairin.png",key:"duffy"}],frontMatter:{title:"Release Notes - Podman Desktop 1.5",description:"Podman Desktop 1.5 has been released!",slug:"podman-desktop-release-1.5",authors:"duffy",tags:["podman-desktop","release","kubernetes","openshift","onboarding","compose","extensions","settings"],hide_table_of_contents:!1,image:"/blog/img/podman-desktop-release-1.5/onboarding-selkies.png"},unlisted:!1,prevItem:{title:"Share your local podman images with the Kubernetes cluster",permalink:"/blog/sharing-podman-images-with-kubernetes-cluster"},nextItem:{title:"Release Notes - Podman Desktop 1.4",permalink:"/blog/podman-desktop-release-1.4"}},d={authorsImageUrls:[void 0]},h=[{value:"Release Details",id:"release-details",level:2},{value:"Onboarding",id:"onboarding",level:3},{value:"Command Palette",id:"command-palette",level:3},{value:"Expanded "Summary" tab for Kubernetes pods",id:"expanded-summary-tab-for-kubernetes-pods",level:3},{value:"Environment file support",id:"environment-file-support",level:3},{value:"Enhancements to the Settings area",id:"enhancements-to-the-settings-area",level:3},{value:"Improved user experience for state changes",id:"improved-user-experience-for-state-changes",level:3},{value:"Extension API improvements",id:"extension-api-improvements",level:3},{value:"Other Notable Enhancements",id:"other-notable-enhancements",level:2},{value:"Notable Bug Fixes",id:"notable-bug-fixes",level:2},{value:"Community Thank You",id:"community-thank-you",level:2},{value:"Final notes",id:"final-notes",level:2},{value:"Known Issues",id:"known-issues",level:3},{value:"Known Issues: Podman Desktop 1.5.2",id:"known-issues-podman-desktop-152",level:4},{value:"Fixed Issues",id:"fixed-issues",level:3},{value:"Where to Download",id:"where-to-download",level:3}];function c(e){const n={a:"a",h2:"h2",h3:"h3",h4:"h4",hr:"hr",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components},{Icon:a}=n;return a||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Icon",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"Podman Desktop 1.5 Release! \ud83c\udf89"}),"\n",(0,t.jsxs)(n.p,{children:["With this release of Podman Desktop, we're introducing ",(0,t.jsx)(n.strong,{children:"a new onboarding feature"})," that we hope will earn your \ud83e\uddad seal of approval! But wait... there's so much more!"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Onboarding"}),": Guided setup and configuration of ",(0,t.jsx)(n.strong,{children:"Podman"})," and ",(0,t.jsx)(n.strong,{children:"Compose"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Podman 4.7.2"}),": ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman/releases",children:"Podman 4.7.2"})," is now included in Windows and Mac installers"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Command Palette"}),": Gain easy access to various commands via a new keyboard-driven command palette"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:'Expanded "Summary" tab for Kubernetes pods'}),': Go deep with extended details on Kubernetes pods in the pod "Summary" tab']}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Environment file support"}),": Chart out environment variables for new containers to access on creation"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Enhancements to the Settings area"}),": Get your bearings with improved Docker compatibility mode controls"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Improved user experience for state changes"}),": No more dead reckoning on container state with improved visual indication of status"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Extension API improvements"}),": A boatload of improvements to the extension API enabling more goodness from \ud83e\uddad Podman Desktop's extensions"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Podman Desktop 1.5 is now available. ",(0,t.jsx)(n.a,{href:"/downloads",children:"Click here to download it"}),"!"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Podman-desktop-1-5-hero",src:s(90973).Z+"",width:"1920",height:"1080"})}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"release-details",children:"Release Details"}),"\n",(0,t.jsx)(n.h3,{id:"onboarding",children:"Onboarding"}),"\n",(0,t.jsx)(n.p,{children:"We are introducing a new feature providing guided flows for the initial setup of specific \ud83e\uddad Podman Desktop extensions. Release 1.5 features two new onboarding flows: Podman and Compose."}),"\n",(0,t.jsxs)(n.p,{children:['To start the Podman onboarding flow, you can start from the dashboard notification by clicking the "Set up" button:\n',(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/799683/280362279-598cc052-5ea4-4c31-849c-da9bbbcc3e42.png",alt:"podman-onboarding-start"}),"\n",(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/799683/280363859-f35b85f8-1dd4-4b7f-a995-25fe5d1ccced.png",alt:"podman-onboarding"})]}),"\n",(0,t.jsxs)(n.p,{children:["Visit ",(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(a,{icon:"fa-solid fa-cog",size:"lg"}),"Settings > Resources"]}),' screen and click the Compose "Setup ..." button in order to start Compose onboarding:\n',(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/799683/280276847-ca0558ab-70ad-48cc-8dd5-67e3eb465a62.png",alt:"compose-onboarding-start"}),"\n",(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/799683/280277936-77ba0fb2-5cb0-41de-a7cf-1a3d6400fd89.png",alt:"compose-onboarding"})]}),"\n",(0,t.jsx)(n.h3,{id:"command-palette",children:"Command Palette"}),"\n",(0,t.jsxs)(n.p,{children:["A new, search-driven command palette is now available to enable quick access to various commands available across \ud83e\uddad Podman Desktop. You can try this new tool out by hitting the F1 key. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4081",children:"#4081"})," && ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3979",children:"#3979"})]}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/436777/270362431-5aaa6a1b-6df5-4b66-a811-cdd148d02ad6.mp4",width:"100%",height:"100%"}),"\n",(0,t.jsx)(n.h3,{id:"expanded-summary-tab-for-kubernetes-pods",children:'Expanded "Summary" tab for Kubernetes pods'}),"\n",(0,t.jsx)(n.p,{children:'Kubernetes pods now offer a more comprehensive set of information under the "Summary" tab, including networking, volumes, environment variables, and other key metadata.'}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/6422176/272972815-bed96f3a-6b13-45d3-a13b-74eacb27a4cd.mov",width:"100%",height:"100%"}),"\n",(0,t.jsx)(n.h3,{id:"environment-file-support",children:"Environment file support"}),"\n",(0,t.jsxs)(n.p,{children:["When creating a container from the Images list, there's now an option to provide an environment file to set env variables for the new container. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4026",children:"#4026"})," && ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4025",children:"#4025"})]}),"\n",(0,t.jsx)(n.h3,{id:"enhancements-to-the-settings-area",children:"Enhancements to the Settings area"}),"\n",(0,t.jsxs)(n.p,{children:["The user experience for enabling or disabling Docker compatibility is improved, with a new entry in the ",(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(a,{icon:"fa-solid fa-cog",size:"lg"}),"Settings > Preferences"]})," screen that includes contextual guidance. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4093",children:"#4093"})]}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/6422176/270497318-902b2566-62ad-4ee6-87af-6a9a2705de99.mov",width:"100%",height:"100%"}),"\n",(0,t.jsx)(n.h3,{id:"improved-user-experience-for-state-changes",children:"Improved user experience for state changes"}),"\n",(0,t.jsxs)(n.p,{children:["The user experience around state changes for containers, pods, and other objects in the UI is improved, with clear status messages and improved animated visual indicator of state changes. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4056",children:"#4056"})]}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/19958075/270027524-f5176cf9-462f-4024-920a-b4a906c7d30d.mov",width:"100%",height:"100%"}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/19958075/270027533-70e152ec-5bbf-45ad-9f1d-563752464655.mov",width:"100%",height:"100%"}),"\n",(0,t.jsx)(n.h3,{id:"extension-api-improvements",children:"Extension API improvements"}),"\n",(0,t.jsx)(n.p,{children:"The \ud83e\uddad Podman Desktop extension API received many improvements, including:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In addition to pushing and listing image from an extension, it's now possible to pull images from a \ud83e\uddad Podman Desktop extension ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4155",children:"#4155"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The \ud83e\uddad Podman Desktop extension API has been enhanced with both the ability to list images & networks and the ability to create containers & networks. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4172",children:"#4172"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["\ud83e\uddad Podman Desktop extensions now have a consistent way to run administrative tasks. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4049",children:"#4049"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Extensions now have the ability to register a custom Kubernetes config generator. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3970",children:"#3970"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The ability of extensions to add commands to UI menus has been extended; previously for action menus it was only available in the Image list screen. It is now possible for extensions to add commands to the action menus of items listed on the Containers list screen as well. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3947",children:"#3947"})," & ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3963",children:"#3963"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Extensions have gained the ability to contribute menu items in the UI based on specific conditions. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3959",children:"#3959"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Enhanced logic for displaying or hiding properties listed under the ",(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(a,{icon:"fa-solid fa-cog",size:"lg"}),"Settings > Preferences"]})," screens is now available. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4159",children:"#4159"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/6422176/271650937-3991565c-12a4-4e6c-a315-9343bfa25f65.mov",width:"100%",height:"100%"}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"other-notable-enhancements",children:"Other Notable Enhancements"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The progress of loading an image into Kind is now visible as a task in the task manager. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4061",children:"#4061"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/42176370/270154775-eb7007b4-fd0e-4287-be9e-40ffc412de35.png",alt:"kind-progress-task"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["It's now possible to start a new Podman machine right after creation, or you can create it and wait to start it later. It's up to you! ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4046",children:"#4046"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/49404737/269941187-f4768833-ecfc-4d0b-8acf-d4afedb428d9.png",alt:"podman-start-now-or-later"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The Podman machine and Kubernetes provider creation forms have an updated look & feel consisted with other forms in the user interface, along with minor bug fixes. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4317",children:"#4317"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/19958075/274694157-fe89f3bc-e5b8-4735-96e9-669fe52c7a41.png",alt:"Updated provider creation forms"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The empty screen message shown when a search filter results in no matches now provides a message specific to filter matching, including the specific filter terms and an explicit button for clearing the filter. Previously, the screen displayed a generic message about how to create new objects of the type displayed on the screen, which led to some confusion about the status of the system. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3988",children:"#3988"})]}),"\n"]}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/19958075/269291090-13e724f7-252f-4915-bb04-00665001d21d.mov",width:"100%",height:"100%"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["New support for adding spin animations to icons is now available. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4188",children:"#4188"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["There is a new indeterminate progress bar type available for the task manager; this is meant for providing limited status for actions whose APIs do not provide detailed status information. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4016",children:"#4016"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["For authenticating as admin to perform administrative tasks, \ud83e\uddad Podman Desktop now provides touchID support for macOS. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4050",children:"#4050"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/436777/248588015-f08115bd-d211-43ad-bddd-286d7b3a7056.png",alt:"touchID-support"})}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/436777/269859758-47581e2b-8469-4e9c-822c-f4fddf46684d.mp4",width:"100%",height:"100%"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Support for connecting to interactive terminals for containers via tty was added. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3900",children:"#3900"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["It's now more clear which container/pod providers will autostart when \ud83e\uddad Podman Desktop starts. Previously autostart had both a global and a per-provider setting. It has been simplified by removing the global setting. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3840",children:"#3840"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['The "Working with containers" section of the documentation has been reworked and improved. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3951",children:"#3951"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"notable-bug-fixes",children:"Notable Bug Fixes"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The disable registry command was not blocking subsequent pulls from disabled registries. This has been corrected. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4183",children:"#4183"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Some users behind network proxies were unable to complete workflow involving the download of online resources. The mechanism for fetching these resources has been fixed to be proxy compatible to address this issue. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3994",children:"#3994"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The status of pods running in Kubernetes that are undergoing the deletion process is now accurately reflected in the \ud83e\uddad Podman Desktop UI. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3877",children:"#3877"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['The image details page always listed the image as being "not used" even when it was. This has been corrected. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3985",children:"#3985"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Previously, deleting a specific image tag would cause all tags with the same Image ID to be deleted. This has been fixed so only the selected image tag will be deleted. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3837",children:"#3837"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Could not view the pod details for some remote Kubernetes cluster pods due to an encoding error. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4371",children:"#4371"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Error logs were being tracked separately from the actions they applied to. This has been addressed for kind cluster creation failure ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4427",children:"#4427"})," and Compose installation failure ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4407",children:"#4407"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['For Linux users, \ud83e\uddad Podman Desktop previously did not appear under the "Development" menu when installed via Flatpak; it appeared under "Utilities." \ud83e\uddad Podman Desktop now appears under the "Development" menu. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3911",children:"#3911"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['Podman Machine names are no longer prefixed with the "Podman Machine" string. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3878",children:"#3878"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/19958075/267378447-aafdfbd7-f005-4b94-8626-9e11eec61b95.png",alt:"touchID-support"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['The initial action state of pods and containers was being displayed as "STARTING" regardless of actual state; this has been corrected. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3889",children:"#3889"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Resizing the application window no longer makes the last lines of a container's terminal invisible. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3993",children:"#3993"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["An issue with incorrect terminal behavior in response to long lines in the terminal attached to a container has been resolved. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3955",children:"#3955"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["A spacing issue on the run image form has been corrected. [#4089]",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4089",children:"https://github.com/containers/podman-desktop/pull/4089"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['The "podify" icon & button on the Containers list was unusually large in release 1.4. That regression has been corrected in this release. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4122",children:"#4122"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["An error in the instructions for Windows users on migrating from Docker has been corrected. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4157",children:"#4157"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"community-thank-you",children:"Community Thank You"}),"\n",(0,t.jsx)(n.p,{children:"\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make \ud83e\uddad Podman Desktop even better. In this\nrelease we received pull requests from the following people:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/afbjorklund",children:"afbjorklund"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4373",children:"#4373 - docs: fix broken links and add lima onboarding"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4372",children:"#4372 - docs: clear up lima column on containers page"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4091",children:"#4091 - fix: avoid errors with unexpected JSON input"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4098",children:"#4098 - docs: Lima onboarding details"}),", and ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3854",children:"#3854 - fix: check if machine init rootful flag supported"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/axel7083",children:"axel7083"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4061",children:"#4061 - feat: adding task progress for kind"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3970",children:"#3970 - feat: extension can register custom kube generator"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3959",children:"#3959 - feat: add when property to extensions menus"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4016",children:"#4016 - feat: indeterminate progress bar"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3963",children:"#3963 - fix: ContainerList propagating containers in ComposeActions and PodActions"}),", and ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3947",children:"#3947 - feat: extend menus capabilities"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/ayushrakesh",children:"ayushrakesh"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4415#",children:"#4415 - Update README.md"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/eltociear",children:"eltociear"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4194",children:"#4194 - Update README.md"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/foxydevloper",children:"foxydeveloper"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4157",children:"#4157 - docs: Correct windows instructions for migrating from docker"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/harsh-solanki21",children:"harsh-solanki21"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4162",children:"#4162 - fix: Removed fullstop from summary"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/rahul0x00",children:"rahul0x00"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4240",children:"#4240 - fix typos in README.md"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/shelar1423",children:"shelar1423"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4221",children:"#4221 - chore: document property setting in EXTENSIONS.md"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"final-notes",children:"Final notes"}),"\n",(0,t.jsx)(n.h3,{id:"known-issues",children:"Known Issues"}),"\n",(0,t.jsx)(n.p,{children:"We have a discussion board topic where we have posted known issues with this release. If you run into problems, please check this list before filing a bug - if we already have an issue open for it, it saves you the time and trouble of filing, and there may be a workaround posted in the issue."}),"\n",(0,t.jsx)(n.h4,{id:"known-issues-podman-desktop-152",children:(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/discussions/4635",children:"Known Issues: Podman Desktop 1.5.2"})}),"\n",(0,t.jsx)(n.h3,{id:"fixed-issues",children:"Fixed Issues"}),"\n",(0,t.jsxs)(n.p,{children:["The complete list of issues fixed in this release is available ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.5.0",children:"here"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"where-to-download",children:"Where to Download"}),"\n",(0,t.jsxs)(n.p,{children:["Get the latest release from the ",(0,t.jsx)(n.a,{href:"/downloads",children:"Downloads"})," section of the website and boost your development journey with Podman Desktop. Additionally, visit the ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop",children:"GitHub repository"})," and see how you can help us make Podman Desktop better."]})]})}function p(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},90973:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/onboarding-selkies-3ddb7cb6ee2cf9abed002b01f63b1822.png"}}]); \ No newline at end of file diff --git a/assets/js/0d040286.73ca0e0b.js b/assets/js/0d040286.1b79d3d0.js similarity index 58% rename from assets/js/0d040286.73ca0e0b.js rename to assets/js/0d040286.1b79d3d0.js index 892ca1d5bc6..958ce9e79ef 100644 --- a/assets/js/0d040286.73ca0e0b.js +++ b/assets/js/0d040286.1b79d3d0.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8860],{37951:o=>{o.exports=JSON.parse('{"permalink":"/blog/tags/podman-desktop","page":1,"postsPerPage":15,"totalPages":1,"totalCount":15,"blogDescription":"Discover articles about Podman Desktop","blogTitle":"Podman Desktop blog!"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8860],{37951:o=>{o.exports=JSON.parse('{"permalink":"/blog/tags/podman-desktop","page":1,"postsPerPage":16,"totalPages":1,"totalCount":16,"blogDescription":"Discover articles about Podman Desktop","blogTitle":"Podman Desktop blog!"}')}}]); \ No newline at end of file diff --git a/assets/js/183053be.5528338e.js b/assets/js/183053be.5528338e.js new file mode 100644 index 00000000000..775f4b6611f --- /dev/null +++ b/assets/js/183053be.5528338e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6586],{14540:s=>{s.exports=JSON.parse('{"label":"images","permalink":"/blog/tags/images","allTagsPath":"/blog/tags","count":1,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/1949cc8d.fa46cf8a.js b/assets/js/1949cc8d.fa46cf8a.js new file mode 100644 index 00000000000..f516009168f --- /dev/null +++ b/assets/js/1949cc8d.fa46cf8a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5210],{72997:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var s=n(24246),a=n(71670);const i={title:"Share your local podman images with the Kubernetes cluster",description:"Build image and use it directly in your kubernetes cluster",slug:"sharing-podman-images-with-kubernetes-cluster",authors:["benoitf"],tags:["podman-desktop","podman","images","kubernetes"],hide_table_of_contents:!1,image:"/blog/img/sharing-podman-images-with-kubernetes-cluster/selkie-family.png"},o=void 0,r={permalink:"/blog/sharing-podman-images-with-kubernetes-cluster",source:"@site/blog/2023-12-06-sharing-podman-images-with-kubernetes-cluster.md",title:"Share your local podman images with the Kubernetes cluster",description:"Build image and use it directly in your kubernetes cluster",date:"2023-12-06T00:00:00.000Z",formattedDate:"December 6, 2023",tags:[{label:"podman-desktop",permalink:"/blog/tags/podman-desktop"},{label:"podman",permalink:"/blog/tags/podman"},{label:"images",permalink:"/blog/tags/images"},{label:"kubernetes",permalink:"/blog/tags/kubernetes"}],readingTime:7.71,hasTruncateMarker:!0,authors:[{name:"Florent Benoit",title:"Principal Software Engineer",url:"https://github.com/benoitf",imageURL:"https://github.com/benoitf.png",key:"benoitf"}],frontMatter:{title:"Share your local podman images with the Kubernetes cluster",description:"Build image and use it directly in your kubernetes cluster",slug:"sharing-podman-images-with-kubernetes-cluster",authors:["benoitf"],tags:["podman-desktop","podman","images","kubernetes"],hide_table_of_contents:!1,image:"/blog/img/sharing-podman-images-with-kubernetes-cluster/selkie-family.png"},unlisted:!1,nextItem:{title:"Release Notes - Podman Desktop 1.5",permalink:"/blog/podman-desktop-release-1.5"}},l={authorsImageUrls:[void 0]},c=[];function m(e){const t={code:"code",img:"img",p:"p",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.p,{children:"As developers we constantly improve and refine our applications. One of the challenges we face is quickly iterating when working with container images and kubernetes deployments/pods."}),"\n",(0,s.jsxs)(t.p,{children:["For example, when we want to try a new image in a kubernetes pod, this image needs to be available on a private/public registry or on the nodes of the kubernetes cluster.\nSometimes we need to call extra commands such as ",(0,s.jsx)(t.code,{children:"kind load docker-image"})," or ",(0,s.jsx)(t.code,{children:"minikube cache add "})," or publish the image first to a 3rd party registry."]}),"\n",(0,s.jsx)(t.p,{children:"You'll agree that trying out a new image in a Kubernetes pod should be as seamless as building the image itself."}),"\n",(0,s.jsx)(t.p,{children:"In this blog post, we will explore the best practice for streamlining the image iteration process in Kubernetes with Podman Desktop."}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"hero",src:n(77538).Z+"",width:"1920",height:"1080"})})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(m,{...e})}):m(e)}},77538:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/selkie-family-1b33ecd1c85565d5af69c52a03180a61.png"},71670:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>o});var s=n(27378);const a={},i=s.createContext(a);function o(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1b2af15e.a4034df7.js b/assets/js/1b2af15e.a4034df7.js new file mode 100644 index 00000000000..762006b8e0f --- /dev/null +++ b/assets/js/1b2af15e.a4034df7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3868],{5155:o=>{o.exports=JSON.parse('{"permalink":"/blog/tags/podman","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"Discover articles about Podman Desktop","blogTitle":"Podman Desktop blog!"}')}}]); \ No newline at end of file diff --git a/assets/js/382c5d2b.2b3d8a12.js b/assets/js/382c5d2b.d5188a32.js similarity index 81% rename from assets/js/382c5d2b.2b3d8a12.js rename to assets/js/382c5d2b.d5188a32.js index 8c7b20ceb39..7559588b795 100644 --- a/assets/js/382c5d2b.2b3d8a12.js +++ b/assets/js/382c5d2b.d5188a32.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1441],{96591:s=>{s.exports=JSON.parse('{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop","allTagsPath":"/blog/tags","count":15,"unlisted":false}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1441],{96591:s=>{s.exports=JSON.parse('{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop","allTagsPath":"/blog/tags","count":16,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/38a042e4.78ce4697.js b/assets/js/38a042e4.78ce4697.js new file mode 100644 index 00000000000..8d8bc6f61e5 --- /dev/null +++ b/assets/js/38a042e4.78ce4697.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7138],{95583:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var s=o(24246),t=o(71670);const i={title:"Build & run Podman Desktop in a DevContainer",description:"Develop Podman Desktop using a DevContainer locally or using GitHub Codespaces.",slug:"develop-using-devcontainer",authors:["benoitf"],tags:["podman-desktop","devcontainer","codespaces"],hide_table_of_contents:!1},a=void 0,r={permalink:"/blog/develop-using-devcontainer",source:"@site/blog/2022-11-17-develop-podman-using-codespaces.md",title:"Build & run Podman Desktop in a DevContainer",description:"Develop Podman Desktop using a DevContainer locally or using GitHub Codespaces.",date:"2022-11-17T00:00:00.000Z",formattedDate:"November 17, 2022",tags:[{label:"podman-desktop",permalink:"/blog/tags/podman-desktop"},{label:"devcontainer",permalink:"/blog/tags/devcontainer"},{label:"codespaces",permalink:"/blog/tags/codespaces"}],readingTime:6.985,hasTruncateMarker:!0,authors:[{name:"Florent Benoit",title:"Principal Software Engineer",url:"https://github.com/benoitf",imageURL:"https://github.com/benoitf.png",key:"benoitf"}],frontMatter:{title:"Build & run Podman Desktop in a DevContainer",description:"Develop Podman Desktop using a DevContainer locally or using GitHub Codespaces.",slug:"develop-using-devcontainer",authors:["benoitf"],tags:["podman-desktop","devcontainer","codespaces"],hide_table_of_contents:!1},unlisted:!1,prevItem:{title:"Release Notes - Podman Desktop 0.10",permalink:"/blog/podman-desktop-release-0.10"}},d={authorsImageUrls:[void 0]},c=[{value:"Defining image of the container",id:"defining-image-of-the-container",level:2},{value:"Configure the DevContainer using devcontainer.json",id:"configure-the-devcontainer-using-devcontainerjson",level:2},{value:"Using the DevContainer.json on Github Codespace",id:"using-the-devcontainerjson-on-github-codespace",level:2},{value:"Conclusion",id:"conclusion",level:2}];function l(e){const n={a:"a",code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:["GitHub ",(0,s.jsx)(n.a,{href:"https://github.blog/changelog/2022-11-09-codespaces-for-free-and-pro-accounts/",children:"announced last week"})," that Codespaces is available for everyone and it includes free minutes."]}),"\n",(0,s.jsxs)(n.p,{children:["Let see how we can use a ",(0,s.jsx)(n.a,{href:"https://containers.dev/",children:"Development Container"})," having all the tools to build and run Podman Desktop. The Development Container works locally using Visual Studio Code but in this blog post we will see how it works directly with a simple click from GitHub."]}),"\n",(0,s.jsx)(n.p,{children:"The challenges are to run a desktop tool (Podman Desktop) and running a container engine (Podman) inside this Development Container without using too many memory !"}),"\n",(0,s.jsx)(n.h2,{id:"defining-image-of-the-container",children:"Defining image of the container"}),"\n",(0,s.jsxs)(n.p,{children:["The first thing is in the choice of the image for the container. It is possible to pick-up a default image and add some features but there is no existing feature for Podman at ",(0,s.jsx)(n.a,{href:"https://github.com/devcontainers/features/tree/main/src",children:"https://github.com/devcontainers/features/tree/main/src"})," and most of the features are expecting to run on top of Debian/Ubuntu"]}),"\n",(0,s.jsxs)(n.p,{children:["If you are not interested in how to setup the image, jump to the ",(0,s.jsx)(n.a,{href:"#configure-the-devcontainer-using-devcontainerjson",children:"next section"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Podman binaries are available quickly after the releases for Fedora. I decided then to use ",(0,s.jsx)(n.code,{children:"Fedora 37"})," as the base image."]}),"\n",(0,s.jsx)(n.p,{children:"Let start the Containerfile using:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:"FROM quay.io/fedora/fedora:37\n"})}),"\n",(0,s.jsx)(n.p,{children:"Then I install Node.js 16 from official nodejs.org repository. It's easier to switch to the version that we need."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:'# install Node.js + yarn\nENV NODE_VERSION 16.18.1\nRUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz" && \\\n tar -xzf "node-v$NODE_VERSION-linux-x64.tar.gz" -C /usr/local --strip-components=1 && \\\n rm "node-v$NODE_VERSION-linux-x64.tar.gz" && \\\n npm install -g yarn\n'})}),"\n",(0,s.jsx)(n.p,{children:"Now, all system dependencies used to run an Electron application needs to be installed."}),"\n",(0,s.jsx)(n.p,{children:"Podman is also installed so we can run some containers inside this container."}),"\n",(0,s.jsxs)(n.p,{children:["And of course, we need to install VNC (I choose ",(0,s.jsx)(n.a,{href:"https://tigervnc.org/",children:"tigervnc"}),") with a light Window Manager (",(0,s.jsx)(n.a,{href:"http://fluxbox.org/",children:"fluxbox"}),")."]}),"\n",(0,s.jsxs)(n.p,{children:["To connect to the display of the container, we need to expose VNC over HTML/websocket using ",(0,s.jsx)(n.a,{href:"https://novnc.com/",children:"noVNC"})]}),"\n",(0,s.jsx)(n.p,{children:"xterm is installed to start a terminal from the VNC side."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:"RUN dnf -y update && \\\n yum -y reinstall shadow-utils && \\\n yum install -y git \\\n # dependencies for Podman Desktop\n nss \\\n atk \\\n at-spi2-atk \\\n cups-libs \\\n gtk3 \\\n # for remote Display\n fluxbox \\\n tigervnc-server \\\n xorg-x11-fonts-Type1 \\\n novnc \\\n supervisor \\\n xdpyinfo \\\n # for podman\n podman \\\n fuse-overlayfs --exclude container-selinux \\\n xterm && \\\n rm -rf /var/cache /var/log/dnf* /var/log/yum.*\n"})}),"\n",(0,s.jsx)(n.p,{children:"Supervisord setup the launch of the VNC server and the Window manager"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:"COPY supervisord.conf /etc/supervisord.conf\n"})}),"\n",(0,s.jsx)(n.p,{children:"A custom theme for fluxbox:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:"COPY fluxbox /usr/share/fluxbox/init\n"})}),"\n",(0,s.jsx)(n.p,{children:"Then we need a special configuration to allow to have Podman working inside the container"}),"\n",(0,s.jsxs)(n.p,{children:["We add the ",(0,s.jsx)(n.code,{children:"podman-desktop"})," user with correct range on subuid and subgid when running containers. I used the ",(0,s.jsx)(n.a,{href:"https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md#etcsubuid-and-etcsubgid-configuration",children:"tutorial"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:"RUN useradd -u 1000 podman-desktop && echo podman-desktop:10000:5000 > /etc/subuid && echo podman-desktop:10000:5000 > /etc/subgid\n"})}),"\n",(0,s.jsx)(n.p,{children:"Then use some default configuration files"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:"# initialize conf files\nADD https://raw.githubusercontent.com/containers/libpod/master/contrib/podmanimage/stable/containers.conf /etc/containers/containers.conf\nADD https://raw.githubusercontent.com/containers/libpod/master/contrib/podmanimage/stable/podman-containers.conf /home/podman-desktop/.config/containers/containers.conf\n"})}),"\n",(0,s.jsxs)(n.p,{children:["and make sure that all permissions are correct following the guide ",(0,s.jsx)(n.a,{href:"https://www.redhat.com/sysadmin/podman-inside-container",children:"https://www.redhat.com/sysadmin/podman-inside-container"})]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:"# set permissions\nRUN chown podman-desktop:podman-desktop -R /home/podman-desktop && chmod 644 /etc/containers/containers.conf && \\\n mkdir -p /var/lib/shared/overlay-images /var/lib/shared/overlay-layers /var/lib/shared/vfs-images /var/lib/shared/vfs-layers; touch /var/lib/shared/overlay-images/images.lock; touch /var/lib/shared/overlay-layers/layers.lock; touch /var/lib/shared/vfs-images/images.lock; touch /var/lib/shared/vfs-layers/layers.lock && \\\n mkdir -p /run/user/1000 && chown podman-desktop:podman-desktop /run/user/1000\n"})}),"\n",(0,s.jsx)(n.p,{children:"plus define an empty user namespace."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:'ENV _CONTAINERS_USERNS_CONFIGURED=""\n'})}),"\n",(0,s.jsx)(n.p,{children:"Make sure Podman will create the socket in an expected directory:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:"# socket path for podman\nENV XDG_RUNTIME_DIR=/run/user/1000\n"})}),"\n",(0,s.jsx)(n.p,{children:"OK ! we have a custom Containerfile providing all the tools to build and run Podman Desktop (using VNC for the display), run Podman and run Electron."}),"\n",(0,s.jsxs)(n.p,{children:["The current file is available at ",(0,s.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/blob/main/.devcontainer/.parent/Containerfile",children:"https://github.com/containers/podman-desktop/blob/main/.devcontainer/.parent/Containerfile"})]}),"\n",(0,s.jsx)(n.p,{children:"Let's configure the DevContainer."}),"\n",(0,s.jsx)(n.h2,{id:"configure-the-devcontainer-using-devcontainerjson",children:"Configure the DevContainer using devcontainer.json"}),"\n",(0,s.jsxs)(n.p,{children:["DevContainer definition is stored at ",(0,s.jsx)(n.code,{children:".devcontainer/devcontainer.json"})," file."]}),"\n",(0,s.jsxs)(n.p,{children:["We need to reuse the image of the previous step. For that let's use the build section of the ",(0,s.jsx)(n.code,{children:"devcontainer.json"})," file."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"build": {\n "dockerfile": "Containerfile"\n},\n'})}),"\n",(0,s.jsxs)(n.p,{children:["In order to avoid to redo all the build steps each time we open a workspace using this dev container, we published the image to quay.io at ",(0,s.jsxs)(n.a,{href:"https://quay.io/repository/podman-desktop/devcontainer-parent?tab=tags&tag=next",children:["quay.io/podman-desktop/devcontainer-parent",":next","\n"]}),". This parent image is not changing much so it's better to use is as a parent one."]}),"\n",(0,s.jsxs)(n.p,{children:["Inside ",(0,s.jsx)(n.code,{children:".devcontainer"})," directory there is a ",(0,s.jsx)(n.code,{children:".parent"})," directory with everything related to the parent image."]}),"\n",(0,s.jsxs)(n.p,{children:["And in the ",(0,s.jsx)(n.code,{children:".devcontainer/Containerfile"})," file we reference this image"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:"FROM quay.io/podman-desktop/devcontainer-parent:next\n"})}),"\n",(0,s.jsxs)(n.p,{children:["By default, we will be ",(0,s.jsx)(n.code,{children:"root"})," in the container and this is probably not what we expect. Let's change that."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"containerUser": "podman-desktop"\n'})}),"\n",(0,s.jsx)(n.p,{children:"Some Visual Studio Code extensions are nice to use and we can add them"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:' "extensions": ["svelte.svelte-vscode", "bradlc.vscode-tailwindcss"]\n'})}),"\n",(0,s.jsx)(n.p,{children:"Then here is the tricky part, how to run our container allowing to run again inside the container some containers with podman."}),"\n",(0,s.jsxs)(n.p,{children:["We specify the arguments to make it possible. It's possible to use ",(0,s.jsx)(n.code,{children:"--privileged"})," flag but I prefer to list the subset of permissions.\nUsing ",(0,s.jsx)(n.code,{children:"--privileged"})," we don't really know what are the privilege that are required while specifying all of them, people are aware of what is granted/denied."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"runArgs": [\n "--cap-add=sys_admin",\n "--security-opt",\n "seccomp=unconfined",\n "--device",\n "/dev/fuse",\n "--security-opt",\n "label=disable",\n "--security-opt",\n "apparmor=unconfined"\n ],\n'})}),"\n",(0,s.jsx)(n.p,{children:"Source code of Podman Desktop needs to be editable within the DevContainer so it needs to be mounted."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind",\n"workspaceFolder": "/workspace",\n'})}),"\n",(0,s.jsx)(n.p,{children:"Then we need a command to build Podman Desktop."}),"\n",(0,s.jsxs)(n.p,{children:["For that, we use ",(0,s.jsx)(n.code,{children:"onCreateCommand"})," hook with a custom command"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"onCreateCommand": "${containerWorkspaceFolder}/.devcontainer/onCreateCommand.sh",\n'})}),"\n",(0,s.jsxs)(n.p,{children:["and in the ",(0,s.jsx)(n.code,{children:".devcontainer"})," folder the ",(0,s.jsx)(n.code,{children:"onCreateCommand.sh"})," script is the following"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",children:"#!/bin/sh\nyarn\n\nMODE=production yarn run build && yarn run electron-builder build --linux --dir --config .electron-builder.config.cjs\n"})}),"\n",(0,s.jsx)(n.p,{children:"Two instructions:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Fetch all Node.js dependencies."}),"\n",(0,s.jsxs)(n.li,{children:["build Podman Desktop in the ",(0,s.jsx)(n.code,{children:"dist"})," folder using ",(0,s.jsx)(n.code,{children:"Linux"})," as target Operating System."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"After the start of the container, how to launch Podman Desktop, the website and VNC, etc ?"}),"\n",(0,s.jsxs)(n.p,{children:["Just use ",(0,s.jsx)(n.code,{children:"postStartCommand"})," hook."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"postStartCommand": "${containerWorkspaceFolder}/.devcontainer/postStartCommand.sh",\n'})}),"\n",(0,s.jsxs)(n.p,{children:["and in the ",(0,s.jsx)(n.code,{children:".devcontainer"})," folder the ",(0,s.jsx)(n.code,{children:"postStartCommand.sh"})," script is the following:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",children:'#!/bin/sh\n\n# Start all services\n/usr/bin/supervisord -c /etc/supervisord.conf &\n\n# wait X server to be ready or after 2mn exit\necho "Waiting for X server to be ready"\ntimeout 120 bash -c \'until xdpyinfo -display :0 &> /dev/null; do printf "."; sleep 1; done\'\n\n# launch podman desktop\necho "Launching Podman Desktop"\ncd dist/linux-unpacked/&& ./podman-desktop &\n\n# Launch the 9000 redirect after 20 seconds\nsleep 20\nwebsockify --web=/usr/share/novnc localhost:9000 localhost:5900 &\n\n# launch the website rendering\necho "Launching Website"\ncd website && yarn start\n'})}),"\n",(0,s.jsx)(n.p,{children:"It starts VNC and noVNC, start precompiled Podman Desktop and start the documentation rendering."}),"\n",(0,s.jsx)(n.p,{children:"It is not launching the Watch mode/development mode of Podman Desktop as it requires a container having more than 8GB of memory."}),"\n",(0,s.jsx)(n.p,{children:"Picking up a larger instance with for example 16GB, it's possible to use development mode."}),"\n",(0,s.jsxs)(n.p,{children:["Of course, to make VNC happy, we need to specify the ",(0,s.jsx)(n.code,{children:"DISPLAY"})," environment variable."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"remoteEnv": {\n "DISPLAY": ":0"\n}\n'})}),"\n",(0,s.jsxs)(n.p,{children:["When the DevContainer is fully available, we want to have a way to quickly open the ",(0,s.jsx)(n.code,{children:"Website rendering URL"})," and ",(0,s.jsx)(n.code,{children:"noVNC"})]}),"\n",(0,s.jsxs)(n.p,{children:["Let's tweak the ",(0,s.jsx)(n.code,{children:"devcontainer.json"})," file by adding the ",(0,s.jsx)(n.code,{children:"portsAttributes"})," section"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"portsAttributes": {\n "9000": {\n "label": "vnc",\n "onAutoForward": "openPreview"\n },\n "3000": {\n "label": "website"\n }\n}\n'})}),"\n",(0,s.jsxs)(n.p,{children:["After all post-creation steps, the ",(0,s.jsx)(n.code,{children:"Preview"})," browser inside the VS Code editor will open a window to VNC. And another port (",(0,s.jsx)(n.code,{children:"3000"}),") is flagged for the website."]}),"\n",(0,s.jsx)(n.h2,{id:"using-the-devcontainerjson-on-github-codespace",children:"Using the DevContainer.json on Github Codespace"}),"\n",(0,s.jsx)(n.p,{children:"As a user, opening a workspace with all what we configured is done using a single click."}),"\n",(0,s.jsxs)(n.p,{children:["Go to ",(0,s.jsx)(n.a,{href:"https://github.com/containers/podman-desktop",children:"https://github.com/containers/podman-desktop"})," then click on the ",(0,s.jsx)(n.code,{children:"< > Code"})," dropdown and click on ",(0,s.jsx)(n.code,{children:"Create codespace on main"})," button."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Open Codespace",src:o(37486).Z+"",width:"1240",height:"617"})}),"\n",(0,s.jsx)(n.p,{children:"Once you click on the button, the codespace is setting up:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Preparing Codespace",src:o(66289).Z+"",width:"754",height:"587"})}),"\n",(0,s.jsxs)(n.p,{children:["After few minutes, as there is not yet ",(0,s.jsx)(n.a,{href:"https://docs.github.com/en/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds",children:"prebuilt codespaces"}),", the codespace is opening."]}),"\n",(0,s.jsxs)(n.p,{children:["The simple Browser displays the noVNC window:\n",(0,s.jsx)(n.img,{alt:"Opening Codespace",src:o(38559).Z+"",width:"2051",height:"1066"})]}),"\n",(0,s.jsxs)(n.p,{children:["Click on the connect button. Then on the terminal you can enter ",(0,s.jsx)(n.code,{children:"podman run quay.io/podman/hello"})," and the container is detected in Podman Desktop.\n",(0,s.jsx)(n.img,{alt:"Testing Codespace",src:o(92972).Z+"",width:"2051",height:"1066"})]}),"\n",(0,s.jsxs)(n.p,{children:["It's also possible using the port widget to get on ",(0,s.jsx)(n.code,{children:"3000"})," port by clicking on the world icon a preview of the website in another tab. Changing source code of the website will refresh the content of the window."]}),"\n",(0,s.jsx)(n.p,{children:"Depending on the usecase, it's also possible to open documentation in the preview browser."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Edit website Codespace",src:o(83517).Z+"",width:"2051",height:"1066"})}),"\n",(0,s.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,s.jsxs)(n.p,{children:["The DevContainer image for Podman Desktop is recent so it'll probably evolve over time by adding new capabilities but it allows you to easily build/run/experiment and ",(0,s.jsx)(n.strong,{children:"contribute"})," to the tool or the website."]})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},37486:(e,n,o)=>{o.d(n,{Z:()=>s});const s=o.p+"assets/images/codespaces-click-repository-22eb251ecc45a2b29952fe5983e16238.png"},83517:(e,n,o)=>{o.d(n,{Z:()=>s});const s=o.p+"assets/images/codespaces-edit-website-d1f2a645f97209e453bc72cadafa0b54.png"},38559:(e,n,o)=>{o.d(n,{Z:()=>s});const s=o.p+"assets/images/codespaces-open-novnc-ec3f30d836eb7af5750498a833d37184.png"},66289:(e,n,o)=>{o.d(n,{Z:()=>s});const s=o.p+"assets/images/codespaces-preparing-codespace-3121417aa9d8947b8f5566bf39478961.png"},92972:(e,n,o)=>{o.d(n,{Z:()=>s});const s=o.p+"assets/images/codespaces-testing-podman-desktop-3210aa766f273a52253d27cb4e7ef782.png"},71670:(e,n,o)=>{o.d(n,{Z:()=>r,a:()=>a});var s=o(27378);const t={},i=s.createContext(t);function a(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/38a042e4.a9b21b67.js b/assets/js/38a042e4.a9b21b67.js deleted file mode 100644 index 8e888417a5a..00000000000 --- a/assets/js/38a042e4.a9b21b67.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7138],{95583:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var s=o(24246),t=o(71670);const i={title:"Build & run Podman Desktop in a DevContainer",description:"Develop Podman Desktop using a DevContainer locally or using GitHub Codespaces.",slug:"develop-using-devcontainer",authors:["benoitf"],tags:["podman-desktop","devcontainer","codespaces"],hide_table_of_contents:!1},a=void 0,r={permalink:"/blog/develop-using-devcontainer",source:"@site/blog/2022-11-17-develop-podman-using-codespaces.md",title:"Build & run Podman Desktop in a DevContainer",description:"Develop Podman Desktop using a DevContainer locally or using GitHub Codespaces.",date:"2022-11-17T00:00:00.000Z",formattedDate:"November 17, 2022",tags:[{label:"podman-desktop",permalink:"/blog/tags/podman-desktop"},{label:"devcontainer",permalink:"/blog/tags/devcontainer"},{label:"codespaces",permalink:"/blog/tags/codespaces"}],readingTime:6.985,hasTruncateMarker:!0,authors:[{name:"Florent Benoit",title:"Maintainer of Podman Desktop",url:"https://github.com/benoitf",imageURL:"https://github.com/benoitf.png",key:"benoitf"}],frontMatter:{title:"Build & run Podman Desktop in a DevContainer",description:"Develop Podman Desktop using a DevContainer locally or using GitHub Codespaces.",slug:"develop-using-devcontainer",authors:["benoitf"],tags:["podman-desktop","devcontainer","codespaces"],hide_table_of_contents:!1},unlisted:!1,prevItem:{title:"Release Notes - Podman Desktop 0.10",permalink:"/blog/podman-desktop-release-0.10"}},d={authorsImageUrls:[void 0]},c=[{value:"Defining image of the container",id:"defining-image-of-the-container",level:2},{value:"Configure the DevContainer using devcontainer.json",id:"configure-the-devcontainer-using-devcontainerjson",level:2},{value:"Using the DevContainer.json on Github Codespace",id:"using-the-devcontainerjson-on-github-codespace",level:2},{value:"Conclusion",id:"conclusion",level:2}];function l(e){const n={a:"a",code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:["GitHub ",(0,s.jsx)(n.a,{href:"https://github.blog/changelog/2022-11-09-codespaces-for-free-and-pro-accounts/",children:"announced last week"})," that Codespaces is available for everyone and it includes free minutes."]}),"\n",(0,s.jsxs)(n.p,{children:["Let see how we can use a ",(0,s.jsx)(n.a,{href:"https://containers.dev/",children:"Development Container"})," having all the tools to build and run Podman Desktop. The Development Container works locally using Visual Studio Code but in this blog post we will see how it works directly with a simple click from GitHub."]}),"\n",(0,s.jsx)(n.p,{children:"The challenges are to run a desktop tool (Podman Desktop) and running a container engine (Podman) inside this Development Container without using too many memory !"}),"\n",(0,s.jsx)(n.h2,{id:"defining-image-of-the-container",children:"Defining image of the container"}),"\n",(0,s.jsxs)(n.p,{children:["The first thing is in the choice of the image for the container. It is possible to pick-up a default image and add some features but there is no existing feature for Podman at ",(0,s.jsx)(n.a,{href:"https://github.com/devcontainers/features/tree/main/src",children:"https://github.com/devcontainers/features/tree/main/src"})," and most of the features are expecting to run on top of Debian/Ubuntu"]}),"\n",(0,s.jsxs)(n.p,{children:["If you are not interested in how to setup the image, jump to the ",(0,s.jsx)(n.a,{href:"#configure-the-devcontainer-using-devcontainerjson",children:"next section"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Podman binaries are available quickly after the releases for Fedora. I decided then to use ",(0,s.jsx)(n.code,{children:"Fedora 37"})," as the base image."]}),"\n",(0,s.jsx)(n.p,{children:"Let start the Containerfile using:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:"FROM quay.io/fedora/fedora:37\n"})}),"\n",(0,s.jsx)(n.p,{children:"Then I install Node.js 16 from official nodejs.org repository. It's easier to switch to the version that we need."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:'# install Node.js + yarn\nENV NODE_VERSION 16.18.1\nRUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz" && \\\n tar -xzf "node-v$NODE_VERSION-linux-x64.tar.gz" -C /usr/local --strip-components=1 && \\\n rm "node-v$NODE_VERSION-linux-x64.tar.gz" && \\\n npm install -g yarn\n'})}),"\n",(0,s.jsx)(n.p,{children:"Now, all system dependencies used to run an Electron application needs to be installed."}),"\n",(0,s.jsx)(n.p,{children:"Podman is also installed so we can run some containers inside this container."}),"\n",(0,s.jsxs)(n.p,{children:["And of course, we need to install VNC (I choose ",(0,s.jsx)(n.a,{href:"https://tigervnc.org/",children:"tigervnc"}),") with a light Window Manager (",(0,s.jsx)(n.a,{href:"http://fluxbox.org/",children:"fluxbox"}),")."]}),"\n",(0,s.jsxs)(n.p,{children:["To connect to the display of the container, we need to expose VNC over HTML/websocket using ",(0,s.jsx)(n.a,{href:"https://novnc.com/",children:"noVNC"})]}),"\n",(0,s.jsx)(n.p,{children:"xterm is installed to start a terminal from the VNC side."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:"RUN dnf -y update && \\\n yum -y reinstall shadow-utils && \\\n yum install -y git \\\n # dependencies for Podman Desktop\n nss \\\n atk \\\n at-spi2-atk \\\n cups-libs \\\n gtk3 \\\n # for remote Display\n fluxbox \\\n tigervnc-server \\\n xorg-x11-fonts-Type1 \\\n novnc \\\n supervisor \\\n xdpyinfo \\\n # for podman\n podman \\\n fuse-overlayfs --exclude container-selinux \\\n xterm && \\\n rm -rf /var/cache /var/log/dnf* /var/log/yum.*\n"})}),"\n",(0,s.jsx)(n.p,{children:"Supervisord setup the launch of the VNC server and the Window manager"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:"COPY supervisord.conf /etc/supervisord.conf\n"})}),"\n",(0,s.jsx)(n.p,{children:"A custom theme for fluxbox:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:"COPY fluxbox /usr/share/fluxbox/init\n"})}),"\n",(0,s.jsx)(n.p,{children:"Then we need a special configuration to allow to have Podman working inside the container"}),"\n",(0,s.jsxs)(n.p,{children:["We add the ",(0,s.jsx)(n.code,{children:"podman-desktop"})," user with correct range on subuid and subgid when running containers. I used the ",(0,s.jsx)(n.a,{href:"https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md#etcsubuid-and-etcsubgid-configuration",children:"tutorial"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:"RUN useradd -u 1000 podman-desktop && echo podman-desktop:10000:5000 > /etc/subuid && echo podman-desktop:10000:5000 > /etc/subgid\n"})}),"\n",(0,s.jsx)(n.p,{children:"Then use some default configuration files"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:"# initialize conf files\nADD https://raw.githubusercontent.com/containers/libpod/master/contrib/podmanimage/stable/containers.conf /etc/containers/containers.conf\nADD https://raw.githubusercontent.com/containers/libpod/master/contrib/podmanimage/stable/podman-containers.conf /home/podman-desktop/.config/containers/containers.conf\n"})}),"\n",(0,s.jsxs)(n.p,{children:["and make sure that all permissions are correct following the guide ",(0,s.jsx)(n.a,{href:"https://www.redhat.com/sysadmin/podman-inside-container",children:"https://www.redhat.com/sysadmin/podman-inside-container"})]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:"# set permissions\nRUN chown podman-desktop:podman-desktop -R /home/podman-desktop && chmod 644 /etc/containers/containers.conf && \\\n mkdir -p /var/lib/shared/overlay-images /var/lib/shared/overlay-layers /var/lib/shared/vfs-images /var/lib/shared/vfs-layers; touch /var/lib/shared/overlay-images/images.lock; touch /var/lib/shared/overlay-layers/layers.lock; touch /var/lib/shared/vfs-images/images.lock; touch /var/lib/shared/vfs-layers/layers.lock && \\\n mkdir -p /run/user/1000 && chown podman-desktop:podman-desktop /run/user/1000\n"})}),"\n",(0,s.jsx)(n.p,{children:"plus define an empty user namespace."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:'ENV _CONTAINERS_USERNS_CONFIGURED=""\n'})}),"\n",(0,s.jsx)(n.p,{children:"Make sure Podman will create the socket in an expected directory:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:"# socket path for podman\nENV XDG_RUNTIME_DIR=/run/user/1000\n"})}),"\n",(0,s.jsx)(n.p,{children:"OK ! we have a custom Containerfile providing all the tools to build and run Podman Desktop (using VNC for the display), run Podman and run Electron."}),"\n",(0,s.jsxs)(n.p,{children:["The current file is available at ",(0,s.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/blob/main/.devcontainer/.parent/Containerfile",children:"https://github.com/containers/podman-desktop/blob/main/.devcontainer/.parent/Containerfile"})]}),"\n",(0,s.jsx)(n.p,{children:"Let's configure the DevContainer."}),"\n",(0,s.jsx)(n.h2,{id:"configure-the-devcontainer-using-devcontainerjson",children:"Configure the DevContainer using devcontainer.json"}),"\n",(0,s.jsxs)(n.p,{children:["DevContainer definition is stored at ",(0,s.jsx)(n.code,{children:".devcontainer/devcontainer.json"})," file."]}),"\n",(0,s.jsxs)(n.p,{children:["We need to reuse the image of the previous step. For that let's use the build section of the ",(0,s.jsx)(n.code,{children:"devcontainer.json"})," file."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"build": {\n "dockerfile": "Containerfile"\n},\n'})}),"\n",(0,s.jsxs)(n.p,{children:["In order to avoid to redo all the build steps each time we open a workspace using this dev container, we published the image to quay.io at ",(0,s.jsxs)(n.a,{href:"https://quay.io/repository/podman-desktop/devcontainer-parent?tab=tags&tag=next",children:["quay.io/podman-desktop/devcontainer-parent",":next","\n"]}),". This parent image is not changing much so it's better to use is as a parent one."]}),"\n",(0,s.jsxs)(n.p,{children:["Inside ",(0,s.jsx)(n.code,{children:".devcontainer"})," directory there is a ",(0,s.jsx)(n.code,{children:".parent"})," directory with everything related to the parent image."]}),"\n",(0,s.jsxs)(n.p,{children:["And in the ",(0,s.jsx)(n.code,{children:".devcontainer/Containerfile"})," file we reference this image"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:"FROM quay.io/podman-desktop/devcontainer-parent:next\n"})}),"\n",(0,s.jsxs)(n.p,{children:["By default, we will be ",(0,s.jsx)(n.code,{children:"root"})," in the container and this is probably not what we expect. Let's change that."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"containerUser": "podman-desktop"\n'})}),"\n",(0,s.jsx)(n.p,{children:"Some Visual Studio Code extensions are nice to use and we can add them"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:' "extensions": ["svelte.svelte-vscode", "bradlc.vscode-tailwindcss"]\n'})}),"\n",(0,s.jsx)(n.p,{children:"Then here is the tricky part, how to run our container allowing to run again inside the container some containers with podman."}),"\n",(0,s.jsxs)(n.p,{children:["We specify the arguments to make it possible. It's possible to use ",(0,s.jsx)(n.code,{children:"--privileged"})," flag but I prefer to list the subset of permissions.\nUsing ",(0,s.jsx)(n.code,{children:"--privileged"})," we don't really know what are the privilege that are required while specifying all of them, people are aware of what is granted/denied."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"runArgs": [\n "--cap-add=sys_admin",\n "--security-opt",\n "seccomp=unconfined",\n "--device",\n "/dev/fuse",\n "--security-opt",\n "label=disable",\n "--security-opt",\n "apparmor=unconfined"\n ],\n'})}),"\n",(0,s.jsx)(n.p,{children:"Source code of Podman Desktop needs to be editable within the DevContainer so it needs to be mounted."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind",\n"workspaceFolder": "/workspace",\n'})}),"\n",(0,s.jsx)(n.p,{children:"Then we need a command to build Podman Desktop."}),"\n",(0,s.jsxs)(n.p,{children:["For that, we use ",(0,s.jsx)(n.code,{children:"onCreateCommand"})," hook with a custom command"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"onCreateCommand": "${containerWorkspaceFolder}/.devcontainer/onCreateCommand.sh",\n'})}),"\n",(0,s.jsxs)(n.p,{children:["and in the ",(0,s.jsx)(n.code,{children:".devcontainer"})," folder the ",(0,s.jsx)(n.code,{children:"onCreateCommand.sh"})," script is the following"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",children:"#!/bin/sh\nyarn\n\nMODE=production yarn run build && yarn run electron-builder build --linux --dir --config .electron-builder.config.cjs\n"})}),"\n",(0,s.jsx)(n.p,{children:"Two instructions:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Fetch all Node.js dependencies."}),"\n",(0,s.jsxs)(n.li,{children:["build Podman Desktop in the ",(0,s.jsx)(n.code,{children:"dist"})," folder using ",(0,s.jsx)(n.code,{children:"Linux"})," as target Operating System."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"After the start of the container, how to launch Podman Desktop, the website and VNC, etc ?"}),"\n",(0,s.jsxs)(n.p,{children:["Just use ",(0,s.jsx)(n.code,{children:"postStartCommand"})," hook."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"postStartCommand": "${containerWorkspaceFolder}/.devcontainer/postStartCommand.sh",\n'})}),"\n",(0,s.jsxs)(n.p,{children:["and in the ",(0,s.jsx)(n.code,{children:".devcontainer"})," folder the ",(0,s.jsx)(n.code,{children:"postStartCommand.sh"})," script is the following:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",children:'#!/bin/sh\n\n# Start all services\n/usr/bin/supervisord -c /etc/supervisord.conf &\n\n# wait X server to be ready or after 2mn exit\necho "Waiting for X server to be ready"\ntimeout 120 bash -c \'until xdpyinfo -display :0 &> /dev/null; do printf "."; sleep 1; done\'\n\n# launch podman desktop\necho "Launching Podman Desktop"\ncd dist/linux-unpacked/&& ./podman-desktop &\n\n# Launch the 9000 redirect after 20 seconds\nsleep 20\nwebsockify --web=/usr/share/novnc localhost:9000 localhost:5900 &\n\n# launch the website rendering\necho "Launching Website"\ncd website && yarn start\n'})}),"\n",(0,s.jsx)(n.p,{children:"It starts VNC and noVNC, start precompiled Podman Desktop and start the documentation rendering."}),"\n",(0,s.jsx)(n.p,{children:"It is not launching the Watch mode/development mode of Podman Desktop as it requires a container having more than 8GB of memory."}),"\n",(0,s.jsx)(n.p,{children:"Picking up a larger instance with for example 16GB, it's possible to use development mode."}),"\n",(0,s.jsxs)(n.p,{children:["Of course, to make VNC happy, we need to specify the ",(0,s.jsx)(n.code,{children:"DISPLAY"})," environment variable."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"remoteEnv": {\n "DISPLAY": ":0"\n}\n'})}),"\n",(0,s.jsxs)(n.p,{children:["When the DevContainer is fully available, we want to have a way to quickly open the ",(0,s.jsx)(n.code,{children:"Website rendering URL"})," and ",(0,s.jsx)(n.code,{children:"noVNC"})]}),"\n",(0,s.jsxs)(n.p,{children:["Let's tweak the ",(0,s.jsx)(n.code,{children:"devcontainer.json"})," file by adding the ",(0,s.jsx)(n.code,{children:"portsAttributes"})," section"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"portsAttributes": {\n "9000": {\n "label": "vnc",\n "onAutoForward": "openPreview"\n },\n "3000": {\n "label": "website"\n }\n}\n'})}),"\n",(0,s.jsxs)(n.p,{children:["After all post-creation steps, the ",(0,s.jsx)(n.code,{children:"Preview"})," browser inside the VS Code editor will open a window to VNC. And another port (",(0,s.jsx)(n.code,{children:"3000"}),") is flagged for the website."]}),"\n",(0,s.jsx)(n.h2,{id:"using-the-devcontainerjson-on-github-codespace",children:"Using the DevContainer.json on Github Codespace"}),"\n",(0,s.jsx)(n.p,{children:"As a user, opening a workspace with all what we configured is done using a single click."}),"\n",(0,s.jsxs)(n.p,{children:["Go to ",(0,s.jsx)(n.a,{href:"https://github.com/containers/podman-desktop",children:"https://github.com/containers/podman-desktop"})," then click on the ",(0,s.jsx)(n.code,{children:"< > Code"})," dropdown and click on ",(0,s.jsx)(n.code,{children:"Create codespace on main"})," button."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Open Codespace",src:o(37486).Z+"",width:"1240",height:"617"})}),"\n",(0,s.jsx)(n.p,{children:"Once you click on the button, the codespace is setting up:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Preparing Codespace",src:o(66289).Z+"",width:"754",height:"587"})}),"\n",(0,s.jsxs)(n.p,{children:["After few minutes, as there is not yet ",(0,s.jsx)(n.a,{href:"https://docs.github.com/en/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds",children:"prebuilt codespaces"}),", the codespace is opening."]}),"\n",(0,s.jsxs)(n.p,{children:["The simple Browser displays the noVNC window:\n",(0,s.jsx)(n.img,{alt:"Opening Codespace",src:o(38559).Z+"",width:"2051",height:"1066"})]}),"\n",(0,s.jsxs)(n.p,{children:["Click on the connect button. Then on the terminal you can enter ",(0,s.jsx)(n.code,{children:"podman run quay.io/podman/hello"})," and the container is detected in Podman Desktop.\n",(0,s.jsx)(n.img,{alt:"Testing Codespace",src:o(92972).Z+"",width:"2051",height:"1066"})]}),"\n",(0,s.jsxs)(n.p,{children:["It's also possible using the port widget to get on ",(0,s.jsx)(n.code,{children:"3000"})," port by clicking on the world icon a preview of the website in another tab. Changing source code of the website will refresh the content of the window."]}),"\n",(0,s.jsx)(n.p,{children:"Depending on the usecase, it's also possible to open documentation in the preview browser."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Edit website Codespace",src:o(83517).Z+"",width:"2051",height:"1066"})}),"\n",(0,s.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,s.jsxs)(n.p,{children:["The DevContainer image for Podman Desktop is recent so it'll probably evolve over time by adding new capabilities but it allows you to easily build/run/experiment and ",(0,s.jsx)(n.strong,{children:"contribute"})," to the tool or the website."]})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},37486:(e,n,o)=>{o.d(n,{Z:()=>s});const s=o.p+"assets/images/codespaces-click-repository-22eb251ecc45a2b29952fe5983e16238.png"},83517:(e,n,o)=>{o.d(n,{Z:()=>s});const s=o.p+"assets/images/codespaces-edit-website-d1f2a645f97209e453bc72cadafa0b54.png"},38559:(e,n,o)=>{o.d(n,{Z:()=>s});const s=o.p+"assets/images/codespaces-open-novnc-ec3f30d836eb7af5750498a833d37184.png"},66289:(e,n,o)=>{o.d(n,{Z:()=>s});const s=o.p+"assets/images/codespaces-preparing-codespace-3121417aa9d8947b8f5566bf39478961.png"},92972:(e,n,o)=>{o.d(n,{Z:()=>s});const s=o.p+"assets/images/codespaces-testing-podman-desktop-3210aa766f273a52253d27cb4e7ef782.png"},71670:(e,n,o)=>{o.d(n,{Z:()=>r,a:()=>a});var s=o(27378);const t={},i=s.createContext(t);function a(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3b5edcc4.38cb72ef.js b/assets/js/3b5edcc4.38cb72ef.js new file mode 100644 index 00000000000..2940cf92294 --- /dev/null +++ b/assets/js/3b5edcc4.38cb72ef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1647],{17369:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/images","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"Discover articles about Podman Desktop","blogTitle":"Podman Desktop blog!"}')}}]); \ No newline at end of file diff --git a/assets/js/65a10ffa.138dffd6.js b/assets/js/65a10ffa.138dffd6.js deleted file mode 100644 index e84673ab847..00000000000 --- a/assets/js/65a10ffa.138dffd6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2472],{99867:(o,e,t)=>{t.r(e),t.d(e,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var n=t(24246),s=t(71670);const r={title:"5 things to know about Podman Desktop for a Docker user",description:"Important things to know when switching from Docker Desktop to Podman Desktop",slug:"5-things-to-know-for-a-docker-user",authors:["benoitf"],tags:["podman-desktop","docker","migrating"],hide_table_of_contents:!1},i=void 0,a={permalink:"/blog/5-things-to-know-for-a-docker-user",source:"@site/blog/2023-03-24-5-things-to-know-for-a-docker-user.md",title:"5 things to know about Podman Desktop for a Docker user",description:"Important things to know when switching from Docker Desktop to Podman Desktop",date:"2023-03-24T00:00:00.000Z",formattedDate:"March 24, 2023",tags:[{label:"podman-desktop",permalink:"/blog/tags/podman-desktop"},{label:"docker",permalink:"/blog/tags/docker"},{label:"migrating",permalink:"/blog/tags/migrating"}],readingTime:4.285,hasTruncateMarker:!0,authors:[{name:"Florent Benoit",title:"Maintainer of Podman Desktop",url:"https://github.com/benoitf",imageURL:"https://github.com/benoitf.png",key:"benoitf"}],frontMatter:{title:"5 things to know about Podman Desktop for a Docker user",description:"Important things to know when switching from Docker Desktop to Podman Desktop",slug:"5-things-to-know-for-a-docker-user",authors:["benoitf"],tags:["podman-desktop","docker","migrating"],hide_table_of_contents:!1},unlisted:!1,prevItem:{title:"Release Notes - Podman Desktop 0.13",permalink:"/blog/podman-desktop-release-0.13"},nextItem:{title:"Release Notes - Podman Desktop 0.12",permalink:"/blog/podman-desktop-release-0.12"}},c={authorsImageUrls:[void 0]},d=[];function l(o){const e={code:"code",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...o.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.p,{children:"The 5 things to know being a Docker user by using Podman Desktop:"}),"\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsxs)(e.li,{children:[(0,n.jsx)(e.strong,{children:"Use a single UI"}),": Podman Desktop works with several container engines, including Docker."]}),"\n",(0,n.jsxs)(e.li,{children:["The ",(0,n.jsx)(e.strong,{children:"compatibility mode"}),": How to ensure tools are working with Podman instead of Docker."]}),"\n",(0,n.jsxs)(e.li,{children:[(0,n.jsx)(e.strong,{children:"Compose"})," support: How to work with Compose files and Podman."]}),"\n",(0,n.jsxs)(e.li,{children:[(0,n.jsx)(e.strong,{children:"Kubernetes"})," support: How to use Kubernetes with Podman."]}),"\n",(0,n.jsxs)(e.li,{children:[(0,n.jsx)(e.strong,{children:"Security"}),": Use ",(0,n.jsx)(e.code,{children:"rootless"})," mode or containers without root privileges."]}),"\n"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.img,{alt:"5-things-to-know-for-a-docker-user-hero",src:t(63440).Z+"",width:"800",height:"462"})})]})}function p(o={}){const{wrapper:e}={...(0,s.a)(),...o.components};return e?(0,n.jsx)(e,{...o,children:(0,n.jsx)(l,{...o})}):l(o)}},63440:(o,e,t)=>{t.d(e,{Z:()=>n});const n=t.p+"assets/images/5-things-to-know-for-a-docker-user-hero-376f962671072e8cd6909702d92c90b1.png"},71670:(o,e,t)=>{t.d(e,{Z:()=>a,a:()=>i});var n=t(27378);const s={},r=n.createContext(s);function i(o){const e=n.useContext(r);return n.useMemo((function(){return"function"==typeof o?o(e):{...e,...o}}),[e,o])}function a(o){let e;return e=o.disableParentContext?"function"==typeof o.components?o.components(s):o.components||s:i(o.components),n.createElement(r.Provider,{value:e},o.children)}}}]); \ No newline at end of file diff --git a/assets/js/65a10ffa.9fdb1eef.js b/assets/js/65a10ffa.9fdb1eef.js new file mode 100644 index 00000000000..eb57ba95071 --- /dev/null +++ b/assets/js/65a10ffa.9fdb1eef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2472],{99867:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var n=t(24246),s=t(71670);const r={title:"5 things to know about Podman Desktop for a Docker user",description:"Important things to know when switching from Docker Desktop to Podman Desktop",slug:"5-things-to-know-for-a-docker-user",authors:["benoitf"],tags:["podman-desktop","docker","migrating"],hide_table_of_contents:!1},i=void 0,a={permalink:"/blog/5-things-to-know-for-a-docker-user",source:"@site/blog/2023-03-24-5-things-to-know-for-a-docker-user.md",title:"5 things to know about Podman Desktop for a Docker user",description:"Important things to know when switching from Docker Desktop to Podman Desktop",date:"2023-03-24T00:00:00.000Z",formattedDate:"March 24, 2023",tags:[{label:"podman-desktop",permalink:"/blog/tags/podman-desktop"},{label:"docker",permalink:"/blog/tags/docker"},{label:"migrating",permalink:"/blog/tags/migrating"}],readingTime:4.285,hasTruncateMarker:!0,authors:[{name:"Florent Benoit",title:"Principal Software Engineer",url:"https://github.com/benoitf",imageURL:"https://github.com/benoitf.png",key:"benoitf"}],frontMatter:{title:"5 things to know about Podman Desktop for a Docker user",description:"Important things to know when switching from Docker Desktop to Podman Desktop",slug:"5-things-to-know-for-a-docker-user",authors:["benoitf"],tags:["podman-desktop","docker","migrating"],hide_table_of_contents:!1},unlisted:!1,prevItem:{title:"Release Notes - Podman Desktop 0.13",permalink:"/blog/podman-desktop-release-0.13"},nextItem:{title:"Release Notes - Podman Desktop 0.12",permalink:"/blog/podman-desktop-release-0.12"}},c={authorsImageUrls:[void 0]},d=[];function l(e){const o={code:"code",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.p,{children:"The 5 things to know being a Docker user by using Podman Desktop:"}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsxs)(o.li,{children:[(0,n.jsx)(o.strong,{children:"Use a single UI"}),": Podman Desktop works with several container engines, including Docker."]}),"\n",(0,n.jsxs)(o.li,{children:["The ",(0,n.jsx)(o.strong,{children:"compatibility mode"}),": How to ensure tools are working with Podman instead of Docker."]}),"\n",(0,n.jsxs)(o.li,{children:[(0,n.jsx)(o.strong,{children:"Compose"})," support: How to work with Compose files and Podman."]}),"\n",(0,n.jsxs)(o.li,{children:[(0,n.jsx)(o.strong,{children:"Kubernetes"})," support: How to use Kubernetes with Podman."]}),"\n",(0,n.jsxs)(o.li,{children:[(0,n.jsx)(o.strong,{children:"Security"}),": Use ",(0,n.jsx)(o.code,{children:"rootless"})," mode or containers without root privileges."]}),"\n"]}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{alt:"5-things-to-know-for-a-docker-user-hero",src:t(63440).Z+"",width:"800",height:"462"})})]})}function p(e={}){const{wrapper:o}={...(0,s.a)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},63440:(e,o,t)=>{t.d(o,{Z:()=>n});const n=t.p+"assets/images/5-things-to-know-for-a-docker-user-hero-376f962671072e8cd6909702d92c90b1.png"},71670:(e,o,t)=>{t.d(o,{Z:()=>a,a:()=>i});var n=t(27378);const s={},r=n.createContext(s);function i(e){const o=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),n.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/72486833.486eb6ae.js b/assets/js/72486833.d09f3bbb.js similarity index 58% rename from assets/js/72486833.486eb6ae.js rename to assets/js/72486833.d09f3bbb.js index ffd5b5a03de..dd8a42b6d5a 100644 --- a/assets/js/72486833.486eb6ae.js +++ b/assets/js/72486833.d09f3bbb.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3505],{83722:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/kubernetes","page":1,"postsPerPage":13,"totalPages":1,"totalCount":13,"blogDescription":"Discover articles about Podman Desktop","blogTitle":"Podman Desktop blog!"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3505],{83722:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/kubernetes","page":1,"postsPerPage":14,"totalPages":1,"totalCount":14,"blogDescription":"Discover articles about Podman Desktop","blogTitle":"Podman Desktop blog!"}')}}]); \ No newline at end of file diff --git a/assets/js/814f3328.440aa4d0.js b/assets/js/814f3328.440aa4d0.js deleted file mode 100644 index c195ea05365..00000000000 --- a/assets/js/814f3328.440aa4d0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2535],{45641:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Release Notes - Podman Desktop 1.5","permalink":"/blog/podman-desktop-release-1.5","unlisted":false},{"title":"Release Notes - Podman Desktop 1.4","permalink":"/blog/podman-desktop-release-1.4","unlisted":false},{"title":"Release Notes - Podman Desktop 1.3","permalink":"/blog/podman-desktop-release-1.3","unlisted":false},{"title":"Release Notes - Podman Desktop 1.2","permalink":"/blog/podman-desktop-release-1.2","unlisted":false},{"title":"Release Notes - Podman Desktop 1.1","permalink":"/blog/podman-desktop-release-1.1","unlisted":false}]}')}}]); \ No newline at end of file diff --git a/assets/js/814f3328.98343356.js b/assets/js/814f3328.98343356.js new file mode 100644 index 00000000000..e22ead3bd6a --- /dev/null +++ b/assets/js/814f3328.98343356.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2535],{45641:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Share your local podman images with the Kubernetes cluster","permalink":"/blog/sharing-podman-images-with-kubernetes-cluster","unlisted":false},{"title":"Release Notes - Podman Desktop 1.5","permalink":"/blog/podman-desktop-release-1.5","unlisted":false},{"title":"Release Notes - Podman Desktop 1.4","permalink":"/blog/podman-desktop-release-1.4","unlisted":false},{"title":"Release Notes - Podman Desktop 1.3","permalink":"/blog/podman-desktop-release-1.3","unlisted":false},{"title":"Release Notes - Podman Desktop 1.2","permalink":"/blog/podman-desktop-release-1.2","unlisted":false}]}')}}]); \ No newline at end of file diff --git a/assets/js/a00af9f0.13f510a8.js b/assets/js/a00af9f0.13f510a8.js new file mode 100644 index 00000000000..7120ad16ce8 --- /dev/null +++ b/assets/js/a00af9f0.13f510a8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[822],{5416:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>h});var t=s(24246),i=s(71670),o=s(92975);const a={title:"Release Notes - Podman Desktop 1.5",description:"Podman Desktop 1.5 has been released!",slug:"podman-desktop-release-1.5",authors:"duffy",tags:["podman-desktop","release","kubernetes","openshift","onboarding","compose","extensions","settings"],hide_table_of_contents:!1,image:"/blog/img/podman-desktop-release-1.5/onboarding-selkies.png"},r=void 0,l={permalink:"/blog/podman-desktop-release-1.5",source:"@site/blog/2023-11-03-release-1.5.md",title:"Release Notes - Podman Desktop 1.5",description:"Podman Desktop 1.5 has been released!",date:"2023-11-03T00:00:00.000Z",formattedDate:"November 3, 2023",tags:[{label:"podman-desktop",permalink:"/blog/tags/podman-desktop"},{label:"release",permalink:"/blog/tags/release"},{label:"kubernetes",permalink:"/blog/tags/kubernetes"},{label:"openshift",permalink:"/blog/tags/openshift"},{label:"onboarding",permalink:"/blog/tags/onboarding"},{label:"compose",permalink:"/blog/tags/compose"},{label:"extensions",permalink:"/blog/tags/extensions"},{label:"settings",permalink:"/blog/tags/settings"}],readingTime:8.14,hasTruncateMarker:!1,authors:[{name:"M\xe1ir\xedn Duffy",title:"User Experience Designer",url:"https://github.com/mairin",imageURL:"https://github.com/mairin.png",key:"duffy"}],frontMatter:{title:"Release Notes - Podman Desktop 1.5",description:"Podman Desktop 1.5 has been released!",slug:"podman-desktop-release-1.5",authors:"duffy",tags:["podman-desktop","release","kubernetes","openshift","onboarding","compose","extensions","settings"],hide_table_of_contents:!1,image:"/blog/img/podman-desktop-release-1.5/onboarding-selkies.png"},unlisted:!1,prevItem:{title:"Share your local podman images with the Kubernetes cluster",permalink:"/blog/sharing-podman-images-with-kubernetes-cluster"},nextItem:{title:"Release Notes - Podman Desktop 1.4",permalink:"/blog/podman-desktop-release-1.4"}},d={authorsImageUrls:[void 0]},h=[{value:"Release Details",id:"release-details",level:2},{value:"Onboarding",id:"onboarding",level:3},{value:"Command Palette",id:"command-palette",level:3},{value:"Expanded "Summary" tab for Kubernetes pods",id:"expanded-summary-tab-for-kubernetes-pods",level:3},{value:"Environment file support",id:"environment-file-support",level:3},{value:"Enhancements to the Settings area",id:"enhancements-to-the-settings-area",level:3},{value:"Improved user experience for state changes",id:"improved-user-experience-for-state-changes",level:3},{value:"Extension API improvements",id:"extension-api-improvements",level:3},{value:"Other Notable Enhancements",id:"other-notable-enhancements",level:2},{value:"Notable Bug Fixes",id:"notable-bug-fixes",level:2},{value:"Community Thank You",id:"community-thank-you",level:2},{value:"Final notes",id:"final-notes",level:2},{value:"Known Issues",id:"known-issues",level:3},{value:"Known Issues: Podman Desktop 1.5.2",id:"known-issues-podman-desktop-152",level:4},{value:"Fixed Issues",id:"fixed-issues",level:3},{value:"Where to Download",id:"where-to-download",level:3}];function c(e){const n={a:"a",h2:"h2",h3:"h3",h4:"h4",hr:"hr",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components},{Icon:a}=n;return a||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Icon",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"Podman Desktop 1.5 Release! \ud83c\udf89"}),"\n",(0,t.jsxs)(n.p,{children:["With this release of Podman Desktop, we're introducing ",(0,t.jsx)(n.strong,{children:"a new onboarding feature"})," that we hope will earn your \ud83e\uddad seal of approval! But wait... there's so much more!"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Onboarding"}),": Guided setup and configuration of ",(0,t.jsx)(n.strong,{children:"Podman"})," and ",(0,t.jsx)(n.strong,{children:"Compose"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Podman 4.7.2"}),": ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman/releases",children:"Podman 4.7.2"})," is now included in Windows and Mac installers"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Command Palette"}),": Gain easy access to various commands via a new keyboard-driven command palette"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:'Expanded "Summary" tab for Kubernetes pods'}),': Go deep with extended details on Kubernetes pods in the pod "Summary" tab']}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Environment file support"}),": Chart out environment variables for new containers to access on creation"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Enhancements to the Settings area"}),": Get your bearings with improved Docker compatibility mode controls"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Improved user experience for state changes"}),": No more dead reckoning on container state with improved visual indication of status"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Extension API improvements"}),": A boatload of improvements to the extension API enabling more goodness from \ud83e\uddad Podman Desktop's extensions"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Podman Desktop 1.5 is now available. ",(0,t.jsx)(n.a,{href:"/downloads",children:"Click here to download it"}),"!"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Podman-desktop-1-5-hero",src:s(90973).Z+"",width:"1920",height:"1080"})}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"release-details",children:"Release Details"}),"\n",(0,t.jsx)(n.h3,{id:"onboarding",children:"Onboarding"}),"\n",(0,t.jsx)(n.p,{children:"We are introducing a new feature providing guided flows for the initial setup of specific \ud83e\uddad Podman Desktop extensions. Release 1.5 features two new onboarding flows: Podman and Compose."}),"\n",(0,t.jsxs)(n.p,{children:['To start the Podman onboarding flow, you can start from the dashboard notification by clicking the "Set up" button:\n',(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/799683/280362279-598cc052-5ea4-4c31-849c-da9bbbcc3e42.png",alt:"podman-onboarding-start"}),"\n",(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/799683/280363859-f35b85f8-1dd4-4b7f-a995-25fe5d1ccced.png",alt:"podman-onboarding"})]}),"\n",(0,t.jsxs)(n.p,{children:["Visit ",(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(a,{icon:"fa-solid fa-cog",size:"lg"}),"Settings > Resources"]}),' screen and click the Compose "Setup ..." button in order to start Compose onboarding:\n',(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/799683/280276847-ca0558ab-70ad-48cc-8dd5-67e3eb465a62.png",alt:"compose-onboarding-start"}),"\n",(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/799683/280277936-77ba0fb2-5cb0-41de-a7cf-1a3d6400fd89.png",alt:"compose-onboarding"})]}),"\n",(0,t.jsx)(n.h3,{id:"command-palette",children:"Command Palette"}),"\n",(0,t.jsxs)(n.p,{children:["A new, search-driven command palette is now available to enable quick access to various commands available across \ud83e\uddad Podman Desktop. You can try this new tool out by hitting the F1 key. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4081",children:"#4081"})," && ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3979",children:"#3979"})]}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/436777/270362431-5aaa6a1b-6df5-4b66-a811-cdd148d02ad6.mp4",width:"100%",height:"100%"}),"\n",(0,t.jsx)(n.h3,{id:"expanded-summary-tab-for-kubernetes-pods",children:'Expanded "Summary" tab for Kubernetes pods'}),"\n",(0,t.jsx)(n.p,{children:'Kubernetes pods now offer a more comprehensive set of information under the "Summary" tab, including networking, volumes, environment variables, and other key metadata.'}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/6422176/272972815-bed96f3a-6b13-45d3-a13b-74eacb27a4cd.mov",width:"100%",height:"100%"}),"\n",(0,t.jsx)(n.h3,{id:"environment-file-support",children:"Environment file support"}),"\n",(0,t.jsxs)(n.p,{children:["When creating a container from the Images list, there's now an option to provide an environment file to set env variables for the new container. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4026",children:"#4026"})," && ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4025",children:"#4025"})]}),"\n",(0,t.jsx)(n.h3,{id:"enhancements-to-the-settings-area",children:"Enhancements to the Settings area"}),"\n",(0,t.jsxs)(n.p,{children:["The user experience for enabling or disabling Docker compatibility is improved, with a new entry in the ",(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(a,{icon:"fa-solid fa-cog",size:"lg"}),"Settings > Preferences"]})," screen that includes contextual guidance. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4093",children:"#4093"})]}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/6422176/270497318-902b2566-62ad-4ee6-87af-6a9a2705de99.mov",width:"100%",height:"100%"}),"\n",(0,t.jsx)(n.h3,{id:"improved-user-experience-for-state-changes",children:"Improved user experience for state changes"}),"\n",(0,t.jsxs)(n.p,{children:["The user experience around state changes for containers, pods, and other objects in the UI is improved, with clear status messages and improved animated visual indicator of state changes. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4056",children:"#4056"})]}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/19958075/270027524-f5176cf9-462f-4024-920a-b4a906c7d30d.mov",width:"100%",height:"100%"}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/19958075/270027533-70e152ec-5bbf-45ad-9f1d-563752464655.mov",width:"100%",height:"100%"}),"\n",(0,t.jsx)(n.h3,{id:"extension-api-improvements",children:"Extension API improvements"}),"\n",(0,t.jsx)(n.p,{children:"The \ud83e\uddad Podman Desktop extension API received many improvements, including:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In addition to pushing and listing image from an extension, it's now possible to pull images from a \ud83e\uddad Podman Desktop extension ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4155",children:"#4155"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The \ud83e\uddad Podman Desktop extension API has been enhanced with both the ability to list images & networks and the ability to create containers & networks. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4172",children:"#4172"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["\ud83e\uddad Podman Desktop extensions now have a consistent way to run administrative tasks. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4049",children:"#4049"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Extensions now have the ability to register a custom Kubernetes config generator. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3970",children:"#3970"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The ability of extensions to add commands to UI menus has been extended; previously for action menus it was only available in the Image list screen. It is now possible for extensions to add commands to the action menus of items listed on the Containers list screen as well. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3947",children:"#3947"})," & ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3963",children:"#3963"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Extensions have gained the ability to contribute menu items in the UI based on specific conditions. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3959",children:"#3959"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Enhanced logic for displaying or hiding properties listed under the ",(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(a,{icon:"fa-solid fa-cog",size:"lg"}),"Settings > Preferences"]})," screens is now available. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4159",children:"#4159"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/6422176/271650937-3991565c-12a4-4e6c-a315-9343bfa25f65.mov",width:"100%",height:"100%"}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"other-notable-enhancements",children:"Other Notable Enhancements"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The progress of loading an image into Kind is now visible as a task in the task manager. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4061",children:"#4061"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/42176370/270154775-eb7007b4-fd0e-4287-be9e-40ffc412de35.png",alt:"kind-progress-task"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["It's now possible to start a new Podman machine right after creation, or you can create it and wait to start it later. It's up to you! ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4046",children:"#4046"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/49404737/269941187-f4768833-ecfc-4d0b-8acf-d4afedb428d9.png",alt:"podman-start-now-or-later"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The Podman machine and Kubernetes provider creation forms have an updated look & feel consisted with other forms in the user interface, along with minor bug fixes. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4317",children:"#4317"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/19958075/274694157-fe89f3bc-e5b8-4735-96e9-669fe52c7a41.png",alt:"Updated provider creation forms"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The empty screen message shown when a search filter results in no matches now provides a message specific to filter matching, including the specific filter terms and an explicit button for clearing the filter. Previously, the screen displayed a generic message about how to create new objects of the type displayed on the screen, which led to some confusion about the status of the system. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3988",children:"#3988"})]}),"\n"]}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/19958075/269291090-13e724f7-252f-4915-bb04-00665001d21d.mov",width:"100%",height:"100%"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["New support for adding spin animations to icons is now available. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4188",children:"#4188"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["There is a new indeterminate progress bar type available for the task manager; this is meant for providing limited status for actions whose APIs do not provide detailed status information. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4016",children:"#4016"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["For authenticating as admin to perform administrative tasks, \ud83e\uddad Podman Desktop now provides touchID support for macOS. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4050",children:"#4050"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/436777/248588015-f08115bd-d211-43ad-bddd-286d7b3a7056.png",alt:"touchID-support"})}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/436777/269859758-47581e2b-8469-4e9c-822c-f4fddf46684d.mp4",width:"100%",height:"100%"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Support for connecting to interactive terminals for containers via tty was added. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3900",children:"#3900"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["It's now more clear which container/pod providers will autostart when \ud83e\uddad Podman Desktop starts. Previously autostart had both a global and a per-provider setting. It has been simplified by removing the global setting. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3840",children:"#3840"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['The "Working with containers" section of the documentation has been reworked and improved. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3951",children:"#3951"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"notable-bug-fixes",children:"Notable Bug Fixes"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The disable registry command was not blocking subsequent pulls from disabled registries. This has been corrected. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4183",children:"#4183"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Some users behind network proxies were unable to complete workflow involving the download of online resources. The mechanism for fetching these resources has been fixed to be proxy compatible to address this issue. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3994",children:"#3994"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The status of pods running in Kubernetes that are undergoing the deletion process is now accurately reflected in the \ud83e\uddad Podman Desktop UI. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3877",children:"#3877"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['The image details page always listed the image as being "not used" even when it was. This has been corrected. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3985",children:"#3985"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Previously, deleting a specific image tag would cause all tags with the same Image ID to be deleted. This has been fixed so only the selected image tag will be deleted. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3837",children:"#3837"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Could not view the pod details for some remote Kubernetes cluster pods due to an encoding error. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4371",children:"#4371"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Error logs were being tracked separately from the actions they applied to. This has been addressed for kind cluster creation failure ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4427",children:"#4427"})," and Compose installation failure ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4407",children:"#4407"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['For Linux users, \ud83e\uddad Podman Desktop previously did not appear under the "Development" menu when installed via Flatpak; it appeared under "Utilities." \ud83e\uddad Podman Desktop now appears under the "Development" menu. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3911",children:"#3911"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['Podman Machine names are no longer prefixed with the "Podman Machine" string. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3878",children:"#3878"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/19958075/267378447-aafdfbd7-f005-4b94-8626-9e11eec61b95.png",alt:"touchID-support"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['The initial action state of pods and containers was being displayed as "STARTING" regardless of actual state; this has been corrected. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3889",children:"#3889"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Resizing the application window no longer makes the last lines of a container's terminal invisible. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3993",children:"#3993"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["An issue with incorrect terminal behavior in response to long lines in the terminal attached to a container has been resolved. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3955",children:"#3955"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["A spacing issue on the run image form has been corrected. [#4089]",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4089",children:"https://github.com/containers/podman-desktop/pull/4089"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['The "podify" icon & button on the Containers list was unusually large in release 1.4. That regression has been corrected in this release. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4122",children:"#4122"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["An error in the instructions for Windows users on migrating from Docker has been corrected. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4157",children:"#4157"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"community-thank-you",children:"Community Thank You"}),"\n",(0,t.jsx)(n.p,{children:"\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make \ud83e\uddad Podman Desktop even better. In this\nrelease we received pull requests from the following people:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/afbjorklund",children:"afbjorklund"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4373",children:"#4373 - docs: fix broken links and add lima onboarding"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4372",children:"#4372 - docs: clear up lima column on containers page"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4091",children:"#4091 - fix: avoid errors with unexpected JSON input"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4098",children:"#4098 - docs: Lima onboarding details"}),", and ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3854",children:"#3854 - fix: check if machine init rootful flag supported"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/axel7083",children:"axel7083"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4061",children:"#4061 - feat: adding task progress for kind"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3970",children:"#3970 - feat: extension can register custom kube generator"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3959",children:"#3959 - feat: add when property to extensions menus"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4016",children:"#4016 - feat: indeterminate progress bar"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3963",children:"#3963 - fix: ContainerList propagating containers in ComposeActions and PodActions"}),", and ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3947",children:"#3947 - feat: extend menus capabilities"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/ayushrakesh",children:"ayushrakesh"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4415#",children:"#4415 - Update README.md"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/eltociear",children:"eltociear"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4194",children:"#4194 - Update README.md"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/foxydevloper",children:"foxydeveloper"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4157",children:"#4157 - docs: Correct windows instructions for migrating from docker"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/harsh-solanki21",children:"harsh-solanki21"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4162",children:"#4162 - fix: Removed fullstop from summary"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/rahul0x00",children:"rahul0x00"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4240",children:"#4240 - fix typos in README.md"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/shelar1423",children:"shelar1423"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4221",children:"#4221 - chore: document property setting in EXTENSIONS.md"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"final-notes",children:"Final notes"}),"\n",(0,t.jsx)(n.h3,{id:"known-issues",children:"Known Issues"}),"\n",(0,t.jsx)(n.p,{children:"We have a discussion board topic where we have posted known issues with this release. If you run into problems, please check this list before filing a bug - if we already have an issue open for it, it saves you the time and trouble of filing, and there may be a workaround posted in the issue."}),"\n",(0,t.jsx)(n.h4,{id:"known-issues-podman-desktop-152",children:(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/discussions/4635",children:"Known Issues: Podman Desktop 1.5.2"})}),"\n",(0,t.jsx)(n.h3,{id:"fixed-issues",children:"Fixed Issues"}),"\n",(0,t.jsxs)(n.p,{children:["The complete list of issues fixed in this release is available ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.5.0",children:"here"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"where-to-download",children:"Where to Download"}),"\n",(0,t.jsxs)(n.p,{children:["Get the latest release from the ",(0,t.jsx)(n.a,{href:"/downloads",children:"Downloads"})," section of the website and boost your development journey with Podman Desktop. Additionally, visit the ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop",children:"GitHub repository"})," and see how you can help us make Podman Desktop better."]})]})}function p(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},90973:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/onboarding-selkies-3ddb7cb6ee2cf9abed002b01f63b1822.png"}}]); \ No newline at end of file diff --git a/assets/js/a00af9f0.77be6ea6.js b/assets/js/a00af9f0.77be6ea6.js deleted file mode 100644 index a24520e54a4..00000000000 --- a/assets/js/a00af9f0.77be6ea6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[822],{5416:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>p,frontMatter:()=>a,metadata:()=>d,toc:()=>h});var t=s(24246),i=s(71670),o=s(92975);const a={title:"Release Notes - Podman Desktop 1.5",description:"Podman Desktop 1.5 has been released!",slug:"podman-desktop-release-1.5",authors:"duffy",tags:["podman-desktop","release","kubernetes","openshift","onboarding","compose","extensions","settings"],hide_table_of_contents:!1,image:"/blog/img/podman-desktop-release-1.5/onboarding-selkies.png"},r=void 0,d={permalink:"/blog/podman-desktop-release-1.5",source:"@site/blog/2023-11-03-release-1.5.md",title:"Release Notes - Podman Desktop 1.5",description:"Podman Desktop 1.5 has been released!",date:"2023-11-03T00:00:00.000Z",formattedDate:"November 3, 2023",tags:[{label:"podman-desktop",permalink:"/blog/tags/podman-desktop"},{label:"release",permalink:"/blog/tags/release"},{label:"kubernetes",permalink:"/blog/tags/kubernetes"},{label:"openshift",permalink:"/blog/tags/openshift"},{label:"onboarding",permalink:"/blog/tags/onboarding"},{label:"compose",permalink:"/blog/tags/compose"},{label:"extensions",permalink:"/blog/tags/extensions"},{label:"settings",permalink:"/blog/tags/settings"}],readingTime:8.14,hasTruncateMarker:!1,authors:[{name:"M\xe1ir\xedn Duffy",title:"User Experience Designer",url:"https://github.com/mairin",imageURL:"https://github.com/mairin.png",key:"duffy"}],frontMatter:{title:"Release Notes - Podman Desktop 1.5",description:"Podman Desktop 1.5 has been released!",slug:"podman-desktop-release-1.5",authors:"duffy",tags:["podman-desktop","release","kubernetes","openshift","onboarding","compose","extensions","settings"],hide_table_of_contents:!1,image:"/blog/img/podman-desktop-release-1.5/onboarding-selkies.png"},unlisted:!1,nextItem:{title:"Release Notes - Podman Desktop 1.4",permalink:"/blog/podman-desktop-release-1.4"}},l={authorsImageUrls:[void 0]},h=[{value:"Release Details",id:"release-details",level:2},{value:"Onboarding",id:"onboarding",level:3},{value:"Command Palette",id:"command-palette",level:3},{value:"Expanded "Summary" tab for Kubernetes pods",id:"expanded-summary-tab-for-kubernetes-pods",level:3},{value:"Environment file support",id:"environment-file-support",level:3},{value:"Enhancements to the Settings area",id:"enhancements-to-the-settings-area",level:3},{value:"Improved user experience for state changes",id:"improved-user-experience-for-state-changes",level:3},{value:"Extension API improvements",id:"extension-api-improvements",level:3},{value:"Other Notable Enhancements",id:"other-notable-enhancements",level:2},{value:"Notable Bug Fixes",id:"notable-bug-fixes",level:2},{value:"Community Thank You",id:"community-thank-you",level:2},{value:"Final notes",id:"final-notes",level:2},{value:"Known Issues",id:"known-issues",level:3},{value:"Known Issues: Podman Desktop 1.5.2",id:"known-issues-podman-desktop-152",level:4},{value:"Fixed Issues",id:"fixed-issues",level:3},{value:"Where to Download",id:"where-to-download",level:3}];function c(e){const n={a:"a",h2:"h2",h3:"h3",h4:"h4",hr:"hr",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components},{Icon:a}=n;return a||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Icon",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"Podman Desktop 1.5 Release! \ud83c\udf89"}),"\n",(0,t.jsxs)(n.p,{children:["With this release of Podman Desktop, we're introducing ",(0,t.jsx)(n.strong,{children:"a new onboarding feature"})," that we hope will earn your \ud83e\uddad seal of approval! But wait... there's so much more!"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Onboarding"}),": Guided setup and configuration of ",(0,t.jsx)(n.strong,{children:"Podman"})," and ",(0,t.jsx)(n.strong,{children:"Compose"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Podman 4.7.2"}),": ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman/releases",children:"Podman 4.7.2"})," is now included in Windows and Mac installers"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Command Palette"}),": Gain easy access to various commands via a new keyboard-driven command palette"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:'Expanded "Summary" tab for Kubernetes pods'}),': Go deep with extended details on Kubernetes pods in the pod "Summary" tab']}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Environment file support"}),": Chart out environment variables for new containers to access on creation"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Enhancements to the Settings area"}),": Get your bearings with improved Docker compatibility mode controls"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Improved user experience for state changes"}),": No more dead reckoning on container state with improved visual indication of status"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Extension API improvements"}),": A boatload of improvements to the extension API enabling more goodness from \ud83e\uddad Podman Desktop's extensions"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Podman Desktop 1.5 is now available. ",(0,t.jsx)(n.a,{href:"/downloads",children:"Click here to download it"}),"!"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Podman-desktop-1-5-hero",src:s(90973).Z+"",width:"1920",height:"1080"})}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"release-details",children:"Release Details"}),"\n",(0,t.jsx)(n.h3,{id:"onboarding",children:"Onboarding"}),"\n",(0,t.jsx)(n.p,{children:"We are introducing a new feature providing guided flows for the initial setup of specific \ud83e\uddad Podman Desktop extensions. Release 1.5 features two new onboarding flows: Podman and Compose."}),"\n",(0,t.jsxs)(n.p,{children:['To start the Podman onboarding flow, you can start from the dashboard notification by clicking the "Set up" button:\n',(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/799683/280362279-598cc052-5ea4-4c31-849c-da9bbbcc3e42.png",alt:"podman-onboarding-start"}),"\n",(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/799683/280363859-f35b85f8-1dd4-4b7f-a995-25fe5d1ccced.png",alt:"podman-onboarding"})]}),"\n",(0,t.jsxs)(n.p,{children:["Visit ",(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(a,{icon:"fa-solid fa-cog",size:"lg"}),"Settings > Resources"]}),' screen and click the Compose "Setup ..." button in order to start Compose onboarding:\n',(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/799683/280276847-ca0558ab-70ad-48cc-8dd5-67e3eb465a62.png",alt:"compose-onboarding-start"}),"\n",(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/799683/280277936-77ba0fb2-5cb0-41de-a7cf-1a3d6400fd89.png",alt:"compose-onboarding"})]}),"\n",(0,t.jsx)(n.h3,{id:"command-palette",children:"Command Palette"}),"\n",(0,t.jsxs)(n.p,{children:["A new, search-driven command palette is now available to enable quick access to various commands available across \ud83e\uddad Podman Desktop. You can try this new tool out by hitting the F1 key. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4081",children:"#4081"})," && ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3979",children:"#3979"})]}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/436777/270362431-5aaa6a1b-6df5-4b66-a811-cdd148d02ad6.mp4",width:"100%",height:"100%"}),"\n",(0,t.jsx)(n.h3,{id:"expanded-summary-tab-for-kubernetes-pods",children:'Expanded "Summary" tab for Kubernetes pods'}),"\n",(0,t.jsx)(n.p,{children:'Kubernetes pods now offer a more comprehensive set of information under the "Summary" tab, including networking, volumes, environment variables, and other key metadata.'}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/6422176/272972815-bed96f3a-6b13-45d3-a13b-74eacb27a4cd.mov",width:"100%",height:"100%"}),"\n",(0,t.jsx)(n.h3,{id:"environment-file-support",children:"Environment file support"}),"\n",(0,t.jsxs)(n.p,{children:["When creating a container from the Images list, there's now an option to provide an environment file to set env variables for the new container. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4026",children:"#4026"})," && ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4025",children:"#4025"})]}),"\n",(0,t.jsx)(n.h3,{id:"enhancements-to-the-settings-area",children:"Enhancements to the Settings area"}),"\n",(0,t.jsxs)(n.p,{children:["The user experience for enabling or disabling Docker compatibility is improved, with a new entry in the ",(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(a,{icon:"fa-solid fa-cog",size:"lg"}),"Settings > Preferences"]})," screen that includes contextual guidance. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4093",children:"#4093"})]}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/6422176/270497318-902b2566-62ad-4ee6-87af-6a9a2705de99.mov",width:"100%",height:"100%"}),"\n",(0,t.jsx)(n.h3,{id:"improved-user-experience-for-state-changes",children:"Improved user experience for state changes"}),"\n",(0,t.jsxs)(n.p,{children:["The user experience around state changes for containers, pods, and other objects in the UI is improved, with clear status messages and improved animated visual indicator of state changes. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4056",children:"#4056"})]}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/19958075/270027524-f5176cf9-462f-4024-920a-b4a906c7d30d.mov",width:"100%",height:"100%"}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/19958075/270027533-70e152ec-5bbf-45ad-9f1d-563752464655.mov",width:"100%",height:"100%"}),"\n",(0,t.jsx)(n.h3,{id:"extension-api-improvements",children:"Extension API improvements"}),"\n",(0,t.jsx)(n.p,{children:"The \ud83e\uddad Podman Desktop extension API received many improvements, including:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In addition to pushing and listing image from an extension, it's now possible to pull images from a \ud83e\uddad Podman Desktop extension ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4155",children:"#4155"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The \ud83e\uddad Podman Desktop extension API has been enhanced with both the ability to list images & networks and the ability to create containers & networks. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4172",children:"#4172"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["\ud83e\uddad Podman Desktop extensions now have a consistent way to run administrative tasks. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4049",children:"#4049"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Extensions now have the ability to register a custom Kubernetes config generator. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3970",children:"#3970"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The ability of extensions to add commands to UI menus has been extended; previously for action menus it was only available in the Image list screen. It is now possible for extensions to add commands to the action menus of items listed on the Containers list screen as well. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3947",children:"#3947"})," & ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3963",children:"#3963"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Extensions have gained the ability to contribute menu items in the UI based on specific conditions. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3959",children:"#3959"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Enhanced logic for displaying or hiding properties listed under the ",(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(a,{icon:"fa-solid fa-cog",size:"lg"}),"Settings > Preferences"]})," screens is now available. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4159",children:"#4159"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/6422176/271650937-3991565c-12a4-4e6c-a315-9343bfa25f65.mov",width:"100%",height:"100%"}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"other-notable-enhancements",children:"Other Notable Enhancements"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The progress of loading an image into Kind is now visible as a task in the task manager. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4061",children:"#4061"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/42176370/270154775-eb7007b4-fd0e-4287-be9e-40ffc412de35.png",alt:"kind-progress-task"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["It's now possible to start a new Podman machine right after creation, or you can create it and wait to start it later. It's up to you! ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4046",children:"#4046"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/49404737/269941187-f4768833-ecfc-4d0b-8acf-d4afedb428d9.png",alt:"podman-start-now-or-later"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The Podman machine and Kubernetes provider creation forms have an updated look & feel consisted with other forms in the user interface, along with minor bug fixes. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4317",children:"#4317"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/19958075/274694157-fe89f3bc-e5b8-4735-96e9-669fe52c7a41.png",alt:"Updated provider creation forms"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The empty screen message shown when a search filter results in no matches now provides a message specific to filter matching, including the specific filter terms and an explicit button for clearing the filter. Previously, the screen displayed a generic message about how to create new objects of the type displayed on the screen, which led to some confusion about the status of the system. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3988",children:"#3988"})]}),"\n"]}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/19958075/269291090-13e724f7-252f-4915-bb04-00665001d21d.mov",width:"100%",height:"100%"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["New support for adding spin animations to icons is now available. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4188",children:"#4188"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["There is a new indeterminate progress bar type available for the task manager; this is meant for providing limited status for actions whose APIs do not provide detailed status information. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4016",children:"#4016"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["For authenticating as admin to perform administrative tasks, \ud83e\uddad Podman Desktop now provides touchID support for macOS. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4050",children:"#4050"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/436777/248588015-f08115bd-d211-43ad-bddd-286d7b3a7056.png",alt:"touchID-support"})}),"\n",(0,t.jsx)(o.Z,{playing:!0,controls:!0,url:"https://user-images.githubusercontent.com/436777/269859758-47581e2b-8469-4e9c-822c-f4fddf46684d.mp4",width:"100%",height:"100%"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Support for connecting to interactive terminals for containers via tty was added. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3900",children:"#3900"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["It's now more clear which container/pod providers will autostart when \ud83e\uddad Podman Desktop starts. Previously autostart had both a global and a per-provider setting. It has been simplified by removing the global setting. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3840",children:"#3840"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['The "Working with containers" section of the documentation has been reworked and improved. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3951",children:"#3951"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"notable-bug-fixes",children:"Notable Bug Fixes"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The disable registry command was not blocking subsequent pulls from disabled registries. This has been corrected. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4183",children:"#4183"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Some users behind network proxies were unable to complete workflow involving the download of online resources. The mechanism for fetching these resources has been fixed to be proxy compatible to address this issue. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3994",children:"#3994"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The status of pods running in Kubernetes that are undergoing the deletion process is now accurately reflected in the \ud83e\uddad Podman Desktop UI. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3877",children:"#3877"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['The image details page always listed the image as being "not used" even when it was. This has been corrected. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3985",children:"#3985"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Previously, deleting a specific image tag would cause all tags with the same Image ID to be deleted. This has been fixed so only the selected image tag will be deleted. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3837",children:"#3837"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Could not view the pod details for some remote Kubernetes cluster pods due to an encoding error. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4371",children:"#4371"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Error logs were being tracked separately from the actions they applied to. This has been addressed for kind cluster creation failure ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4427",children:"#4427"})," and Compose installation failure ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4407",children:"#4407"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['For Linux users, \ud83e\uddad Podman Desktop previously did not appear under the "Development" menu when installed via Flatpak; it appeared under "Utilities." \ud83e\uddad Podman Desktop now appears under the "Development" menu. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3911",children:"#3911"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['Podman Machine names are no longer prefixed with the "Podman Machine" string. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3878",children:"#3878"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://user-images.githubusercontent.com/19958075/267378447-aafdfbd7-f005-4b94-8626-9e11eec61b95.png",alt:"touchID-support"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['The initial action state of pods and containers was being displayed as "STARTING" regardless of actual state; this has been corrected. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3889",children:"#3889"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Resizing the application window no longer makes the last lines of a container's terminal invisible. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3993",children:"#3993"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["An issue with incorrect terminal behavior in response to long lines in the terminal attached to a container has been resolved. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3955",children:"#3955"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["A spacing issue on the run image form has been corrected. [#4089]",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4089",children:"https://github.com/containers/podman-desktop/pull/4089"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['The "podify" icon & button on the Containers list was unusually large in release 1.4. That regression has been corrected in this release. ',(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4122",children:"#4122"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["An error in the instructions for Windows users on migrating from Docker has been corrected. ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4157",children:"#4157"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"community-thank-you",children:"Community Thank You"}),"\n",(0,t.jsx)(n.p,{children:"\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make \ud83e\uddad Podman Desktop even better. In this\nrelease we received pull requests from the following people:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/afbjorklund",children:"afbjorklund"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4373",children:"#4373 - docs: fix broken links and add lima onboarding"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4372",children:"#4372 - docs: clear up lima column on containers page"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4091",children:"#4091 - fix: avoid errors with unexpected JSON input"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4098",children:"#4098 - docs: Lima onboarding details"}),", and ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3854",children:"#3854 - fix: check if machine init rootful flag supported"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/axel7083",children:"axel7083"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4061",children:"#4061 - feat: adding task progress for kind"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3970",children:"#3970 - feat: extension can register custom kube generator"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3959",children:"#3959 - feat: add when property to extensions menus"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4016",children:"#4016 - feat: indeterminate progress bar"}),", ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3963",children:"#3963 - fix: ContainerList propagating containers in ComposeActions and PodActions"}),", and ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/3947",children:"#3947 - feat: extend menus capabilities"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/ayushrakesh",children:"ayushrakesh"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4415#",children:"#4415 - Update README.md"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/eltociear",children:"eltociear"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4194",children:"#4194 - Update README.md"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/foxydevloper",children:"foxydeveloper"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4157",children:"#4157 - docs: Correct windows instructions for migrating from docker"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/harsh-solanki21",children:"harsh-solanki21"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4162",children:"#4162 - fix: Removed fullstop from summary"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/rahul0x00",children:"rahul0x00"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4240",children:"#4240 - fix typos in README.md"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/shelar1423",children:"shelar1423"})," in ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/pull/4221",children:"#4221 - chore: document property setting in EXTENSIONS.md"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"final-notes",children:"Final notes"}),"\n",(0,t.jsx)(n.h3,{id:"known-issues",children:"Known Issues"}),"\n",(0,t.jsx)(n.p,{children:"We have a discussion board topic where we have posted known issues with this release. If you run into problems, please check this list before filing a bug - if we already have an issue open for it, it saves you the time and trouble of filing, and there may be a workaround posted in the issue."}),"\n",(0,t.jsx)(n.h4,{id:"known-issues-podman-desktop-152",children:(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/discussions/4635",children:"Known Issues: Podman Desktop 1.5.2"})}),"\n",(0,t.jsx)(n.h3,{id:"fixed-issues",children:"Fixed Issues"}),"\n",(0,t.jsxs)(n.p,{children:["The complete list of issues fixed in this release is available ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.5.0",children:"here"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"where-to-download",children:"Where to Download"}),"\n",(0,t.jsxs)(n.p,{children:["Get the latest release from the ",(0,t.jsx)(n.a,{href:"/downloads",children:"Downloads"})," section of the website and boost your development journey with Podman Desktop. Additionally, visit the ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop",children:"GitHub repository"})," and see how you can help us make Podman Desktop better."]})]})}function p(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},90973:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/onboarding-selkies-3ddb7cb6ee2cf9abed002b01f63b1822.png"}}]); \ No newline at end of file diff --git a/assets/js/a7023ddc.0b7e2f7e.js b/assets/js/a7023ddc.0b7e2f7e.js new file mode 100644 index 00000000000..31812f1fe6b --- /dev/null +++ b/assets/js/a7023ddc.0b7e2f7e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1713],{53457:e=>{e.exports=JSON.parse('[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop","count":16},{"label":"podman","permalink":"/blog/tags/podman","count":1},{"label":"images","permalink":"/blog/tags/images","count":1},{"label":"kubernetes","permalink":"/blog/tags/kubernetes","count":14},{"label":"release","permalink":"/blog/tags/release","count":12},{"label":"openshift","permalink":"/blog/tags/openshift","count":6},{"label":"onboarding","permalink":"/blog/tags/onboarding","count":1},{"label":"compose","permalink":"/blog/tags/compose","count":2},{"label":"extensions","permalink":"/blog/tags/extensions","count":1},{"label":"settings","permalink":"/blog/tags/settings","count":1},{"label":"kind","permalink":"/blog/tags/kind","count":4},{"label":"story","permalink":"/blog/tags/story","count":1},{"label":"docker","permalink":"/blog/tags/docker","count":1},{"label":"migrating","permalink":"/blog/tags/migrating","count":1},{"label":"devcontainer","permalink":"/blog/tags/devcontainer","count":1},{"label":"codespaces","permalink":"/blog/tags/codespaces","count":1}]')}}]); \ No newline at end of file diff --git a/assets/js/a7023ddc.299c19b3.js b/assets/js/a7023ddc.299c19b3.js deleted file mode 100644 index 92fcbf6b2e3..00000000000 --- a/assets/js/a7023ddc.299c19b3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1713],{53457:e=>{e.exports=JSON.parse('[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop","count":15},{"label":"release","permalink":"/blog/tags/release","count":12},{"label":"kubernetes","permalink":"/blog/tags/kubernetes","count":13},{"label":"openshift","permalink":"/blog/tags/openshift","count":6},{"label":"onboarding","permalink":"/blog/tags/onboarding","count":1},{"label":"compose","permalink":"/blog/tags/compose","count":2},{"label":"extensions","permalink":"/blog/tags/extensions","count":1},{"label":"settings","permalink":"/blog/tags/settings","count":1},{"label":"kind","permalink":"/blog/tags/kind","count":4},{"label":"story","permalink":"/blog/tags/story","count":1},{"label":"docker","permalink":"/blog/tags/docker","count":1},{"label":"migrating","permalink":"/blog/tags/migrating","count":1},{"label":"devcontainer","permalink":"/blog/tags/devcontainer","count":1},{"label":"codespaces","permalink":"/blog/tags/codespaces","count":1}]')}}]); \ No newline at end of file diff --git a/assets/js/b0f1c099.dfc3aa5a.js b/assets/js/b0f1c099.98377134.js similarity index 83% rename from assets/js/b0f1c099.dfc3aa5a.js rename to assets/js/b0f1c099.98377134.js index 06894c421b9..66e1e1a2998 100644 --- a/assets/js/b0f1c099.dfc3aa5a.js +++ b/assets/js/b0f1c099.98377134.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9387],{36462:e=>{e.exports=JSON.parse('{"label":"kubernetes","permalink":"/blog/tags/kubernetes","allTagsPath":"/blog/tags","count":13,"unlisted":false}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9387],{36462:e=>{e.exports=JSON.parse('{"label":"kubernetes","permalink":"/blog/tags/kubernetes","allTagsPath":"/blog/tags","count":14,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/b2b675dd.b499b841.js b/assets/js/b2b675dd.209aeddd.js similarity index 77% rename from assets/js/b2b675dd.b499b841.js rename to assets/js/b2b675dd.209aeddd.js index f3aac1f2306..07eebff082f 100644 --- a/assets/js/b2b675dd.b499b841.js +++ b/assets/js/b2b675dd.209aeddd.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[533],{28017:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":15,"totalPages":1,"totalCount":15,"blogDescription":"Discover articles about Podman Desktop","blogTitle":"Podman Desktop blog!"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[533],{28017:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":16,"totalPages":1,"totalCount":16,"blogDescription":"Discover articles about Podman Desktop","blogTitle":"Podman Desktop blog!"}')}}]); \ No newline at end of file diff --git a/assets/js/b2f554cd.2278936c.js b/assets/js/b2f554cd.2278936c.js deleted file mode 100644 index 80b0bef4690..00000000000 --- a/assets/js/b2f554cd.2278936c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1477],{30010:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"podman-desktop-release-1.5","metadata":{"permalink":"/blog/podman-desktop-release-1.5","source":"@site/blog/2023-11-03-release-1.5.md","title":"Release Notes - Podman Desktop 1.5","description":"Podman Desktop 1.5 has been released!","date":"2023-11-03T00:00:00.000Z","formattedDate":"November 3, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"},{"label":"openshift","permalink":"/blog/tags/openshift"},{"label":"onboarding","permalink":"/blog/tags/onboarding"},{"label":"compose","permalink":"/blog/tags/compose"},{"label":"extensions","permalink":"/blog/tags/extensions"},{"label":"settings","permalink":"/blog/tags/settings"}],"readingTime":8.14,"hasTruncateMarker":false,"authors":[{"name":"M\xe1ir\xedn Duffy","title":"User Experience Designer","url":"https://github.com/mairin","imageURL":"https://github.com/mairin.png","key":"duffy"}],"frontMatter":{"title":"Release Notes - Podman Desktop 1.5","description":"Podman Desktop 1.5 has been released!","slug":"podman-desktop-release-1.5","authors":"duffy","tags":["podman-desktop","release","kubernetes","openshift","onboarding","compose","extensions","settings"],"hide_table_of_contents":false,"image":"/blog/img/podman-desktop-release-1.5/onboarding-selkies.png"},"unlisted":false,"nextItem":{"title":"Release Notes - Podman Desktop 1.4","permalink":"/blog/podman-desktop-release-1.4"}},"content":"import ReactPlayer from \'react-player\'\\n\\nPodman Desktop 1.5 Release! \ud83c\udf89\\n\\nWith this release of Podman Desktop, we\'re introducing **a new onboarding feature** that we hope will earn your \ud83e\uddad seal of approval! But wait... there\'s so much more!\\n\\n- **Onboarding**: Guided setup and configuration of **Podman** and **Compose**\\n- **Podman 4.7.2**: [Podman 4.7.2](https://github.com/containers/podman/releases) is now included in Windows and Mac installers\\n- **Command Palette**: Gain easy access to various commands via a new keyboard-driven command palette\\n- **Expanded \\"Summary\\" tab for Kubernetes pods**: Go deep with extended details on Kubernetes pods in the pod \\"Summary\\" tab\\n- **Environment file support**: Chart out environment variables for new containers to access on creation\\n- **Enhancements to the Settings area**: Get your bearings with improved Docker compatibility mode controls\\n- **Improved user experience for state changes**: No more dead reckoning on container state with improved visual indication of status\\n- **Extension API improvements**: A boatload of improvements to the extension API enabling more goodness from \ud83e\uddad Podman Desktop\'s extensions\\n\\nPodman Desktop 1.5 is now available. [Click here to download it](/downloads)!\\n\\n![Podman-desktop-1-5-hero](img/podman-desktop-release-1.5/onboarding-selkies.png)\\n\\n---\\n\\n## Release Details\\n\\n### Onboarding\\n\\nWe are introducing a new feature providing guided flows for the initial setup of specific \ud83e\uddad Podman Desktop extensions. Release 1.5 features two new onboarding flows: Podman and Compose.\\n\\nTo start the Podman onboarding flow, you can start from the dashboard notification by clicking the \\"Set up\\" button:\\n![podman-onboarding-start](https://user-images.githubusercontent.com/799683/280362279-598cc052-5ea4-4c31-849c-da9bbbcc3e42.png)\\n![podman-onboarding](https://user-images.githubusercontent.com/799683/280363859-f35b85f8-1dd4-4b7f-a995-25fe5d1ccced.png)\\n\\nVisit **Settings > Resources** screen and click the Compose \\"Setup ...\\" button in order to start Compose onboarding:\\n![compose-onboarding-start](https://user-images.githubusercontent.com/799683/280276847-ca0558ab-70ad-48cc-8dd5-67e3eb465a62.png)\\n![compose-onboarding](https://user-images.githubusercontent.com/799683/280277936-77ba0fb2-5cb0-41de-a7cf-1a3d6400fd89.png)\\n\\n### Command Palette\\n\\nA new, search-driven command palette is now available to enable quick access to various commands available across \ud83e\uddad Podman Desktop. You can try this new tool out by hitting the F1 key. [#4081](https://github.com/containers/podman-desktop/pull/4081) && [#3979](https://github.com/containers/podman-desktop/pull/3979)\\n\\n\\n\\n### Expanded \\"Summary\\" tab for Kubernetes pods\\n\\nKubernetes pods now offer a more comprehensive set of information under the \\"Summary\\" tab, including networking, volumes, environment variables, and other key metadata.\\n\\n\\n\\n### Environment file support\\n\\nWhen creating a container from the Images list, there\'s now an option to provide an environment file to set env variables for the new container. [#4026](https://github.com/containers/podman-desktop/pull/4026) && [#4025](https://github.com/containers/podman-desktop/pull/4025)\\n\\n### Enhancements to the Settings area\\n\\nThe user experience for enabling or disabling Docker compatibility is improved, with a new entry in the **Settings > Preferences** screen that includes contextual guidance. [#4093](https://github.com/containers/podman-desktop/pull/4093)\\n\\n\\n\\n### Improved user experience for state changes\\n\\nThe user experience around state changes for containers, pods, and other objects in the UI is improved, with clear status messages and improved animated visual indicator of state changes. [#4056](https://github.com/containers/podman-desktop/pull/4056)\\n\\n\\n\\n\\n\\n### Extension API improvements\\n\\nThe \ud83e\uddad Podman Desktop extension API received many improvements, including:\\n\\n- In addition to pushing and listing image from an extension, it\'s now possible to pull images from a \ud83e\uddad Podman Desktop extension [#4155](https://github.com/containers/podman-desktop/pull/4155)\\n\\n- The \ud83e\uddad Podman Desktop extension API has been enhanced with both the ability to list images & networks and the ability to create containers & networks. [#4172](https://github.com/containers/podman-desktop/pull/4172)\\n\\n- \ud83e\uddad Podman Desktop extensions now have a consistent way to run administrative tasks. [#4049](https://github.com/containers/podman-desktop/pull/4049)\\n\\n- Extensions now have the ability to register a custom Kubernetes config generator. [#3970](https://github.com/containers/podman-desktop/pull/3970)\\n\\n- The ability of extensions to add commands to UI menus has been extended; previously for action menus it was only available in the Image list screen. It is now possible for extensions to add commands to the action menus of items listed on the Containers list screen as well. [#3947](https://github.com/containers/podman-desktop/pull/3947) & [#3963](https://github.com/containers/podman-desktop/pull/3963)\\n\\n- Extensions have gained the ability to contribute menu items in the UI based on specific conditions. [#3959](https://github.com/containers/podman-desktop/pull/3959)\\n\\n- Enhanced logic for displaying or hiding properties listed under the **Settings > Preferences** screens is now available. [#4159](https://github.com/containers/podman-desktop/pull/4159)\\n\\n\\n\\n---\\n\\n## Other Notable Enhancements\\n\\n- The progress of loading an image into Kind is now visible as a task in the task manager. [#4061](https://github.com/containers/podman-desktop/pull/4061)\\n\\n![kind-progress-task](https://user-images.githubusercontent.com/42176370/270154775-eb7007b4-fd0e-4287-be9e-40ffc412de35.png)\\n\\n- It\'s now possible to start a new Podman machine right after creation, or you can create it and wait to start it later. It\'s up to you! [#4046](https://github.com/containers/podman-desktop/pull/4046)\\n\\n![podman-start-now-or-later](https://user-images.githubusercontent.com/49404737/269941187-f4768833-ecfc-4d0b-8acf-d4afedb428d9.png)\\n\\n- The Podman machine and Kubernetes provider creation forms have an updated look & feel consisted with other forms in the user interface, along with minor bug fixes. [#4317](https://github.com/containers/podman-desktop/pull/4317)\\n\\n![Updated provider creation forms](https://user-images.githubusercontent.com/19958075/274694157-fe89f3bc-e5b8-4735-96e9-669fe52c7a41.png)\\n\\n- The empty screen message shown when a search filter results in no matches now provides a message specific to filter matching, including the specific filter terms and an explicit button for clearing the filter. Previously, the screen displayed a generic message about how to create new objects of the type displayed on the screen, which led to some confusion about the status of the system. [#3988](https://github.com/containers/podman-desktop/pull/3988)\\n\\n\\n\\n- New support for adding spin animations to icons is now available. [#4188](https://github.com/containers/podman-desktop/pull/4188)\\n\\n- There is a new indeterminate progress bar type available for the task manager; this is meant for providing limited status for actions whose APIs do not provide detailed status information. [#4016](https://github.com/containers/podman-desktop/pull/4016)\\n\\n- For authenticating as admin to perform administrative tasks, \ud83e\uddad Podman Desktop now provides touchID support for macOS. [#4050](https://github.com/containers/podman-desktop/pull/4050)\\n\\n![touchID-support](https://user-images.githubusercontent.com/436777/248588015-f08115bd-d211-43ad-bddd-286d7b3a7056.png)\\n\\n\\n\\n- Support for connecting to interactive terminals for containers via tty was added. [#3900](https://github.com/containers/podman-desktop/pull/3900)\\n\\n- It\'s now more clear which container/pod providers will autostart when \ud83e\uddad Podman Desktop starts. Previously autostart had both a global and a per-provider setting. It has been simplified by removing the global setting. [#3840](https://github.com/containers/podman-desktop/pull/3840)\\n\\n- The \\"Working with containers\\" section of the documentation has been reworked and improved. [#3951](https://github.com/containers/podman-desktop/pull/3951)\\n\\n---\\n\\n## Notable Bug Fixes\\n\\n- The disable registry command was not blocking subsequent pulls from disabled registries. This has been corrected. [#4183](https://github.com/containers/podman-desktop/pull/4183)\\n\\n- Some users behind network proxies were unable to complete workflow involving the download of online resources. The mechanism for fetching these resources has been fixed to be proxy compatible to address this issue. [#3994](https://github.com/containers/podman-desktop/pull/3994)\\n\\n- The status of pods running in Kubernetes that are undergoing the deletion process is now accurately reflected in the \ud83e\uddad Podman Desktop UI. [#3877](https://github.com/containers/podman-desktop/pull/3877)\\n\\n- The image details page always listed the image as being \\"not used\\" even when it was. This has been corrected. [#3985](https://github.com/containers/podman-desktop/pull/3985)\\n\\n- Previously, deleting a specific image tag would cause all tags with the same Image ID to be deleted. This has been fixed so only the selected image tag will be deleted. [#3837](https://github.com/containers/podman-desktop/pull/3837)\\n\\n- Could not view the pod details for some remote Kubernetes cluster pods due to an encoding error. [#4371](https://github.com/containers/podman-desktop/pull/4371)\\n\\n- Error logs were being tracked separately from the actions they applied to. This has been addressed for kind cluster creation failure [#4427](https://github.com/containers/podman-desktop/pull/4427) and Compose installation failure [#4407](https://github.com/containers/podman-desktop/pull/4407).\\n\\n- For Linux users, \ud83e\uddad Podman Desktop previously did not appear under the \\"Development\\" menu when installed via Flatpak; it appeared under \\"Utilities.\\" \ud83e\uddad Podman Desktop now appears under the \\"Development\\" menu. [#3911](https://github.com/containers/podman-desktop/pull/3911)\\n\\n- Podman Machine names are no longer prefixed with the \\"Podman Machine\\" string. [#3878](https://github.com/containers/podman-desktop/pull/3878)\\n\\n![touchID-support](https://user-images.githubusercontent.com/19958075/267378447-aafdfbd7-f005-4b94-8626-9e11eec61b95.png)\\n\\n- The initial action state of pods and containers was being displayed as \\"STARTING\\" regardless of actual state; this has been corrected. [#3889](https://github.com/containers/podman-desktop/pull/3889)\\n\\n- Resizing the application window no longer makes the last lines of a container\'s terminal invisible. [#3993](https://github.com/containers/podman-desktop/pull/3993)\\n\\n- An issue with incorrect terminal behavior in response to long lines in the terminal attached to a container has been resolved. [#3955](https://github.com/containers/podman-desktop/pull/3955)\\n\\n- A spacing issue on the run image form has been corrected. [#4089]https://github.com/containers/podman-desktop/pull/4089\\n\\n- The \\"podify\\" icon & button on the Containers list was unusually large in release 1.4. That regression has been corrected in this release. [#4122](https://github.com/containers/podman-desktop/pull/4122)\\n\\n- An error in the instructions for Windows users on migrating from Docker has been corrected. [#4157](https://github.com/containers/podman-desktop/pull/4157)\\n\\n---\\n\\n## Community Thank You\\n\\n\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make \ud83e\uddad Podman Desktop even better. In this\\nrelease we received pull requests from the following people:\\n\\n- [afbjorklund](https://github.com/afbjorklund) in [#4373 - docs: fix broken links and add lima onboarding](https://github.com/containers/podman-desktop/pull/4373), [#4372 - docs: clear up lima column on containers page](https://github.com/containers/podman-desktop/pull/4372), [#4091 - fix: avoid errors with unexpected JSON input](https://github.com/containers/podman-desktop/pull/4091), [#4098 - docs: Lima onboarding details](https://github.com/containers/podman-desktop/pull/4098), and [#3854 - fix: check if machine init rootful flag supported](https://github.com/containers/podman-desktop/pull/3854)\\n\\n- [axel7083](https://github.com/axel7083) in [#4061 - feat: adding task progress for kind](https://github.com/containers/podman-desktop/pull/4061), [#3970 - feat: extension can register custom kube generator](https://github.com/containers/podman-desktop/pull/3970), [#3959 - feat: add when property to extensions menus](https://github.com/containers/podman-desktop/pull/3959), [#4016 - feat: indeterminate progress bar](https://github.com/containers/podman-desktop/pull/4016), [#3963 - fix: ContainerList propagating containers in ComposeActions and PodActions](https://github.com/containers/podman-desktop/pull/3963), and [#3947 - feat: extend menus capabilities](https://github.com/containers/podman-desktop/pull/3947)\\n\\n- [ayushrakesh](https://github.com/ayushrakesh) in [#4415 - Update README.md](https://github.com/containers/podman-desktop/pull/4415#)\\n\\n- [eltociear](https://github.com/eltociear) in [#4194 - Update README.md](https://github.com/containers/podman-desktop/pull/4194)\\n\\n- [foxydeveloper](https://github.com/foxydevloper) in [#4157 - docs: Correct windows instructions for migrating from docker](https://github.com/containers/podman-desktop/pull/4157)\\n\\n- [harsh-solanki21](https://github.com/harsh-solanki21) in [#4162 - fix: Removed fullstop from summary](https://github.com/containers/podman-desktop/pull/4162)\\n\\n- [rahul0x00](https://github.com/rahul0x00) in [#4240 - fix typos in README.md](https://github.com/containers/podman-desktop/pull/4240)\\n\\n- [shelar1423](https://github.com/shelar1423) in [#4221 - chore: document property setting in EXTENSIONS.md](https://github.com/containers/podman-desktop/pull/4221)\\n\\n---\\n\\n## Final notes\\n\\n### Known Issues\\n\\nWe have a discussion board topic where we have posted known issues with this release. If you run into problems, please check this list before filing a bug - if we already have an issue open for it, it saves you the time and trouble of filing, and there may be a workaround posted in the issue.\\n\\n#### [Known Issues: Podman Desktop 1.5.2](https://github.com/containers/podman-desktop/discussions/4635)\\n\\n### Fixed Issues\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.5.0).\\n\\n### Where to Download\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"podman-desktop-release-1.4","metadata":{"permalink":"/blog/podman-desktop-release-1.4","source":"@site/blog/2023-09-18-release-1.4.md","title":"Release Notes - Podman Desktop 1.4","description":"Podman Desktop 1.4 has been released!","date":"2023-09-18T00:00:00.000Z","formattedDate":"September 18, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"},{"label":"openshift","permalink":"/blog/tags/openshift"}],"readingTime":3.415,"hasTruncateMarker":false,"authors":[{"name":"Jeff Maury","title":"Engineering Manager","url":"https://github.com/jeffmaury","imageURL":"https://github.com/jeffmaury.png","key":"jeffmaury"}],"frontMatter":{"title":"Release Notes - Podman Desktop 1.4","description":"Podman Desktop 1.4 has been released!","slug":"podman-desktop-release-1.4","authors":["jeffmaury"],"tags":["podman-desktop","release","kubernetes","openshift"],"hide_table_of_contents":false,"image":"/blog/img/podman-desktop-release-1.4/juggling.png"},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 1.5","permalink":"/blog/podman-desktop-release-1.5"},"nextItem":{"title":"Release Notes - Podman Desktop 1.3","permalink":"/blog/podman-desktop-release-1.3"}},"content":"import ReactPlayer from \'react-player\'\\n\\nPodman Desktop 1.4 Release! \ud83c\udf89\\n\\nThis is essentially a bug-fix release to fix various issues in UI, but as usual we also added a few new features.\\n\\n- **Podman 4.6.2**: Podman 4.6.2 included with Podman Desktop 1.4\\n- **Windows Arm64**: Native Windows on Arm64 installers and binaries\\n- **Port range mapping**: Start containers and map a range of ports\\n- **Terminal UX Improvement**: Persistent terminal sessions when SSH\'ing in a container\\n- **Volume Creation**: Create volume from the `Volumes` page\\n- **Bash support**: Terminals are now using `bash` if available.\\n\\nPodman Desktop 1.4 is now available. [Click here to download it](/downloads)!\\n\\n![Podman-desktop-1-4-juggling](img/podman-desktop-release-1.4/juggling.png)\\n\\n---\\n\\n## Release Details\\n\\n### Port range mapping [#3654](https://github.com/containers/podman-desktop/pull/3654)\\n\\nWhen starting a new container, you can now map a port range between host and container. If the range is not valid between host and container, an error is raised.\\n\\n![Range mapping](https://user-images.githubusercontent.com/49404737/262927546-da66b67a-0884-40b1-85bd-a9c3ea2f3f9e.gif)\\n\\n### Terminal lifetime [#3725](https://github.com/containers/podman-desktop/pull/3725)\\n\\nWhen a terminal is opened for a container, it can now be reused after you switched to another part of the Podman Desktop UI.\\n\\n![terminal lifetime](img/podman-desktop-release-1.4/terminal.gif)\\n\\n### Create volume [#3742](https://github.com/containers/podman-desktop/pull/3742)\\n\\nThe Volumes tab now has a Create volume button. The Create volume UI has a single field for the volume name.\\n\\n![create volume](img/podman-desktop-release-1.4/create-volume.gif)\\n\\n### bash support [#3750](https://github.com/containers/podman-desktop/pull/3750)\\n\\nWhen a terminal is opened for a container, if bash is available within the container, it will be used. Otherwise, sh will be used.\\n\\n![bash sh](img/podman-desktop-release-1.4/bash-sh.gif)\\n\\n### Notable Bug Fixes\\n\\n- Reduce API calls when listing containers by @benoitf [#3489](https://github.com/containers/podman-desktop/pull/3489)\\n- Removing a connection(podman machine) should redirect to previous page by @benoitf [#3576](https://github.com/containers/podman-desktop/pull/3576)\\n- Enhance error message when image is not there by @benoitf [#3587](https://github.com/containers/podman-desktop/pull/3587)\\n- Dispose kind install button when extension is deactivated (#3586) by @lstocchi [#3610](https://github.com/containers/podman-desktop/pull/3610)\\n- Replace backslash/slash on windows when building image (#3465) by @lstocchi [#3618](https://github.com/containers/podman-desktop/pull/3618)\\n- Handle null value in container command (#3620) by @lstocchi [#3625](https://github.com/containers/podman-desktop/pull/3625)\\n- Add maximum activation time for extensions by @benoitf [#3446](https://github.com/containers/podman-desktop/pull/3446)\\n- Handle single non-spread arguments by @benoitf [#3641](https://github.com/containers/podman-desktop/pull/3641)\\n- Grab usage data of volumes only on-demand by @benoitf [#3635](https://github.com/containers/podman-desktop/pull/3635)\\n- Add arm64 binaries for Windows by @benoitf [#3643](https://github.com/containers/podman-desktop/pull/3643)\\n- Include right airgap file for Windows and arm64 by @benoitf [#3651](https://github.com/containers/podman-desktop/pull/3651)\\n- Redirect to previous page when removing a kubernetes connection by @benoitf [#3650](https://github.com/containers/podman-desktop/pull/3650)\\n- Support port ranges when starting a container (#3204) by @lstocchi [#3654](https://github.com/containers/podman-desktop/pull/3654)\\n- Add a strict undefined check to messagebox result (#3692) by @lstocchi [#3699](https://github.com/containers/podman-desktop/pull/3699)\\n- Only restart if a machine is running by @cdrage [#3491](https://github.com/containers/podman-desktop/pull/3491)\\n- Session to the terminal is reused by @benoitf [#3725](https://github.com/containers/podman-desktop/pull/3725)\\n- Disable next button and show try again when onboarding failed (#3616) by @lstocchi [#3711](https://github.com/containers/podman-desktop/pull/3711)\\n- Add podman in PATH after updating process environment PATH (#3729) by @lstocchi [#3730](https://github.com/containers/podman-desktop/pull/3730)\\n- Allow to create a volume by @benoitf [#3742](https://github.com/containers/podman-desktop/pull/3742)\\n- Using bash if available otherwise sh in terminal by @axel7083 [#3750](https://github.com/containers/podman-desktop/pull/3750)\\n- Allow to embed existing component to onboarding (#3755) by @lstocchi [#3763](https://github.com/containers/podman-desktop/pull/3763)\\n- Some containers never return logs, do not wait for them by @dgolovin [#3784](https://github.com/containers/podman-desktop/pull/3784)\\n- Remove cancel button when on final onboarding step (#3771) by @lstocchi [#3802](https://github.com/containers/podman-desktop/pull/3802)\\n- Onboarding add link micromark for commands by @cdrage [#3747](https://github.com/containers/podman-desktop/pull/3747)\\n- Mounts can be null when using older podman by @afbjorklund [#3806](https://github.com/containers/podman-desktop/pull/3806)\\n- Remove redundant step completion check when onboarding gets started by @lstocchi [#3798](https://github.com/containers/podman-desktop/pull/3798)\\n- Ability to click enter in pull image name input by @deboer-tim [#3850](https://github.com/containers/podman-desktop/pull/3850)\\n- Set proxy environment variable when launching process by @jeffmaury [#3838](https://github.com/containers/podman-desktop/pull/3838)\\n- The socket location was moved for new podman by @afbjorklund [#3853](https://github.com/containers/podman-desktop/pull/3853)\\n- Don\'t log console errors when activating lima extension by @afbjorklund [#3852](https://github.com/containers/podman-desktop/pull/3852)\\n\\n### Community Thank You\\n\\n\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make Podman Desktop even better.\\n\\nA warm welcome to [@tomgoren](https://github.com/tomgoren), [@Julian](https://github.com/Julian), [@Gelob](https://github.com/Gelob) and [@cedricclyburn](https://github.com/cedricclyburn) who made their first contribution to the project in this release.\\n\\n### Final Notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.4.0).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"podman-desktop-release-1.3","metadata":{"permalink":"/blog/podman-desktop-release-1.3","source":"@site/blog/2023-08-16-release-1.3.md","title":"Release Notes - Podman Desktop 1.3","description":"Podman Desktop 1.3 has been released!","date":"2023-08-16T00:00:00.000Z","formattedDate":"August 16, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"},{"label":"openshift","permalink":"/blog/tags/openshift"}],"readingTime":5.195,"hasTruncateMarker":false,"authors":[{"name":"Denis Golovin","title":"Principal Software Engineer","url":"https://github.com/cdrage","imageURL":"https://github.com/dgolovin.png","key":"dgolovin"}],"frontMatter":{"title":"Release Notes - Podman Desktop 1.3","description":"Podman Desktop 1.3 has been released!","slug":"podman-desktop-release-1.3","authors":["dgolovin"],"tags":["podman-desktop","release","kubernetes","openshift"],"hide_table_of_contents":false,"image":"/img/blog/podman-desktop-release-1.3.webp"},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 1.4","permalink":"/blog/podman-desktop-release-1.4"},"nextItem":{"title":"Release Notes - Podman Desktop 1.2","permalink":"/blog/podman-desktop-release-1.2"}},"content":"import ReactPlayer from \'react-player\'\\n\\nPodman Desktop 1.3 Release! \ud83c\udf89\\n\\nThis is essentially a bug-fix release to fix various issues in UI, extension engine and featured extensions, but as usual we also added a few new features.\\n\\n- **Podman 4.6.1**: Podman 4.6.1 included in Windows and Mac installers\\n- **Podman user-mode networking support to Windows/WSL**: A new switch `User mode networking\' is available when creating Podman machine on Windows for Podman 4.6.0+ to configure podman to work in certain VPN setups and other specialized networking configurations\\n- **Compose group new UI elements**: You can now see summary, inspect, deploy to kubernetes, generate kube yaml and view logs\\n- **Extension packs and extension dependencies**: Install group of extensions in one click\\n- **Resource details page update**: See summary and log for resource\\n- **Create Kind cluster form update**: A new `Node\'s container image` field can be used to specify the Kubernetes version used for the control-planed\\n- **Support Docker Desktop extensions using a backend**: When loading Docker Desktop extension the containers are created in the backend as described in the vm section of extension\'s descriptor\\n- **Podman Initial Onboarding (preview)**: Install and configure podman using included installer\\n\\nPodman Desktop 1.3 is now available. [Click here to download it](/downloads)!\\n\\n![Podman-desktop-1-3-bug-swatting](img/podman-desktop-release-1.3/title-bug-swatting.png)\\n\\n---\\n\\n## Release Details\\n\\n### Compose group Logs tab [#3176](https://github.com/containers/podman-desktop/pull/3176)\\n\\nWhen clicking on the group of containers, you can now view the logs of the entire group of compose containers and don\'t need to open\\nlog for every component individually.\\n\\n![Screenshot 2023-07-11 at 12 48 47 PM](https://github.com/containers/podman-desktop/assets/6422176/743a4ffc-e291-4697-8ac5-8052cc921946)\\n\\n### Podman user-mode networking support to Windows/WSL [#3251](https://github.com/containers/podman-desktop/pull/3251)\\n\\nCertain VPN setups or other specialized networking configs will block traffic from the virtual WSL networking device, resulting in the podman WSL backend from being unable to contact systems on the VPN, and potentially losing internet access altogether. The new switch allows you to create a podman VM machine configured to work correctly in mentioned above networking environments.\\n\\n![user](https://github.com/containers/podman-desktop/assets/620330/2f521576-b6a6-42b5-b24d-08df5b432608)\\n\\n### Compose group Summary tab [#3317](https://github.com/containers/podman-desktop/pull/3317),\\n\\nCompose group Summary tab shows all containers in the group and let you navigate to Details page for specific container.\\n\\n\\n\\n### Compose group Inspect tab [#3316](https://github.com/containers/podman-desktop/pull/3316)\\n\\nCompose group Inspect tab shows an array of \\"container inspect\\" from docker / podman.\\n\\n\\n\\n### `Deploy to kubernetes` in compose actions [#3299](https://github.com/containers/podman-desktop/pull/3295)\\n\\nA button to deploy to kubernetes added to Compose group.\\n\\n\\n\\n### `Generate Kube` in Compose actions and `Kube` tab in compose details [#3253](https://github.com/containers/podman-desktop/pull/3253)\\n\\n`Generate Kube` item added to Compose actions and \\"Kube\\" tab is now available in Compose details view.\\n\\n\\n\\n### Install multiple extensions using extension pack [#3150](https://github.com/containers/podman-desktop/pull/3150)\\n\\nAn Extension pack introduced in Extension engine is a way to declare set of extensions to install them all at once.\\n\\n\\n\\n### Customize icons from extension [#3131](https://github.com/containers/podman-desktop/pull/3131)\\n\\nExtensions now can customize icons for list elements using `when` clause.\\n\\n![image](https://github.com/containers/podman-desktop/assets/49404737/7aae5347-4f07-4854-ba11-1f629b5ccf22)\\n\\n### Resource details page update [#1923](https://github.com/containers/podman-desktop/pull/1923)\\n\\nIf you click on the arrow icon next to a resource name it will open up a details page (similarly to how clicking on a container in the container list opens up a details page).\\n\\n![image](https://user-images.githubusercontent.com/49404737/229542404-bae44f89-5cd3-4baf-8b08-e934e4462697.gif)\\n\\n### `Node\'s container image` field added to `Create a Kind cluster` form [#3508](https://github.com/containers/podman-desktop/pull/3508)\\n\\nThe new `Node\'s container image` field can be used to specify the Kubernetes version used for the control-planed.\\n\\n![image](https://github.com/containers/podman-desktop/assets/42176370/b2a63faf-629f-436d-8496-7c0cd8158679)\\n\\n### Support Docker Desktop extensions using a backend [#3435](https://github.com/containers/podman-desktop/pull/3435)\\n\\nPodman Desktop now loads the containers in the backend as described in the vm section of extension descriptor the same way as Docker Desktop does.\\n\\n### Initial onboarding implementation for podman (experimental) [#3308](https://github.com/containers/podman-desktop/pull/3308)\\n\\nThis is the initial implementation for the onboarding feature. It only covers a simple onboarding for podman. Check system requirements -> install podman -> yay! Done!\\n\\n### Notable Bug Fixes\\n\\n- Updating videos to be adaptive for mobile by @mairin [#3229](https://github.com/containers/podman-desktop/pull/3229)\\n- Consistent max width and padding in settings by @deboer-tim [#3232](https://github.com/containers/podman-desktop/pull/3232)\\n- Settings navigation bar resizing by @deboer-tim in [#3231](https://github.com/containers/podman-desktop/pull/3231)\\n- Move new registry button to header by @deboer-tim [#3245](https://github.com/containers/podman-desktop/pull/3245)\\n- Bigger lima logo by @afbjorklund [#3248](https://github.com/containers/podman-desktop/pull/3248)\\n- Horizontal docker logo by @afbjorklund [#3236](https://github.com/containers/podman-desktop/pull/3236)\\n- Respect LIMA_HOME environment variable by @afbjorklund [#3254](https://github.com/containers/podman-desktop/pull/3254)\\n- Add check before writing to terminal by @lstocchi [#3263](https://github.com/containers/podman-desktop/pull/3263)\\n- Wait until remote side has fully initialized the extensions by @benoitf [#3257](https://github.com/containers/podman-desktop/pull/3257)\\n- Fix loader not centered horizontally by @benoitf [#3270](https://github.com/containers/podman-desktop/pull/3270)\\n- Troubleshooting still waiting after failure by @deboer-tim [#3354](https://github.com/containers/podman-desktop/pull/3354)\\n- Store error for build by @cdrage [#3365](https://github.com/containers/podman-desktop/pull/3365)\\n- Missing checkbox tooltips by @deboer-tim [#3380](https://github.com/containers/podman-desktop/pull/3380)\\n- Load compose logs async not await by @cdrage [#3377](https://github.com/containers/podman-desktop/pull/3377)\\n- Set rootful connection when starting rootful machine by @lstocchi [#3364](https://github.com/containers/podman-desktop/pull/3364)\\n- Default last page by @deboer-tim [#3388](https://github.com/containers/podman-desktop/pull/3388)\\n- Avoid dashboard displaying providers starting while they don\'t by @benoitf [#3451](https://github.com/containers/podman-desktop/pull/3451)\\n- Do not use extensionInfo until it is defined by @benoitf [#V](https://github.com/containers/podman-desktop/pull/3450)\\n- Allow BASIC authentication (all caps) by @cdrage [#3471](https://github.com/containers/podman-desktop/pull/3471)\\n- Allow single domain registry such as localhost:5000 by @cdrage [#3468](https://github.com/containers/podman-desktop/pull/3468)\\n- Create /usr/local/bin directory if it does not exist on binary install by @cdrage [#3425](https://github.com/containers/podman-desktop/pull/3425)\\n- Only delete selected pods by @deboer-tim [#](https://github.com/containers/podman-desktop/pull/3378)\\n- Add back \'Done\' text on the button by @benoitf [#3487](https://github.com/containers/podman-desktop/pull/3487)\\n- Do not wait for more than 5s when checking for podman ping by @benoitf [#3497](https://github.com/containers/podman-desktop/pull/3497)\\n- Add proxy support for extension using patching get and request approach by @dgolovin [#2825](https://github.com/containers/podman-desktop/pull/2825)\\n- Refresh component when field is updated by @benoitf [#3525](https://github.com/containers/podman-desktop/pull/3525)\\n- Higher-res icons for featured extensions list by @mairin [#3511](https://github.com/containers/podman-desktop/pull/3511)\\n- Main nav selection by @deboer-tim [#3510](https://github.com/containers/podman-desktop/pull/3510)\\n- kube event error when switching context by @jeffmaury [#3494](https://github.com/containers/podman-desktop/pull/3494)\\n- Reset error message each time we pull image by @benoitf [#3550](https://github.com/containers/podman-desktop/pull/3550)\\n\\n### Community Thank You\\n\\n\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make Podman Desktop even better.\\n\\nA warm welcome to [@rostalan](https://github.com/rostalan) and [@axel7083](https://github.com/axel7083) who made their first contribution to the project in this release.\\n\\n### Final Notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.3.0).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"podman-desktop-release-1.2","metadata":{"permalink":"/blog/podman-desktop-release-1.2","source":"@site/blog/2023-07-12-release-1.2.md","title":"Release Notes - Podman Desktop 1.2","description":"Podman Desktop 1.2 has been released!","date":"2023-07-12T00:00:00.000Z","formattedDate":"July 12, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"},{"label":"openshift","permalink":"/blog/tags/openshift"}],"readingTime":6.05,"hasTruncateMarker":false,"authors":[{"name":"Charlie Drage","title":"Software Engineer","url":"https://github.com/cdrage","imageURL":"https://github.com/cdrage.png","key":"cdrage"}],"frontMatter":{"title":"Release Notes - Podman Desktop 1.2","description":"Podman Desktop 1.2 has been released!","slug":"podman-desktop-release-1.2","authors":["cdrage"],"tags":["podman-desktop","release","kubernetes","openshift"],"hide_table_of_contents":false,"image":"/img/blog/podman-desktop-release-1.2.webp"},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 1.3","permalink":"/blog/podman-desktop-release-1.3"},"nextItem":{"title":"Release Notes - Podman Desktop 1.1","permalink":"/blog/podman-desktop-release-1.1"}},"content":"import ReactPlayer from \'react-player\'\\n\\nPodman Desktop 1.2 Release! \ud83c\udf89\\n\\nWe\'re excited to announce the release of Podman Desktop version 1.2.0! This release includes many new features (Kubernetes, Compose and extension support!), bug fixes, and improvements to enhance your container management experience. Here\'s a summary of the key changes in this release:\\n\\n- **Added start/stop/delete/restart buttons for Compose**: You can now make changes to an entire Compose group of containers\\n- **Kubernetes context on the status bar**: Choose from multiple Kubernetes contexts more easily all from the status bar\\n- **Rename images**: Rename an image with a click of a button\\n- **Protocol handler support**: Added support for protocol handlers such as `open podman-desktop:extension/redhat.openshift-local`\\n- **Troubleshooting page**: A troubleshooting page for helping diagnose Podman Desktop related development issues\\n\\nPodman Desktop 1.2 is now available. [Click here to download it](/downloads)!\\n\\n![Podman-desktop-1-2-hero](img/podman-desktop-release-1.2/podman-desktop-release-1.2.png)\\n\\n---\\n\\n## Release Details\\n\\n### Added start/stop/delete/restart buttons for Compose\\n\\nIn the last month we\'ve been addind support for more Compose features. Before you were only able to control a group of containers if they were in a Pod. Now we have added the ability to control a group of Compose containers. You can now start, stop, delete and restart a group of containers launched by either `docker-compose` or `podman-compose`.\\n\\nStay tuned as we add even more features to Compose! If you have any feedback or feature requests, feel free to open an issue or start a discussion on GitHub.\\n\\n\\n\\n### Kubernetes context on the status bar\\n\\nWith Kubernetes context on the status bar, you can switch from one context to another in just a couple of clicks. Easily switch to a different cluster all together. If there are multiple contexts available, you can now click and pick which one to use.\\n\\n\\n\\n### Rename images\\n\\nDeployed an image but now you need to rename it / add a new tag? Podman Desktop allows you to edit an image now. Thanks to an awesome contributor [@tuckerrc](https://github.com/tuckerrc) who added the new feature.\\n\\n\\n\\n### Troubleshooting page\\n\\nDeveloping an extension for Podman Desktop? Want to view the logs of Podman Desktop as well as ping your container connection? We now have a troubleshooting page!\\n\\nClick on the lightbulb button on the bottom right to access the page.\\n\\n\\n\\n### Protocol handler support\\n\\nPodman Desktop now supports protocol handling when using the terminal! Want to access your favourite extension directly from a script or the terminal? If you type in `open podman-desktop:extension/redhat.openshift-local` in the terminal, Podman Desktop will automatically load up to the correct extension.\\n\\n\\n\\n---\\n\\n## Other Notable Features\\n\\n- Background colors and FormPage ([PR #2977](https://github.com/containers/podman-desktop/pull/2977))\\n- Add ability to add insecure registry / skipping cert verify ([PR #2896](https://github.com/containers/podman-desktop/pull/2896))\\n- Add support for icon contribution ([PR #2984](https://github.com/containers/podman-desktop/pull/2984))\\n- Add warning dialog message that virtual machine has low memory limit ([PR #2822](https://github.com/containers/podman-desktop/pull/2822))\\n- Propose indexed name for new pod ([PR #3028](https://github.com/containers/podman-desktop/pull/3028))\\n- Add restart button after enabling / disabling mac os compatibility ([PR #2841](https://github.com/containers/podman-desktop/pull/2841))\\n- Add environment related helper constants ([PR #3079](https://github.com/containers/podman-desktop/pull/3079))\\n- Allow entrypoint and cmd when starting container ([PR #3031](https://github.com/containers/podman-desktop/pull/3031))\\n- Add a way to debug stores in troubleshooting page ([PR #3121](https://github.com/containers/podman-desktop/pull/3121))\\n- Add custompick component (#2855) ([PR #3012](https://github.com/containers/podman-desktop/pull/3012))\\n- Dynamic breadcrumbs ([PR #3119](https://github.com/containers/podman-desktop/pull/3119))\\n- Icons on form pages ([PR #3155](https://github.com/containers/podman-desktop/pull/3155))\\n- Switch more pages to formpage ([PR #3162](https://github.com/containers/podman-desktop/pull/3162))\\n- Add rename image button ([PR #2588](https://github.com/containers/podman-desktop/pull/2588))\\n- Fixed headers, improved scrollbars ([PR #2863](https://github.com/containers/podman-desktop/pull/2863))\\n- Reports warnings on failed kube deploy, fixes error out ([PR #3050](https://github.com/containers/podman-desktop/pull/3050))\\n- Kube context on statusbar ([PR #2755](https://github.com/containers/podman-desktop/pull/2755))\\n- Install provider if not installed when clicking on create new button (#2706) ([PR #2817](https://github.com/containers/podman-desktop/pull/2817))\\n- Add tag and authenticated push capacity to the extension API ([PR #2876](https://github.com/containers/podman-desktop/pull/2876))\\n- Add navigation bar e2e tests ([PR #2950](https://github.com/containers/podman-desktop/pull/2950))\\n\\n---\\n\\n## Documentation Updates\\n\\n- Fix documentation for building image of extensions ([PR #2873](https://github.com/containers/podman-desktop/pull/2873))\\n- Add Minikube install docs ([PR #2824](https://github.com/containers/podman-desktop/pull/2824))\\n- Add Minikube documentation ([PR #2694](https://github.com/containers/podman-desktop/pull/2694))\\n- Updated Building an image procedure ([PR #2964](https://github.com/containers/podman-desktop/pull/2964))\\n- Starting a container ([PR #2958](https://github.com/containers/podman-desktop/pull/2958))\\n- Pulling an image ([PR #2956](https://github.com/containers/podman-desktop/pull/2956))\\n- Updated selecting containers to run in a pod ([PR #2970](https://github.com/containers/podman-desktop/pull/2970))\\n- Pushing an image to a registry ([PR #2969](https://github.com/containers/podman-desktop/pull/2969))\\n- How to add an insecure registry ([PR #2953](https://github.com/containers/podman-desktop/pull/2953))\\n- Add documentation for lima ([PR #2995](https://github.com/containers/podman-desktop/pull/2995))\\n- Replace broken link to podman.io ([PR #2994](https://github.com/containers/podman-desktop/pull/2994))\\n- Authenticating to a pre-configured registry ([PR #2965](https://github.com/containers/podman-desktop/pull/2965))\\n- Lima is not a container engine ([PR #3051](https://github.com/containers/podman-desktop/pull/3051))\\n- Using the Troubleshooting page ([PR #3083](https://github.com/containers/podman-desktop/pull/3083))\\n- View and select your current Kubernetes context in the status bar ([PR #3090](https://github.com/containers/podman-desktop/pull/3090))\\n\\n---\\n\\n## Notable Bug Fixes\\n\\n- Deleting a running pod generates an error ([PR #2827](https://github.com/containers/podman-desktop/pull/2827))\\n- If kubeconfig is empty, does not try to do things, cancel ([PR #2874](https://github.com/containers/podman-desktop/pull/2874))\\n- Async telemetry startup ([PR #2885](https://github.com/containers/podman-desktop/pull/2885))\\n- Do not block startup while waiting for kube resource refresh ([PR #2884](https://github.com/containers/podman-desktop/pull/2884))\\n- Images list too wide ([PR #2918](https://github.com/containers/podman-desktop/pull/2918))\\n- Compose deactivate function never called ([PR #2922](https://github.com/containers/podman-desktop/pull/2922))\\n- Auto-scrolling on form pages, layout issues ([PR #2927](https://github.com/containers/podman-desktop/pull/2927))\\n- Show current context in quick pick ([PR #2920](https://github.com/containers/podman-desktop/pull/2920))\\n- Remove sticky position of loader in dashboard UI (#2535) ([PR #2959](https://github.com/containers/podman-desktop/pull/2959))\\n- Undo change that broke the website ([PR #2992](https://github.com/containers/podman-desktop/pull/2992))\\n- Detailspage, resizing & consistency ([PR #2987](https://github.com/containers/podman-desktop/pull/2987))\\n- Quick pick click to close and over nav bar ([PR #2758](https://github.com/containers/podman-desktop/pull/2758))\\n- Only show empty screen when no pods ([PR #2929](https://github.com/containers/podman-desktop/pull/2929))\\n- Do not redirect to /pods when deleting pod in containerlist ([PR #2963](https://github.com/containers/podman-desktop/pull/2963))\\n- Bulk delete on pods should call the pod deletion ([PR #2979](https://github.com/containers/podman-desktop/pull/2979))\\n- Update nodejs version to 18 in .nvmrc to fix yarn install failure ([PR #2989](https://github.com/containers/podman-desktop/pull/2989))\\n- Website check targets ([PR #2996](https://github.com/containers/podman-desktop/pull/2996))\\n- Don\'t show exception to user ([PR #3034](https://github.com/containers/podman-desktop/pull/3034))\\n- Interpret arguments given to info command for example ([PR #3015](https://github.com/containers/podman-desktop/pull/3015))\\n- Change defaults for Podman machine ([PR #3061](https://github.com/containers/podman-desktop/pull/3061))\\n- Normalize development/production folders path ([PR #3113](https://github.com/containers/podman-desktop/pull/3113))\\n- Calculate machine socket path for linux ([PR #3070](https://github.com/containers/podman-desktop/pull/3070))\\n- Replace backslash with slash so to support rendering on Windows (#3120) ([PR #3122](https://github.com/containers/podman-desktop/pull/3122))\\n- Keep stdout and stderr in the error object for Docker Desktop extensions ([PR #3014](https://github.com/containers/podman-desktop/pull/3014))\\n- Mark task completed if there\'s a failure ([PR #3016](https://github.com/containers/podman-desktop/pull/3016))\\n- Handle invalid kubeconfig file ([PR #3129](https://github.com/containers/podman-desktop/pull/3129))\\n- Do not remove registries when podman extension is stopping ([PR #3136](https://github.com/containers/podman-desktop/pull/3136))\\n- Warning should be amber ([PR #3153](https://github.com/containers/podman-desktop/pull/3153))\\n- Load user extensions from plugins as removable ([PR #3152](https://github.com/containers/podman-desktop/pull/3152))\\n- Images with spaces in entrypoints or commands fail to start ([PR #3161](https://github.com/containers/podman-desktop/pull/3161))\\n- Scrolling offscreen when clicking checkbox ([PR #3178](https://github.com/containers/podman-desktop/pull/3178))\\n- Avoid messagebox expanding offscreen ([PR #2778](https://github.com/containers/podman-desktop/pull/2778))\\n- Release-notes-generator run failure ([PR #2752](https://github.com/containers/podman-desktop/pull/2752))\\n- Unable to do a new build if the previous one failed ([PR #2721](https://github.com/containers/podman-desktop/pull/2721))\\n\\n---\\n\\n## Community Thank You\\n\\n\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make Podman Desktop even better.\\n\\nA big shoutout to [@afbjorklund](https://github.com/afbjorklund), [@tuckerrc](https://github.com/tuckerrc) and [@evanshortiss](https://github.com/evanshortiss) who contributed to this release!\\n\\n---\\n\\n## Final notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.2.0) and [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.2.0).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"podman-desktop-release-1.1","metadata":{"permalink":"/blog/podman-desktop-release-1.1","source":"@site/blog/2023-06-08-release-1.1.md","title":"Release Notes - Podman Desktop 1.1","description":"Podman Desktop 1.1 has been released!","date":"2023-06-08T00:00:00.000Z","formattedDate":"June 8, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"},{"label":"openshift","permalink":"/blog/tags/openshift"}],"readingTime":2.465,"hasTruncateMarker":true,"authors":[{"name":"Tim deBoer","title":"Architect","url":"https://github.com/deboer-tim","imageURL":"https://github.com/deboer-tim.png","key":"deboer"}],"frontMatter":{"title":"Release Notes - Podman Desktop 1.1","description":"Podman Desktop 1.1 has been released!","slug":"podman-desktop-release-1.1","authors":["deboer"],"tags":["podman-desktop","release","kubernetes","openshift"],"hide_table_of_contents":false,"image":"/img/blog/podman-desktop-release-1.1.webp"},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 1.2","permalink":"/blog/podman-desktop-release-1.2"},"nextItem":{"title":"Release Notes - Podman Desktop 1.0","permalink":"/blog/podman-desktop-release-1.0"}},"content":"import ReactPlayer from \'react-player\'\\n\\nPodman Desktop 1.1 Release! \ud83c\udf89\\n\\nThis is primarily a bug-fix release to fix a few important issues, but we\'ve managed to squeeze in a few enhancements\\nalong the way.\\n\\n\x3c!--Main Features--\x3e\\n\\n- **Podman 4.5.1**: Podman 4.5.1 now included in Windows and Mac installers.\\n- **Extensions**: Update extensions from within Podman Desktop.\\n- **Lima Support**: Choose engine type and override its name from the settings.\\n- **UX and UI Improvements**: New loading screen.\\n\\nPodman Desktop 1.1 is now available. [Click here to download it](/downloads)!\\n\\n![Podman-desktop-1-1-hero](img/podman-desktop-release-1.1/podman-desktop-release-1.1.png)\\n\\n\x3c!--truncate--\x3e\\n\\n---\\n\\n## Release Details\\n\\n### Podman v4.5.1\\n\\nPodman Desktop 1.1 moves up to [Podman 4.5.1](https://github.com/containers/podman/releases/tag/v4.5.1).\\n\\n### Extensions\\n\\nOptional extensions will follow their own lifecycle and update independently from Podman Desktop. As of\\nthis release you\'ll be able to see when there is an update available and install from within\\nPodman Desktop [#2655](https://github.com/containers/podman-desktop/pull/2655).\\n\\nWe\'ve also added options in **Settings > Preferences** to\\nautomatically check for and install extension updates.\\n\\n\\n\\n![Update extensions](img/podman-desktop-release-1.1/update-extensions.png)\\n\\n### Lima Support\\n\\nThanks to contributor [Anders Bj\xf6rklund](https://github.com/afbjorklund), we have some improvements to the\\nLima extension! In **Settings > Preferences** you can select which\\nengine type Lima runs on and override the instance name [#2674](https://github.com/containers/podman-desktop/pull/2674).\\n\\n![Lima preferences](https://user-images.githubusercontent.com/10364051/241755966-0a6a293b-b18e-4222-9c40-abd6c114d464.png)\\n\\n### Other UI and UX Improvements\\n\\n#### New Loading Screen\\n\\nWe have a new loading screen, Podman Desktop style! [#2743](https://github.com/containers/podman-desktop/pull/2743).\\n\\n\\n\\n---\\n\\n## Other Notable Enhancements\\n\\n- Docker-compose can be installed system-wide [#2718](https://github.com/containers/podman-desktop/pull/2718).\\n- Show warning when creating a pod with two containers that use the same port [#2671](https://github.com/containers/podman-desktop/pull/2671).\\n- Display Kubernetes context name in pod label [#2634](https://github.com/containers/podman-desktop/pull/2634).\\n- Add Docker compatibility button using flatpak-spawn [#1925](https://github.com/containers/podman-desktop/pull/1925).\\n- Improve UI consistency of Pull Image page [#2604](https://github.com/containers/podman-desktop/pull/2604).\\n\\n---\\n\\n## Notable Bug Fixes\\n\\n- Could not install extensions on Windows 10 [#2762](https://github.com/containers/podman-desktop/pull/2762).\\n- Could not use locally built images on Kubernetes [#2710](https://github.com/containers/podman-desktop/pull/2710).\\n- Dashboard still suggests update after installation [#2648](https://github.com/containers/podman-desktop/pull/2648).\\n- Could not Play Kubernetes YAML to Podman on Windows [#2594](https://github.com/containers/podman-desktop/pull/2594).\\n- Pod label wasn\'t always shown in list [#2614](https://github.com/containers/podman-desktop/pull/2614).\\n- Dashboard button state was resetting [#2584](https://github.com/containers/podman-desktop/pull/2584).\\n- Change checkbox style so they don\'t look like stop buttons [#2723](https://github.com/containers/podman-desktop/pull/2723).\\n\\n---\\n\\n## Community Thank You\\n\\n\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make Podman Desktop even better. In this\\nsprint we received pull requests from the following people:\\n\\n- [wangxiaolei](https://github.com/fatelei) in [#2602 - Add meaningful tooltips to build, pull, prune buttons](https://github.com/containers/podman-desktop/pull/2602)\\n- [AsciiWolf](https://github.com/AsciiWolf) in [#2607 - fix typing error in Flathub name](https://github.com/containers/podman-desktop/pull/2607) and [#2609 - fix Flatpak install instructions](https://github.com/containers/podman-desktop/pull/2609)\\n- [Anders Bj\xf6rklund](https://github.com/afbjorklund) in [#2674 - Select engine for Lima provider](https://github.com/containers/podman-desktop/pull/2674)\\n\\n---\\n\\n## Final notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.1.0) and [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.1.0).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"podman-desktop-release-1.0","metadata":{"permalink":"/blog/podman-desktop-release-1.0","source":"@site/blog/2023-05-17-release-1.0.md","title":"Release Notes - Podman Desktop 1.0","description":"Podman Desktop 1.0 has been released!","date":"2023-05-17T00:00:00.000Z","formattedDate":"May 17, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"},{"label":"kind","permalink":"/blog/tags/kind"},{"label":"openshift","permalink":"/blog/tags/openshift"}],"readingTime":5,"hasTruncateMarker":true,"authors":[{"name":"Tim deBoer","title":"Architect","url":"https://github.com/deboer-tim","imageURL":"https://github.com/deboer-tim.png","key":"deboer"}],"frontMatter":{"title":"Release Notes - Podman Desktop 1.0","description":"Podman Desktop 1.0 has been released!","slug":"podman-desktop-release-1.0","authors":["deboer"],"tags":["podman-desktop","release","kubernetes","kind","openshift"],"hide_table_of_contents":false,"image":"/img/blog/podman-desktop-release-1.0.jpg"},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 1.1","permalink":"/blog/podman-desktop-release-1.1"},"nextItem":{"title":"Release Notes - Podman Desktop 0.15","permalink":"/blog/podman-desktop-release-0.15"}},"content":"import ReactPlayer from \'react-player\'\\n\\nPodman Desktop 1.0 Release! \ud83c\udf89\\n\\nWe still have many things planned, but with a little polish and a few more bug fixes we\\nfelt we\'ve reached a level of maturity and it is now time to declare our 1.0 release.\\n\\nThank you to everyone who has been with us on this journey so far! Please keep the\\nfeedback coming!\\n\\n\x3c!--Main Features--\x3e\\n\\n- **Highlighting Featured Extensions**: Easily find and install new extensions.\\n- **Featured Extensions**: Two new extensions supporting OpenShift.\\n- **Podman Machine as Root**: Ability to run a Podman machine as root.\\n- **UX and UI Improvements**: Opening external websites, editing numbers, and tooltips.\\n\\nPodman Desktop 1.0 is now available. [Click here to download it](/downloads)!\\n\\n![Podman-desktop-1-0-hero](img/podman-desktop-release-1.0/podman-desktop-release-1.0.jpg)\\n\\n\x3c!--truncate--\x3e\\n\\n---\\n\\n## Release Details\\n\\n### Highlighting Featured Extensions\\n\\nA critical part of our vision for Podman Desktop is the ability to install extensions to\\nsupport additional container engines, Kubernetes providers, or other tools. However, it\\nhas not been easy to discover new extensions.\\n\\nWith 1.0 we show a list of featured extensions in the **Welcome**\\n[#2354](https://github.com/containers/podman-desktop/pull/2354), the **Dashboard** and in\\n** Settings > Extensions**\\n[#2355](https://github.com/containers/podman-desktop/pull/2355). Check out the new\\nextensions for **Red Hat OpenShift Local** and the **Developer Sandbox for Red Hat OpenShift**!\\n\\n![Featured extensions](img/podman-desktop-release-1.0/featured-extensions.png)\\n\\n### Featured Extensions\\n\\nSpeaking of extensions, let\'s take a minute to turn the spotlight on these two!\\n\\nHave another idea for extending Podman Desktop? We would love to hear from you or see\\nwhat you can create with the [Extension documentation](/docs/extensions),\\nand feature your extension here.\\n\\n#### Red Hat OpenShift Local\\n\\nOpenShift Local is a fully-featured single-node OpenShift cluster designed to run on your local computer.\\nWith this extension you can install, start/stop, and deploy pods or YAML to OpenShift Local,\\nallowing you to test your applications on a full OpenShift environment, ensuring a consistent\\nexperience between development, test, and production.\\n\\nThe recent addition of the MicroShift preset provides a lighter, optimized option that\\nstarts faster and uses less resources for deployments that still want OpenShift compatibility\\nwithout the full set of OpenShift services.\\n\\n![OpenShift Local](img/podman-desktop-release-1.0/openshift-local.png)\\n\\n#### Developer Sandbox for Red Hat OpenShift\\n\\nThe OpenShift Developer Sandbox is a free, cloud-based OpenShift environment that allows developers to\\ncreate, build, and deploy applications to OpenShift for 30 days. With this extension you can sign up\\nand easily deploy pods or YAML to a hosted OpenShift environment without a local installation or\\nleaving Podman Desktop.\\n\\n![Developer Sandbox](img/podman-desktop-release-1.0/sandbox.png)\\n\\n### Podman Machine as Root\\n\\nWhen creating a Podman machine you can now decide to run as root [#2427](https://github.com/containers/podman-desktop/pull/2427). This is a prerequisite for some scenarios, such as running Kind on Windows.\\n\\n![Podman machine as root](img/podman-desktop-release-1.0/podman-root.png)\\n\\n### Other UI and UX Improvements\\n\\n#### Prompt to Open External Website\\n\\nIn the previous release links to external websites were blocked due to the security risk.\\nIn 1.0 you can click to see the URL and have the option of opening or copying it\\n[#2414](https://github.com/containers/podman-desktop/pull/2414).\\n\\n![External link dialog](img/podman-desktop-release-1.0/external-link.png)\\n\\n#### Editable Numeric Preferences\\n\\nTired of clicking +, +, +? Us too. Numeric preferences are now editable so\\nyou can directly enter the value you want\\n[#2368](https://github.com/containers/podman-desktop/pull/2368).\\n\\n![Editing numbers](img/podman-desktop-release-1.0/edit-number.png)\\n\\n#### Navigation tooltips\\n\\nWe like our new navigation bar, but the tooltips were slow to appear. This made it harder for new\\nusers to discover the pages and for power users to see the container/pod/image counts. The\\ntooltips are now a little nicer and appear immediately\\n[#2286](https://github.com/containers/podman-desktop/pull/2286).\\n\\n![Navigation tooltips](img/podman-desktop-release-1.0/nav-tooltips.png)\\n\\n---\\n\\n## Other Notable Enhancements\\n\\n- If you use a non-default Podman machine you are now prompted to make it the default, so\\n that command line tools will use the same machine [#2205](https://github.com/containers/podman-desktop/pull/2205).\\n\\n- Extensions can now be installed without requiring a running local container engine\\n [#2273](https://github.com/containers/podman-desktop/pull/2273).\\n\\n- When extensions fail to load there is a new state (failed!) and an error message\\n to help you fix or report the problem [#2424](https://github.com/containers/podman-desktop/pull/2424).\\n\\n- The showInputBox API has support for Markdown [#2418](https://github.com/containers/podman-desktop/pull/2418).\\n\\n---\\n\\n## Notable Bug Fixes\\n\\n- Fixed shared status when using multiple Podman 4.5 machines [#2441](https://github.com/containers/podman-desktop/pull/2441).\\n- Fixed hang on exit when telemetry is unreachable [#2431](https://github.com/containers/podman-desktop/pull/2431).\\n- Reduced initial Podman REST API calls to improve performance [#2419](https://github.com/containers/podman-desktop/pull/2419).\\n- **Play Kubernetes YAML** now honors the namespace [#2509](https://github.com/containers/podman-desktop/pull/2509).\\n- **Container** list was not remembering expand/collapsed status [#2491](https://github.com/containers/podman-desktop/pull/2491).\\n- Clear previous error when installing Docker extension [#2469](https://github.com/containers/podman-desktop/pull/2469).\\n- Ensure correct path with running Kind CLI [#2455](https://github.com/containers/podman-desktop/pull/2455).\\n- Use IPv4 over IPv6 by default [#2398](https://github.com/containers/podman-desktop/pull/2398).\\n- When changing the Kubernetes pod name, change the app name to match [#2389](https://github.com/containers/podman-desktop/pull/2389).\\n- Fixed incorrect pod status in **Containers** view [#2387](https://github.com/containers/podman-desktop/pull/2387).\\n- **Dashboard** wasn\'t correctly refreshing Podman status [#2359](https://github.com/containers/podman-desktop/pull/2359).\\n\\n---\\n\\n## Community Thank You\\n\\n\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make Podman Desktop even better. In this final\\nsprint we received pull requests from the following people:\\n\\n- [Taha Attari](https://github.com/TahaAttari) in [#2470 - Update docker command in importing-saved-containers.md](https://github.com/containers/podman-desktop/pull/2470)\\n- [Jason Greene](https://github.com/n1hility) in [#2431 - Fix hang on exit when telemetry endpoint is unreachable](https://github.com/containers/podman-desktop/pull/2431)\\n- [Anders Bj\xf6rklund](https://github.com/afbjorklund) in [#2571 - Fix the location of the lima podman socket](https://github.com/containers/podman-desktop/pull/2571) and [#2572 - Fix the state of the lima container provider](https://github.com/containers/podman-desktop/pull/2572)\\n- [Tucker Chapman](https://github.com/tuckerrc) in [#2567 - Add example image name in placeholder](https://github.com/containers/podman-desktop/pull/2567)\\n\\nThere are now a total of 54 people (and two bots!) who have contributed PRs to Podman Desktop, and we\'d\\nlike to extend an extra thanks to all of those outside of the immediate development team who contributed\\nto get us here:\\n\\n[afbjorklund](https://github.com/afbjorklund),\\n[alv67](https://github.com/alv67),\\n[anjannath](https://github.com/anjannath),\\n[ankanroy-code](https://github.com/ankanroy-code),\\n[arixmkii](https://github.com/arixmkii),\\n[cblecker](https://github.com/cblecker),\\n[cfergeau](https://github.com/cfergeau),\\n[chevdor](https://github.com/chevdor),\\n[chrisjsimpson](https://github.com/chrisjsimpson),\\n[cu8code](https://github.com/cu8code),\\n[doehyunbaek](https://github.com/doehyunbaek),\\n[dylanmtaylor](https://github.com/dylanmtaylor),\\n[eidottermihi](https://github.com/eidottermihi),\\n[elervik](https://github.com/elervik),\\n[emmanuelbernard](https://github.com/emmanuelbernard),\\n[evanfpearson](https://github.com/evanfpearson),\\n[gorkem](https://github.com/gorkem),\\n[idjohnson](https://github.com/idjohnson),\\n[imphil](https://github.com/imphil),\\n[iongion](https://github.com/iongion),\\n[jlosito](https://github.com/jlosito),\\n[KevinAtSesam](https://github.com/KevinAtSesam),\\n[lsm5](https://github.com/lsm5),\\n[Mitch9378](https://github.com/Mitch9378),\\n[n1hility](https://github.com/n1hility),\\n[osslate](https://github.com/osslate),\\n[PatentLobster](https://github.com/PatentLobster),\\n[pwright](https://github.com/pwright),\\n[rdwz](https://github.com/rdwz),\\n[redhatrises](https://github.com/redhatrises),\\n[rhatdan](https://github.com/rhatdan),\\n[RobotSail](https://github.com/RobotSail),\\n[rohit-rambade](https://github.com/rohit-rambade),\\n[rsvoboda](https://github.com/rsvoboda),\\n[sfrunza13](https://github.com/sfrunza13),\\n[shemanaev](https://github.com/shemanaev),\\n[sstosh](https://github.com/sstosh),\\n[stickster](https://github.com/stickster),\\n[TahaAttari](https://github.com/TahaAttari),\\n[ths83](https://github.com/ths83),\\n[Tony-Sol](https://github.com/Tony-Sol),\\n[tuckerrc](https://github.com/tuckerrc),\\n[ucomesdag](https://github.com/ucomesdag),\\n[xbabalov](https://github.com/xbabalov),\\nzezo2019.\\n\\n---\\n\\n## Final notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.0.0) and [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.0.1).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"podman-desktop-release-0.15","metadata":{"permalink":"/blog/podman-desktop-release-0.15","source":"@site/blog/2023-05-02-release-0.15.md","title":"Release Notes - Podman Desktop 0.15","description":"Podman Desktop 0.15 has been released!","date":"2023-05-02T00:00:00.000Z","formattedDate":"May 2, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"},{"label":"kind","permalink":"/blog/tags/kind"}],"readingTime":3.685,"hasTruncateMarker":true,"authors":[{"name":"Tim deBoer","title":"Architect","url":"https://github.com/deboer-tim","imageURL":"https://github.com/deboer-tim.png","key":"deboer"}],"frontMatter":{"title":"Release Notes - Podman Desktop 0.15","description":"Podman Desktop 0.15 has been released!","slug":"podman-desktop-release-0.15","authors":["deboer"],"tags":["podman-desktop","release","kubernetes","kind"],"hide_table_of_contents":false,"image":"/img/blog/podman-desktop-release-0.15.webp"},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 1.0","permalink":"/blog/podman-desktop-release-1.0"},"nextItem":{"title":"Setting up and running a Kubernetes cluster locally with Podman Desktop","permalink":"/blog/running-a-local-kubernetes-cluster-with-podman-desktop"}},"content":"import ReactPlayer from \'react-player\'\\n\\nPodman Desktop 0.15 - Cleanliness is next to Podliness!\\n\\nIt has only been two weeks since our last release, but we really wanted to complete a few scenarios,\\nfix a few bugs, and show off several design updates and UI improvements that we have been working on.\\n\\n\x3c!--Main Features--\x3e\\n\\n- **Podman Version**: Podman 4.5 now included in Windows and Mac installers.\\n- **Kind Ingress**: Creating an ingress to expose services outside the Kind cluster.\\n- **Podliness**: Ability to choose external ports when podifying containers.\\n- **Cleanliness**: New navigation bar, dialog, and palette update.\\n- **UX and UI Improvements**: Markdown support for extensions.\\n\\nPodman Desktop 0.15 is now available. [Click here to download it](/downloads)!\\n\\n![Podman-desktop-0-15-hero](img/podman-desktop-release-0.15/podman-desktop-release-0.15.webp)\\n\\n\x3c!--truncate--\x3e\\n\\n---\\n\\n## Release Details\\n\\n### Update to Podman v4.5.O\\n\\nPodman Desktop 0.15 embeds [Podman 4.5.0](https://github.com/containers/podman/releases/tag/v4.5.0) in\\nWindows and macOS installers [#2115](https://github.com/containers/podman-desktop/issues/2115).\\n\\n### Kind Ingress\\n\\nWait a minute, didn\'t we enable this last release? Well yes, last time we did add support for installing\\nthe Contour ingress controller on Kind [#1675](https://github.com/containers/podman-desktop/issues/1675),\\nbut you still couldn\'t access your containers without the corresponding ingress.\\n\\nThis release adds a simple checkbox you can use when deploying to Kind to create an ingress and\\nmake your service accessible [#1322](https://github.com/containers/podman-desktop/issues/1322).\\n\\n\\n\\n### Podliness: Ability to Choose External Ports when Podifying Containers\\n\\nWhen you create a pod from of a set of containers (Podifying!), you probably don\'t want to expose every\\nsingle port from every container to the world. With an updated panel you can now see which ports each container\\nexposes, pick which should remain visible outside the pod, and which are for internal use\\n[#2232](https://github.com/containers/podman-desktop/pull/2232).\\n\\n![Podify page](https://user-images.githubusercontent.com/49404737/234527674-ed14f52c-8f66-445f-8038-c8135bb61136.gif)\\n\\n### Cleanliness: New Navigation Bar, Dialogs, and Palette\\n\\nIt was time to catch up on some design ideas and do some UI cleanup!\\n\\n#### New Navgation Bar\\n\\nThe navigation bar is now always fixed on the left size, without labels. This opens up more space\\nfor the content on each page, and is easier to jump in and out of ** Settings**.\\n[#2167](https://github.com/containers/podman-desktop/issues/2167)\\n\\n![Navigation bar](img/podman-desktop-release-0.15/navigation.png)\\n\\n#### Updated Dialogs\\n\\nWe wanted messages and dialog boxes to feel a bit more integrated, so we have a new message box\\n[#1808](https://github.com/containers/podman-desktop/pull/1808) and use it for all dialogs opened by\\nextensions, pruning containers/pods/images/volumes [#2138](https://github.com/containers/podman-desktop/pull/2138),\\nand updating Podman Desktop itself [#2249](https://github.com/containers/podman-desktop/pull/2249).\\n\\n![Dialog](img/podman-desktop-release-0.15/dialog.png)\\n\\n#### Colors\\n\\nWe spent some time tweaking colors and closing on our final palette\\n[#2199](https://github.com/containers/podman-desktop/pull/2199), updating the colors in the terminal & detail page\\n[#2222](https://github.com/containers/podman-desktop/pull/2222), tweaking the navigation and main page colors\\n[#2223](https://github.com/containers/podman-desktop/pull/2223),\\nand improving the look of forms [#2156](https://github.com/containers/podman-desktop/issues/2156).\\n\\nWe\'re not done yet, but hopefully you will notice a more polished, consistent, good-looking application!\\n\\n### Other UI and UX Improvements\\n\\n#### Markdown Support for Extensions\\n\\nWe added a new component to display markdown [#2219](https://github.com/containers/podman-desktop/pull/2219) and\\nenabled it in preferences [#2253](https://github.com/containers/podman-desktop/pull/2253), and\\nprovider properties/creation pages [#2152](https://github.com/containers/podman-desktop/issues/2152).\\nWe can now embed links and other formatting in preferences, and extensions can use them in many places, for example:\\n\\n![Markdown](img/podman-desktop-release-0.15/markdown.png)\\n\\n---\\n\\n## Other Notable Enhancements\\n\\n- We know which **Settings** page is used the most often, so now it\'s the default: ** Settings > Resources** [#2105](https://github.com/containers/podman-desktop/issues/2105).\\n\\n- Extensions can now use the Tasks API to let long running tasks continue in the background [#2019](https://github.com/containers/podman-desktop/issues/2019) and the existing withProgress API also uses the task manager now\\n [#2187](https://github.com/containers/podman-desktop/pull/2187).\\n\\n![Task API](https://user-images.githubusercontent.com/695993/233560830-85cfa685-5dcd-4efa-9fae-730a8a9eef3b.gif)\\n\\n- Images are now sorted by age [#2311](https://github.com/containers/podman-desktop/pull/2311).\\n\\n- When you start/stop a container or pod, the button is now animated instead of having an separate spinner\\n [#2101](https://github.com/containers/podman-desktop/issues/2101).\\n\\n- The ** Settings > Preferences** page now has a search bar [#2128](https://github.com/containers/podman-desktop/pull/2128).\\n\\n![Search preferences](img/podman-desktop-release-0.15/prefs.png)\\n\\n- The Help page has been updated [#431](https://github.com/containers/podman-desktop/issues/431).\\n\\n![Updated Help](img/podman-desktop-release-0.15/help.png)\\n\\n---\\n\\n## Notable Bug Fixes\\n\\n- There was no way to see log or outcome if you leave the Kind cluster creation page [#2079](https://github.com/containers/podman-desktop/issues/2079).\\n- Kind image load doesn\'t show a notification [#2225](https://github.com/containers/podman-desktop/issues/2225).\\n- Fix odd selection in ** Settings > Extensions** [#2130](https://github.com/containers/podman-desktop/issues/2130).\\n- Menus are now cleaned up properly when extensions are stopped [#2188](https://github.com/containers/podman-desktop/pull/2188).\\n- Kind clusters are now cleaned up when Podman machine is stopped [#2306](https://github.com/containers/podman-desktop/pull/2306).\\n\\n---\\n\\n## Final notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A0.15.0).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"running-a-local-kubernetes-cluster-with-podman-desktop","metadata":{"permalink":"/blog/running-a-local-kubernetes-cluster-with-podman-desktop","source":"@site/blog/2023-04-19-running-a-local-kubernetes-cluster-with-podman-desktop.md","title":"Setting up and running a Kubernetes cluster locally with Podman Desktop","description":"Setting up and running a Kubernetes cluster locally with Podman Desktop","date":"2023-04-19T00:00:00.000Z","formattedDate":"April 19, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"story","permalink":"/blog/tags/story"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"},{"label":"kind","permalink":"/blog/tags/kind"}],"readingTime":8.86,"hasTruncateMarker":true,"authors":[{"name":"Fabrice Flore-Thebault","title":"Technical writer","url":"https://github.com/themr0c","imageURL":"https://github.com/themr0c.png","key":"themr0c"}],"frontMatter":{"title":"Setting up and running a Kubernetes cluster locally with Podman Desktop","description":"Setting up and running a Kubernetes cluster locally with Podman Desktop","slug":"running-a-local-kubernetes-cluster-with-podman-desktop","authors":["themr0c"],"tags":["podman-desktop","story","kubernetes","kind"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 0.15","permalink":"/blog/podman-desktop-release-0.15"},"nextItem":{"title":"Release Notes - Podman Desktop 0.14","permalink":"/blog/podman-desktop-release-0.14"}},"content":"In this blog post you will learn to use Podman Desktop to run the [Kubernetes documentation example: Deploying PHP Guestbook application with Redis](https://kubernetes.io/docs/tutorials/stateless-application/guestbook/).\\n\\nOn the agenda:\\n\\n1. Installing Podman Desktop.\\n1. Installing and initializing your container engine: Podman.\\n1. Installing and starting your local Kubernetes provider: Kind.\\n1. Starting the Redis leader.\\n1. Starting and scaling the Redis followers.\\n1. Starting and exposing the Guestbook frontend.\\n\\n\x3c!--truncate--\x3e\\n\\n## Installing Podman Desktop\\n\\nYou need Podman Desktop.\\n\\n1. Go to [Podman Desktop installation documentation](/docs/installation).\\n1. Click on your platform name: [Windows](/docs/installation/windows-install), [macOS](/docs/installation/macos-install), or [Linux](/docs/installation/linux-install).\\n1. Follow the instructions. Stick to the default installation method.\\n1. Start **Podman Desktop**.\\n\\nAt this point, you have a graphical user interface to:\\n\\n- Install Podman and Kind.\\n- Control and work with your container engines and Kubernetes clusters.\\n- Run your application on your container engine and migrate it to Kubernetes.\\n\\n## Installing and initializing your container engine: Podman\\n\\nPodman Desktop can control various container engines, such as:\\n\\n- Docker\\n- Lima\\n- Podman\\n\\nConsider installing the Podman container engine for:\\n\\n- Added security\\n- No daemon\\n- Open source\\n\\nContainers are a Linux technology.\\n\\n- On Linux, you can install Podman natively.\\n See: [Installing Podman on Linux](https://podman.io/docs/installation#installing-on-linux).\\n- On macOS and Windows, Podman requires to run in a Linux virtual machine: the Podman machine.\\n Use Podman Desktop to install Podman and initialize your Podman machine:\\n\\n#### Procedure\\n\\n1. Open Podman Desktop **Dashboard**\\n1. The **Dashboard** displays _Podman Desktop was not able to find an installation of Podman_.\\n1. Click on **Install**.\\n1. Podman Desktop checks the prerequisites to install Podman Engine. When necessary, follow the instructions to install prerequisites.\\n1. Podman displays the dialog: _Podman is not installed on this system, would you like to install Podman?_. Click on **Yes** to install Podman.\\n1. Click on **Initialize and start**.\\n\\n#### Verification\\n\\n- The **Dashboard** displays _Podman is running_.\\n\\n ![Podman is running](img/running-a-local-kubernetes-cluster-with-podman-desktop/podman-is-running.png)\\n\\nAt this point, you can start working with containers.\\n\\n## Installing and starting your local Kubernetes provider: Kind\\n\\nYou want to deploy your application to a local Kubernetes cluster.\\n\\nPodman Desktop can help you run Kind-powered local Kubernetes clusters on a container engine, such as Podman.\\n\\nPodman Desktop helps you [installing the `kind` CLI](/docs/kind/installing):\\n\\n1. In the status bar, click on **Kind**, and follow the prompts.\\n1. When the `kind` CLI is available, the status bar does not display **Kind**.\\n1. On Windows, [configure Podman in rootful mode](/docs/kind/configuring-podman-for-kind-on-windows)\\n\\n ```shell-session\\n $ podman system connection default podman-machine-default-root\\n ```\\n\\n1. Go to ** Settings > Resources**\\n1. In the **\\"Podman Podman** tile, click on the **** icon to restart the Podman container engine.\\n1. In the **\\"Kind Kind** tile, click on the **Create new** button.\\n 1. **Name**: enter `kind-cluster`.\\n 1. **Provider Type**: select `podman`.\\n 1. **HTTP Port**: select `9090`.\\n 1. **HTTPS Port**: select `9443`.\\n 1. **Setup an ingress controller**: `Enabled`\\n 1. Click the **Create** button.\\n ![Create a Kind cluster screen](img/running-a-local-kubernetes-cluster-with-podman-desktop/create-a-kind-cluster.png)\\n1. After successful creation, click on the **Go back to resources** button\\n\\n#### Verification\\n\\n1. In ** Settings > Resources** your Kind cluster is running/\\n\\n ![Kind cluster is running](img/running-a-local-kubernetes-cluster-with-podman-desktop/kind-cluster-is-running.png)\\n\\n1. In the **Podman Desktop** tray, open the **Kubernetes** menu: you can set the context to your Kind cluster: `kind-kind-cluster`.\\n\\n ![Kind cluster Kubernetes context in the tray](img/running-a-local-kubernetes-cluster-with-podman-desktop/kind-cluster-context-in-the-tray.png)\\n\\n At this point, you can start working with containers, and your local Kubernetes cluster.\\n\\n#### Additional resources\\n\\n- [Creating a local Kind-powered Kubernetes cluster](/docs/kind/creating-a-kind-cluster)\\n\\n## Starting the Redis leader\\n\\nThe Guestbook application uses Redis to store its data.\\n\\nWith Podman Desktop, you can prepare the Redis leader image and container on your local container engine, and deploy the results to a Kubernetes pod and service.\\nThis is functionally equal to the `redis-leader` deployment that the Kubernetes example propose.\\n\\n#### Procedure\\n\\n1. Open ** Images > Pull an image**.\\n 1. **Image to Pull**: enter `docker.io/redis:6.0.5`\\n 1. Click **Pull image** to pull the image to your container engine local image registry.\\n 1. Click **Done** to get back to the images list.\\n1. ** Search images**: enter `redis:6.0.5` to find the image.\\n1. Click **** to open the **Create a container from image** dialog.\\n 1. **Container name**: enter `leader`,\\n 1. **Local port for `6379/tcp`**: `6379`.\\n 1. Click ** Start Container** to start the container in your container engine.\\n1. ** Search containers**: enter `leader` to find the running container.\\n1. Click **** to stop the container, and leave the `6379` port available for the Redis follower container.\\n\\n1. Click ** > Deploy to Kubernetes** to open the **Deploy generated pod to Kubernetes** screen.\\n\\n 1. **Pod Name**: enter `redis-leader`.\\n 1. **Use Kubernetes Services**: select **Replace `hostPort` exposure on containers by Services. It is the recommended way to expose ports, as a cluster policy might prevent to use `hostPort`.**\\n 1. **Expose service locally using Kubernetes Ingress**: deselect **Create a Kubernetes ingress to get access to the ports that this pod exposes, at the default ingress controller location. Example: on a default Kind cluster created with Podman Desktop: `http://localhost:9090`. Requirements: your cluster has an ingress controller`**.\\n 1. **Kubernetes namespaces**: select `default`.\\n 1. Click ** Deploy**.\\n ![Deploy generated leader pod to Kubernetes screen](img/running-a-local-kubernetes-cluster-with-podman-desktop/deploy-generated-leader-pod-to-kubernetes.png)\\n 1. Wait for the pod to reach the state: **Phase: Running**.\\n 1. Click **Done**.\\n\\n#### Verification\\n\\n- The ** Pods** screen lists the running `redis-leader` pod.\\n\\n ![leader pod is running](img/running-a-local-kubernetes-cluster-with-podman-desktop/leader-pod-is-running.png)\\n\\n## Starting the Redis followers\\n\\nAlthough the Redis leader is a single Pod, you can make it highly available and meet traffic demands by adding a few Redis followers, or replicas.\\n\\n**With Podman Desktop, you can prepare the Redis follower image and container on your local container engine, and deploy the results to Kubernetes pods and services.**\\nThis is functionally equal to the `redis-follower` deployment that the Kubernetes example propose.\\n\\n#### Procedure\\n\\n1. Open ** Images > Pull an image**.\\n 1. **Image to Pull**: enter `gcr.io/google_samples/gb-redis-follower:v2`\\n 1. Click **Pull image** to pull the image to your container engine local image registry.\\n 1. Click **Done** to get back to the images list.\\n1. ** Search images**: enter `gb-redis-follower:v2` to find the image.\\n1. Click **** to open the **Create a container from image** dialog.\\n 1. **Container name**: enter `follower`,\\n 1. **Local port for `6379/tcp`**: `6379`.\\n 1. Click ** Start Container** to start the container in your container engine.\\n1. ** Search containers**: enter `follower` to find the running container.\\n1. Click **** to stop the container: you do not need it to run in the container engine.\\n1. Click ** > Deploy to Kubernetes** to open the **Deploy generated pod to Kubernetes** screen.\\n 1. **Pod Name**: enter `redis-follower`.\\n 1. **Use Kubernetes Services**: select **Replace `hostPort` exposure on containers by Services. It is the recommended way to expose ports, as a cluster policy might prevent to use `hostPort`.**\\n 1. **Expose service locally using Kubernetes Ingress**: deselect **Create a Kubernetes ingress to get access to the ports that this pod exposes, at the default ingress controller location. Example: on a default Kind cluster created with Podman Desktop: `http://localhost:9090`. Requirements: your cluster has an ingress controller`**.\\n 1. **Kubernetes namespaces**: select `default`.\\n 1. Click ** Deploy**.\\n ![Deploy generated follower pod to Kubernetes screen](img/running-a-local-kubernetes-cluster-with-podman-desktop/deploy-generated-follower-pod-to-kubernetes.png)\\n 1. Wait for the pod to reach the state: **Phase: Running**.\\n 1. Click **Done**.\\n1. To add replicas, repeat the last step with another **Pod Name** value.\\n\\n#### Verification\\n\\n- The ** Pods** screen lists the running `redis-follower` pods.\\n\\n ![follower pods are running](img/running-a-local-kubernetes-cluster-with-podman-desktop/follower-pods-are-running.png)\\n\\n## Starting the default frontend\\n\\nNow that you have the Redis storage of your Guestbook up and running, start the Guestbook web servers.\\nLike the Redis followers, deploy the frontend using Kubernetes pods and services.\\n\\nThe Guestbook app uses a PHP frontend.\\nIt is configured to communicate with either the Redis follower or leader Services, depending on whether the request is a read or a write.\\nThe frontend exposes a JSON interface, and serves a jQuery-Ajax-based UX.\\n\\nWith Podman Desktop, you can prepare the Guestbook frontend image and container on your local container engine, and deploy the results to Kubernetes pods and services.\\nThis is functionally equal to the `frontend` deployment that the Kubernetes example propose.\\n\\n#### Procedure\\n\\n1. Open ** Images > Pull an image**.\\n 1. **Image to Pull**: enter `gcr.io/google_samples/gb-frontend:v5`\\n 1. Click **Pull image** to pull the image to your container engine local image registry.\\n 1. Wait for the pull to complete.\\n 1. Click **Done** to get back to the images list.\\n1. ** Search images**: enter `gb-frontend:v5` to find the image.\\n1. Click **** to open the **Create a container from image** dialog.\\n 1. **Container name**: enter `frontend`,\\n 1. **Local port for `80/tcp`**: `9000`.\\n 1. Click ** Start Container** to start the container in your container engine.\\n1. ** Search containers**: enter `frontend` to find the running container.\\n1. Click **** to stop the container: you do not need it to run in the container engine.\\n1. Click ** > Deploy to Kubernetes** to open the **Deploy generated pod to Kubernetes** screen.\\n 1. **Pod Name**: enter `frontend`.\\n 1. **Use Kubernetes Services**: select **Replace `hostPort` exposure on containers by Services. It is the recommended way to expose ports, as a cluster policy might prevent to use `hostPort`.**\\n 1. **Expose service locally using Kubernetes Ingress**: select **Create a Kubernetes ingress to get access to the ports that this pod exposes, at the default ingress controller location. Example: on a default Kind cluster created with Podman Desktop: `http://localhost:9090`. Requirements: your cluster has an ingress controller`**.\\n 1. **Kubernetes namespaces**: select `default`.\\n 1. Click ** Deploy**.\\n ![Deploy generated frontend pod to Kubernetes screen](img/running-a-local-kubernetes-cluster-with-podman-desktop/deploy-generated-frontend-pod-to-kubernetes.png)\\n 1. Wait for the pod to reach the state: **Phase: Running**.\\n 1. Click **Done**.\\n\\n#### Verification\\n\\n1. The ** Pods** screen lists the running `frontend` pod.\\n\\n ![`frontend` pod is running](img/running-a-local-kubernetes-cluster-with-podman-desktop/frontend-pod-is-running.png)\\n\\n1. Go to `http://localhost:9090`: the Guestbook application is running."},{"id":"podman-desktop-release-0.14","metadata":{"permalink":"/blog/podman-desktop-release-0.14","source":"@site/blog/2023-04-14-release-0.14.md","title":"Release Notes - Podman Desktop 0.14","description":"Podman Desktop 0.14 has been released!","date":"2023-04-14T00:00:00.000Z","formattedDate":"April 14, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"},{"label":"kind","permalink":"/blog/tags/kind"}],"readingTime":4.025,"hasTruncateMarker":true,"authors":[{"name":"Tim deBoer","title":"Architect","url":"https://github.com/deboer-tim","imageURL":"https://github.com/deboer-tim.png","key":"deboer"}],"frontMatter":{"title":"Release Notes - Podman Desktop 0.14","description":"Podman Desktop 0.14 has been released!","slug":"podman-desktop-release-0.14","authors":["deboer"],"tags":["podman-desktop","release","kubernetes","kind"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Setting up and running a Kubernetes cluster locally with Podman Desktop","permalink":"/blog/running-a-local-kubernetes-cluster-with-podman-desktop"},"nextItem":{"title":"Release Notes - Podman Desktop 0.13","permalink":"/blog/podman-desktop-release-0.13"}},"content":"import ReactPlayer from \'react-player\'\\n\\nPodman Desktop 0.14 - Our Kind-est release yet!\\n\\nWe have been working on a Kind extension for a while now, and decided it is time to promote it\\ninto a release just in time for KubeCon and CloudNativeCon Europe!\\n\\nWe\'re especially excited about releasing Kind because it finally shows the full purpose\\nof Podman Desktop: not just local container engines, but Kubernetes too. More importantly,\\nproviding tools that allow you to manage both environments and seamlessly move between them.\\n\\nSome of these features were available in development mode over the last few releases,\\nbut since they are now in the release build, we will do a full roundup and talk about\\nall the Kind features.\\n\\n\x3c!--Main Features--\x3e\\n\\n- **Kind Installation**: Install Kind from the status bar\\n- **Manage Kind Clusters**: Create and manage Kind clusters from ** Settings > Resources**\\n- **Using Kind**: Deploying YAML and sharing images to a cluster\\n- **Kind Ingress**: Install a Contour ingress controller\\n- **UX and UI Improvements**: Updated preferences and telemetry prompt\\n\\nPodman Desktop 0.14 is now available. [Click here to download it](/downloads)!\\n\\n![Podman-desktop-0-14-hero](img/podman-desktop-release-0.14/podman-desktop-release-0.14.png)\\n\\n\x3c!--truncate--\x3e\\n\\n---\\n\\n## Release details\\n\\n### Kind Installation\\n\\nGet Kind up and running in seconds! The Kind extension is now bundled as part of Podman Desktop\\n[1421](https://github.com/containers/podman-desktop/issues/1421)\\nand allows you to easily [install Kind directly from the status bar](/docs/kind/installing)\\n[1257](https://github.com/containers/podman-desktop/issues/1257).\\n\\nThe installed `kind` CLI is available from the system shell [1516](https://github.com/containers/podman-desktop/issues/1516),\\nallowing you to open a terminal window to `kind get clusters` or work with other tools.\\n\\n### Manage Kind Clusters\\n\\nOnce Kind is installed (or if you already had it), you can manage your clusters in ** Settings > Resources**.\\nFrom here you can [create Kind clusters](/docs/kind/creating-a-kind-cluster),\\nstart/stop [1953](https://github.com/containers/podman-desktop/issues/1953)\\nor delete [1977](https://github.com/containers/podman-desktop/issues/1977) them.\\n\\n![kind-clusters](img/podman-desktop-release-0.14/kind-clusters.png)\\n\\nThe Kind control plane runs as a container. You will see this container\\nin the **Container** list and can also start or stop it from there.\\n\\n### Using Kind\\n\\nNow that you have Kind installed and running, what can you do with it?\\nIf you like terminals, you can always open one up and use the Kind CLI to\\n[interact with your cluster](https://kind.sigs.k8s.io/docs/user/quick-start/#interacting-with-your-cluster).\\n\\nWithin Podman Desktop we have started with two ways to interact with the cluster.\\nThe first is the ability to play local YAML files on your Kind (or any other Kubernetes!) cluster [1261](https://github.com/containers/podman-desktop/issues/1261). This allows you to take existing Kubernetes YAML definitions -\\nyour deployments, services, or other objects - and deploy it to the cluster.\\n\\n\\n\\nAs you deploy pods, they will automatically appear in the list of **Pods** [1263](https://github.com/containers/podman-desktop/issues/1263), allowing you to start, stop, and interact them just like pods running on Podman.\\n\\nOne of the most common uses is to deploy a container that you have been running on Podman, and this will fail\\nif the image is not available in Kind. To solve this we have made it easy to push images from\\nPodman to Kind [1448](https://github.com/containers/podman-desktop/issues/1448).\\n\\n![push-image-kind](img/podman-desktop-release-0.14/push-image-kind.png)\\n\\n### Kind Ingress\\n\\nIf you deploy a pod to Kind, you are also going to want to reach it! To do this you will need to install a load balancer or\\ningress controller so that the pod is accessible from outside the cluster. We made it easy to install the Contour ingress\\ncontroller while creating a Kind cluster [1675](https://github.com/containers/podman-desktop/issues/1675),\\nso if you created your cluster with Podman Desktop it is already there!\\n\\n![kind-ingress](img/podman-desktop-release-0.14/kind-ingress.png)\\n\\nWe have several other Kind and Kubernetes features planned to expand the supported scenarios, but hopefully this\\nmakes it easy to get started with Kind and shows where we\'re headed. As always, feedback is appreciated!\\n\\n### UI and UX improvements\\n\\n#### Updated Preferences\\n\\nThe ** Settings > Preferences** page has been updated with a new design [1913](https://github.com/containers/podman-desktop/pull/1913),\\nmaking it easier to see and change preferences. Changes are live, no more Update button.\\n\\n![preferences](https://user-images.githubusercontent.com/49404737/229498507-e754b55c-dcbd-486d-9ee3-a1fe3bed7271.gif)\\n\\n#### Telemetry Prompt\\n\\nThe prompt to enable or disable telemetry has been moved from its own dialog into the **Welcome** screen.\\n[1927](https://github.com/containers/podman-desktop/pull/1927)\\nThis is more usable, one less prompt, and solves a window-layering issue for some users!\\n\\n![telemetry prompt](https://user-images.githubusercontent.com/19958075/229577331-365a9a01-0426-4482-a95d-f5dfe39af90a.png)\\n\\n---\\n\\n## Other notable enhancements\\n\\n- Extension support for opening an external URL [2028](https://github.com/containers/podman-desktop/pull/2028) and\\n accessing the clipboard [2023](https://github.com/containers/podman-desktop/pull/2023)\\n\\n---\\n\\n## Documentation\\n\\nNaturally, we have a section in the documentation just for [Kind](https://podman-desktop.io/docs/kind).\\n\\n---\\n\\n## Notable bug fixes\\n\\n- Avoid a dialog box if unable to check for updates [2062](https://github.com/containers/podman-desktop/pull/2062)\\n- Unable to get to the Dashboard if Kind (or Kubernetes) cluster was not running [2052](https://github.com/containers/podman-desktop/issues/2052)\\n\\n---\\n\\n## Final notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A0.14.0).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"podman-desktop-release-0.13","metadata":{"permalink":"/blog/podman-desktop-release-0.13","source":"@site/blog/2023-03-29-release-0.13.md","title":"Release Notes - Podman Desktop 0.13","description":"Podman Desktop 0.13 has been released!","date":"2023-03-29T00:00:00.000Z","formattedDate":"March 29, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"},{"label":"compose","permalink":"/blog/tags/compose"}],"readingTime":3.155,"hasTruncateMarker":true,"authors":[{"name":"Tim deBoer","title":"Architect","url":"https://github.com/deboer-tim","imageURL":"https://github.com/deboer-tim.png","key":"deboer"}],"frontMatter":{"title":"Release Notes - Podman Desktop 0.13","description":"Podman Desktop 0.13 has been released!","slug":"podman-desktop-release-0.13","authors":["deboer"],"tags":["podman-desktop","release","kubernetes","compose"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 0.14","permalink":"/blog/podman-desktop-release-0.14"},"nextItem":{"title":"5 things to know about Podman Desktop for a Docker user","permalink":"/blog/5-things-to-know-for-a-docker-user"}},"content":"import ReactPlayer from \'react-player\'\\n\\nThis release note covers Podman Desktop 0.13 release changes.\\n\\n\x3c!--Main Features--\x3e\\n\\n- **Podman Version**: Podman 4.4.4 now included in Windows and Mac installers.\\n- **Compose**: Support for installing Docker Compose.\\n- **Extensions**: Improved extension support for Podman Desktop with additional capabilities.\\n- **UX and UI Improvements**: Welcome page, task manager, resources, and update alerts.\\n\\nPodman Desktop 0.13 is now available. [Click here to download it](/downloads)!\\n\\n![Podman-desktop-0-13-hero](img/podman-desktop-release-0.13/podman-desktop-release-0.13.png)\\n\\n\x3c!--truncate--\x3e\\n\\n---\\n\\n## Release details\\n\\n### Update to Podman v4.4.4\\n\\nPodman Desktop 0.13 embeds [Podman 4.4.4](https://github.com/containers/podman/releases/tag/v4.4.4) in\\nWindows and macOS installers [#1456](https://github.com/containers/podman-desktop/pull/1456).\\n\\n### Compose support\\n\\nYou can install Docker Compose from the Podman Desktop UI [#1578](https://github.com/containers/podman-desktop/pull/1578). This will allow you use Compose workflows using Podman.\\n\\n### Extensions\\n\\nTo make it easier to extend Podman Desktop we have:\\n\\n- Published the [Podman Desktop Extension API](https://www.npmjs.com/package/@podman-desktop/api) to npmjs [#1727](https://github.com/containers/podman-desktop/pull/1727)\\n- Documented [how to create, publish, and install your own extensions](https://podman-desktop.io/docs/extensions)\\n- Expanded the API for `QuickPickInput` [#1839](https://github.com/containers/podman-desktop/pull/1839)\\n\\n### UI and UX improvements\\n\\n#### Welcome page [#1726](https://github.com/containers/podman-desktop/pull/1726)\\n\\nThe first time every user starts Podman Desktop, they will see a welcome page:\\n\\n![welcome-page](https://user-images.githubusercontent.com/19958075/225682776-e016ba31-5bb9-41d5-87ed-f93caeb3fb84.png)\\n\\nNote that the Welcome page will only appear the first time you run Podman Desktop 0.13.0, and none of your settings or assets in Podman Desktop will be affected by it.\\nOver time, this page will be expanded to help with initial setup and configuration.\\n\\n#### New Task Manager [#1724](https://github.com/containers/podman-desktop/pull/1724)\\n\\nA new Task Manager has been added to the status bar to see the progress (or return to) long running tasks. To start with, building images [#1725](https://github.com/containers/podman-desktop/pull/1725) and Podman machine [#1742](https://github.com/containers/podman-desktop/pull/1742) are using the task manager.\\n\\n![task-manager](img/podman-desktop-release-0.13/task-manager.png)\\n\\n#### Updated Resources Settings [#1582](https://github.com/containers/podman-desktop/pull/1582)\\n\\nThe ** Settings > Resources** page has been updated with a new design, making it easier to see and control your providers from a single place.\\n\\n![resources](https://user-images.githubusercontent.com/49404737/221908815-595715fe-4c95-4087-89e0-45e5544ed5c9.gif)\\n\\nThe other settings pages have been updated for consistency with this new design.\\n\\n#### Update Alerts [#1827](https://github.com/containers/podman-desktop/pull/1827)\\n\\nA new alert button will appear in the status bar when future updates are available.\\n\\n\\n\\n#### Prune buttons [#1481](https://github.com/containers/podman-desktop/pull/1481), [#1482](https://github.com/containers/podman-desktop/pull/1482), [#1484](https://github.com/containers/podman-desktop/pull/1484)\\n\\nWe\'ve added buttons to prune unused volumes [#1481](https://github.com/containers/podman-desktop/pull/1481), images [#1482](https://github.com/containers/podman-desktop/pull/1482) and pods [#1484](https://github.com/containers/podman-desktop/pull/1484).\\n\\n![prune-image](img/podman-desktop-release-0.13/prune-image.png)\\n\\n---\\n\\n## Other notable enhancements\\n\\n- Kubernetes pods are now shown in the Pods view [#1312](https://github.com/containers/podman-desktop/pull/1312)\\n- Easy button to fix Docker compatibility mode on macOS [#1697](https://github.com/containers/podman-desktop/pull/1697)\\n- Display extension icons [#1058](https://github.com/containers/podman-desktop/pull/1058)\\n- API to cancel long running tasks [#1777](https://github.com/containers/podman-desktop/pull/1777)\\n\\n---\\n\\n## Documentation\\n\\nThe documentation has new content:\\n\\n- [How to create, publish, and install your own Podman Desktop extensions](https://podman-desktop.io/docs/extensions)\\n- [Using Compose](https://podman-desktop.io/docs/compose/podman-compose)\\n- [Restarting Kind](https://podman-desktop.io/docs/kind)\\n\\n---\\n\\n## Notable bug fixes\\n\\n- Periodically check and refresh Podman connection on Windows and Mac [#1662](https://github.com/containers/podman-desktop/pull/1662)\\n- Fix inconsistent Log view behaviour [#1710](https://github.com/containers/podman-desktop/pull/1710)\\n- Don\'t create route for regular Kubernetes clusters [#1707](https://github.com/containers/podman-desktop/pull/1707)\\n- Fix copy button on empty screen [#1804](https://github.com/containers/podman-desktop/pull/1804)\\n- Register extension tray items correctly [#1778](https://github.com/containers/podman-desktop/pull/1778) and handle updates [#1800](https://github.com/containers/podman-desktop/pull/1800)\\n\\n---\\n\\n## Community thank you\\n\\n\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make Podman Desktop 0.13 even better:\\n\\n- [`Tony Soloveyv`](https://github.com/Tony-Sol) in [#1605 - Fix directories inconsistency in `~/.local/share/`](https://github.com/containers/podman-desktop/pull/1605)\\n- [`Oleg`](https://github.com/RobotSail) in [#1567 - Check for Flatpak when calling command from exec](https://github.com/containers/podman-desktop/pull/1567)\\n- [`Christoph Blecker`](https://github.com/cblecker) in [#1556 - Fix: Hide dock icon on macOS if starting minimized](https://github.com/containers/podman-desktop/pull/1556)\\n- [`Paul Wright`](https://github.com/pwright) in [#1604 - Docs: correct syntax of kind doc](https://github.com/containers/podman-desktop/pull/1604)\\n- [`Denis Golovin`](https://github.com/dgolovin) in [#1790 - Feat: add EventEmitter class to extension API](https://github.com/containers/podman-desktop/pull/1790)\\n- [`Christophe Fergeau`](https://github.com/cfergeau) in [#1642 - Fix: Pod list \\"an pod\\" typing error](https://github.com/containers/podman-desktop/pull/1642)\\n\\n## Final notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A0.13.0).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"5-things-to-know-for-a-docker-user","metadata":{"permalink":"/blog/5-things-to-know-for-a-docker-user","source":"@site/blog/2023-03-24-5-things-to-know-for-a-docker-user.md","title":"5 things to know about Podman Desktop for a Docker user","description":"Important things to know when switching from Docker Desktop to Podman Desktop","date":"2023-03-24T00:00:00.000Z","formattedDate":"March 24, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"docker","permalink":"/blog/tags/docker"},{"label":"migrating","permalink":"/blog/tags/migrating"}],"readingTime":4.285,"hasTruncateMarker":true,"authors":[{"name":"Florent Benoit","title":"Maintainer of Podman Desktop","url":"https://github.com/benoitf","imageURL":"https://github.com/benoitf.png","key":"benoitf"}],"frontMatter":{"title":"5 things to know about Podman Desktop for a Docker user","description":"Important things to know when switching from Docker Desktop to Podman Desktop","slug":"5-things-to-know-for-a-docker-user","authors":["benoitf"],"tags":["podman-desktop","docker","migrating"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 0.13","permalink":"/blog/podman-desktop-release-0.13"},"nextItem":{"title":"Release Notes - Podman Desktop 0.12","permalink":"/blog/podman-desktop-release-0.12"}},"content":"The 5 things to know being a Docker user by using Podman Desktop:\\n\\n- **Use a single UI**: Podman Desktop works with several container engines, including Docker.\\n- The **compatibility mode**: How to ensure tools are working with Podman instead of Docker.\\n- **Compose** support: How to work with Compose files and Podman.\\n- **Kubernetes** support: How to use Kubernetes with Podman.\\n- **Security**: Use `rootless` mode or containers without root privileges.\\n\\n![5-things-to-know-for-a-docker-user-hero](img/5-things-to-know-for-a-docker-user/5-things-to-know-for-a-docker-user-hero.png)\\n\\n\x3c!--truncate--\x3e\\n\\n---\\n\\n## Use Podman Desktop to interact with containers running in Docker\\n\\nDocker Desktop provides a UI to interact with containers and images. But the UI depends on Docker API and it is not possible to use the UI with Docker and Podman at the same time.\\n\\nPodman Desktop is a multi-engine UI tool. The UI is compatible with the API of Docker and Podman. It means all containers and images from all the engines at the same time are visible in the UI.\\n\\nWhen migrating from Docker to Podman, you can use Podman Desktop to interact with containers running in Docker. Explore all commands and features of Podman Desktop and see all the resources from Docker.\\n\\n![Many container engines at the same time](img/5-things-to-know-for-a-docker-user/multiple-container-engines.png)\\n\\n## Docker compatibility mode\\n\\nUsing Podman with Podman Desktop or with the Podman CLI is straightforward. But some tools expect to find `docker` CLI or `docker.sock` socket. In this case, you have to use the compatibility mode of Podman.\\n\\n### Socket file compatibility\\n\\nThe socket compatibility mode is a feature of Podman that allows to bind the Podman socket under the Docker socket path.\\n\\nOn Windows the socket compatibility mode is always enabled by default. On macOS, by using the `.pkg installer` it is active by default. But when installing with `brew`, it will not be there because it requires some admin permissions.\\n\\nThat is not an issue because you can enable it by [invoking a CLI tool](https://podman-desktop.io/docs/migrating-from-docker/using-podman-mac-helper) that will setup the compatibility mode.\\n\\nFor example if you use [`TestContainers`](https://www.testcontainers.org/) in your Java project, you can use the compatibility mode to ensure that the tool will use Podman instead of Docker.\\n\\n### CLI compatibility\\n\\nIf you have scripts relying on `docker` CLI, you can use the compatibility mode to ensure that the tool is working with Podman instead of Docker.\\n\\nIf you have the `docker` CLI installed on your computer, you can use the socket file compatibility of docker to ensure that the tool is working with Podman engine instead of Docker.\\n\\nIf you do not have the `docker` CLI installed on your computer, you can [Create a script](https://podman-desktop.io/docs/migrating-from-docker/emulating-docker-cli-with-podman) called `docker` that will call the `podman` CLI\\n\\n**_NOTE:_** creating a shell prompt alias, for example `alias docker=podman`, will not work inside scripts that you call.\\n\\n## Compose\\n\\nAs a user of Docker, you might use `docker compose` (or `docker-compose`) to run some of your applications.\\n\\nFor now Podman does not include a `Compose` support directly in the CLI with a command `podman compose`.\\n\\n`Compose` can work with the Podman socket.\\n\\nBased on the compatibility mode (see [section about Docker compatibility mode](#docker-compatibility-mode)):\\n\\n- Enabled: you can use the `compose` binary to run your applications.\\n- Disabled: you need to [export the environment variable DOCKER_HOST](https://podman-desktop.io/docs/migrating-from-docker/using-the-docker_host-environment-variable) before running compose.\\n\\nYou can now use the `compose` binary to run your applications and it will use Podman engine.\\n\\nPodman Desktop has a `compose` extension that can fetch `compose` binary if not already available on the filesystem.\\n\\nPodman Desktop UI displays the containers created by `Compose` are in the same group.\\n\\n![Compose support in the UI](img/5-things-to-know-for-a-docker-user/compose-containers-in-ui.png)\\n\\n## Kubernetes\\n\\nIt is possible to start a Kubernetes cluster with Docker.\\n\\nPodman supports directly a subset of Kubernetes resources that you can use with `.yaml` files.\\n\\nFor example if you only want to create a `Pod` resource, you can use the `Play Kubernetes YAML` button from the `Containers` list screen with your `.yaml` file. No need to install or start a Kubernetes cluster.\\n\\n![Play Kubernetes YAML](img/5-things-to-know-for-a-docker-user/play-kubernetes-yaml.png)\\n\\nIt is possible to do the counter-part. Export the definition of a container or pod to a Kubernetes resource. You can use the `Generate kube` button from the kebab menu of a given container or pod.\\n\\n![Kubernetes generate](img/5-things-to-know-for-a-docker-user/kube-generate.png)\\n\\nPodman handles pods and in the Podman Desktop UI, you can see all the pods inside a Pod section. All containers inside the pod are in the same group.\\n\\n![Pods in the UI](img/5-things-to-know-for-a-docker-user/pods-in-ui.png)\\n\\n![Containers from pod](img/5-things-to-know-for-a-docker-user/containers-from-pod.png)\\n\\nAn experimental `kind` extension is bringing the creation of full-blown Kubernetes cluster with Podman.\\n\\n## Rootless mode\\n\\nOne of the difference of Docker and Podman is the way they handle containers. Docker requires root privileges to run containers by default. Podman can run containers without root privileges by default.\\n\\nIt means that for example, starting a container with a port < 1024 will not work. You need to use a port > 1024.\\n\\nIf you still need to create containers with a port < 1024, you can change the Podman machine configuration of the Podman Machine if you are on Windows or macOS.\\n\\nThe command is `podman machine set --rootful` to enable the execution with root privileges or `podman machine set --rootful=false` to switch back to rootless mode."},{"id":"podman-desktop-release-0.12","metadata":{"permalink":"/blog/podman-desktop-release-0.12","source":"@site/blog/2023-02-15-release-0.12.md","title":"Release Notes - Podman Desktop 0.12","description":"Podman Desktop 0.12 has been released!","date":"2023-02-15T00:00:00.000Z","formattedDate":"February 15, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"}],"readingTime":4.505,"hasTruncateMarker":true,"authors":[{"name":"Stevan Le Meur","title":"Product Manager","url":"https://github.com/slemeur","imageURL":"https://github.com/slemeur.png","key":"slemeur"}],"frontMatter":{"title":"Release Notes - Podman Desktop 0.12","description":"Podman Desktop 0.12 has been released!","slug":"podman-desktop-release-0.12","authors":["slemeur"],"tags":["podman-desktop","release","kubernetes"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"5 things to know about Podman Desktop for a Docker user","permalink":"/blog/5-things-to-know-for-a-docker-user"},"nextItem":{"title":"Release Notes - Podman Desktop 0.11","permalink":"/blog/podman-desktop-release-0.11"}},"content":"import ReactPlayer from \'react-player\'\\n\\nThis release note covers Podman Desktop 0.12 release changes.\\n\\n\x3c!--Main Features--\x3e\\n\\n- **Podman Version**: Podman 4.4.1 now included in Windows and Mac installers.\\n- **Containers Configuration**: Configure port mappings for an image without exported ports.\\n- **Windows Home Support**: Podman Desktop now supports Windows Home Edition.\\n- **Start minimized**: Option to start Podman Desktop minimized to system tray.\\n- **UX and UI Improvements**: Consistent actions, placeholder for logs, unified icons and others.\\n\\nPodman Desktop 0.12 is now available. [Click here to download it](/downloads)!\\n\\n![podman-desktop-0-12-hero](img/podman-desktop-release-0.12/podman-desktop-release-0.12.png)\\n\\n\x3c!--truncate--\x3e\\n\\n---\\n\\n## Release Details\\n\\n### Update to Podman v4.4.1 [#1456](https://github.com/containers/podman-desktop/pull/1456)\\n\\nPodman Desktop 0.12 embeds [Podman 4.4.1](https://github.com/containers/podman/releases/tag/v4.4.1) in Windows and macOS installers. Make sure to upgrade to benefit from the latest Podman features and bug fixes.\\n\\n### Configuring port mappings when an image has no exported port [#1265](https://github.com/containers/podman-desktop/pull/1265)\\n\\nWith the latest update, users can now add multiple local-to-remote port mappings when starting a container from an image that has no exported ports. This feature provides users with the flexibility to specify which ports on their local machine should map to which ports on the container, even if the container does not have any exported ports by default.\\n\\n![port-mapping](https://user-images.githubusercontent.com/49404737/215112797-86dcf3f0-121a-487e-a71f-ad41e91f93da.gif)\\n\\n### Installing Podman Desktop on Windows Home Edition [#1268](https://github.com/containers/podman-desktop/pull/1268)\\n\\nPodman Desktop 0.12 offers the ability to be installed on Windows Home Edition. The mechanism uses Virtual Machine Platform detection, instead of hyper-v. WSL2 is still requires but can be installed along with the installation process.\\n\\n![install-windows-home-edition-2](https://user-images.githubusercontent.com/436777/215121429-7c757aaa-a838-43db-98a2-78ad368f407e.png)\\n\\n### Option to automatically minimize Podman Desktop on login [#1374](https://github.com/containers/podman-desktop/pull/1374)\\n\\nPodman Desktop now provides a \\"start minimized\\" option when users log in onto the laptop. This option, available from the application\'s settings, can be useful if users want to automatically launch Podman Desktop at log in, but prefer not to have the window visible on the screen. With this feature, you can ensure that Podman Desktop is up and running in the background without any interruption to your workflows.\\n\\n- Go to ** Settings > Preferences > Login: Minimize** to activate the option.\\n\\n![minimize-on-login](https://user-images.githubusercontent.com/6422176/216651424-bcf756fd-7554-4b24-a838-e3e2f798fe6e.png)\\n\\n### UI and UX Improvements\\n\\n#### Improved actions consistency [#1225](https://github.com/containers/podman-desktop/pull/1225)\\n\\nActions displayed in the list pages for Images and Containers have been reviewed and made consistent between other pages.\\n\\n![action-consistency-1](https://user-images.githubusercontent.com/19958075/214104678-2d4148d7-484e-41f9-9da9-aecee328ae2b.png)\\n\\nActions displayed in the header of the container\'s details page have been improved so that the actions are always displayed in the same order.\\n\\n![action-consistency-2](https://user-images.githubusercontent.com/19958075/214104663-64fa0601-bb79-49bf-8226-6a78a88d3622.png)\\n\\n#### Consistent status icons for Pods, Containers, Images and Volumes [#1326](https://github.com/containers/podman-desktop/pull/1326), [#1377](https://github.com/containers/podman-desktop/pull/1377), [#1459](https://github.com/containers/podman-desktop/pull/1459) and [#1245](https://github.com/containers/podman-desktop/pull/1245)\\n\\nThe status icons for Pods, Containers, Images, and Volumes have been unified and use consistent states.\\n\\n![pods-status-icon](https://user-images.githubusercontent.com/19958075/216671859-bdd8dca4-56b7-40a8-961a-dcb6e01be61e.png)\\n\\nIcons in empty screens have been updated to use the same consistent SVG icon as the status icons.\\n\\n![empty-screen-2](https://user-images.githubusercontent.com/436777/214577726-f4cfde7b-017a-499d-a2a9-e50d455ffaf0.png)\\n\\n#### Placeholder when logs for containers are being fetched [#1353](https://github.com/containers/podman-desktop/pull/1353)\\n\\nA placeholder is now displayed when logs are being fetched.\\n![placeholder-loading-logs](https://user-images.githubusercontent.com/49404737/216952505-899308ae-183e-487a-b6e5-28832a0b6452.gif)\\n\\n#### Fixed alignment in badges from the navigation sidebar [#1357](https://github.com/containers/podman-desktop/pull/1357)\\n\\nBadges in the sidebar are now aligned with the title of the section.\\n\\n![alignement-badges](https://user-images.githubusercontent.com/49404737/216336502-2a34dea3-fd41-4184-8cfe-9226d70da070.png)\\n\\n#### Enable/disable open browser action based on container state [#1395](https://github.com/containers/podman-desktop/pull/1395) and [#1397](https://github.com/containers/podman-desktop/pull/1397)\\n\\nThe action to open the browser if a port is opened in a container, is now disabled when the container is stopped. It is also hidden in the kebab menu.\\n\\n![enable-disable-container-actions](https://user-images.githubusercontent.com/49404737/217284414-1bdc820b-30a8-485e-b0f9-485229026696.gif)\\n\\n---\\n\\n## Other Notable Enhancements\\n\\n- Display extension icons [#1058](https://github.com/containers/podman-desktop/pull/1058)\\n- Solid Icons [#1267](https://github.com/containers/podman-desktop/pull/1276)\\n- Differentiate icons compared to status icons [#1268](https://github.com/containers/podman-desktop/pull/1298)\\n- Refactors window initializing [#1309](https://github.com/containers/podman-desktop/pull/1309)\\n- Change window creation background color to dark [#1310](https://github.com/containers/podman-desktop/pull/1310)\\n- Use Podman `machine inspect` to read the address to connect to the Podman machine [#1364](https://github.com/containers/podman-desktop/pull/1364)\\n- Update the editor content when the pod name changes, and disable the deploy button when empty [#1403](https://github.com/containers/podman-desktop/pull/1403)\\n- Ability to manually set color of tray icon for Windows and Linux [#1243](https://github.com/containers/podman-desktop/pull/1243)\\n- Better UI feedback when starting pods [#1242](https://github.com/containers/podman-desktop/pull/1242)\\n\\n---\\n\\n## Documentation\\n\\nThe documentation had many editorial reviews, and new content.\\n\\n- [Link to simple WSL2 installation instructions](/docs/installation/windows-install)\\n- [Refresh Windows Installation](/docs/installation/windows-install)\\n- [Revamped installation introduction](/docs/installation)\\n- [Reorganized Linux installation](/docs/installation/linux-install)\\n- [Installing Podman with OpenShift Local](/docs/podman/installing-podman-with-openshift-local-on-windows)\\n- [Installing Podman Desktop on Windows in a restricted environment](/docs/installation/windows-install/installing-podman-desktop-and-podman-in-a-restricted-environment)\\n- [Fixed documentation on `podman-mac-helper` setup](/docs/migrating-from-docker/using-podman-mac-helper)\\n\\n---\\n\\n## Notable bug fixes\\n\\n- Fixed handling path with spaces on Windows when installing Podman [#1270](https://github.com/containers/podman-desktop/pull/1270)\\n- Removed padding from SVG icons [#1253](https://github.com/containers/podman-desktop/pull/1253)\\n- Website: fixed download links for Windows and macOS binaries [#1255](https://github.com/containers/podman-desktop/pull/1255)\\n- Fixed prettier commands on Windows [#1266](https://github.com/containers/podman-desktop/pull/1267)\\n- Fixed new xterm instance spawn when clicking the logs route [#1344](https://github.com/containers/podman-desktop/pull/1344)\\n- Fixed need to wait that telemetry has been initialized before proceeding [#1373](https://github.com/containers/podman-desktop/pull/1373)\\n- Fixed new xterm instance spawn when clicking the logs route in pod details[#1393](https://github.com/containers/podman-desktop/pull/1393)\\n- Fixed stop spinner if image cannot be retrieved [#1394](https://github.com/containers/podman-desktop/pull/1394)\\n- Fixed escape command with quotes only for Windows [#1462](https://github.com/containers/podman-desktop/pull/1462)\\n- Fixed random CRC status change [#1420](https://github.com/containers/podman-desktop/pull/1420)\\n\\n---\\n\\n## Community Thank You\\n\\n\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make Podman Desktop 0.12 even better:\\n\\n- [Philipp Wagner](https://github.com/imphil) in [#1274 - Link to simple WSL2 installation instructions](https://github.com/containers/podman-desktop/pull/1274)\\n- [Arthur S](https://github.com/arixmkii) in [#1364 - Get podman machine socketPath from podman machine inspect first](https://github.com/containers/podman-desktop/pull/1364)\\n- [Mitch West](https://github.com/Mitch9378) in [#1428 - Fix old documentation for \'podman-mac-helper setup\'](https://github.com/containers/podman-desktop/pull/1428)\\n\\n## Final Notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A0.12.0).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"podman-desktop-release-0.11","metadata":{"permalink":"/blog/podman-desktop-release-0.11","source":"@site/blog/2023-01-18-release-0.11.md","title":"Release Notes - Podman Desktop 0.11","description":"Podman Desktop 0.11 has been released!","date":"2023-01-18T00:00:00.000Z","formattedDate":"January 18, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"}],"readingTime":9.43,"hasTruncateMarker":true,"authors":[{"name":"Stevan Le Meur","title":"Product Manager","url":"https://github.com/slemeur","imageURL":"https://github.com/slemeur.png","key":"slemeur"}],"frontMatter":{"title":"Release Notes - Podman Desktop 0.11","description":"Podman Desktop 0.11 has been released!","slug":"podman-desktop-release-0.11","authors":["slemeur"],"tags":["podman-desktop","release","kubernetes"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 0.12","permalink":"/blog/podman-desktop-release-0.12"},"nextItem":{"title":"Release Notes - Podman Desktop 0.10","permalink":"/blog/podman-desktop-release-0.10"}},"content":"import ReactPlayer from \'react-player\'\\n\\nThis release note covers Podman Desktop 0.11 release changes.\\n\\n- **Air-Gapped Installation**: New all-in-one binaries for air-gapped installation.\\n- **Feedback**: Submit feedback directly from Podman Desktop.\\n- **Docker Compatibility Mode**: Information about the Docker compatibility mode.\\n- **Proxy Setting**: Toggle on/off the proxy setting.\\n- **Deploy to Kubernetes**: Select the namespace to deploy to Kubernetes.\\n- **Registry Configuration**: Simplified registry configuration for well known registries.\\n- **UX/UI Improvements**: View pod\'s container logs, better visual feedback, configurable editor font size, and more.\\n\\nPodman Desktop 0.11 is now available. [Click here to download it](/downloads)!\\n\\n\x3c!--truncate--\x3e\\n\\n---\\n\\n## Release Details\\n\\n### Air-Gapped installation [#1104](https://github.com/containers/podman-desktop/pull/1104) [#1120](https://github.com/containers/podman-desktop/pull/1120)\\n\\nFor users who are not able to connect to the internet, a new all-in-one (airgap) binary that includes the Podman Desktop application and the Podman binaries is now available for both Mac and Windows. When initializing a new Podman machine using all-in-one binaries, it\'ll use the embedded files and not grab them from internet:\\n\\n- on Mac, it embeds the qemu FCOS binaries.\\n- on Windows, it embeds the WSL binary.\\n\\nTo differentiate the air-gapped binaries from the regular ones, you can check the artifactname, they\'re containing \'airgap\' and are bigger.\\nPlease note, that those binaries are available only on releases and not the pre-releases.\\n\\nThere is also an optional way to provide a custom Podman machine image in the create machine form. By providing the path to the image you want, Podman Desktop will create a machine with that image. Leaving the field empty will use the default image (the one included in the binary).\\n\\n\\n\\n### Feedback within Podman Desktop [#1078](https://github.com/containers/podman-desktop/pull/1078)\\n\\nSubmitting feedback on Podman Desktop is getting easier as it is possible directly within the tool. This will help to get more information about the issues you are facing and will help us to improve the tool.\\n\\n\\n\\nPlease feel free to submit any feedback you have, we are looking forward to hearing from you!\\n\\n### Docker compatibility mode [#1047](https://github.com/containers/podman-desktop/pull/1047)\\n\\nThe Docker compatibility mode is a feature that allows to use Podman as a drop-in replacement for Docker. It relies on the Docker socket helper provided with Podman and automatically handle the local setup of Podman path to the Docker socket. Tools like [Testcontainers](https://www.testcontainers.org/) or others are relying on this to communicate to the container engine.\\n\\nIn this new version of Podman Desktop, we are now providing information to the user about the status of this compatibility mode directly on the dashboard page. The way it works is the following:\\n\\n- When Docker is running: the socket is pointing to Docker.\\n- When Podman is starting and Docker is not running: the docker API socket will use Podman.\\n\\nIn case the compatibility mode is not activated, new documentation on how to activate it and how to easily switch between Docker and Podman is available here: [https://podman-desktop.io/docs/migrating-from-docker](https://podman-desktop.io/docs/migrating-from-docker).\\n\\nThis is a warning displayed for Windows users:\\n![windows-docker-compatibility](https://user-images.githubusercontent.com/436777/209305744-9056addd-f122-4f75-9e03-ad27a0109375.png)\\n\\nThis is the warning for Mac users:\\n![mac-docker-compatibility](https://user-images.githubusercontent.com/6422176/207964861-a9c1f72c-89d6-4816-beab-397af4125620.png)\\n\\n### Allow to toggle on/off the proxy setting [#983](https://github.com/containers/podman-desktop/pull/983)\\n\\nIn some context, users need the ability to disable and re-enable the proxy configuration very quickly, without having to entirely reconfigure it. This is now possible from the Podman Desktop settings page, where a toggle to enable/disable the proxy configuration has been added.\\n\\n\\n\\nNote: extensions can read this information and then update the proxy configuration.\\n\\n### Namespace selection for deploy to Kubernetes [#1008](https://github.com/containers/podman-desktop/pull/1008)\\n\\nA new dropdown menu has been added to the deploy to Kubernetes screen to allow selecting the namespace to deploy to. Defaults to defaultnamespace, if unable to get any from kube_client module.\\n\\nIf the user have set `kubectl config set-context --current --namespace=NAMESPACE` it honors that as the chosen value.\\n\\n![deploy-kubernetes-namespace](https://user-images.githubusercontent.com/7339809/206688886-095e4f15-42ae-4a0a-b1c6-ae4b547fcdfb.gif)\\n\\n### Configure Podman binary path [#941](https://github.com/containers/podman-desktop/pull/941)\\n\\nUsers might use a custom path to the podman binary. An option within settings (Settings -> Preferences) to allow providing an additional path to Podman binary has been added.\\nThis is useful for users who have installed Podman using a package manager and want to use the binary provided by the package manager.\\nSee: [Unable to set custom binary path for Podman on macOS](/docs/troubleshooting/troubleshooting-podman-on-macos#unable-to-set-custom-binary-path-for-podman-on-macos)\\n![custom-path](https://user-images.githubusercontent.com/6422176/204832063-5858065a-2fc3-49de-8d23-3b99b7d10dbf.png)\\n\\n### Provide pre-defined registries [#1201](https://github.com/containers/podman-desktop/pull/1201)\\n\\nThe experience of configuring a registry is getting simplified for the most popular ones. The user will be able to select a registry from a pre-defined list and will only have to provide the username and password. The following registries will be pre-defined:\\n\\n- Dockerhub\\n- Red Hat Quay\\n- GitHub\\n- IBM Container Registry\\n- Google Container Registry\\n\\n\\n\\n### UI/UX Improvements\\n\\n#### View Pods logs [#1122](https://github.com/containers/podman-desktop/pull/1122)\\n\\nThe pods details view provides the ability to view the logs of each containers that might be running in a pod. Moreover, as it can also be hard to scan and identify which container is producing which output, we appended the container name at the beginning of each output and differentiate each container with a different color.\\n\\n![pods-logs](https://user-images.githubusercontent.com/6422176/211024673-eee9bad8-1b0c-4446-b8d1-97a226282c4d.png)\\n\\n#### Improved feedback when clicking on container list action icons [#1150](https://github.com/containers/podman-desktop/pull/1150) [#1161](https://github.com/containers/podman-desktop/pull/1161)\\n\\nWhen starting/stopping or deleting a container, a spinner is now displayed. In case of error, a message indicating that the action failed will also be better indicated.\\n\\n\\n\\nFor containers that exit immediately or short-lived containers, the feedback is also improved and include report of error now provide a better feedback to the user [#1161](https://github.com/containers/podman-desktop/pull/1161).\\n\\n\\n\\n#### Allows to change the default font size for the editor [#1160](https://github.com/containers/podman-desktop/pull/1160)\\n\\nAn editor is used in several screens of Podman Desktop, from the inspect screen to container\'s outputs and Kubernetes YAML. The default font size is 10 pixels. It\'s now possible to adjust the font size to the one the one you prefer. This setting is persisted and will be used for all the editors of Podman Desktop and available from the preferences page (Settings -> Preferences).\\n\\n\\n\\n#### Keep expanded state of pods when refreshing containers [#1042](https://github.com/containers/podman-desktop/pull/1042)\\n\\nWhen switching from different screens of the application or simply refreshing the list of containers, the expanded state of each item in the list is now persisted and will be properly restored.\\n\\n\\n\\n#### Click on the Pod name redirects to the Pod details page [#1159](https://github.com/containers/podman-desktop/pull/1159)\\n\\nThe list of containers also displays pods, now clicking on the pod name directly redirects to the Pod details page.\\n\\n\\n\\n#### Improved styles of buttons for actions [#984](https://github.com/containers/podman-desktop/pull/984)\\n\\nThe style of the buttons for actions on item in the list of in details pages have been improved. The background has been removed, but to make the hover state more visible, the \\"hover\\" circle is visible and the icon\'s color is also changing.\\n\\nOn lists:\\n![list-actions](https://user-images.githubusercontent.com/6422176/205979121-b49a0ddf-03bb-4a4d-8d12-bc8d0bd52387.png)\\n\\nOn details pages:\\n![details-actions](https://user-images.githubusercontent.com/6422176/205979123-ea420b17-e834-4029-82eb-22949889eee9.png)\\n\\n#### Improved alignments in pages with lists [#1182](https://github.com/containers/podman-desktop/pull/1182)\\n\\nThe alignment of the items in the list of containers and pods have been improved. The header of each columns are now aligned with the text. and the actions icons are now aligned with the top of the text.\\n\\n![list-actions](https://user-images.githubusercontent.com/19958075/212712580-096fd090-0beb-40a4-8dc6-b3fdc5e81e35.png)\\n\\n---\\n\\n## Other Notable Enhancements\\n\\n- Statistics area in container details are always shown. ([#1131](https://github.com/containers/podman-desktop/pull/1131))\\n- Add more descriptive wording and more information to extensions. ([#985](https://github.com/containers/podman-desktop/pull/985))\\n- Allow to install on-the fly Podman Desktop extensions using an OCI image. ([#1187](https://github.com/containers/podman-desktop/pull/1187))\\n- Display correctly non-multiplexed stream in logs (when using non interactive mode). ([#1197](https://github.com/containers/podman-desktop/pull/1197))\\n- Font changed from white to gray for non-name sections (creation date, size). ([#1206](https://github.com/containers/podman-desktop/pull/1206))\\n- Add Help/about menu for macOS/Windows/Linux. ([#1207](https://github.com/containers/podman-desktop/pull/1207))\\n\\n---\\n\\n## Documentation\\n\\nComing with this new version of Podman Desktop, the documentation has been getting attention (with number of editorial reviews) and new content have been added.\\n\\nContent for helping users to migrate from Docker to Podman has been added:\\n\\n- [Using the `podman-mac-helper` tool to migrate from Docker to Podman on macOS](https://github.com/containers/podman-desktop/pull/1088)\\n- [better identify podman-mac-helper verification steps](https://github.com/containers/podman-desktop/pull/1129)\\n- [Emulating Docker CLI using Podman to migrate from Docker to Podman](https://github.com/containers/podman-desktop/pull/1143)\\n- [Migrating from Docker section](https://github.com/containers/podman-desktop/pull/1146)\\n- [Verifying that your tools are using Podman](https://github.com/containers/podman-desktop/pull/1152)\\n- [Importing saved containers](https://github.com/containers/podman-desktop/pull/1144)\\n\\nSeveral of other improvements have been made to the documentation and the website:\\n\\n- [Troubleshooting for Apple Silicon and brew x86_64 installs](https://github.com/containers/podman-desktop/pull/962)\\n- [Change text of custom binary location, add docs](https://github.com/containers/podman-desktop/pull/972)\\n- [Silent install option for windows](https://github.com/containers/podman-desktop/pull/974)\\n- [Upgrade to vite v4 and rollup v3](https://github.com/containers/podman-desktop/pull/1079)\\n- [Refreshing documentation on installing on Linux](https://github.com/containers/podman-desktop/pull/1118)\\n- [Identify the shell sessions in Installing on Linux](https://github.com/containers/podman-desktop/pull/1130)\\n- [Website: the linux binary is not a source, it should be promoted as a binary](https://github.com/containers/podman-desktop/pull/1133)\\n- [Introducing tabs for operatings systems and container engines](https://github.com/containers/podman-desktop/pull/1162)\\n- [website: In the landing page, update plugins and container engines lists](https://github.com/containers/podman-desktop/pull/1165)\\n- [Document where code is located within Podman Desktop](https://github.com/containers/podman-desktop/pull/1163)\\n- [(extension-api): Documentation on how to write an extension and use the api](https://github.com/containers/podman-desktop/pull/1172)\\n\\n---\\n\\n## Notable bug fixes\\n\\n- Update to v0.3.2 Docker Desktop API for extensions - [#1070](https://github.com/containers/podman-desktop/pull/1070)\\n- Updated link to the Matrix room - [#1076](https://github.com/containers/podman-desktop/pull/1076)\\n- Report error when container name already exists - [#1142](https://github.com/containers/podman-desktop/pull/1142)\\n- Fixed connectivity to the Podman machine when the generated socket length is greater than 104 characters in MacOS - [#1145](https://github.com/containers/podman-desktop/pull/1145)\\n- Do not use long calls for external clients - [#1151](https://github.com/containers/podman-desktop/pull/1151)\\n- Invalid name/tag for images with registries using a different port - [#1127](https://github.com/containers/podman-desktop/pull/1127)\\n- Invalid badge count for images when two images have the same tag - [#1124](https://github.com/containers/podman-desktop/pull/1124)\\n- Fixed detection of WSL2 - [#981](https://github.com/containers/podman-desktop/pull/981)\\n- Handle invalid kubeconfig files instead of crashing - [#953](https://github.com/containers/podman-desktop/pull/953)\\n- Removed redundant actions from details pages - [#1200](https://github.com/containers/podman-desktop/pull/1200)\\n- Fixed registry URL not aligned with header - [#1205](https://github.com/containers/podman-desktop/pull/1205)\\n- Moved SVGs to reusable components - [#1211](https://github.com/containers/podman-desktop/pull/1211)\\n\\n**Extensions API has also been improved in this new release:**\\n\\n- (extension-api): Allows to register a factory for kubernetes connection objects (like for container connections) - [#1040](https://github.com/containers/podman-desktop/pull/1040)\\n- (extension-api): List or inspect containers, be notified on events - [#1041](https://github.com/containers/podman-desktop/pull/1041)\\n- (extension-api): Allows to get provider notification - [#1045](https://github.com/containers/podman-desktop/pull/1045)\\n- (dd-extension-api): Implement toast API - [#1154](https://github.com/containers/podman-desktop/pull/1154)\\n- (extension-api): Moved extension properties to preferences - [#948](https://github.com/containers/podman-desktop/pull/948)\\n- (dd-extension-api): Added open dev console on dd webview in development mode - [#1071](https://github.com/containers/podman-desktop/pull/1071)\\n- (extension-api): Added notes on extension and frameworks/tooling of Podman Desktop - [#1166](https://github.com/containers/podman-desktop/pull/1166)\\n- (extension-api): Documentation on how to write an extension and use the api - [#1172](https://github.com/containers/podman-desktop/pull/1172)\\n- (dd-extension-api): DD extensions should see only minimal information on containers - [#1191](https://github.com/containers/podman-desktop/pull/1191)\\n\\n---\\n\\n## Community Thank You\\n\\n\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make Podman Desktop 0.11 even better:\\n\\n- [Emmanuel Bernard](https://github.com/emmanuelbernard) in [#962 - Troubleshooting for Apple Silicon](https://github.com/containers/podman-desktop/pull/962)\\n- [Michael Prankl](https://github.com/eidottermihi) in [#974 - Silent install option for windows](https://github.com/containers/podman-desktop/pull/974)\\n- [Endre Lervik](https://github.com/elervik) in [#1008 - Namespace selection for deploy to kubernetes](https://github.com/containers/podman-desktop/pull/1008)\\n- [Evan FP](https://github.com/evanfpearson) in [#1145 - fixed socket path length error](https://github.com/containers/podman-desktop/pull/1145)\\n- [Lokesh Mandvekar](https://github.com/lsm5) in [#956 - add repository key to package.json](https://github.com/containers/podman-desktop/pull/956)\\n- [Jean Fran\xe7ois Maury](https://github.com/jeffmaury) in [#1194 - Cannot create Kind cluster on Windows](https://github.com/containers/podman-desktop/pull/1194)\\n\\n## Final Notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A0.11.0).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"podman-desktop-release-0.10","metadata":{"permalink":"/blog/podman-desktop-release-0.10","source":"@site/blog/2022-12-01-release-0.10-blog.md","title":"Release Notes - Podman Desktop 0.10","description":"Podman Desktop 0.10 has been released! New Create Container Wizard, improved Kubernetes workflows, revamped registries configuration, and more!","date":"2022-12-01T00:00:00.000Z","formattedDate":"December 1, 2022","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"}],"readingTime":4.115,"hasTruncateMarker":true,"authors":[{"name":"Dev Kumar","title":"Technical PMM Intern","url":"https://github.com/deekay2310","imageURL":"https://github.com/deekay2310.png","key":"deekay2310"}],"frontMatter":{"title":"Release Notes - Podman Desktop 0.10","description":"Podman Desktop 0.10 has been released! New Create Container Wizard, improved Kubernetes workflows, revamped registries configuration, and more!","slug":"podman-desktop-release-0.10","authors":["deekay2310"],"tags":["podman-desktop","release","kubernetes"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 0.11","permalink":"/blog/podman-desktop-release-0.11"},"nextItem":{"title":"Build & run Podman Desktop in a DevContainer","permalink":"/blog/develop-using-devcontainer"}},"content":"This release note covers Podman Desktop 0.10 release changes.\\n\\n- **Containers Configuration**: Container creation wizzard allowing to define environment variables, networking and more configuration options.\\n- **Kubernetes Improvements**: Play Kubernetes YAML, custom Kubeconfig path support, reload of kube context.\\n- **Registries Configuration**: Revamped registries configuration UI.\\n- **Podman Version**: Podman 4.3.1 now included in Windows and Mac installers.\\n- **UX/UI Improvements**: Improved lists, better contrast, and more.\\n\\nPodman Desktop 0.10 is now available. [Click here to download it](/downloads)!\\n\\n\x3c!--truncate--\x3e\\n\\n---\\n\\n## Release Details\\n\\n### New configuration wizzard to create containers ([#773](https://github.com/containers/podman-desktop/pull/773))\\n\\nUntil now, we could only specify port binding when building images to start containers. The create container wizzard now includes several options enabling configuring volumes, environment variables, restart policy and settings on networking and security. It is also possible to reuse an existing (and already configured) a network when creating containers.\\n\\n![new container creation wizard](img/podman-desktop-release-0.10/new_container_creation_wizard.gif)\\n\\n### Kubernetes Capabilities Improvements\\n\\n**Custom Kubeconfig file path ([#780](https://github.com/containers/podman-desktop/pull/780))**\\n\\nKubeconfig path location is now configurable from ** Settings > Preferences > Kubernetes: Kubeconfig** and can be set to a custom path. By default, Podman Desktop use the path `$HOME/.kube/config` for the Kubeconfig file.\\n\\n![custom kubeconfig file path](img/podman-desktop-release-0.10/custom-kubeconfig.png)\\n\\n**Play Kubernetes YAML from the Pods list ([#739](https://github.com/containers/podman-desktop/pull/739))**\\n\\nPodman Desktop enables to play existing Kubernetes YAML files. This is now available from `Play Kubernetes YAML` button added to the Pods list, in addition to the Containers list.\\n\\n![play k8s yaml](img/podman-desktop-release-0.10/play_k8s_yaml.gif)\\n\\n**Kube context automatically reloaded when updated ([#813](https://github.com/containers/podman-desktop/pull/813))**\\n\\nAny change to the kube context will now be detected by Podman Desktop in its running state. The system tray, allowing to select which Kubernetes environment to work with, will now reload the kube context without restarting Podman Desktop.\\n\\n### Revamped Container Registries UI ([#446](https://github.com/containers/podman-desktop/issues/446))\\n\\nThe registries configuration UI has been revamped. Instead of using tiles for displaying the registries, now it uses a list where each registry can be added or edited directly in the list. The kebab menu provides options to edit or remove a registry from the list.\\n\\n![registries](img/podman-desktop-release-0.10/registries.png)\\n\\n### Update to Podman 4.3.1 ([#913](https://github.com/containers/podman-desktop/issues/913))\\n\\nPodman Desktop 0.10 is now embedding [Podman 4.3.1](https://github.com/containers/podman/releases/tag/v4.3.1) in Windows and macOS installers.\\n\\n### UI/UX Improvements\\n\\n**Improved lists UX ([#877](https://github.com/containers/podman-desktop/pull/877))**\\n\\nTo reduce the width used in the lists when displaying all the icons, main actions icons are now always displayed (before it was on hover) and the secondary actions are displayed in a kebab menu. For example Start/Stop and delete are primary actions while open the browser, inspect, generate kube yaml, etc. are secondary options.\\n\\n![kebab menu](img/podman-desktop-release-0.10/kebab-menu.png)\\n\\n**Delay appearance of text in navbar ([#767](https://github.com/containers/podman-desktop/pull/767))**\\n\\nWhen minimizing or expanding the navbar, the text was overlapping for a few second the page. Now it\'s displayed with a fading animation.\\n\\n**Selected state: better text color contrast ([#802](https://github.com/containers/podman-desktop/pull/802))**\\n\\nIn the `Images` page, on hover for both the image and the name column, the text contrast has been increased for better visibility: violet indicates that you have selected it.\\n\\n![text color when hover](img/podman-desktop-release-0.10/text-color.gif)\\n\\n**On Linux and Windows, the menu bar is now hidden by default ([#668](https://github.com/containers/podman-desktop/pull/668))**\\n\\nWith this change, the menu bar looks more integrated to the Operating System. The menu can appear if you hit the `Alt` key. Thanks to [Dylan M. Taylor](https://github.com/dylanmtaylor) for contributing to fix this.\\n\\n**Exit when clicking on the close icon of the dashboard on Linux ([#671](https://github.com/containers/podman-desktop/pull/671))**\\n\\nFor most users on Linux, there is no tray icon support. In this situation, when closed, Podman Desktop continues to run in background. [Dylan M. Taylor](https://github.com/dylanmtaylor) added a property to exit the app by default when clicking on the close icon. For people having tray icon support or with the desire of a different behavior, it is possible to disable it from the Settings.\\n\\n---\\n\\n## Other Notable Enhancements\\n\\n- Rename `Started` into `Age` in Containers list.([#878](https://github.com/containers/podman-desktop/pull/878))\\n- Added domain validation when adding a registry. ([#838](https://github.com/containers/podman-desktop/pull/838))\\n- Provided a consistent behavior with Podman CLI, `podman-machine-default` is now the default name when creating a Podman machine from Podman Desktop. ([#775](https://github.com/containers/podman-desktop/pull/775))\\n\\n---\\n\\n## Notable bug fixes\\n\\n- Fixed error handling when pulling images of Desktop Extensions. ([#782](https://github.com/containers/podman-desktop/pull/782))\\n- Fixed use of the full height of the screen when displaying log in the details of a container. ([#946](https://github.com/containers/podman-desktop/discussions/946))\\n- Fixed First start of Podman Desktop on flatpak was not seeing the podman engine ([#860](https://github.com/containers/podman-desktop/pull/860))\\n\\n## Community Thank You\\n\\n\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make Podman Desktop 0.10 even better:\\n\\n- [Dylan M. Taylor](https://github.com/dylanmtaylor) in [#671](https://github.com/containers/podman-desktop/pull/671)\\n- [Fionn Kelleher](https://github.com/osslate) in [#713](https://github.com/containers/podman-desktop/pull/713)\\n- [Rostislav Svoboda](https://github.com/rsvoboda) in [#737](https://github.com/containers/podman-desktop/pull/737)\\n- [Denis Shemanaev](https://github.com/shemanaev) in [#783](https://github.com/containers/podman-desktop/pull/783)\\n- [Fabrice Flore-Th\xe9bault](https://github.com/themr0c) in [#856](https://github.com/containers/podman-desktop/pull/856)\\n- [Kevin](https://github.com/KevinAtSesam) in [#864](https://github.com/containers/podman-desktop/pull/864)\\n- [@sfrunza13](https://github.com/sfrunza13) in [#872](https://github.com/containers/podman-desktop/pull/872)\\n- [Anjan Nath](https://github.com/anjannath) in [#918](https://github.com/containers/podman-desktop/pull/918)\\n\\n## Final Notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A0.10.0).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"develop-using-devcontainer","metadata":{"permalink":"/blog/develop-using-devcontainer","source":"@site/blog/2022-11-17-develop-podman-using-codespaces.md","title":"Build & run Podman Desktop in a DevContainer","description":"Develop Podman Desktop using a DevContainer locally or using GitHub Codespaces.","date":"2022-11-17T00:00:00.000Z","formattedDate":"November 17, 2022","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"devcontainer","permalink":"/blog/tags/devcontainer"},{"label":"codespaces","permalink":"/blog/tags/codespaces"}],"readingTime":6.985,"hasTruncateMarker":true,"authors":[{"name":"Florent Benoit","title":"Maintainer of Podman Desktop","url":"https://github.com/benoitf","imageURL":"https://github.com/benoitf.png","key":"benoitf"}],"frontMatter":{"title":"Build & run Podman Desktop in a DevContainer","description":"Develop Podman Desktop using a DevContainer locally or using GitHub Codespaces.","slug":"develop-using-devcontainer","authors":["benoitf"],"tags":["podman-desktop","devcontainer","codespaces"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 0.10","permalink":"/blog/podman-desktop-release-0.10"}},"content":"GitHub [announced last week](https://github.blog/changelog/2022-11-09-codespaces-for-free-and-pro-accounts/) that Codespaces is available for everyone and it includes free minutes.\\n\\nLet see how we can use a [Development Container](https://containers.dev/) having all the tools to build and run Podman Desktop. The Development Container works locally using Visual Studio Code but in this blog post we will see how it works directly with a simple click from GitHub.\\n\\nThe challenges are to run a desktop tool (Podman Desktop) and running a container engine (Podman) inside this Development Container without using too many memory !\\n\\n\x3c!--truncate--\x3e\\n\\n## Defining image of the container\\n\\nThe first thing is in the choice of the image for the container. It is possible to pick-up a default image and add some features but there is no existing feature for Podman at https://github.com/devcontainers/features/tree/main/src and most of the features are expecting to run on top of Debian/Ubuntu\\n\\nIf you are not interested in how to setup the image, jump to the [next section](#configure-the-devcontainer-using-devcontainerjson).\\n\\nPodman binaries are available quickly after the releases for Fedora. I decided then to use `Fedora 37` as the base image.\\n\\nLet start the Containerfile using:\\n\\n```docker\\nFROM quay.io/fedora/fedora:37\\n```\\n\\nThen I install Node.js 16 from official nodejs.org repository. It\'s easier to switch to the version that we need.\\n\\n```docker\\n# install Node.js + yarn\\nENV NODE_VERSION 16.18.1\\nRUN curl -SLO \\"https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz\\" && \\\\\\n tar -xzf \\"node-v$NODE_VERSION-linux-x64.tar.gz\\" -C /usr/local --strip-components=1 && \\\\\\n rm \\"node-v$NODE_VERSION-linux-x64.tar.gz\\" && \\\\\\n npm install -g yarn\\n```\\n\\nNow, all system dependencies used to run an Electron application needs to be installed.\\n\\nPodman is also installed so we can run some containers inside this container.\\n\\nAnd of course, we need to install VNC (I choose [tigervnc](https://tigervnc.org/)) with a light Window Manager ([fluxbox](http://fluxbox.org/)).\\n\\nTo connect to the display of the container, we need to expose VNC over HTML/websocket using [noVNC](https://novnc.com/)\\n\\nxterm is installed to start a terminal from the VNC side.\\n\\n```docker\\nRUN dnf -y update && \\\\\\n yum -y reinstall shadow-utils && \\\\\\n yum install -y git \\\\\\n # dependencies for Podman Desktop\\n nss \\\\\\n atk \\\\\\n at-spi2-atk \\\\\\n cups-libs \\\\\\n gtk3 \\\\\\n # for remote Display\\n fluxbox \\\\\\n tigervnc-server \\\\\\n xorg-x11-fonts-Type1 \\\\\\n novnc \\\\\\n supervisor \\\\\\n xdpyinfo \\\\\\n # for podman\\n podman \\\\\\n fuse-overlayfs --exclude container-selinux \\\\\\n xterm && \\\\\\n rm -rf /var/cache /var/log/dnf* /var/log/yum.*\\n```\\n\\nSupervisord setup the launch of the VNC server and the Window manager\\n\\n```docker\\nCOPY supervisord.conf /etc/supervisord.conf\\n```\\n\\nA custom theme for fluxbox:\\n\\n```docker\\nCOPY fluxbox /usr/share/fluxbox/init\\n```\\n\\nThen we need a special configuration to allow to have Podman working inside the container\\n\\nWe add the `podman-desktop` user with correct range on subuid and subgid when running containers. I used the [tutorial](https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md#etcsubuid-and-etcsubgid-configuration).\\n\\n```docker\\nRUN useradd -u 1000 podman-desktop && echo podman-desktop:10000:5000 > /etc/subuid && echo podman-desktop:10000:5000 > /etc/subgid\\n```\\n\\nThen use some default configuration files\\n\\n```docker\\n# initialize conf files\\nADD https://raw.githubusercontent.com/containers/libpod/master/contrib/podmanimage/stable/containers.conf /etc/containers/containers.conf\\nADD https://raw.githubusercontent.com/containers/libpod/master/contrib/podmanimage/stable/podman-containers.conf /home/podman-desktop/.config/containers/containers.conf\\n```\\n\\nand make sure that all permissions are correct following the guide [https://www.redhat.com/sysadmin/podman-inside-container](https://www.redhat.com/sysadmin/podman-inside-container)\\n\\n```docker\\n# set permissions\\nRUN chown podman-desktop:podman-desktop -R /home/podman-desktop && chmod 644 /etc/containers/containers.conf && \\\\\\n mkdir -p /var/lib/shared/overlay-images /var/lib/shared/overlay-layers /var/lib/shared/vfs-images /var/lib/shared/vfs-layers; touch /var/lib/shared/overlay-images/images.lock; touch /var/lib/shared/overlay-layers/layers.lock; touch /var/lib/shared/vfs-images/images.lock; touch /var/lib/shared/vfs-layers/layers.lock && \\\\\\n mkdir -p /run/user/1000 && chown podman-desktop:podman-desktop /run/user/1000\\n```\\n\\nplus define an empty user namespace.\\n\\n```docker\\nENV _CONTAINERS_USERNS_CONFIGURED=\\"\\"\\n```\\n\\nMake sure Podman will create the socket in an expected directory:\\n\\n```docker\\n# socket path for podman\\nENV XDG_RUNTIME_DIR=/run/user/1000\\n```\\n\\nOK ! we have a custom Containerfile providing all the tools to build and run Podman Desktop (using VNC for the display), run Podman and run Electron.\\n\\nThe current file is available at https://github.com/containers/podman-desktop/blob/main/.devcontainer/.parent/Containerfile\\n\\nLet\'s configure the DevContainer.\\n\\n## Configure the DevContainer using devcontainer.json\\n\\nDevContainer definition is stored at `.devcontainer/devcontainer.json` file.\\n\\nWe need to reuse the image of the previous step. For that let\'s use the build section of the `devcontainer.json` file.\\n\\n```json\\n\\"build\\": {\\n \\"dockerfile\\": \\"Containerfile\\"\\n},\\n```\\n\\nIn order to avoid to redo all the build steps each time we open a workspace using this dev container, we published the image to quay.io at [quay.io/podman-desktop/devcontainer-parent:next\\n](https://quay.io/repository/podman-desktop/devcontainer-parent?tab=tags&tag=next). This parent image is not changing much so it\'s better to use is as a parent one.\\n\\nInside `.devcontainer` directory there is a `.parent` directory with everything related to the parent image.\\n\\nAnd in the `.devcontainer/Containerfile` file we reference this image\\n\\n```docker\\nFROM quay.io/podman-desktop/devcontainer-parent:next\\n```\\n\\nBy default, we will be `root` in the container and this is probably not what we expect. Let\'s change that.\\n\\n```json\\n\\"containerUser\\": \\"podman-desktop\\"\\n```\\n\\nSome Visual Studio Code extensions are nice to use and we can add them\\n\\n```json\\n \\"extensions\\": [\\"svelte.svelte-vscode\\", \\"bradlc.vscode-tailwindcss\\"]\\n```\\n\\nThen here is the tricky part, how to run our container allowing to run again inside the container some containers with podman.\\n\\nWe specify the arguments to make it possible. It\'s possible to use `--privileged` flag but I prefer to list the subset of permissions.\\nUsing `--privileged` we don\'t really know what are the privilege that are required while specifying all of them, people are aware of what is granted/denied.\\n\\n```json\\n\\"runArgs\\": [\\n \\"--cap-add=sys_admin\\",\\n \\"--security-opt\\",\\n \\"seccomp=unconfined\\",\\n \\"--device\\",\\n \\"/dev/fuse\\",\\n \\"--security-opt\\",\\n \\"label=disable\\",\\n \\"--security-opt\\",\\n \\"apparmor=unconfined\\"\\n ],\\n```\\n\\nSource code of Podman Desktop needs to be editable within the DevContainer so it needs to be mounted.\\n\\n```json\\n\\"workspaceMount\\": \\"source=${localWorkspaceFolder},target=/workspace,type=bind\\",\\n\\"workspaceFolder\\": \\"/workspace\\",\\n```\\n\\nThen we need a command to build Podman Desktop.\\n\\nFor that, we use `onCreateCommand` hook with a custom command\\n\\n```json\\n\\"onCreateCommand\\": \\"${containerWorkspaceFolder}/.devcontainer/onCreateCommand.sh\\",\\n```\\n\\nand in the `.devcontainer` folder the `onCreateCommand.sh` script is the following\\n\\n```shell\\n#!/bin/sh\\nyarn\\n\\nMODE=production yarn run build && yarn run electron-builder build --linux --dir --config .electron-builder.config.cjs\\n```\\n\\nTwo instructions:\\n\\n1. Fetch all Node.js dependencies.\\n2. build Podman Desktop in the `dist` folder using `Linux` as target Operating System.\\n\\nAfter the start of the container, how to launch Podman Desktop, the website and VNC, etc ?\\n\\nJust use `postStartCommand` hook.\\n\\n```json\\n\\"postStartCommand\\": \\"${containerWorkspaceFolder}/.devcontainer/postStartCommand.sh\\",\\n```\\n\\nand in the `.devcontainer` folder the `postStartCommand.sh` script is the following:\\n\\n```shell\\n#!/bin/sh\\n\\n# Start all services\\n/usr/bin/supervisord -c /etc/supervisord.conf &\\n\\n# wait X server to be ready or after 2mn exit\\necho \\"Waiting for X server to be ready\\"\\ntimeout 120 bash -c \'until xdpyinfo -display :0 &> /dev/null; do printf \\".\\"; sleep 1; done\'\\n\\n# launch podman desktop\\necho \\"Launching Podman Desktop\\"\\ncd dist/linux-unpacked/&& ./podman-desktop &\\n\\n# Launch the 9000 redirect after 20 seconds\\nsleep 20\\nwebsockify --web=/usr/share/novnc localhost:9000 localhost:5900 &\\n\\n# launch the website rendering\\necho \\"Launching Website\\"\\ncd website && yarn start\\n```\\n\\nIt starts VNC and noVNC, start precompiled Podman Desktop and start the documentation rendering.\\n\\nIt is not launching the Watch mode/development mode of Podman Desktop as it requires a container having more than 8GB of memory.\\n\\nPicking up a larger instance with for example 16GB, it\'s possible to use development mode.\\n\\nOf course, to make VNC happy, we need to specify the `DISPLAY` environment variable.\\n\\n```json\\n\\"remoteEnv\\": {\\n \\"DISPLAY\\": \\":0\\"\\n}\\n```\\n\\nWhen the DevContainer is fully available, we want to have a way to quickly open the `Website rendering URL` and `noVNC`\\n\\nLet\'s tweak the `devcontainer.json` file by adding the `portsAttributes` section\\n\\n```json\\n\\"portsAttributes\\": {\\n \\"9000\\": {\\n \\"label\\": \\"vnc\\",\\n \\"onAutoForward\\": \\"openPreview\\"\\n },\\n \\"3000\\": {\\n \\"label\\": \\"website\\"\\n }\\n}\\n```\\n\\nAfter all post-creation steps, the `Preview` browser inside the VS Code editor will open a window to VNC. And another port (`3000`) is flagged for the website.\\n\\n## Using the DevContainer.json on Github Codespace\\n\\nAs a user, opening a workspace with all what we configured is done using a single click.\\n\\nGo to https://github.com/containers/podman-desktop then click on the `< > Code` dropdown and click on `Create codespace on main` button.\\n\\n![Open Codespace](img/develop-podman-using-codespaces/codespaces-click-repository.png)\\n\\nOnce you click on the button, the codespace is setting up:\\n\\n![Preparing Codespace](img/develop-podman-using-codespaces/codespaces-preparing-codespace.png)\\n\\nAfter few minutes, as there is not yet [prebuilt codespaces](https://docs.github.com/en/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds), the codespace is opening.\\n\\nThe simple Browser displays the noVNC window:\\n![Opening Codespace](img/develop-podman-using-codespaces/codespaces-open-novnc.png)\\n\\nClick on the connect button. Then on the terminal you can enter `podman run quay.io/podman/hello` and the container is detected in Podman Desktop.\\n![Testing Codespace](img/develop-podman-using-codespaces/codespaces-testing-podman-desktop.png)\\n\\nIt\'s also possible using the port widget to get on `3000` port by clicking on the world icon a preview of the website in another tab. Changing source code of the website will refresh the content of the window.\\n\\nDepending on the usecase, it\'s also possible to open documentation in the preview browser.\\n\\n![Edit website Codespace](img/develop-podman-using-codespaces/codespaces-edit-website.png)\\n\\n## Conclusion\\n\\nThe DevContainer image for Podman Desktop is recent so it\'ll probably evolve over time by adding new capabilities but it allows you to easily build/run/experiment and **contribute** to the tool or the website."}]}')}}]); \ No newline at end of file diff --git a/assets/js/b2f554cd.e47d9aef.js b/assets/js/b2f554cd.e47d9aef.js new file mode 100644 index 00000000000..8b7531bd9c0 --- /dev/null +++ b/assets/js/b2f554cd.e47d9aef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1477],{30010:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"sharing-podman-images-with-kubernetes-cluster","metadata":{"permalink":"/blog/sharing-podman-images-with-kubernetes-cluster","source":"@site/blog/2023-12-06-sharing-podman-images-with-kubernetes-cluster.md","title":"Share your local podman images with the Kubernetes cluster","description":"Build image and use it directly in your kubernetes cluster","date":"2023-12-06T00:00:00.000Z","formattedDate":"December 6, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"podman","permalink":"/blog/tags/podman"},{"label":"images","permalink":"/blog/tags/images"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"}],"readingTime":7.71,"hasTruncateMarker":true,"authors":[{"name":"Florent Benoit","title":"Principal Software Engineer","url":"https://github.com/benoitf","imageURL":"https://github.com/benoitf.png","key":"benoitf"}],"frontMatter":{"title":"Share your local podman images with the Kubernetes cluster","description":"Build image and use it directly in your kubernetes cluster","slug":"sharing-podman-images-with-kubernetes-cluster","authors":["benoitf"],"tags":["podman-desktop","podman","images","kubernetes"],"hide_table_of_contents":false,"image":"/blog/img/sharing-podman-images-with-kubernetes-cluster/selkie-family.png"},"unlisted":false,"nextItem":{"title":"Release Notes - Podman Desktop 1.5","permalink":"/blog/podman-desktop-release-1.5"}},"content":"As developers we constantly improve and refine our applications. One of the challenges we face is quickly iterating when working with container images and kubernetes deployments/pods.\\n\\nFor example, when we want to try a new image in a kubernetes pod, this image needs to be available on a private/public registry or on the nodes of the kubernetes cluster.\\nSometimes we need to call extra commands such as `kind load docker-image` or `minikube cache add ` or publish the image first to a 3rd party registry.\\n\\nYou\'ll agree that trying out a new image in a Kubernetes pod should be as seamless as building the image itself.\\n\\nIn this blog post, we will explore the best practice for streamlining the image iteration process in Kubernetes with Podman Desktop.\\n\\n![hero](img/sharing-podman-images-with-kubernetes-cluster/selkie-family.png)\\n\\n\x3c!--truncate--\x3e\\n\\n---\\n\\n## Introduction\\n\\nWhen using kind or minikube or other 3rd party tools to setup a local kubernetes cluster, we have several ways to publish images.\\n\\nMinikube published 8 ways of doing that at https://minikube.sigs.k8s.io/docs/handbook/pushing/\\n\\nThere are pros and cons either way. Using a third party registry implies that you need to publish the image after each build of the image before being able to use it in the kubernetes cluster. While Podman Desktop could automate the synchronization between the local registry (where you are doing `podman build`) and the third party registry, there remains a duplication of layers between the local and third party registry. And if you change the first layer, it can take a lot of time to send again all the data.\\n\\nLoading images requires to pack/unpack the files so it\'s not adequate for large images.\\n\\nMinikube offers a Podman environment, but it\'s important to note that it utilizes version 3.4 inside a container within the Podman machine. This implies the existence of two Podman instances.\\n\\nThe 3.4 version is considerably outdated and do not provide new enhancements and support towards compose, compliance with Docker REST API and 3rd party tools.\\n\\nCould we just build the image and use it in kubernetes?\\n\\n## podman and kubernetes/cri-o\\n\\nIn the kubernetes world, we need a container engine runtime. At the early stage, container runtimes were integrated with ad hoc solutions on top of docker, rkt, or others.\\n\\nBut to separate concerns and to be extensible, a new interface was added: CRI for \\"Container Runtime Interface\\". Using the CRI interface we can plug container engines. And there are several runtimes such as containerd, cri-o and others.\\nhttps://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/container-runtime-interface.md\\n\\nWhat is interesting to us is the cri-o project. This project is implementing the CRI interface but also adopting some projects of the [containers](https://github.com/containers) organization where [podman](https://github.com/containers/podman) and [podman-desktop](https://github.com/containers/podman-desktop) live.\\n\\nSo it means cri-o uses image management from https://github.com/containers/image project and handle storage with https://github.com/containers/storage project.\\n\\nAnd this is what is really interesting as a podman user. As it is using common libraries between cri-o and podman, it means that in the same environment, podman and cri-o read and write the images at a common location in `/var/lib/containers` folder.\\n\\nIf we move one step ahead, if we mount the `/var/lib/containers` folder of podman into the cri-o container it means that the kubernetes cluster could find the images that the podman machine is building.\\n\\nOh wait, it means that no more registry, additional steps would be required? Yes just build and load it.\\n\\n## Minikube to the rescue\\n\\nWhile we have the goal of using both cri-o and podman altogether, we can explore the current projects allowing us to quickly setup kubernetes clusters.\\n\\n### kind\\n\\nOn the `kind` side, there is a default configuration that is using containerd and there is no plan to support an alternative such as cri-o https://github.com/kubernetes-sigs/kind/issues/1369#issuecomment-867440704\\n\\nThat said, some people try to maintain a way to do that but not officialy https://gist.github.com/aojea/bd1fb766302779b77b8f68fa0a81c0f2\\n\\nBy doing that, we would also need to mount `/var/lib/containers` folder from the host (the podman machine) to the container. And there is no easy flag in kind.\\n\\n### Minikube\\n\\n#### Minikube options\\n\\nMinikube supports more options and provides a way to select the container engine runtime. And it includes support for cri-o.\\n\\nWe can use the `container-runtime` parameter and ask for `cri-o` runtime. Command-line should include `--container-runtime=cri-o`.\\n\\nThen, we do have a podman/cri-o environment inside the container and can use `eval $(minikube podman-env)` to use the Windows/macOS podman CLI.\\n\\nOne issue is that we then have two \'Podman engines\': one running inside the Podman machine and another one running inside the container. The Podman included in the container is using version 3.4, as it\'s on Debian/Ubuntu stable, while the recent version of Podman is 4.7.x.\\n\\nCan we mount the podman machine `/var/lib/containers` into the container ?\\n\\nYes! minikube provides some options to do additional mount with `--mount-string` argument. It is not obvious but you also need to add the `--mount` in addition to this parameter. Full argument is `--mount --mount-string \\"\\"`\\n\\nBut `/var` is already a mounted folder. So here the idea is to change the path of where cri-o is storing its data.\\n\\nSo we can provide a custom mounted path and make cri-o use that custom location. Let\'s pickup `/host-containers`.\\n\\nWhen starting minikube we need then to add `--mount --mount-string \\"/var/lib/containers:/host-containers\\"`.\\n\\nRegarding the configuration of cri-o, currently, it\'s not achievable using Minikube options. However, Minikube does offer the flexibility to modify the base image.\\n\\n#### Minikube kicbase image\\n\\nLet\'s do our own base image named kicbase image.\\n\\nMinikube includes a default configuration file for cri-o.\\nhttps://github.com/kubernetes/minikube/blob/v1.32.0/deploy/kicbase/02-crio.conf\\n\\nWe need to change this default configuration to say that for storing the images, cri-o needs to use another directory. This new directory `/host-containers` will be mounted from the `/var/lib/containers` folder inside the podman machine. This is how cri-o is able to see podman images.\\n\\nLet\'s include the configuration part in this file.\\n\\n```toml\\n[crio]\\nroot = \\"/host-containers/storage\\"\\nrunroot = \\"/host-containers/storage\\"\\n```\\n\\nLet\'s also upgrade the Podman inside the container by adding the necessary instruction to the Dockerfile.\\n\\nThe Dockerfile is coming from https://github.com/kubernetes/minikube/blob/v1.32.0/deploy/kicbase/Dockerfile#L178-L186\\n\\nIn the file, replace\\n\\n```Dockerfile\\nRUN clean-install podman && \\\\\\n```\\n\\nwith\\n\\n```Dockerfile\\nRUN sh -c \\"echo \'deb https://downloadcontent.opensuse.org/repositories/devel:/kubic:/libcontainers:/unstable/xUbuntu_22.04/ /\' > /etc/apt/sources.list.d/devel:kubic:libcontainers:unstable.list\\" && \\\\\\n curl -LO https://downloadcontent.opensuse.org/repositories/devel:kubic:libcontainers:unstable/xUbuntu_22.04/Release.key && \\\\\\n apt-key add - < Release.key && \\\\\\n # need to add dbus-user-session else we have\\n # cannot open sd-bus: No such file or directory: OCI runtime attempted to invoke a command that was not found\\n clean-install dbus-user-session podman && \\\\\\n```\\n\\nLet\'s rebuild the image and publish it. You can find it at `quay.io/fbenoit/kicbase:multiarch-2023-11-06` .\\nTo build the image, clone https://github.com/kubernetes/minikube repository, and edit the files referenced before.\\n\\nThe command to build the kicbase image is `make local-kicbase`.\\n\\n#### Trying out cri-o using the podman machine storage folder\\n\\nAt the time of writing this blog post, the version `v1.32.0-beta.0` has been used. For different versions you might need to build your own kicbase image.\\n\\nOne crucial note: cri-o is running in root mode, this is why we mount to `/var/lib/containers` (and then in rootful mode).\\n\\nFor simplicity, let\'s use a rootful podman machine to map the same folder at the two locations.\\n\\nOk now let\'s try in two steps:\\n\\n1. Create a podman machine:\\n\\n```shell\\npodman machine init --cpus 4 --memory 6000 --rootful\\n```\\n\\n2. Start the cluster using our kicbase image\\n\\nWe specify Podman as the driver (the default is Docker), state our preference to use cri-o as the container runtime instead of containerd, use our custom image that performs the update of Podman\'s version and the modification of cri-o\'s configuration to use a different storage folder. Finally, we specify an additional mount.\\n\\n```shell\\nminikube start --driver=podman --container-runtime=cri-o --base-image=quay.io/fbenoit/kicbase:multiarch-2023-11-06 --mount --mount-string \\"/var/lib/containers:/host-containers\\"\\n```\\n\\n#### Verification\\n\\nAssuming the cluster was able to start, there is a new kubernetes cluster configured in the `$HOME/.kube/config` file.\\n\\nUsing `kubectl` we can start a deployment\\n\\n```shell\\nkubectl apply -f https://k8s.io/examples/application/deployment.yaml\\n```\\n\\nyou can check pods are running using\\n\\n```shell\\nkubectl get pods -l app=nginx\\n```\\n\\nand if you check your podman images\\n\\n```\\npodman images\\n```\\n\\nyou\'ll see nginx being listed so images are shared.\\n\\nNow, you can build image using a Containerfile or pull an image, connect to the control plane instance in Podman Desktop (open a shell in minikube container) and run\\n\\n```shell\\ncrictl images\\n```\\n\\nIt will list the images of podman\\n\\nNote: by default, kubernetes will use the image pull policy `Always` using the `latest` tag on your image. So it might try to fetch/pull/refresh the image you built locally. Use a specific tag or change the `imagePullPolicy` to `IfNotPresent` in your deployments.\\n\\nYou can now use your own Containerfile/Dockerfile and build an image using `podman build` command. And then check that the image is available as well in the kubernetes cluster by listing images:\\n\\n```shell\\ncrictl images\\n```\\n\\n### Conclusion\\n\\nWe have explored how developers can significantly reduce turnaround times by integrating Podman and Kubernetes seamlessly.\\n\\nNow, let\'s experiment with it and provide feedback through the Podman Desktop issue tracker at https://github.com/containers/podman-desktop/issues/ .\\n\\nHere are the next steps Podman Desktop plans to take to enhance ease of use for users:\\n\\n- To make things easier, automate the process by adding this setup to a creation wizard.\\n- Collaborate with upstream Minikube project to simplify choices and remove the requirement for customized kicbase images.\\n- Enhancing the overall user-friendliness of the solution for an improved developer experience."},{"id":"podman-desktop-release-1.5","metadata":{"permalink":"/blog/podman-desktop-release-1.5","source":"@site/blog/2023-11-03-release-1.5.md","title":"Release Notes - Podman Desktop 1.5","description":"Podman Desktop 1.5 has been released!","date":"2023-11-03T00:00:00.000Z","formattedDate":"November 3, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"},{"label":"openshift","permalink":"/blog/tags/openshift"},{"label":"onboarding","permalink":"/blog/tags/onboarding"},{"label":"compose","permalink":"/blog/tags/compose"},{"label":"extensions","permalink":"/blog/tags/extensions"},{"label":"settings","permalink":"/blog/tags/settings"}],"readingTime":8.14,"hasTruncateMarker":false,"authors":[{"name":"M\xe1ir\xedn Duffy","title":"User Experience Designer","url":"https://github.com/mairin","imageURL":"https://github.com/mairin.png","key":"duffy"}],"frontMatter":{"title":"Release Notes - Podman Desktop 1.5","description":"Podman Desktop 1.5 has been released!","slug":"podman-desktop-release-1.5","authors":"duffy","tags":["podman-desktop","release","kubernetes","openshift","onboarding","compose","extensions","settings"],"hide_table_of_contents":false,"image":"/blog/img/podman-desktop-release-1.5/onboarding-selkies.png"},"unlisted":false,"prevItem":{"title":"Share your local podman images with the Kubernetes cluster","permalink":"/blog/sharing-podman-images-with-kubernetes-cluster"},"nextItem":{"title":"Release Notes - Podman Desktop 1.4","permalink":"/blog/podman-desktop-release-1.4"}},"content":"import ReactPlayer from \'react-player\'\\n\\nPodman Desktop 1.5 Release! \ud83c\udf89\\n\\nWith this release of Podman Desktop, we\'re introducing **a new onboarding feature** that we hope will earn your \ud83e\uddad seal of approval! But wait... there\'s so much more!\\n\\n- **Onboarding**: Guided setup and configuration of **Podman** and **Compose**\\n- **Podman 4.7.2**: [Podman 4.7.2](https://github.com/containers/podman/releases) is now included in Windows and Mac installers\\n- **Command Palette**: Gain easy access to various commands via a new keyboard-driven command palette\\n- **Expanded \\"Summary\\" tab for Kubernetes pods**: Go deep with extended details on Kubernetes pods in the pod \\"Summary\\" tab\\n- **Environment file support**: Chart out environment variables for new containers to access on creation\\n- **Enhancements to the Settings area**: Get your bearings with improved Docker compatibility mode controls\\n- **Improved user experience for state changes**: No more dead reckoning on container state with improved visual indication of status\\n- **Extension API improvements**: A boatload of improvements to the extension API enabling more goodness from \ud83e\uddad Podman Desktop\'s extensions\\n\\nPodman Desktop 1.5 is now available. [Click here to download it](/downloads)!\\n\\n![Podman-desktop-1-5-hero](img/podman-desktop-release-1.5/onboarding-selkies.png)\\n\\n---\\n\\n## Release Details\\n\\n### Onboarding\\n\\nWe are introducing a new feature providing guided flows for the initial setup of specific \ud83e\uddad Podman Desktop extensions. Release 1.5 features two new onboarding flows: Podman and Compose.\\n\\nTo start the Podman onboarding flow, you can start from the dashboard notification by clicking the \\"Set up\\" button:\\n![podman-onboarding-start](https://user-images.githubusercontent.com/799683/280362279-598cc052-5ea4-4c31-849c-da9bbbcc3e42.png)\\n![podman-onboarding](https://user-images.githubusercontent.com/799683/280363859-f35b85f8-1dd4-4b7f-a995-25fe5d1ccced.png)\\n\\nVisit **Settings > Resources** screen and click the Compose \\"Setup ...\\" button in order to start Compose onboarding:\\n![compose-onboarding-start](https://user-images.githubusercontent.com/799683/280276847-ca0558ab-70ad-48cc-8dd5-67e3eb465a62.png)\\n![compose-onboarding](https://user-images.githubusercontent.com/799683/280277936-77ba0fb2-5cb0-41de-a7cf-1a3d6400fd89.png)\\n\\n### Command Palette\\n\\nA new, search-driven command palette is now available to enable quick access to various commands available across \ud83e\uddad Podman Desktop. You can try this new tool out by hitting the F1 key. [#4081](https://github.com/containers/podman-desktop/pull/4081) && [#3979](https://github.com/containers/podman-desktop/pull/3979)\\n\\n\\n\\n### Expanded \\"Summary\\" tab for Kubernetes pods\\n\\nKubernetes pods now offer a more comprehensive set of information under the \\"Summary\\" tab, including networking, volumes, environment variables, and other key metadata.\\n\\n\\n\\n### Environment file support\\n\\nWhen creating a container from the Images list, there\'s now an option to provide an environment file to set env variables for the new container. [#4026](https://github.com/containers/podman-desktop/pull/4026) && [#4025](https://github.com/containers/podman-desktop/pull/4025)\\n\\n### Enhancements to the Settings area\\n\\nThe user experience for enabling or disabling Docker compatibility is improved, with a new entry in the **Settings > Preferences** screen that includes contextual guidance. [#4093](https://github.com/containers/podman-desktop/pull/4093)\\n\\n\\n\\n### Improved user experience for state changes\\n\\nThe user experience around state changes for containers, pods, and other objects in the UI is improved, with clear status messages and improved animated visual indicator of state changes. [#4056](https://github.com/containers/podman-desktop/pull/4056)\\n\\n\\n\\n\\n\\n### Extension API improvements\\n\\nThe \ud83e\uddad Podman Desktop extension API received many improvements, including:\\n\\n- In addition to pushing and listing image from an extension, it\'s now possible to pull images from a \ud83e\uddad Podman Desktop extension [#4155](https://github.com/containers/podman-desktop/pull/4155)\\n\\n- The \ud83e\uddad Podman Desktop extension API has been enhanced with both the ability to list images & networks and the ability to create containers & networks. [#4172](https://github.com/containers/podman-desktop/pull/4172)\\n\\n- \ud83e\uddad Podman Desktop extensions now have a consistent way to run administrative tasks. [#4049](https://github.com/containers/podman-desktop/pull/4049)\\n\\n- Extensions now have the ability to register a custom Kubernetes config generator. [#3970](https://github.com/containers/podman-desktop/pull/3970)\\n\\n- The ability of extensions to add commands to UI menus has been extended; previously for action menus it was only available in the Image list screen. It is now possible for extensions to add commands to the action menus of items listed on the Containers list screen as well. [#3947](https://github.com/containers/podman-desktop/pull/3947) & [#3963](https://github.com/containers/podman-desktop/pull/3963)\\n\\n- Extensions have gained the ability to contribute menu items in the UI based on specific conditions. [#3959](https://github.com/containers/podman-desktop/pull/3959)\\n\\n- Enhanced logic for displaying or hiding properties listed under the **Settings > Preferences** screens is now available. [#4159](https://github.com/containers/podman-desktop/pull/4159)\\n\\n\\n\\n---\\n\\n## Other Notable Enhancements\\n\\n- The progress of loading an image into Kind is now visible as a task in the task manager. [#4061](https://github.com/containers/podman-desktop/pull/4061)\\n\\n![kind-progress-task](https://user-images.githubusercontent.com/42176370/270154775-eb7007b4-fd0e-4287-be9e-40ffc412de35.png)\\n\\n- It\'s now possible to start a new Podman machine right after creation, or you can create it and wait to start it later. It\'s up to you! [#4046](https://github.com/containers/podman-desktop/pull/4046)\\n\\n![podman-start-now-or-later](https://user-images.githubusercontent.com/49404737/269941187-f4768833-ecfc-4d0b-8acf-d4afedb428d9.png)\\n\\n- The Podman machine and Kubernetes provider creation forms have an updated look & feel consisted with other forms in the user interface, along with minor bug fixes. [#4317](https://github.com/containers/podman-desktop/pull/4317)\\n\\n![Updated provider creation forms](https://user-images.githubusercontent.com/19958075/274694157-fe89f3bc-e5b8-4735-96e9-669fe52c7a41.png)\\n\\n- The empty screen message shown when a search filter results in no matches now provides a message specific to filter matching, including the specific filter terms and an explicit button for clearing the filter. Previously, the screen displayed a generic message about how to create new objects of the type displayed on the screen, which led to some confusion about the status of the system. [#3988](https://github.com/containers/podman-desktop/pull/3988)\\n\\n\\n\\n- New support for adding spin animations to icons is now available. [#4188](https://github.com/containers/podman-desktop/pull/4188)\\n\\n- There is a new indeterminate progress bar type available for the task manager; this is meant for providing limited status for actions whose APIs do not provide detailed status information. [#4016](https://github.com/containers/podman-desktop/pull/4016)\\n\\n- For authenticating as admin to perform administrative tasks, \ud83e\uddad Podman Desktop now provides touchID support for macOS. [#4050](https://github.com/containers/podman-desktop/pull/4050)\\n\\n![touchID-support](https://user-images.githubusercontent.com/436777/248588015-f08115bd-d211-43ad-bddd-286d7b3a7056.png)\\n\\n\\n\\n- Support for connecting to interactive terminals for containers via tty was added. [#3900](https://github.com/containers/podman-desktop/pull/3900)\\n\\n- It\'s now more clear which container/pod providers will autostart when \ud83e\uddad Podman Desktop starts. Previously autostart had both a global and a per-provider setting. It has been simplified by removing the global setting. [#3840](https://github.com/containers/podman-desktop/pull/3840)\\n\\n- The \\"Working with containers\\" section of the documentation has been reworked and improved. [#3951](https://github.com/containers/podman-desktop/pull/3951)\\n\\n---\\n\\n## Notable Bug Fixes\\n\\n- The disable registry command was not blocking subsequent pulls from disabled registries. This has been corrected. [#4183](https://github.com/containers/podman-desktop/pull/4183)\\n\\n- Some users behind network proxies were unable to complete workflow involving the download of online resources. The mechanism for fetching these resources has been fixed to be proxy compatible to address this issue. [#3994](https://github.com/containers/podman-desktop/pull/3994)\\n\\n- The status of pods running in Kubernetes that are undergoing the deletion process is now accurately reflected in the \ud83e\uddad Podman Desktop UI. [#3877](https://github.com/containers/podman-desktop/pull/3877)\\n\\n- The image details page always listed the image as being \\"not used\\" even when it was. This has been corrected. [#3985](https://github.com/containers/podman-desktop/pull/3985)\\n\\n- Previously, deleting a specific image tag would cause all tags with the same Image ID to be deleted. This has been fixed so only the selected image tag will be deleted. [#3837](https://github.com/containers/podman-desktop/pull/3837)\\n\\n- Could not view the pod details for some remote Kubernetes cluster pods due to an encoding error. [#4371](https://github.com/containers/podman-desktop/pull/4371)\\n\\n- Error logs were being tracked separately from the actions they applied to. This has been addressed for kind cluster creation failure [#4427](https://github.com/containers/podman-desktop/pull/4427) and Compose installation failure [#4407](https://github.com/containers/podman-desktop/pull/4407).\\n\\n- For Linux users, \ud83e\uddad Podman Desktop previously did not appear under the \\"Development\\" menu when installed via Flatpak; it appeared under \\"Utilities.\\" \ud83e\uddad Podman Desktop now appears under the \\"Development\\" menu. [#3911](https://github.com/containers/podman-desktop/pull/3911)\\n\\n- Podman Machine names are no longer prefixed with the \\"Podman Machine\\" string. [#3878](https://github.com/containers/podman-desktop/pull/3878)\\n\\n![touchID-support](https://user-images.githubusercontent.com/19958075/267378447-aafdfbd7-f005-4b94-8626-9e11eec61b95.png)\\n\\n- The initial action state of pods and containers was being displayed as \\"STARTING\\" regardless of actual state; this has been corrected. [#3889](https://github.com/containers/podman-desktop/pull/3889)\\n\\n- Resizing the application window no longer makes the last lines of a container\'s terminal invisible. [#3993](https://github.com/containers/podman-desktop/pull/3993)\\n\\n- An issue with incorrect terminal behavior in response to long lines in the terminal attached to a container has been resolved. [#3955](https://github.com/containers/podman-desktop/pull/3955)\\n\\n- A spacing issue on the run image form has been corrected. [#4089]https://github.com/containers/podman-desktop/pull/4089\\n\\n- The \\"podify\\" icon & button on the Containers list was unusually large in release 1.4. That regression has been corrected in this release. [#4122](https://github.com/containers/podman-desktop/pull/4122)\\n\\n- An error in the instructions for Windows users on migrating from Docker has been corrected. [#4157](https://github.com/containers/podman-desktop/pull/4157)\\n\\n---\\n\\n## Community Thank You\\n\\n\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make \ud83e\uddad Podman Desktop even better. In this\\nrelease we received pull requests from the following people:\\n\\n- [afbjorklund](https://github.com/afbjorklund) in [#4373 - docs: fix broken links and add lima onboarding](https://github.com/containers/podman-desktop/pull/4373), [#4372 - docs: clear up lima column on containers page](https://github.com/containers/podman-desktop/pull/4372), [#4091 - fix: avoid errors with unexpected JSON input](https://github.com/containers/podman-desktop/pull/4091), [#4098 - docs: Lima onboarding details](https://github.com/containers/podman-desktop/pull/4098), and [#3854 - fix: check if machine init rootful flag supported](https://github.com/containers/podman-desktop/pull/3854)\\n\\n- [axel7083](https://github.com/axel7083) in [#4061 - feat: adding task progress for kind](https://github.com/containers/podman-desktop/pull/4061), [#3970 - feat: extension can register custom kube generator](https://github.com/containers/podman-desktop/pull/3970), [#3959 - feat: add when property to extensions menus](https://github.com/containers/podman-desktop/pull/3959), [#4016 - feat: indeterminate progress bar](https://github.com/containers/podman-desktop/pull/4016), [#3963 - fix: ContainerList propagating containers in ComposeActions and PodActions](https://github.com/containers/podman-desktop/pull/3963), and [#3947 - feat: extend menus capabilities](https://github.com/containers/podman-desktop/pull/3947)\\n\\n- [ayushrakesh](https://github.com/ayushrakesh) in [#4415 - Update README.md](https://github.com/containers/podman-desktop/pull/4415#)\\n\\n- [eltociear](https://github.com/eltociear) in [#4194 - Update README.md](https://github.com/containers/podman-desktop/pull/4194)\\n\\n- [foxydeveloper](https://github.com/foxydevloper) in [#4157 - docs: Correct windows instructions for migrating from docker](https://github.com/containers/podman-desktop/pull/4157)\\n\\n- [harsh-solanki21](https://github.com/harsh-solanki21) in [#4162 - fix: Removed fullstop from summary](https://github.com/containers/podman-desktop/pull/4162)\\n\\n- [rahul0x00](https://github.com/rahul0x00) in [#4240 - fix typos in README.md](https://github.com/containers/podman-desktop/pull/4240)\\n\\n- [shelar1423](https://github.com/shelar1423) in [#4221 - chore: document property setting in EXTENSIONS.md](https://github.com/containers/podman-desktop/pull/4221)\\n\\n---\\n\\n## Final notes\\n\\n### Known Issues\\n\\nWe have a discussion board topic where we have posted known issues with this release. If you run into problems, please check this list before filing a bug - if we already have an issue open for it, it saves you the time and trouble of filing, and there may be a workaround posted in the issue.\\n\\n#### [Known Issues: Podman Desktop 1.5.2](https://github.com/containers/podman-desktop/discussions/4635)\\n\\n### Fixed Issues\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.5.0).\\n\\n### Where to Download\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"podman-desktop-release-1.4","metadata":{"permalink":"/blog/podman-desktop-release-1.4","source":"@site/blog/2023-09-18-release-1.4.md","title":"Release Notes - Podman Desktop 1.4","description":"Podman Desktop 1.4 has been released!","date":"2023-09-18T00:00:00.000Z","formattedDate":"September 18, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"},{"label":"openshift","permalink":"/blog/tags/openshift"}],"readingTime":3.415,"hasTruncateMarker":false,"authors":[{"name":"Jeff Maury","title":"Engineering Manager","url":"https://github.com/jeffmaury","imageURL":"https://github.com/jeffmaury.png","key":"jeffmaury"}],"frontMatter":{"title":"Release Notes - Podman Desktop 1.4","description":"Podman Desktop 1.4 has been released!","slug":"podman-desktop-release-1.4","authors":["jeffmaury"],"tags":["podman-desktop","release","kubernetes","openshift"],"hide_table_of_contents":false,"image":"/blog/img/podman-desktop-release-1.4/juggling.png"},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 1.5","permalink":"/blog/podman-desktop-release-1.5"},"nextItem":{"title":"Release Notes - Podman Desktop 1.3","permalink":"/blog/podman-desktop-release-1.3"}},"content":"import ReactPlayer from \'react-player\'\\n\\nPodman Desktop 1.4 Release! \ud83c\udf89\\n\\nThis is essentially a bug-fix release to fix various issues in UI, but as usual we also added a few new features.\\n\\n- **Podman 4.6.2**: Podman 4.6.2 included with Podman Desktop 1.4\\n- **Windows Arm64**: Native Windows on Arm64 installers and binaries\\n- **Port range mapping**: Start containers and map a range of ports\\n- **Terminal UX Improvement**: Persistent terminal sessions when SSH\'ing in a container\\n- **Volume Creation**: Create volume from the `Volumes` page\\n- **Bash support**: Terminals are now using `bash` if available.\\n\\nPodman Desktop 1.4 is now available. [Click here to download it](/downloads)!\\n\\n![Podman-desktop-1-4-juggling](img/podman-desktop-release-1.4/juggling.png)\\n\\n---\\n\\n## Release Details\\n\\n### Port range mapping [#3654](https://github.com/containers/podman-desktop/pull/3654)\\n\\nWhen starting a new container, you can now map a port range between host and container. If the range is not valid between host and container, an error is raised.\\n\\n![Range mapping](https://user-images.githubusercontent.com/49404737/262927546-da66b67a-0884-40b1-85bd-a9c3ea2f3f9e.gif)\\n\\n### Terminal lifetime [#3725](https://github.com/containers/podman-desktop/pull/3725)\\n\\nWhen a terminal is opened for a container, it can now be reused after you switched to another part of the Podman Desktop UI.\\n\\n![terminal lifetime](img/podman-desktop-release-1.4/terminal.gif)\\n\\n### Create volume [#3742](https://github.com/containers/podman-desktop/pull/3742)\\n\\nThe Volumes tab now has a Create volume button. The Create volume UI has a single field for the volume name.\\n\\n![create volume](img/podman-desktop-release-1.4/create-volume.gif)\\n\\n### bash support [#3750](https://github.com/containers/podman-desktop/pull/3750)\\n\\nWhen a terminal is opened for a container, if bash is available within the container, it will be used. Otherwise, sh will be used.\\n\\n![bash sh](img/podman-desktop-release-1.4/bash-sh.gif)\\n\\n### Notable Bug Fixes\\n\\n- Reduce API calls when listing containers by @benoitf [#3489](https://github.com/containers/podman-desktop/pull/3489)\\n- Removing a connection(podman machine) should redirect to previous page by @benoitf [#3576](https://github.com/containers/podman-desktop/pull/3576)\\n- Enhance error message when image is not there by @benoitf [#3587](https://github.com/containers/podman-desktop/pull/3587)\\n- Dispose kind install button when extension is deactivated (#3586) by @lstocchi [#3610](https://github.com/containers/podman-desktop/pull/3610)\\n- Replace backslash/slash on windows when building image (#3465) by @lstocchi [#3618](https://github.com/containers/podman-desktop/pull/3618)\\n- Handle null value in container command (#3620) by @lstocchi [#3625](https://github.com/containers/podman-desktop/pull/3625)\\n- Add maximum activation time for extensions by @benoitf [#3446](https://github.com/containers/podman-desktop/pull/3446)\\n- Handle single non-spread arguments by @benoitf [#3641](https://github.com/containers/podman-desktop/pull/3641)\\n- Grab usage data of volumes only on-demand by @benoitf [#3635](https://github.com/containers/podman-desktop/pull/3635)\\n- Add arm64 binaries for Windows by @benoitf [#3643](https://github.com/containers/podman-desktop/pull/3643)\\n- Include right airgap file for Windows and arm64 by @benoitf [#3651](https://github.com/containers/podman-desktop/pull/3651)\\n- Redirect to previous page when removing a kubernetes connection by @benoitf [#3650](https://github.com/containers/podman-desktop/pull/3650)\\n- Support port ranges when starting a container (#3204) by @lstocchi [#3654](https://github.com/containers/podman-desktop/pull/3654)\\n- Add a strict undefined check to messagebox result (#3692) by @lstocchi [#3699](https://github.com/containers/podman-desktop/pull/3699)\\n- Only restart if a machine is running by @cdrage [#3491](https://github.com/containers/podman-desktop/pull/3491)\\n- Session to the terminal is reused by @benoitf [#3725](https://github.com/containers/podman-desktop/pull/3725)\\n- Disable next button and show try again when onboarding failed (#3616) by @lstocchi [#3711](https://github.com/containers/podman-desktop/pull/3711)\\n- Add podman in PATH after updating process environment PATH (#3729) by @lstocchi [#3730](https://github.com/containers/podman-desktop/pull/3730)\\n- Allow to create a volume by @benoitf [#3742](https://github.com/containers/podman-desktop/pull/3742)\\n- Using bash if available otherwise sh in terminal by @axel7083 [#3750](https://github.com/containers/podman-desktop/pull/3750)\\n- Allow to embed existing component to onboarding (#3755) by @lstocchi [#3763](https://github.com/containers/podman-desktop/pull/3763)\\n- Some containers never return logs, do not wait for them by @dgolovin [#3784](https://github.com/containers/podman-desktop/pull/3784)\\n- Remove cancel button when on final onboarding step (#3771) by @lstocchi [#3802](https://github.com/containers/podman-desktop/pull/3802)\\n- Onboarding add link micromark for commands by @cdrage [#3747](https://github.com/containers/podman-desktop/pull/3747)\\n- Mounts can be null when using older podman by @afbjorklund [#3806](https://github.com/containers/podman-desktop/pull/3806)\\n- Remove redundant step completion check when onboarding gets started by @lstocchi [#3798](https://github.com/containers/podman-desktop/pull/3798)\\n- Ability to click enter in pull image name input by @deboer-tim [#3850](https://github.com/containers/podman-desktop/pull/3850)\\n- Set proxy environment variable when launching process by @jeffmaury [#3838](https://github.com/containers/podman-desktop/pull/3838)\\n- The socket location was moved for new podman by @afbjorklund [#3853](https://github.com/containers/podman-desktop/pull/3853)\\n- Don\'t log console errors when activating lima extension by @afbjorklund [#3852](https://github.com/containers/podman-desktop/pull/3852)\\n\\n### Community Thank You\\n\\n\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make Podman Desktop even better.\\n\\nA warm welcome to [@tomgoren](https://github.com/tomgoren), [@Julian](https://github.com/Julian), [@Gelob](https://github.com/Gelob) and [@cedricclyburn](https://github.com/cedricclyburn) who made their first contribution to the project in this release.\\n\\n### Final Notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.4.0).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"podman-desktop-release-1.3","metadata":{"permalink":"/blog/podman-desktop-release-1.3","source":"@site/blog/2023-08-16-release-1.3.md","title":"Release Notes - Podman Desktop 1.3","description":"Podman Desktop 1.3 has been released!","date":"2023-08-16T00:00:00.000Z","formattedDate":"August 16, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"},{"label":"openshift","permalink":"/blog/tags/openshift"}],"readingTime":5.195,"hasTruncateMarker":false,"authors":[{"name":"Denis Golovin","title":"Principal Software Engineer","url":"https://github.com/cdrage","imageURL":"https://github.com/dgolovin.png","key":"dgolovin"}],"frontMatter":{"title":"Release Notes - Podman Desktop 1.3","description":"Podman Desktop 1.3 has been released!","slug":"podman-desktop-release-1.3","authors":["dgolovin"],"tags":["podman-desktop","release","kubernetes","openshift"],"hide_table_of_contents":false,"image":"/img/blog/podman-desktop-release-1.3.webp"},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 1.4","permalink":"/blog/podman-desktop-release-1.4"},"nextItem":{"title":"Release Notes - Podman Desktop 1.2","permalink":"/blog/podman-desktop-release-1.2"}},"content":"import ReactPlayer from \'react-player\'\\n\\nPodman Desktop 1.3 Release! \ud83c\udf89\\n\\nThis is essentially a bug-fix release to fix various issues in UI, extension engine and featured extensions, but as usual we also added a few new features.\\n\\n- **Podman 4.6.1**: Podman 4.6.1 included in Windows and Mac installers\\n- **Podman user-mode networking support to Windows/WSL**: A new switch `User mode networking\' is available when creating Podman machine on Windows for Podman 4.6.0+ to configure podman to work in certain VPN setups and other specialized networking configurations\\n- **Compose group new UI elements**: You can now see summary, inspect, deploy to kubernetes, generate kube yaml and view logs\\n- **Extension packs and extension dependencies**: Install group of extensions in one click\\n- **Resource details page update**: See summary and log for resource\\n- **Create Kind cluster form update**: A new `Node\'s container image` field can be used to specify the Kubernetes version used for the control-planed\\n- **Support Docker Desktop extensions using a backend**: When loading Docker Desktop extension the containers are created in the backend as described in the vm section of extension\'s descriptor\\n- **Podman Initial Onboarding (preview)**: Install and configure podman using included installer\\n\\nPodman Desktop 1.3 is now available. [Click here to download it](/downloads)!\\n\\n![Podman-desktop-1-3-bug-swatting](img/podman-desktop-release-1.3/title-bug-swatting.png)\\n\\n---\\n\\n## Release Details\\n\\n### Compose group Logs tab [#3176](https://github.com/containers/podman-desktop/pull/3176)\\n\\nWhen clicking on the group of containers, you can now view the logs of the entire group of compose containers and don\'t need to open\\nlog for every component individually.\\n\\n![Screenshot 2023-07-11 at 12 48 47 PM](https://github.com/containers/podman-desktop/assets/6422176/743a4ffc-e291-4697-8ac5-8052cc921946)\\n\\n### Podman user-mode networking support to Windows/WSL [#3251](https://github.com/containers/podman-desktop/pull/3251)\\n\\nCertain VPN setups or other specialized networking configs will block traffic from the virtual WSL networking device, resulting in the podman WSL backend from being unable to contact systems on the VPN, and potentially losing internet access altogether. The new switch allows you to create a podman VM machine configured to work correctly in mentioned above networking environments.\\n\\n![user](https://github.com/containers/podman-desktop/assets/620330/2f521576-b6a6-42b5-b24d-08df5b432608)\\n\\n### Compose group Summary tab [#3317](https://github.com/containers/podman-desktop/pull/3317),\\n\\nCompose group Summary tab shows all containers in the group and let you navigate to Details page for specific container.\\n\\n\\n\\n### Compose group Inspect tab [#3316](https://github.com/containers/podman-desktop/pull/3316)\\n\\nCompose group Inspect tab shows an array of \\"container inspect\\" from docker / podman.\\n\\n\\n\\n### `Deploy to kubernetes` in compose actions [#3299](https://github.com/containers/podman-desktop/pull/3295)\\n\\nA button to deploy to kubernetes added to Compose group.\\n\\n\\n\\n### `Generate Kube` in Compose actions and `Kube` tab in compose details [#3253](https://github.com/containers/podman-desktop/pull/3253)\\n\\n`Generate Kube` item added to Compose actions and \\"Kube\\" tab is now available in Compose details view.\\n\\n\\n\\n### Install multiple extensions using extension pack [#3150](https://github.com/containers/podman-desktop/pull/3150)\\n\\nAn Extension pack introduced in Extension engine is a way to declare set of extensions to install them all at once.\\n\\n\\n\\n### Customize icons from extension [#3131](https://github.com/containers/podman-desktop/pull/3131)\\n\\nExtensions now can customize icons for list elements using `when` clause.\\n\\n![image](https://github.com/containers/podman-desktop/assets/49404737/7aae5347-4f07-4854-ba11-1f629b5ccf22)\\n\\n### Resource details page update [#1923](https://github.com/containers/podman-desktop/pull/1923)\\n\\nIf you click on the arrow icon next to a resource name it will open up a details page (similarly to how clicking on a container in the container list opens up a details page).\\n\\n![image](https://user-images.githubusercontent.com/49404737/229542404-bae44f89-5cd3-4baf-8b08-e934e4462697.gif)\\n\\n### `Node\'s container image` field added to `Create a Kind cluster` form [#3508](https://github.com/containers/podman-desktop/pull/3508)\\n\\nThe new `Node\'s container image` field can be used to specify the Kubernetes version used for the control-planed.\\n\\n![image](https://github.com/containers/podman-desktop/assets/42176370/b2a63faf-629f-436d-8496-7c0cd8158679)\\n\\n### Support Docker Desktop extensions using a backend [#3435](https://github.com/containers/podman-desktop/pull/3435)\\n\\nPodman Desktop now loads the containers in the backend as described in the vm section of extension descriptor the same way as Docker Desktop does.\\n\\n### Initial onboarding implementation for podman (experimental) [#3308](https://github.com/containers/podman-desktop/pull/3308)\\n\\nThis is the initial implementation for the onboarding feature. It only covers a simple onboarding for podman. Check system requirements -> install podman -> yay! Done!\\n\\n### Notable Bug Fixes\\n\\n- Updating videos to be adaptive for mobile by @mairin [#3229](https://github.com/containers/podman-desktop/pull/3229)\\n- Consistent max width and padding in settings by @deboer-tim [#3232](https://github.com/containers/podman-desktop/pull/3232)\\n- Settings navigation bar resizing by @deboer-tim in [#3231](https://github.com/containers/podman-desktop/pull/3231)\\n- Move new registry button to header by @deboer-tim [#3245](https://github.com/containers/podman-desktop/pull/3245)\\n- Bigger lima logo by @afbjorklund [#3248](https://github.com/containers/podman-desktop/pull/3248)\\n- Horizontal docker logo by @afbjorklund [#3236](https://github.com/containers/podman-desktop/pull/3236)\\n- Respect LIMA_HOME environment variable by @afbjorklund [#3254](https://github.com/containers/podman-desktop/pull/3254)\\n- Add check before writing to terminal by @lstocchi [#3263](https://github.com/containers/podman-desktop/pull/3263)\\n- Wait until remote side has fully initialized the extensions by @benoitf [#3257](https://github.com/containers/podman-desktop/pull/3257)\\n- Fix loader not centered horizontally by @benoitf [#3270](https://github.com/containers/podman-desktop/pull/3270)\\n- Troubleshooting still waiting after failure by @deboer-tim [#3354](https://github.com/containers/podman-desktop/pull/3354)\\n- Store error for build by @cdrage [#3365](https://github.com/containers/podman-desktop/pull/3365)\\n- Missing checkbox tooltips by @deboer-tim [#3380](https://github.com/containers/podman-desktop/pull/3380)\\n- Load compose logs async not await by @cdrage [#3377](https://github.com/containers/podman-desktop/pull/3377)\\n- Set rootful connection when starting rootful machine by @lstocchi [#3364](https://github.com/containers/podman-desktop/pull/3364)\\n- Default last page by @deboer-tim [#3388](https://github.com/containers/podman-desktop/pull/3388)\\n- Avoid dashboard displaying providers starting while they don\'t by @benoitf [#3451](https://github.com/containers/podman-desktop/pull/3451)\\n- Do not use extensionInfo until it is defined by @benoitf [#V](https://github.com/containers/podman-desktop/pull/3450)\\n- Allow BASIC authentication (all caps) by @cdrage [#3471](https://github.com/containers/podman-desktop/pull/3471)\\n- Allow single domain registry such as localhost:5000 by @cdrage [#3468](https://github.com/containers/podman-desktop/pull/3468)\\n- Create /usr/local/bin directory if it does not exist on binary install by @cdrage [#3425](https://github.com/containers/podman-desktop/pull/3425)\\n- Only delete selected pods by @deboer-tim [#](https://github.com/containers/podman-desktop/pull/3378)\\n- Add back \'Done\' text on the button by @benoitf [#3487](https://github.com/containers/podman-desktop/pull/3487)\\n- Do not wait for more than 5s when checking for podman ping by @benoitf [#3497](https://github.com/containers/podman-desktop/pull/3497)\\n- Add proxy support for extension using patching get and request approach by @dgolovin [#2825](https://github.com/containers/podman-desktop/pull/2825)\\n- Refresh component when field is updated by @benoitf [#3525](https://github.com/containers/podman-desktop/pull/3525)\\n- Higher-res icons for featured extensions list by @mairin [#3511](https://github.com/containers/podman-desktop/pull/3511)\\n- Main nav selection by @deboer-tim [#3510](https://github.com/containers/podman-desktop/pull/3510)\\n- kube event error when switching context by @jeffmaury [#3494](https://github.com/containers/podman-desktop/pull/3494)\\n- Reset error message each time we pull image by @benoitf [#3550](https://github.com/containers/podman-desktop/pull/3550)\\n\\n### Community Thank You\\n\\n\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make Podman Desktop even better.\\n\\nA warm welcome to [@rostalan](https://github.com/rostalan) and [@axel7083](https://github.com/axel7083) who made their first contribution to the project in this release.\\n\\n### Final Notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.3.0).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"podman-desktop-release-1.2","metadata":{"permalink":"/blog/podman-desktop-release-1.2","source":"@site/blog/2023-07-12-release-1.2.md","title":"Release Notes - Podman Desktop 1.2","description":"Podman Desktop 1.2 has been released!","date":"2023-07-12T00:00:00.000Z","formattedDate":"July 12, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"},{"label":"openshift","permalink":"/blog/tags/openshift"}],"readingTime":6.05,"hasTruncateMarker":false,"authors":[{"name":"Charlie Drage","title":"Software Engineer","url":"https://github.com/cdrage","imageURL":"https://github.com/cdrage.png","key":"cdrage"}],"frontMatter":{"title":"Release Notes - Podman Desktop 1.2","description":"Podman Desktop 1.2 has been released!","slug":"podman-desktop-release-1.2","authors":["cdrage"],"tags":["podman-desktop","release","kubernetes","openshift"],"hide_table_of_contents":false,"image":"/img/blog/podman-desktop-release-1.2.webp"},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 1.3","permalink":"/blog/podman-desktop-release-1.3"},"nextItem":{"title":"Release Notes - Podman Desktop 1.1","permalink":"/blog/podman-desktop-release-1.1"}},"content":"import ReactPlayer from \'react-player\'\\n\\nPodman Desktop 1.2 Release! \ud83c\udf89\\n\\nWe\'re excited to announce the release of Podman Desktop version 1.2.0! This release includes many new features (Kubernetes, Compose and extension support!), bug fixes, and improvements to enhance your container management experience. Here\'s a summary of the key changes in this release:\\n\\n- **Added start/stop/delete/restart buttons for Compose**: You can now make changes to an entire Compose group of containers\\n- **Kubernetes context on the status bar**: Choose from multiple Kubernetes contexts more easily all from the status bar\\n- **Rename images**: Rename an image with a click of a button\\n- **Protocol handler support**: Added support for protocol handlers such as `open podman-desktop:extension/redhat.openshift-local`\\n- **Troubleshooting page**: A troubleshooting page for helping diagnose Podman Desktop related development issues\\n\\nPodman Desktop 1.2 is now available. [Click here to download it](/downloads)!\\n\\n![Podman-desktop-1-2-hero](img/podman-desktop-release-1.2/podman-desktop-release-1.2.png)\\n\\n---\\n\\n## Release Details\\n\\n### Added start/stop/delete/restart buttons for Compose\\n\\nIn the last month we\'ve been addind support for more Compose features. Before you were only able to control a group of containers if they were in a Pod. Now we have added the ability to control a group of Compose containers. You can now start, stop, delete and restart a group of containers launched by either `docker-compose` or `podman-compose`.\\n\\nStay tuned as we add even more features to Compose! If you have any feedback or feature requests, feel free to open an issue or start a discussion on GitHub.\\n\\n\\n\\n### Kubernetes context on the status bar\\n\\nWith Kubernetes context on the status bar, you can switch from one context to another in just a couple of clicks. Easily switch to a different cluster all together. If there are multiple contexts available, you can now click and pick which one to use.\\n\\n\\n\\n### Rename images\\n\\nDeployed an image but now you need to rename it / add a new tag? Podman Desktop allows you to edit an image now. Thanks to an awesome contributor [@tuckerrc](https://github.com/tuckerrc) who added the new feature.\\n\\n\\n\\n### Troubleshooting page\\n\\nDeveloping an extension for Podman Desktop? Want to view the logs of Podman Desktop as well as ping your container connection? We now have a troubleshooting page!\\n\\nClick on the lightbulb button on the bottom right to access the page.\\n\\n\\n\\n### Protocol handler support\\n\\nPodman Desktop now supports protocol handling when using the terminal! Want to access your favourite extension directly from a script or the terminal? If you type in `open podman-desktop:extension/redhat.openshift-local` in the terminal, Podman Desktop will automatically load up to the correct extension.\\n\\n\\n\\n---\\n\\n## Other Notable Features\\n\\n- Background colors and FormPage ([PR #2977](https://github.com/containers/podman-desktop/pull/2977))\\n- Add ability to add insecure registry / skipping cert verify ([PR #2896](https://github.com/containers/podman-desktop/pull/2896))\\n- Add support for icon contribution ([PR #2984](https://github.com/containers/podman-desktop/pull/2984))\\n- Add warning dialog message that virtual machine has low memory limit ([PR #2822](https://github.com/containers/podman-desktop/pull/2822))\\n- Propose indexed name for new pod ([PR #3028](https://github.com/containers/podman-desktop/pull/3028))\\n- Add restart button after enabling / disabling mac os compatibility ([PR #2841](https://github.com/containers/podman-desktop/pull/2841))\\n- Add environment related helper constants ([PR #3079](https://github.com/containers/podman-desktop/pull/3079))\\n- Allow entrypoint and cmd when starting container ([PR #3031](https://github.com/containers/podman-desktop/pull/3031))\\n- Add a way to debug stores in troubleshooting page ([PR #3121](https://github.com/containers/podman-desktop/pull/3121))\\n- Add custompick component (#2855) ([PR #3012](https://github.com/containers/podman-desktop/pull/3012))\\n- Dynamic breadcrumbs ([PR #3119](https://github.com/containers/podman-desktop/pull/3119))\\n- Icons on form pages ([PR #3155](https://github.com/containers/podman-desktop/pull/3155))\\n- Switch more pages to formpage ([PR #3162](https://github.com/containers/podman-desktop/pull/3162))\\n- Add rename image button ([PR #2588](https://github.com/containers/podman-desktop/pull/2588))\\n- Fixed headers, improved scrollbars ([PR #2863](https://github.com/containers/podman-desktop/pull/2863))\\n- Reports warnings on failed kube deploy, fixes error out ([PR #3050](https://github.com/containers/podman-desktop/pull/3050))\\n- Kube context on statusbar ([PR #2755](https://github.com/containers/podman-desktop/pull/2755))\\n- Install provider if not installed when clicking on create new button (#2706) ([PR #2817](https://github.com/containers/podman-desktop/pull/2817))\\n- Add tag and authenticated push capacity to the extension API ([PR #2876](https://github.com/containers/podman-desktop/pull/2876))\\n- Add navigation bar e2e tests ([PR #2950](https://github.com/containers/podman-desktop/pull/2950))\\n\\n---\\n\\n## Documentation Updates\\n\\n- Fix documentation for building image of extensions ([PR #2873](https://github.com/containers/podman-desktop/pull/2873))\\n- Add Minikube install docs ([PR #2824](https://github.com/containers/podman-desktop/pull/2824))\\n- Add Minikube documentation ([PR #2694](https://github.com/containers/podman-desktop/pull/2694))\\n- Updated Building an image procedure ([PR #2964](https://github.com/containers/podman-desktop/pull/2964))\\n- Starting a container ([PR #2958](https://github.com/containers/podman-desktop/pull/2958))\\n- Pulling an image ([PR #2956](https://github.com/containers/podman-desktop/pull/2956))\\n- Updated selecting containers to run in a pod ([PR #2970](https://github.com/containers/podman-desktop/pull/2970))\\n- Pushing an image to a registry ([PR #2969](https://github.com/containers/podman-desktop/pull/2969))\\n- How to add an insecure registry ([PR #2953](https://github.com/containers/podman-desktop/pull/2953))\\n- Add documentation for lima ([PR #2995](https://github.com/containers/podman-desktop/pull/2995))\\n- Replace broken link to podman.io ([PR #2994](https://github.com/containers/podman-desktop/pull/2994))\\n- Authenticating to a pre-configured registry ([PR #2965](https://github.com/containers/podman-desktop/pull/2965))\\n- Lima is not a container engine ([PR #3051](https://github.com/containers/podman-desktop/pull/3051))\\n- Using the Troubleshooting page ([PR #3083](https://github.com/containers/podman-desktop/pull/3083))\\n- View and select your current Kubernetes context in the status bar ([PR #3090](https://github.com/containers/podman-desktop/pull/3090))\\n\\n---\\n\\n## Notable Bug Fixes\\n\\n- Deleting a running pod generates an error ([PR #2827](https://github.com/containers/podman-desktop/pull/2827))\\n- If kubeconfig is empty, does not try to do things, cancel ([PR #2874](https://github.com/containers/podman-desktop/pull/2874))\\n- Async telemetry startup ([PR #2885](https://github.com/containers/podman-desktop/pull/2885))\\n- Do not block startup while waiting for kube resource refresh ([PR #2884](https://github.com/containers/podman-desktop/pull/2884))\\n- Images list too wide ([PR #2918](https://github.com/containers/podman-desktop/pull/2918))\\n- Compose deactivate function never called ([PR #2922](https://github.com/containers/podman-desktop/pull/2922))\\n- Auto-scrolling on form pages, layout issues ([PR #2927](https://github.com/containers/podman-desktop/pull/2927))\\n- Show current context in quick pick ([PR #2920](https://github.com/containers/podman-desktop/pull/2920))\\n- Remove sticky position of loader in dashboard UI (#2535) ([PR #2959](https://github.com/containers/podman-desktop/pull/2959))\\n- Undo change that broke the website ([PR #2992](https://github.com/containers/podman-desktop/pull/2992))\\n- Detailspage, resizing & consistency ([PR #2987](https://github.com/containers/podman-desktop/pull/2987))\\n- Quick pick click to close and over nav bar ([PR #2758](https://github.com/containers/podman-desktop/pull/2758))\\n- Only show empty screen when no pods ([PR #2929](https://github.com/containers/podman-desktop/pull/2929))\\n- Do not redirect to /pods when deleting pod in containerlist ([PR #2963](https://github.com/containers/podman-desktop/pull/2963))\\n- Bulk delete on pods should call the pod deletion ([PR #2979](https://github.com/containers/podman-desktop/pull/2979))\\n- Update nodejs version to 18 in .nvmrc to fix yarn install failure ([PR #2989](https://github.com/containers/podman-desktop/pull/2989))\\n- Website check targets ([PR #2996](https://github.com/containers/podman-desktop/pull/2996))\\n- Don\'t show exception to user ([PR #3034](https://github.com/containers/podman-desktop/pull/3034))\\n- Interpret arguments given to info command for example ([PR #3015](https://github.com/containers/podman-desktop/pull/3015))\\n- Change defaults for Podman machine ([PR #3061](https://github.com/containers/podman-desktop/pull/3061))\\n- Normalize development/production folders path ([PR #3113](https://github.com/containers/podman-desktop/pull/3113))\\n- Calculate machine socket path for linux ([PR #3070](https://github.com/containers/podman-desktop/pull/3070))\\n- Replace backslash with slash so to support rendering on Windows (#3120) ([PR #3122](https://github.com/containers/podman-desktop/pull/3122))\\n- Keep stdout and stderr in the error object for Docker Desktop extensions ([PR #3014](https://github.com/containers/podman-desktop/pull/3014))\\n- Mark task completed if there\'s a failure ([PR #3016](https://github.com/containers/podman-desktop/pull/3016))\\n- Handle invalid kubeconfig file ([PR #3129](https://github.com/containers/podman-desktop/pull/3129))\\n- Do not remove registries when podman extension is stopping ([PR #3136](https://github.com/containers/podman-desktop/pull/3136))\\n- Warning should be amber ([PR #3153](https://github.com/containers/podman-desktop/pull/3153))\\n- Load user extensions from plugins as removable ([PR #3152](https://github.com/containers/podman-desktop/pull/3152))\\n- Images with spaces in entrypoints or commands fail to start ([PR #3161](https://github.com/containers/podman-desktop/pull/3161))\\n- Scrolling offscreen when clicking checkbox ([PR #3178](https://github.com/containers/podman-desktop/pull/3178))\\n- Avoid messagebox expanding offscreen ([PR #2778](https://github.com/containers/podman-desktop/pull/2778))\\n- Release-notes-generator run failure ([PR #2752](https://github.com/containers/podman-desktop/pull/2752))\\n- Unable to do a new build if the previous one failed ([PR #2721](https://github.com/containers/podman-desktop/pull/2721))\\n\\n---\\n\\n## Community Thank You\\n\\n\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make Podman Desktop even better.\\n\\nA big shoutout to [@afbjorklund](https://github.com/afbjorklund), [@tuckerrc](https://github.com/tuckerrc) and [@evanshortiss](https://github.com/evanshortiss) who contributed to this release!\\n\\n---\\n\\n## Final notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.2.0) and [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.2.0).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"podman-desktop-release-1.1","metadata":{"permalink":"/blog/podman-desktop-release-1.1","source":"@site/blog/2023-06-08-release-1.1.md","title":"Release Notes - Podman Desktop 1.1","description":"Podman Desktop 1.1 has been released!","date":"2023-06-08T00:00:00.000Z","formattedDate":"June 8, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"},{"label":"openshift","permalink":"/blog/tags/openshift"}],"readingTime":2.465,"hasTruncateMarker":true,"authors":[{"name":"Tim deBoer","title":"Architect","url":"https://github.com/deboer-tim","imageURL":"https://github.com/deboer-tim.png","key":"deboer"}],"frontMatter":{"title":"Release Notes - Podman Desktop 1.1","description":"Podman Desktop 1.1 has been released!","slug":"podman-desktop-release-1.1","authors":["deboer"],"tags":["podman-desktop","release","kubernetes","openshift"],"hide_table_of_contents":false,"image":"/img/blog/podman-desktop-release-1.1.webp"},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 1.2","permalink":"/blog/podman-desktop-release-1.2"},"nextItem":{"title":"Release Notes - Podman Desktop 1.0","permalink":"/blog/podman-desktop-release-1.0"}},"content":"import ReactPlayer from \'react-player\'\\n\\nPodman Desktop 1.1 Release! \ud83c\udf89\\n\\nThis is primarily a bug-fix release to fix a few important issues, but we\'ve managed to squeeze in a few enhancements\\nalong the way.\\n\\n\x3c!--Main Features--\x3e\\n\\n- **Podman 4.5.1**: Podman 4.5.1 now included in Windows and Mac installers.\\n- **Extensions**: Update extensions from within Podman Desktop.\\n- **Lima Support**: Choose engine type and override its name from the settings.\\n- **UX and UI Improvements**: New loading screen.\\n\\nPodman Desktop 1.1 is now available. [Click here to download it](/downloads)!\\n\\n![Podman-desktop-1-1-hero](img/podman-desktop-release-1.1/podman-desktop-release-1.1.png)\\n\\n\x3c!--truncate--\x3e\\n\\n---\\n\\n## Release Details\\n\\n### Podman v4.5.1\\n\\nPodman Desktop 1.1 moves up to [Podman 4.5.1](https://github.com/containers/podman/releases/tag/v4.5.1).\\n\\n### Extensions\\n\\nOptional extensions will follow their own lifecycle and update independently from Podman Desktop. As of\\nthis release you\'ll be able to see when there is an update available and install from within\\nPodman Desktop [#2655](https://github.com/containers/podman-desktop/pull/2655).\\n\\nWe\'ve also added options in **Settings > Preferences** to\\nautomatically check for and install extension updates.\\n\\n\\n\\n![Update extensions](img/podman-desktop-release-1.1/update-extensions.png)\\n\\n### Lima Support\\n\\nThanks to contributor [Anders Bj\xf6rklund](https://github.com/afbjorklund), we have some improvements to the\\nLima extension! In **Settings > Preferences** you can select which\\nengine type Lima runs on and override the instance name [#2674](https://github.com/containers/podman-desktop/pull/2674).\\n\\n![Lima preferences](https://user-images.githubusercontent.com/10364051/241755966-0a6a293b-b18e-4222-9c40-abd6c114d464.png)\\n\\n### Other UI and UX Improvements\\n\\n#### New Loading Screen\\n\\nWe have a new loading screen, Podman Desktop style! [#2743](https://github.com/containers/podman-desktop/pull/2743).\\n\\n\\n\\n---\\n\\n## Other Notable Enhancements\\n\\n- Docker-compose can be installed system-wide [#2718](https://github.com/containers/podman-desktop/pull/2718).\\n- Show warning when creating a pod with two containers that use the same port [#2671](https://github.com/containers/podman-desktop/pull/2671).\\n- Display Kubernetes context name in pod label [#2634](https://github.com/containers/podman-desktop/pull/2634).\\n- Add Docker compatibility button using flatpak-spawn [#1925](https://github.com/containers/podman-desktop/pull/1925).\\n- Improve UI consistency of Pull Image page [#2604](https://github.com/containers/podman-desktop/pull/2604).\\n\\n---\\n\\n## Notable Bug Fixes\\n\\n- Could not install extensions on Windows 10 [#2762](https://github.com/containers/podman-desktop/pull/2762).\\n- Could not use locally built images on Kubernetes [#2710](https://github.com/containers/podman-desktop/pull/2710).\\n- Dashboard still suggests update after installation [#2648](https://github.com/containers/podman-desktop/pull/2648).\\n- Could not Play Kubernetes YAML to Podman on Windows [#2594](https://github.com/containers/podman-desktop/pull/2594).\\n- Pod label wasn\'t always shown in list [#2614](https://github.com/containers/podman-desktop/pull/2614).\\n- Dashboard button state was resetting [#2584](https://github.com/containers/podman-desktop/pull/2584).\\n- Change checkbox style so they don\'t look like stop buttons [#2723](https://github.com/containers/podman-desktop/pull/2723).\\n\\n---\\n\\n## Community Thank You\\n\\n\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make Podman Desktop even better. In this\\nsprint we received pull requests from the following people:\\n\\n- [wangxiaolei](https://github.com/fatelei) in [#2602 - Add meaningful tooltips to build, pull, prune buttons](https://github.com/containers/podman-desktop/pull/2602)\\n- [AsciiWolf](https://github.com/AsciiWolf) in [#2607 - fix typing error in Flathub name](https://github.com/containers/podman-desktop/pull/2607) and [#2609 - fix Flatpak install instructions](https://github.com/containers/podman-desktop/pull/2609)\\n- [Anders Bj\xf6rklund](https://github.com/afbjorklund) in [#2674 - Select engine for Lima provider](https://github.com/containers/podman-desktop/pull/2674)\\n\\n---\\n\\n## Final notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.1.0) and [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.1.0).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"podman-desktop-release-1.0","metadata":{"permalink":"/blog/podman-desktop-release-1.0","source":"@site/blog/2023-05-17-release-1.0.md","title":"Release Notes - Podman Desktop 1.0","description":"Podman Desktop 1.0 has been released!","date":"2023-05-17T00:00:00.000Z","formattedDate":"May 17, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"},{"label":"kind","permalink":"/blog/tags/kind"},{"label":"openshift","permalink":"/blog/tags/openshift"}],"readingTime":5,"hasTruncateMarker":true,"authors":[{"name":"Tim deBoer","title":"Architect","url":"https://github.com/deboer-tim","imageURL":"https://github.com/deboer-tim.png","key":"deboer"}],"frontMatter":{"title":"Release Notes - Podman Desktop 1.0","description":"Podman Desktop 1.0 has been released!","slug":"podman-desktop-release-1.0","authors":["deboer"],"tags":["podman-desktop","release","kubernetes","kind","openshift"],"hide_table_of_contents":false,"image":"/img/blog/podman-desktop-release-1.0.jpg"},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 1.1","permalink":"/blog/podman-desktop-release-1.1"},"nextItem":{"title":"Release Notes - Podman Desktop 0.15","permalink":"/blog/podman-desktop-release-0.15"}},"content":"import ReactPlayer from \'react-player\'\\n\\nPodman Desktop 1.0 Release! \ud83c\udf89\\n\\nWe still have many things planned, but with a little polish and a few more bug fixes we\\nfelt we\'ve reached a level of maturity and it is now time to declare our 1.0 release.\\n\\nThank you to everyone who has been with us on this journey so far! Please keep the\\nfeedback coming!\\n\\n\x3c!--Main Features--\x3e\\n\\n- **Highlighting Featured Extensions**: Easily find and install new extensions.\\n- **Featured Extensions**: Two new extensions supporting OpenShift.\\n- **Podman Machine as Root**: Ability to run a Podman machine as root.\\n- **UX and UI Improvements**: Opening external websites, editing numbers, and tooltips.\\n\\nPodman Desktop 1.0 is now available. [Click here to download it](/downloads)!\\n\\n![Podman-desktop-1-0-hero](img/podman-desktop-release-1.0/podman-desktop-release-1.0.jpg)\\n\\n\x3c!--truncate--\x3e\\n\\n---\\n\\n## Release Details\\n\\n### Highlighting Featured Extensions\\n\\nA critical part of our vision for Podman Desktop is the ability to install extensions to\\nsupport additional container engines, Kubernetes providers, or other tools. However, it\\nhas not been easy to discover new extensions.\\n\\nWith 1.0 we show a list of featured extensions in the **Welcome**\\n[#2354](https://github.com/containers/podman-desktop/pull/2354), the **Dashboard** and in\\n** Settings > Extensions**\\n[#2355](https://github.com/containers/podman-desktop/pull/2355). Check out the new\\nextensions for **Red Hat OpenShift Local** and the **Developer Sandbox for Red Hat OpenShift**!\\n\\n![Featured extensions](img/podman-desktop-release-1.0/featured-extensions.png)\\n\\n### Featured Extensions\\n\\nSpeaking of extensions, let\'s take a minute to turn the spotlight on these two!\\n\\nHave another idea for extending Podman Desktop? We would love to hear from you or see\\nwhat you can create with the [Extension documentation](/docs/extensions),\\nand feature your extension here.\\n\\n#### Red Hat OpenShift Local\\n\\nOpenShift Local is a fully-featured single-node OpenShift cluster designed to run on your local computer.\\nWith this extension you can install, start/stop, and deploy pods or YAML to OpenShift Local,\\nallowing you to test your applications on a full OpenShift environment, ensuring a consistent\\nexperience between development, test, and production.\\n\\nThe recent addition of the MicroShift preset provides a lighter, optimized option that\\nstarts faster and uses less resources for deployments that still want OpenShift compatibility\\nwithout the full set of OpenShift services.\\n\\n![OpenShift Local](img/podman-desktop-release-1.0/openshift-local.png)\\n\\n#### Developer Sandbox for Red Hat OpenShift\\n\\nThe OpenShift Developer Sandbox is a free, cloud-based OpenShift environment that allows developers to\\ncreate, build, and deploy applications to OpenShift for 30 days. With this extension you can sign up\\nand easily deploy pods or YAML to a hosted OpenShift environment without a local installation or\\nleaving Podman Desktop.\\n\\n![Developer Sandbox](img/podman-desktop-release-1.0/sandbox.png)\\n\\n### Podman Machine as Root\\n\\nWhen creating a Podman machine you can now decide to run as root [#2427](https://github.com/containers/podman-desktop/pull/2427). This is a prerequisite for some scenarios, such as running Kind on Windows.\\n\\n![Podman machine as root](img/podman-desktop-release-1.0/podman-root.png)\\n\\n### Other UI and UX Improvements\\n\\n#### Prompt to Open External Website\\n\\nIn the previous release links to external websites were blocked due to the security risk.\\nIn 1.0 you can click to see the URL and have the option of opening or copying it\\n[#2414](https://github.com/containers/podman-desktop/pull/2414).\\n\\n![External link dialog](img/podman-desktop-release-1.0/external-link.png)\\n\\n#### Editable Numeric Preferences\\n\\nTired of clicking +, +, +? Us too. Numeric preferences are now editable so\\nyou can directly enter the value you want\\n[#2368](https://github.com/containers/podman-desktop/pull/2368).\\n\\n![Editing numbers](img/podman-desktop-release-1.0/edit-number.png)\\n\\n#### Navigation tooltips\\n\\nWe like our new navigation bar, but the tooltips were slow to appear. This made it harder for new\\nusers to discover the pages and for power users to see the container/pod/image counts. The\\ntooltips are now a little nicer and appear immediately\\n[#2286](https://github.com/containers/podman-desktop/pull/2286).\\n\\n![Navigation tooltips](img/podman-desktop-release-1.0/nav-tooltips.png)\\n\\n---\\n\\n## Other Notable Enhancements\\n\\n- If you use a non-default Podman machine you are now prompted to make it the default, so\\n that command line tools will use the same machine [#2205](https://github.com/containers/podman-desktop/pull/2205).\\n\\n- Extensions can now be installed without requiring a running local container engine\\n [#2273](https://github.com/containers/podman-desktop/pull/2273).\\n\\n- When extensions fail to load there is a new state (failed!) and an error message\\n to help you fix or report the problem [#2424](https://github.com/containers/podman-desktop/pull/2424).\\n\\n- The showInputBox API has support for Markdown [#2418](https://github.com/containers/podman-desktop/pull/2418).\\n\\n---\\n\\n## Notable Bug Fixes\\n\\n- Fixed shared status when using multiple Podman 4.5 machines [#2441](https://github.com/containers/podman-desktop/pull/2441).\\n- Fixed hang on exit when telemetry is unreachable [#2431](https://github.com/containers/podman-desktop/pull/2431).\\n- Reduced initial Podman REST API calls to improve performance [#2419](https://github.com/containers/podman-desktop/pull/2419).\\n- **Play Kubernetes YAML** now honors the namespace [#2509](https://github.com/containers/podman-desktop/pull/2509).\\n- **Container** list was not remembering expand/collapsed status [#2491](https://github.com/containers/podman-desktop/pull/2491).\\n- Clear previous error when installing Docker extension [#2469](https://github.com/containers/podman-desktop/pull/2469).\\n- Ensure correct path with running Kind CLI [#2455](https://github.com/containers/podman-desktop/pull/2455).\\n- Use IPv4 over IPv6 by default [#2398](https://github.com/containers/podman-desktop/pull/2398).\\n- When changing the Kubernetes pod name, change the app name to match [#2389](https://github.com/containers/podman-desktop/pull/2389).\\n- Fixed incorrect pod status in **Containers** view [#2387](https://github.com/containers/podman-desktop/pull/2387).\\n- **Dashboard** wasn\'t correctly refreshing Podman status [#2359](https://github.com/containers/podman-desktop/pull/2359).\\n\\n---\\n\\n## Community Thank You\\n\\n\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make Podman Desktop even better. In this final\\nsprint we received pull requests from the following people:\\n\\n- [Taha Attari](https://github.com/TahaAttari) in [#2470 - Update docker command in importing-saved-containers.md](https://github.com/containers/podman-desktop/pull/2470)\\n- [Jason Greene](https://github.com/n1hility) in [#2431 - Fix hang on exit when telemetry endpoint is unreachable](https://github.com/containers/podman-desktop/pull/2431)\\n- [Anders Bj\xf6rklund](https://github.com/afbjorklund) in [#2571 - Fix the location of the lima podman socket](https://github.com/containers/podman-desktop/pull/2571) and [#2572 - Fix the state of the lima container provider](https://github.com/containers/podman-desktop/pull/2572)\\n- [Tucker Chapman](https://github.com/tuckerrc) in [#2567 - Add example image name in placeholder](https://github.com/containers/podman-desktop/pull/2567)\\n\\nThere are now a total of 54 people (and two bots!) who have contributed PRs to Podman Desktop, and we\'d\\nlike to extend an extra thanks to all of those outside of the immediate development team who contributed\\nto get us here:\\n\\n[afbjorklund](https://github.com/afbjorklund),\\n[alv67](https://github.com/alv67),\\n[anjannath](https://github.com/anjannath),\\n[ankanroy-code](https://github.com/ankanroy-code),\\n[arixmkii](https://github.com/arixmkii),\\n[cblecker](https://github.com/cblecker),\\n[cfergeau](https://github.com/cfergeau),\\n[chevdor](https://github.com/chevdor),\\n[chrisjsimpson](https://github.com/chrisjsimpson),\\n[cu8code](https://github.com/cu8code),\\n[doehyunbaek](https://github.com/doehyunbaek),\\n[dylanmtaylor](https://github.com/dylanmtaylor),\\n[eidottermihi](https://github.com/eidottermihi),\\n[elervik](https://github.com/elervik),\\n[emmanuelbernard](https://github.com/emmanuelbernard),\\n[evanfpearson](https://github.com/evanfpearson),\\n[gorkem](https://github.com/gorkem),\\n[idjohnson](https://github.com/idjohnson),\\n[imphil](https://github.com/imphil),\\n[iongion](https://github.com/iongion),\\n[jlosito](https://github.com/jlosito),\\n[KevinAtSesam](https://github.com/KevinAtSesam),\\n[lsm5](https://github.com/lsm5),\\n[Mitch9378](https://github.com/Mitch9378),\\n[n1hility](https://github.com/n1hility),\\n[osslate](https://github.com/osslate),\\n[PatentLobster](https://github.com/PatentLobster),\\n[pwright](https://github.com/pwright),\\n[rdwz](https://github.com/rdwz),\\n[redhatrises](https://github.com/redhatrises),\\n[rhatdan](https://github.com/rhatdan),\\n[RobotSail](https://github.com/RobotSail),\\n[rohit-rambade](https://github.com/rohit-rambade),\\n[rsvoboda](https://github.com/rsvoboda),\\n[sfrunza13](https://github.com/sfrunza13),\\n[shemanaev](https://github.com/shemanaev),\\n[sstosh](https://github.com/sstosh),\\n[stickster](https://github.com/stickster),\\n[TahaAttari](https://github.com/TahaAttari),\\n[ths83](https://github.com/ths83),\\n[Tony-Sol](https://github.com/Tony-Sol),\\n[tuckerrc](https://github.com/tuckerrc),\\n[ucomesdag](https://github.com/ucomesdag),\\n[xbabalov](https://github.com/xbabalov),\\nzezo2019.\\n\\n---\\n\\n## Final notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.0.0) and [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A1.0.1).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"podman-desktop-release-0.15","metadata":{"permalink":"/blog/podman-desktop-release-0.15","source":"@site/blog/2023-05-02-release-0.15.md","title":"Release Notes - Podman Desktop 0.15","description":"Podman Desktop 0.15 has been released!","date":"2023-05-02T00:00:00.000Z","formattedDate":"May 2, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"},{"label":"kind","permalink":"/blog/tags/kind"}],"readingTime":3.685,"hasTruncateMarker":true,"authors":[{"name":"Tim deBoer","title":"Architect","url":"https://github.com/deboer-tim","imageURL":"https://github.com/deboer-tim.png","key":"deboer"}],"frontMatter":{"title":"Release Notes - Podman Desktop 0.15","description":"Podman Desktop 0.15 has been released!","slug":"podman-desktop-release-0.15","authors":["deboer"],"tags":["podman-desktop","release","kubernetes","kind"],"hide_table_of_contents":false,"image":"/img/blog/podman-desktop-release-0.15.webp"},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 1.0","permalink":"/blog/podman-desktop-release-1.0"},"nextItem":{"title":"Setting up and running a Kubernetes cluster locally with Podman Desktop","permalink":"/blog/running-a-local-kubernetes-cluster-with-podman-desktop"}},"content":"import ReactPlayer from \'react-player\'\\n\\nPodman Desktop 0.15 - Cleanliness is next to Podliness!\\n\\nIt has only been two weeks since our last release, but we really wanted to complete a few scenarios,\\nfix a few bugs, and show off several design updates and UI improvements that we have been working on.\\n\\n\x3c!--Main Features--\x3e\\n\\n- **Podman Version**: Podman 4.5 now included in Windows and Mac installers.\\n- **Kind Ingress**: Creating an ingress to expose services outside the Kind cluster.\\n- **Podliness**: Ability to choose external ports when podifying containers.\\n- **Cleanliness**: New navigation bar, dialog, and palette update.\\n- **UX and UI Improvements**: Markdown support for extensions.\\n\\nPodman Desktop 0.15 is now available. [Click here to download it](/downloads)!\\n\\n![Podman-desktop-0-15-hero](img/podman-desktop-release-0.15/podman-desktop-release-0.15.webp)\\n\\n\x3c!--truncate--\x3e\\n\\n---\\n\\n## Release Details\\n\\n### Update to Podman v4.5.O\\n\\nPodman Desktop 0.15 embeds [Podman 4.5.0](https://github.com/containers/podman/releases/tag/v4.5.0) in\\nWindows and macOS installers [#2115](https://github.com/containers/podman-desktop/issues/2115).\\n\\n### Kind Ingress\\n\\nWait a minute, didn\'t we enable this last release? Well yes, last time we did add support for installing\\nthe Contour ingress controller on Kind [#1675](https://github.com/containers/podman-desktop/issues/1675),\\nbut you still couldn\'t access your containers without the corresponding ingress.\\n\\nThis release adds a simple checkbox you can use when deploying to Kind to create an ingress and\\nmake your service accessible [#1322](https://github.com/containers/podman-desktop/issues/1322).\\n\\n\\n\\n### Podliness: Ability to Choose External Ports when Podifying Containers\\n\\nWhen you create a pod from of a set of containers (Podifying!), you probably don\'t want to expose every\\nsingle port from every container to the world. With an updated panel you can now see which ports each container\\nexposes, pick which should remain visible outside the pod, and which are for internal use\\n[#2232](https://github.com/containers/podman-desktop/pull/2232).\\n\\n![Podify page](https://user-images.githubusercontent.com/49404737/234527674-ed14f52c-8f66-445f-8038-c8135bb61136.gif)\\n\\n### Cleanliness: New Navigation Bar, Dialogs, and Palette\\n\\nIt was time to catch up on some design ideas and do some UI cleanup!\\n\\n#### New Navgation Bar\\n\\nThe navigation bar is now always fixed on the left size, without labels. This opens up more space\\nfor the content on each page, and is easier to jump in and out of ** Settings**.\\n[#2167](https://github.com/containers/podman-desktop/issues/2167)\\n\\n![Navigation bar](img/podman-desktop-release-0.15/navigation.png)\\n\\n#### Updated Dialogs\\n\\nWe wanted messages and dialog boxes to feel a bit more integrated, so we have a new message box\\n[#1808](https://github.com/containers/podman-desktop/pull/1808) and use it for all dialogs opened by\\nextensions, pruning containers/pods/images/volumes [#2138](https://github.com/containers/podman-desktop/pull/2138),\\nand updating Podman Desktop itself [#2249](https://github.com/containers/podman-desktop/pull/2249).\\n\\n![Dialog](img/podman-desktop-release-0.15/dialog.png)\\n\\n#### Colors\\n\\nWe spent some time tweaking colors and closing on our final palette\\n[#2199](https://github.com/containers/podman-desktop/pull/2199), updating the colors in the terminal & detail page\\n[#2222](https://github.com/containers/podman-desktop/pull/2222), tweaking the navigation and main page colors\\n[#2223](https://github.com/containers/podman-desktop/pull/2223),\\nand improving the look of forms [#2156](https://github.com/containers/podman-desktop/issues/2156).\\n\\nWe\'re not done yet, but hopefully you will notice a more polished, consistent, good-looking application!\\n\\n### Other UI and UX Improvements\\n\\n#### Markdown Support for Extensions\\n\\nWe added a new component to display markdown [#2219](https://github.com/containers/podman-desktop/pull/2219) and\\nenabled it in preferences [#2253](https://github.com/containers/podman-desktop/pull/2253), and\\nprovider properties/creation pages [#2152](https://github.com/containers/podman-desktop/issues/2152).\\nWe can now embed links and other formatting in preferences, and extensions can use them in many places, for example:\\n\\n![Markdown](img/podman-desktop-release-0.15/markdown.png)\\n\\n---\\n\\n## Other Notable Enhancements\\n\\n- We know which **Settings** page is used the most often, so now it\'s the default: ** Settings > Resources** [#2105](https://github.com/containers/podman-desktop/issues/2105).\\n\\n- Extensions can now use the Tasks API to let long running tasks continue in the background [#2019](https://github.com/containers/podman-desktop/issues/2019) and the existing withProgress API also uses the task manager now\\n [#2187](https://github.com/containers/podman-desktop/pull/2187).\\n\\n![Task API](https://user-images.githubusercontent.com/695993/233560830-85cfa685-5dcd-4efa-9fae-730a8a9eef3b.gif)\\n\\n- Images are now sorted by age [#2311](https://github.com/containers/podman-desktop/pull/2311).\\n\\n- When you start/stop a container or pod, the button is now animated instead of having an separate spinner\\n [#2101](https://github.com/containers/podman-desktop/issues/2101).\\n\\n- The ** Settings > Preferences** page now has a search bar [#2128](https://github.com/containers/podman-desktop/pull/2128).\\n\\n![Search preferences](img/podman-desktop-release-0.15/prefs.png)\\n\\n- The Help page has been updated [#431](https://github.com/containers/podman-desktop/issues/431).\\n\\n![Updated Help](img/podman-desktop-release-0.15/help.png)\\n\\n---\\n\\n## Notable Bug Fixes\\n\\n- There was no way to see log or outcome if you leave the Kind cluster creation page [#2079](https://github.com/containers/podman-desktop/issues/2079).\\n- Kind image load doesn\'t show a notification [#2225](https://github.com/containers/podman-desktop/issues/2225).\\n- Fix odd selection in ** Settings > Extensions** [#2130](https://github.com/containers/podman-desktop/issues/2130).\\n- Menus are now cleaned up properly when extensions are stopped [#2188](https://github.com/containers/podman-desktop/pull/2188).\\n- Kind clusters are now cleaned up when Podman machine is stopped [#2306](https://github.com/containers/podman-desktop/pull/2306).\\n\\n---\\n\\n## Final notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A0.15.0).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"running-a-local-kubernetes-cluster-with-podman-desktop","metadata":{"permalink":"/blog/running-a-local-kubernetes-cluster-with-podman-desktop","source":"@site/blog/2023-04-19-running-a-local-kubernetes-cluster-with-podman-desktop.md","title":"Setting up and running a Kubernetes cluster locally with Podman Desktop","description":"Setting up and running a Kubernetes cluster locally with Podman Desktop","date":"2023-04-19T00:00:00.000Z","formattedDate":"April 19, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"story","permalink":"/blog/tags/story"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"},{"label":"kind","permalink":"/blog/tags/kind"}],"readingTime":8.86,"hasTruncateMarker":true,"authors":[{"name":"Fabrice Flore-Thebault","title":"Technical writer","url":"https://github.com/themr0c","imageURL":"https://github.com/themr0c.png","key":"themr0c"}],"frontMatter":{"title":"Setting up and running a Kubernetes cluster locally with Podman Desktop","description":"Setting up and running a Kubernetes cluster locally with Podman Desktop","slug":"running-a-local-kubernetes-cluster-with-podman-desktop","authors":["themr0c"],"tags":["podman-desktop","story","kubernetes","kind"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 0.15","permalink":"/blog/podman-desktop-release-0.15"},"nextItem":{"title":"Release Notes - Podman Desktop 0.14","permalink":"/blog/podman-desktop-release-0.14"}},"content":"In this blog post you will learn to use Podman Desktop to run the [Kubernetes documentation example: Deploying PHP Guestbook application with Redis](https://kubernetes.io/docs/tutorials/stateless-application/guestbook/).\\n\\nOn the agenda:\\n\\n1. Installing Podman Desktop.\\n1. Installing and initializing your container engine: Podman.\\n1. Installing and starting your local Kubernetes provider: Kind.\\n1. Starting the Redis leader.\\n1. Starting and scaling the Redis followers.\\n1. Starting and exposing the Guestbook frontend.\\n\\n\x3c!--truncate--\x3e\\n\\n## Installing Podman Desktop\\n\\nYou need Podman Desktop.\\n\\n1. Go to [Podman Desktop installation documentation](/docs/installation).\\n1. Click on your platform name: [Windows](/docs/installation/windows-install), [macOS](/docs/installation/macos-install), or [Linux](/docs/installation/linux-install).\\n1. Follow the instructions. Stick to the default installation method.\\n1. Start **Podman Desktop**.\\n\\nAt this point, you have a graphical user interface to:\\n\\n- Install Podman and Kind.\\n- Control and work with your container engines and Kubernetes clusters.\\n- Run your application on your container engine and migrate it to Kubernetes.\\n\\n## Installing and initializing your container engine: Podman\\n\\nPodman Desktop can control various container engines, such as:\\n\\n- Docker\\n- Lima\\n- Podman\\n\\nConsider installing the Podman container engine for:\\n\\n- Added security\\n- No daemon\\n- Open source\\n\\nContainers are a Linux technology.\\n\\n- On Linux, you can install Podman natively.\\n See: [Installing Podman on Linux](https://podman.io/docs/installation#installing-on-linux).\\n- On macOS and Windows, Podman requires to run in a Linux virtual machine: the Podman machine.\\n Use Podman Desktop to install Podman and initialize your Podman machine:\\n\\n#### Procedure\\n\\n1. Open Podman Desktop **Dashboard**\\n1. The **Dashboard** displays _Podman Desktop was not able to find an installation of Podman_.\\n1. Click on **Install**.\\n1. Podman Desktop checks the prerequisites to install Podman Engine. When necessary, follow the instructions to install prerequisites.\\n1. Podman displays the dialog: _Podman is not installed on this system, would you like to install Podman?_. Click on **Yes** to install Podman.\\n1. Click on **Initialize and start**.\\n\\n#### Verification\\n\\n- The **Dashboard** displays _Podman is running_.\\n\\n ![Podman is running](img/running-a-local-kubernetes-cluster-with-podman-desktop/podman-is-running.png)\\n\\nAt this point, you can start working with containers.\\n\\n## Installing and starting your local Kubernetes provider: Kind\\n\\nYou want to deploy your application to a local Kubernetes cluster.\\n\\nPodman Desktop can help you run Kind-powered local Kubernetes clusters on a container engine, such as Podman.\\n\\nPodman Desktop helps you [installing the `kind` CLI](/docs/kind/installing):\\n\\n1. In the status bar, click on **Kind**, and follow the prompts.\\n1. When the `kind` CLI is available, the status bar does not display **Kind**.\\n1. On Windows, [configure Podman in rootful mode](/docs/kind/configuring-podman-for-kind-on-windows)\\n\\n ```shell-session\\n $ podman system connection default podman-machine-default-root\\n ```\\n\\n1. Go to ** Settings > Resources**\\n1. In the **\\"Podman Podman** tile, click on the **** icon to restart the Podman container engine.\\n1. In the **\\"Kind Kind** tile, click on the **Create new** button.\\n 1. **Name**: enter `kind-cluster`.\\n 1. **Provider Type**: select `podman`.\\n 1. **HTTP Port**: select `9090`.\\n 1. **HTTPS Port**: select `9443`.\\n 1. **Setup an ingress controller**: `Enabled`\\n 1. Click the **Create** button.\\n ![Create a Kind cluster screen](img/running-a-local-kubernetes-cluster-with-podman-desktop/create-a-kind-cluster.png)\\n1. After successful creation, click on the **Go back to resources** button\\n\\n#### Verification\\n\\n1. In ** Settings > Resources** your Kind cluster is running/\\n\\n ![Kind cluster is running](img/running-a-local-kubernetes-cluster-with-podman-desktop/kind-cluster-is-running.png)\\n\\n1. In the **Podman Desktop** tray, open the **Kubernetes** menu: you can set the context to your Kind cluster: `kind-kind-cluster`.\\n\\n ![Kind cluster Kubernetes context in the tray](img/running-a-local-kubernetes-cluster-with-podman-desktop/kind-cluster-context-in-the-tray.png)\\n\\n At this point, you can start working with containers, and your local Kubernetes cluster.\\n\\n#### Additional resources\\n\\n- [Creating a local Kind-powered Kubernetes cluster](/docs/kind/creating-a-kind-cluster)\\n\\n## Starting the Redis leader\\n\\nThe Guestbook application uses Redis to store its data.\\n\\nWith Podman Desktop, you can prepare the Redis leader image and container on your local container engine, and deploy the results to a Kubernetes pod and service.\\nThis is functionally equal to the `redis-leader` deployment that the Kubernetes example propose.\\n\\n#### Procedure\\n\\n1. Open ** Images > Pull an image**.\\n 1. **Image to Pull**: enter `docker.io/redis:6.0.5`\\n 1. Click **Pull image** to pull the image to your container engine local image registry.\\n 1. Click **Done** to get back to the images list.\\n1. ** Search images**: enter `redis:6.0.5` to find the image.\\n1. Click **** to open the **Create a container from image** dialog.\\n 1. **Container name**: enter `leader`,\\n 1. **Local port for `6379/tcp`**: `6379`.\\n 1. Click ** Start Container** to start the container in your container engine.\\n1. ** Search containers**: enter `leader` to find the running container.\\n1. Click **** to stop the container, and leave the `6379` port available for the Redis follower container.\\n\\n1. Click ** > Deploy to Kubernetes** to open the **Deploy generated pod to Kubernetes** screen.\\n\\n 1. **Pod Name**: enter `redis-leader`.\\n 1. **Use Kubernetes Services**: select **Replace `hostPort` exposure on containers by Services. It is the recommended way to expose ports, as a cluster policy might prevent to use `hostPort`.**\\n 1. **Expose service locally using Kubernetes Ingress**: deselect **Create a Kubernetes ingress to get access to the ports that this pod exposes, at the default ingress controller location. Example: on a default Kind cluster created with Podman Desktop: `http://localhost:9090`. Requirements: your cluster has an ingress controller`**.\\n 1. **Kubernetes namespaces**: select `default`.\\n 1. Click ** Deploy**.\\n ![Deploy generated leader pod to Kubernetes screen](img/running-a-local-kubernetes-cluster-with-podman-desktop/deploy-generated-leader-pod-to-kubernetes.png)\\n 1. Wait for the pod to reach the state: **Phase: Running**.\\n 1. Click **Done**.\\n\\n#### Verification\\n\\n- The ** Pods** screen lists the running `redis-leader` pod.\\n\\n ![leader pod is running](img/running-a-local-kubernetes-cluster-with-podman-desktop/leader-pod-is-running.png)\\n\\n## Starting the Redis followers\\n\\nAlthough the Redis leader is a single Pod, you can make it highly available and meet traffic demands by adding a few Redis followers, or replicas.\\n\\n**With Podman Desktop, you can prepare the Redis follower image and container on your local container engine, and deploy the results to Kubernetes pods and services.**\\nThis is functionally equal to the `redis-follower` deployment that the Kubernetes example propose.\\n\\n#### Procedure\\n\\n1. Open ** Images > Pull an image**.\\n 1. **Image to Pull**: enter `gcr.io/google_samples/gb-redis-follower:v2`\\n 1. Click **Pull image** to pull the image to your container engine local image registry.\\n 1. Click **Done** to get back to the images list.\\n1. ** Search images**: enter `gb-redis-follower:v2` to find the image.\\n1. Click **** to open the **Create a container from image** dialog.\\n 1. **Container name**: enter `follower`,\\n 1. **Local port for `6379/tcp`**: `6379`.\\n 1. Click ** Start Container** to start the container in your container engine.\\n1. ** Search containers**: enter `follower` to find the running container.\\n1. Click **** to stop the container: you do not need it to run in the container engine.\\n1. Click ** > Deploy to Kubernetes** to open the **Deploy generated pod to Kubernetes** screen.\\n 1. **Pod Name**: enter `redis-follower`.\\n 1. **Use Kubernetes Services**: select **Replace `hostPort` exposure on containers by Services. It is the recommended way to expose ports, as a cluster policy might prevent to use `hostPort`.**\\n 1. **Expose service locally using Kubernetes Ingress**: deselect **Create a Kubernetes ingress to get access to the ports that this pod exposes, at the default ingress controller location. Example: on a default Kind cluster created with Podman Desktop: `http://localhost:9090`. Requirements: your cluster has an ingress controller`**.\\n 1. **Kubernetes namespaces**: select `default`.\\n 1. Click ** Deploy**.\\n ![Deploy generated follower pod to Kubernetes screen](img/running-a-local-kubernetes-cluster-with-podman-desktop/deploy-generated-follower-pod-to-kubernetes.png)\\n 1. Wait for the pod to reach the state: **Phase: Running**.\\n 1. Click **Done**.\\n1. To add replicas, repeat the last step with another **Pod Name** value.\\n\\n#### Verification\\n\\n- The ** Pods** screen lists the running `redis-follower` pods.\\n\\n ![follower pods are running](img/running-a-local-kubernetes-cluster-with-podman-desktop/follower-pods-are-running.png)\\n\\n## Starting the default frontend\\n\\nNow that you have the Redis storage of your Guestbook up and running, start the Guestbook web servers.\\nLike the Redis followers, deploy the frontend using Kubernetes pods and services.\\n\\nThe Guestbook app uses a PHP frontend.\\nIt is configured to communicate with either the Redis follower or leader Services, depending on whether the request is a read or a write.\\nThe frontend exposes a JSON interface, and serves a jQuery-Ajax-based UX.\\n\\nWith Podman Desktop, you can prepare the Guestbook frontend image and container on your local container engine, and deploy the results to Kubernetes pods and services.\\nThis is functionally equal to the `frontend` deployment that the Kubernetes example propose.\\n\\n#### Procedure\\n\\n1. Open ** Images > Pull an image**.\\n 1. **Image to Pull**: enter `gcr.io/google_samples/gb-frontend:v5`\\n 1. Click **Pull image** to pull the image to your container engine local image registry.\\n 1. Wait for the pull to complete.\\n 1. Click **Done** to get back to the images list.\\n1. ** Search images**: enter `gb-frontend:v5` to find the image.\\n1. Click **** to open the **Create a container from image** dialog.\\n 1. **Container name**: enter `frontend`,\\n 1. **Local port for `80/tcp`**: `9000`.\\n 1. Click ** Start Container** to start the container in your container engine.\\n1. ** Search containers**: enter `frontend` to find the running container.\\n1. Click **** to stop the container: you do not need it to run in the container engine.\\n1. Click ** > Deploy to Kubernetes** to open the **Deploy generated pod to Kubernetes** screen.\\n 1. **Pod Name**: enter `frontend`.\\n 1. **Use Kubernetes Services**: select **Replace `hostPort` exposure on containers by Services. It is the recommended way to expose ports, as a cluster policy might prevent to use `hostPort`.**\\n 1. **Expose service locally using Kubernetes Ingress**: select **Create a Kubernetes ingress to get access to the ports that this pod exposes, at the default ingress controller location. Example: on a default Kind cluster created with Podman Desktop: `http://localhost:9090`. Requirements: your cluster has an ingress controller`**.\\n 1. **Kubernetes namespaces**: select `default`.\\n 1. Click ** Deploy**.\\n ![Deploy generated frontend pod to Kubernetes screen](img/running-a-local-kubernetes-cluster-with-podman-desktop/deploy-generated-frontend-pod-to-kubernetes.png)\\n 1. Wait for the pod to reach the state: **Phase: Running**.\\n 1. Click **Done**.\\n\\n#### Verification\\n\\n1. The ** Pods** screen lists the running `frontend` pod.\\n\\n ![`frontend` pod is running](img/running-a-local-kubernetes-cluster-with-podman-desktop/frontend-pod-is-running.png)\\n\\n1. Go to `http://localhost:9090`: the Guestbook application is running."},{"id":"podman-desktop-release-0.14","metadata":{"permalink":"/blog/podman-desktop-release-0.14","source":"@site/blog/2023-04-14-release-0.14.md","title":"Release Notes - Podman Desktop 0.14","description":"Podman Desktop 0.14 has been released!","date":"2023-04-14T00:00:00.000Z","formattedDate":"April 14, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"},{"label":"kind","permalink":"/blog/tags/kind"}],"readingTime":4.025,"hasTruncateMarker":true,"authors":[{"name":"Tim deBoer","title":"Architect","url":"https://github.com/deboer-tim","imageURL":"https://github.com/deboer-tim.png","key":"deboer"}],"frontMatter":{"title":"Release Notes - Podman Desktop 0.14","description":"Podman Desktop 0.14 has been released!","slug":"podman-desktop-release-0.14","authors":["deboer"],"tags":["podman-desktop","release","kubernetes","kind"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Setting up and running a Kubernetes cluster locally with Podman Desktop","permalink":"/blog/running-a-local-kubernetes-cluster-with-podman-desktop"},"nextItem":{"title":"Release Notes - Podman Desktop 0.13","permalink":"/blog/podman-desktop-release-0.13"}},"content":"import ReactPlayer from \'react-player\'\\n\\nPodman Desktop 0.14 - Our Kind-est release yet!\\n\\nWe have been working on a Kind extension for a while now, and decided it is time to promote it\\ninto a release just in time for KubeCon and CloudNativeCon Europe!\\n\\nWe\'re especially excited about releasing Kind because it finally shows the full purpose\\nof Podman Desktop: not just local container engines, but Kubernetes too. More importantly,\\nproviding tools that allow you to manage both environments and seamlessly move between them.\\n\\nSome of these features were available in development mode over the last few releases,\\nbut since they are now in the release build, we will do a full roundup and talk about\\nall the Kind features.\\n\\n\x3c!--Main Features--\x3e\\n\\n- **Kind Installation**: Install Kind from the status bar\\n- **Manage Kind Clusters**: Create and manage Kind clusters from ** Settings > Resources**\\n- **Using Kind**: Deploying YAML and sharing images to a cluster\\n- **Kind Ingress**: Install a Contour ingress controller\\n- **UX and UI Improvements**: Updated preferences and telemetry prompt\\n\\nPodman Desktop 0.14 is now available. [Click here to download it](/downloads)!\\n\\n![Podman-desktop-0-14-hero](img/podman-desktop-release-0.14/podman-desktop-release-0.14.png)\\n\\n\x3c!--truncate--\x3e\\n\\n---\\n\\n## Release details\\n\\n### Kind Installation\\n\\nGet Kind up and running in seconds! The Kind extension is now bundled as part of Podman Desktop\\n[1421](https://github.com/containers/podman-desktop/issues/1421)\\nand allows you to easily [install Kind directly from the status bar](/docs/kind/installing)\\n[1257](https://github.com/containers/podman-desktop/issues/1257).\\n\\nThe installed `kind` CLI is available from the system shell [1516](https://github.com/containers/podman-desktop/issues/1516),\\nallowing you to open a terminal window to `kind get clusters` or work with other tools.\\n\\n### Manage Kind Clusters\\n\\nOnce Kind is installed (or if you already had it), you can manage your clusters in ** Settings > Resources**.\\nFrom here you can [create Kind clusters](/docs/kind/creating-a-kind-cluster),\\nstart/stop [1953](https://github.com/containers/podman-desktop/issues/1953)\\nor delete [1977](https://github.com/containers/podman-desktop/issues/1977) them.\\n\\n![kind-clusters](img/podman-desktop-release-0.14/kind-clusters.png)\\n\\nThe Kind control plane runs as a container. You will see this container\\nin the **Container** list and can also start or stop it from there.\\n\\n### Using Kind\\n\\nNow that you have Kind installed and running, what can you do with it?\\nIf you like terminals, you can always open one up and use the Kind CLI to\\n[interact with your cluster](https://kind.sigs.k8s.io/docs/user/quick-start/#interacting-with-your-cluster).\\n\\nWithin Podman Desktop we have started with two ways to interact with the cluster.\\nThe first is the ability to play local YAML files on your Kind (or any other Kubernetes!) cluster [1261](https://github.com/containers/podman-desktop/issues/1261). This allows you to take existing Kubernetes YAML definitions -\\nyour deployments, services, or other objects - and deploy it to the cluster.\\n\\n\\n\\nAs you deploy pods, they will automatically appear in the list of **Pods** [1263](https://github.com/containers/podman-desktop/issues/1263), allowing you to start, stop, and interact them just like pods running on Podman.\\n\\nOne of the most common uses is to deploy a container that you have been running on Podman, and this will fail\\nif the image is not available in Kind. To solve this we have made it easy to push images from\\nPodman to Kind [1448](https://github.com/containers/podman-desktop/issues/1448).\\n\\n![push-image-kind](img/podman-desktop-release-0.14/push-image-kind.png)\\n\\n### Kind Ingress\\n\\nIf you deploy a pod to Kind, you are also going to want to reach it! To do this you will need to install a load balancer or\\ningress controller so that the pod is accessible from outside the cluster. We made it easy to install the Contour ingress\\ncontroller while creating a Kind cluster [1675](https://github.com/containers/podman-desktop/issues/1675),\\nso if you created your cluster with Podman Desktop it is already there!\\n\\n![kind-ingress](img/podman-desktop-release-0.14/kind-ingress.png)\\n\\nWe have several other Kind and Kubernetes features planned to expand the supported scenarios, but hopefully this\\nmakes it easy to get started with Kind and shows where we\'re headed. As always, feedback is appreciated!\\n\\n### UI and UX improvements\\n\\n#### Updated Preferences\\n\\nThe ** Settings > Preferences** page has been updated with a new design [1913](https://github.com/containers/podman-desktop/pull/1913),\\nmaking it easier to see and change preferences. Changes are live, no more Update button.\\n\\n![preferences](https://user-images.githubusercontent.com/49404737/229498507-e754b55c-dcbd-486d-9ee3-a1fe3bed7271.gif)\\n\\n#### Telemetry Prompt\\n\\nThe prompt to enable or disable telemetry has been moved from its own dialog into the **Welcome** screen.\\n[1927](https://github.com/containers/podman-desktop/pull/1927)\\nThis is more usable, one less prompt, and solves a window-layering issue for some users!\\n\\n![telemetry prompt](https://user-images.githubusercontent.com/19958075/229577331-365a9a01-0426-4482-a95d-f5dfe39af90a.png)\\n\\n---\\n\\n## Other notable enhancements\\n\\n- Extension support for opening an external URL [2028](https://github.com/containers/podman-desktop/pull/2028) and\\n accessing the clipboard [2023](https://github.com/containers/podman-desktop/pull/2023)\\n\\n---\\n\\n## Documentation\\n\\nNaturally, we have a section in the documentation just for [Kind](https://podman-desktop.io/docs/kind).\\n\\n---\\n\\n## Notable bug fixes\\n\\n- Avoid a dialog box if unable to check for updates [2062](https://github.com/containers/podman-desktop/pull/2062)\\n- Unable to get to the Dashboard if Kind (or Kubernetes) cluster was not running [2052](https://github.com/containers/podman-desktop/issues/2052)\\n\\n---\\n\\n## Final notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A0.14.0).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"podman-desktop-release-0.13","metadata":{"permalink":"/blog/podman-desktop-release-0.13","source":"@site/blog/2023-03-29-release-0.13.md","title":"Release Notes - Podman Desktop 0.13","description":"Podman Desktop 0.13 has been released!","date":"2023-03-29T00:00:00.000Z","formattedDate":"March 29, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"},{"label":"compose","permalink":"/blog/tags/compose"}],"readingTime":3.155,"hasTruncateMarker":true,"authors":[{"name":"Tim deBoer","title":"Architect","url":"https://github.com/deboer-tim","imageURL":"https://github.com/deboer-tim.png","key":"deboer"}],"frontMatter":{"title":"Release Notes - Podman Desktop 0.13","description":"Podman Desktop 0.13 has been released!","slug":"podman-desktop-release-0.13","authors":["deboer"],"tags":["podman-desktop","release","kubernetes","compose"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 0.14","permalink":"/blog/podman-desktop-release-0.14"},"nextItem":{"title":"5 things to know about Podman Desktop for a Docker user","permalink":"/blog/5-things-to-know-for-a-docker-user"}},"content":"import ReactPlayer from \'react-player\'\\n\\nThis release note covers Podman Desktop 0.13 release changes.\\n\\n\x3c!--Main Features--\x3e\\n\\n- **Podman Version**: Podman 4.4.4 now included in Windows and Mac installers.\\n- **Compose**: Support for installing Docker Compose.\\n- **Extensions**: Improved extension support for Podman Desktop with additional capabilities.\\n- **UX and UI Improvements**: Welcome page, task manager, resources, and update alerts.\\n\\nPodman Desktop 0.13 is now available. [Click here to download it](/downloads)!\\n\\n![Podman-desktop-0-13-hero](img/podman-desktop-release-0.13/podman-desktop-release-0.13.png)\\n\\n\x3c!--truncate--\x3e\\n\\n---\\n\\n## Release details\\n\\n### Update to Podman v4.4.4\\n\\nPodman Desktop 0.13 embeds [Podman 4.4.4](https://github.com/containers/podman/releases/tag/v4.4.4) in\\nWindows and macOS installers [#1456](https://github.com/containers/podman-desktop/pull/1456).\\n\\n### Compose support\\n\\nYou can install Docker Compose from the Podman Desktop UI [#1578](https://github.com/containers/podman-desktop/pull/1578). This will allow you use Compose workflows using Podman.\\n\\n### Extensions\\n\\nTo make it easier to extend Podman Desktop we have:\\n\\n- Published the [Podman Desktop Extension API](https://www.npmjs.com/package/@podman-desktop/api) to npmjs [#1727](https://github.com/containers/podman-desktop/pull/1727)\\n- Documented [how to create, publish, and install your own extensions](https://podman-desktop.io/docs/extensions)\\n- Expanded the API for `QuickPickInput` [#1839](https://github.com/containers/podman-desktop/pull/1839)\\n\\n### UI and UX improvements\\n\\n#### Welcome page [#1726](https://github.com/containers/podman-desktop/pull/1726)\\n\\nThe first time every user starts Podman Desktop, they will see a welcome page:\\n\\n![welcome-page](https://user-images.githubusercontent.com/19958075/225682776-e016ba31-5bb9-41d5-87ed-f93caeb3fb84.png)\\n\\nNote that the Welcome page will only appear the first time you run Podman Desktop 0.13.0, and none of your settings or assets in Podman Desktop will be affected by it.\\nOver time, this page will be expanded to help with initial setup and configuration.\\n\\n#### New Task Manager [#1724](https://github.com/containers/podman-desktop/pull/1724)\\n\\nA new Task Manager has been added to the status bar to see the progress (or return to) long running tasks. To start with, building images [#1725](https://github.com/containers/podman-desktop/pull/1725) and Podman machine [#1742](https://github.com/containers/podman-desktop/pull/1742) are using the task manager.\\n\\n![task-manager](img/podman-desktop-release-0.13/task-manager.png)\\n\\n#### Updated Resources Settings [#1582](https://github.com/containers/podman-desktop/pull/1582)\\n\\nThe ** Settings > Resources** page has been updated with a new design, making it easier to see and control your providers from a single place.\\n\\n![resources](https://user-images.githubusercontent.com/49404737/221908815-595715fe-4c95-4087-89e0-45e5544ed5c9.gif)\\n\\nThe other settings pages have been updated for consistency with this new design.\\n\\n#### Update Alerts [#1827](https://github.com/containers/podman-desktop/pull/1827)\\n\\nA new alert button will appear in the status bar when future updates are available.\\n\\n\\n\\n#### Prune buttons [#1481](https://github.com/containers/podman-desktop/pull/1481), [#1482](https://github.com/containers/podman-desktop/pull/1482), [#1484](https://github.com/containers/podman-desktop/pull/1484)\\n\\nWe\'ve added buttons to prune unused volumes [#1481](https://github.com/containers/podman-desktop/pull/1481), images [#1482](https://github.com/containers/podman-desktop/pull/1482) and pods [#1484](https://github.com/containers/podman-desktop/pull/1484).\\n\\n![prune-image](img/podman-desktop-release-0.13/prune-image.png)\\n\\n---\\n\\n## Other notable enhancements\\n\\n- Kubernetes pods are now shown in the Pods view [#1312](https://github.com/containers/podman-desktop/pull/1312)\\n- Easy button to fix Docker compatibility mode on macOS [#1697](https://github.com/containers/podman-desktop/pull/1697)\\n- Display extension icons [#1058](https://github.com/containers/podman-desktop/pull/1058)\\n- API to cancel long running tasks [#1777](https://github.com/containers/podman-desktop/pull/1777)\\n\\n---\\n\\n## Documentation\\n\\nThe documentation has new content:\\n\\n- [How to create, publish, and install your own Podman Desktop extensions](https://podman-desktop.io/docs/extensions)\\n- [Using Compose](https://podman-desktop.io/docs/compose/podman-compose)\\n- [Restarting Kind](https://podman-desktop.io/docs/kind)\\n\\n---\\n\\n## Notable bug fixes\\n\\n- Periodically check and refresh Podman connection on Windows and Mac [#1662](https://github.com/containers/podman-desktop/pull/1662)\\n- Fix inconsistent Log view behaviour [#1710](https://github.com/containers/podman-desktop/pull/1710)\\n- Don\'t create route for regular Kubernetes clusters [#1707](https://github.com/containers/podman-desktop/pull/1707)\\n- Fix copy button on empty screen [#1804](https://github.com/containers/podman-desktop/pull/1804)\\n- Register extension tray items correctly [#1778](https://github.com/containers/podman-desktop/pull/1778) and handle updates [#1800](https://github.com/containers/podman-desktop/pull/1800)\\n\\n---\\n\\n## Community thank you\\n\\n\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make Podman Desktop 0.13 even better:\\n\\n- [`Tony Soloveyv`](https://github.com/Tony-Sol) in [#1605 - Fix directories inconsistency in `~/.local/share/`](https://github.com/containers/podman-desktop/pull/1605)\\n- [`Oleg`](https://github.com/RobotSail) in [#1567 - Check for Flatpak when calling command from exec](https://github.com/containers/podman-desktop/pull/1567)\\n- [`Christoph Blecker`](https://github.com/cblecker) in [#1556 - Fix: Hide dock icon on macOS if starting minimized](https://github.com/containers/podman-desktop/pull/1556)\\n- [`Paul Wright`](https://github.com/pwright) in [#1604 - Docs: correct syntax of kind doc](https://github.com/containers/podman-desktop/pull/1604)\\n- [`Denis Golovin`](https://github.com/dgolovin) in [#1790 - Feat: add EventEmitter class to extension API](https://github.com/containers/podman-desktop/pull/1790)\\n- [`Christophe Fergeau`](https://github.com/cfergeau) in [#1642 - Fix: Pod list \\"an pod\\" typing error](https://github.com/containers/podman-desktop/pull/1642)\\n\\n## Final notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A0.13.0).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"5-things-to-know-for-a-docker-user","metadata":{"permalink":"/blog/5-things-to-know-for-a-docker-user","source":"@site/blog/2023-03-24-5-things-to-know-for-a-docker-user.md","title":"5 things to know about Podman Desktop for a Docker user","description":"Important things to know when switching from Docker Desktop to Podman Desktop","date":"2023-03-24T00:00:00.000Z","formattedDate":"March 24, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"docker","permalink":"/blog/tags/docker"},{"label":"migrating","permalink":"/blog/tags/migrating"}],"readingTime":4.285,"hasTruncateMarker":true,"authors":[{"name":"Florent Benoit","title":"Principal Software Engineer","url":"https://github.com/benoitf","imageURL":"https://github.com/benoitf.png","key":"benoitf"}],"frontMatter":{"title":"5 things to know about Podman Desktop for a Docker user","description":"Important things to know when switching from Docker Desktop to Podman Desktop","slug":"5-things-to-know-for-a-docker-user","authors":["benoitf"],"tags":["podman-desktop","docker","migrating"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 0.13","permalink":"/blog/podman-desktop-release-0.13"},"nextItem":{"title":"Release Notes - Podman Desktop 0.12","permalink":"/blog/podman-desktop-release-0.12"}},"content":"The 5 things to know being a Docker user by using Podman Desktop:\\n\\n- **Use a single UI**: Podman Desktop works with several container engines, including Docker.\\n- The **compatibility mode**: How to ensure tools are working with Podman instead of Docker.\\n- **Compose** support: How to work with Compose files and Podman.\\n- **Kubernetes** support: How to use Kubernetes with Podman.\\n- **Security**: Use `rootless` mode or containers without root privileges.\\n\\n![5-things-to-know-for-a-docker-user-hero](img/5-things-to-know-for-a-docker-user/5-things-to-know-for-a-docker-user-hero.png)\\n\\n\x3c!--truncate--\x3e\\n\\n---\\n\\n## Use Podman Desktop to interact with containers running in Docker\\n\\nDocker Desktop provides a UI to interact with containers and images. But the UI depends on Docker API and it is not possible to use the UI with Docker and Podman at the same time.\\n\\nPodman Desktop is a multi-engine UI tool. The UI is compatible with the API of Docker and Podman. It means all containers and images from all the engines at the same time are visible in the UI.\\n\\nWhen migrating from Docker to Podman, you can use Podman Desktop to interact with containers running in Docker. Explore all commands and features of Podman Desktop and see all the resources from Docker.\\n\\n![Many container engines at the same time](img/5-things-to-know-for-a-docker-user/multiple-container-engines.png)\\n\\n## Docker compatibility mode\\n\\nUsing Podman with Podman Desktop or with the Podman CLI is straightforward. But some tools expect to find `docker` CLI or `docker.sock` socket. In this case, you have to use the compatibility mode of Podman.\\n\\n### Socket file compatibility\\n\\nThe socket compatibility mode is a feature of Podman that allows to bind the Podman socket under the Docker socket path.\\n\\nOn Windows the socket compatibility mode is always enabled by default. On macOS, by using the `.pkg installer` it is active by default. But when installing with `brew`, it will not be there because it requires some admin permissions.\\n\\nThat is not an issue because you can enable it by [invoking a CLI tool](https://podman-desktop.io/docs/migrating-from-docker/using-podman-mac-helper) that will setup the compatibility mode.\\n\\nFor example if you use [`TestContainers`](https://www.testcontainers.org/) in your Java project, you can use the compatibility mode to ensure that the tool will use Podman instead of Docker.\\n\\n### CLI compatibility\\n\\nIf you have scripts relying on `docker` CLI, you can use the compatibility mode to ensure that the tool is working with Podman instead of Docker.\\n\\nIf you have the `docker` CLI installed on your computer, you can use the socket file compatibility of docker to ensure that the tool is working with Podman engine instead of Docker.\\n\\nIf you do not have the `docker` CLI installed on your computer, you can [Create a script](https://podman-desktop.io/docs/migrating-from-docker/emulating-docker-cli-with-podman) called `docker` that will call the `podman` CLI\\n\\n**_NOTE:_** creating a shell prompt alias, for example `alias docker=podman`, will not work inside scripts that you call.\\n\\n## Compose\\n\\nAs a user of Docker, you might use `docker compose` (or `docker-compose`) to run some of your applications.\\n\\nFor now Podman does not include a `Compose` support directly in the CLI with a command `podman compose`.\\n\\n`Compose` can work with the Podman socket.\\n\\nBased on the compatibility mode (see [section about Docker compatibility mode](#docker-compatibility-mode)):\\n\\n- Enabled: you can use the `compose` binary to run your applications.\\n- Disabled: you need to [export the environment variable DOCKER_HOST](https://podman-desktop.io/docs/migrating-from-docker/using-the-docker_host-environment-variable) before running compose.\\n\\nYou can now use the `compose` binary to run your applications and it will use Podman engine.\\n\\nPodman Desktop has a `compose` extension that can fetch `compose` binary if not already available on the filesystem.\\n\\nPodman Desktop UI displays the containers created by `Compose` are in the same group.\\n\\n![Compose support in the UI](img/5-things-to-know-for-a-docker-user/compose-containers-in-ui.png)\\n\\n## Kubernetes\\n\\nIt is possible to start a Kubernetes cluster with Docker.\\n\\nPodman supports directly a subset of Kubernetes resources that you can use with `.yaml` files.\\n\\nFor example if you only want to create a `Pod` resource, you can use the `Play Kubernetes YAML` button from the `Containers` list screen with your `.yaml` file. No need to install or start a Kubernetes cluster.\\n\\n![Play Kubernetes YAML](img/5-things-to-know-for-a-docker-user/play-kubernetes-yaml.png)\\n\\nIt is possible to do the counter-part. Export the definition of a container or pod to a Kubernetes resource. You can use the `Generate kube` button from the kebab menu of a given container or pod.\\n\\n![Kubernetes generate](img/5-things-to-know-for-a-docker-user/kube-generate.png)\\n\\nPodman handles pods and in the Podman Desktop UI, you can see all the pods inside a Pod section. All containers inside the pod are in the same group.\\n\\n![Pods in the UI](img/5-things-to-know-for-a-docker-user/pods-in-ui.png)\\n\\n![Containers from pod](img/5-things-to-know-for-a-docker-user/containers-from-pod.png)\\n\\nAn experimental `kind` extension is bringing the creation of full-blown Kubernetes cluster with Podman.\\n\\n## Rootless mode\\n\\nOne of the difference of Docker and Podman is the way they handle containers. Docker requires root privileges to run containers by default. Podman can run containers without root privileges by default.\\n\\nIt means that for example, starting a container with a port < 1024 will not work. You need to use a port > 1024.\\n\\nIf you still need to create containers with a port < 1024, you can change the Podman machine configuration of the Podman Machine if you are on Windows or macOS.\\n\\nThe command is `podman machine set --rootful` to enable the execution with root privileges or `podman machine set --rootful=false` to switch back to rootless mode."},{"id":"podman-desktop-release-0.12","metadata":{"permalink":"/blog/podman-desktop-release-0.12","source":"@site/blog/2023-02-15-release-0.12.md","title":"Release Notes - Podman Desktop 0.12","description":"Podman Desktop 0.12 has been released!","date":"2023-02-15T00:00:00.000Z","formattedDate":"February 15, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"}],"readingTime":4.505,"hasTruncateMarker":true,"authors":[{"name":"Stevan Le Meur","title":"Product Manager","url":"https://github.com/slemeur","imageURL":"https://github.com/slemeur.png","key":"slemeur"}],"frontMatter":{"title":"Release Notes - Podman Desktop 0.12","description":"Podman Desktop 0.12 has been released!","slug":"podman-desktop-release-0.12","authors":["slemeur"],"tags":["podman-desktop","release","kubernetes"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"5 things to know about Podman Desktop for a Docker user","permalink":"/blog/5-things-to-know-for-a-docker-user"},"nextItem":{"title":"Release Notes - Podman Desktop 0.11","permalink":"/blog/podman-desktop-release-0.11"}},"content":"import ReactPlayer from \'react-player\'\\n\\nThis release note covers Podman Desktop 0.12 release changes.\\n\\n\x3c!--Main Features--\x3e\\n\\n- **Podman Version**: Podman 4.4.1 now included in Windows and Mac installers.\\n- **Containers Configuration**: Configure port mappings for an image without exported ports.\\n- **Windows Home Support**: Podman Desktop now supports Windows Home Edition.\\n- **Start minimized**: Option to start Podman Desktop minimized to system tray.\\n- **UX and UI Improvements**: Consistent actions, placeholder for logs, unified icons and others.\\n\\nPodman Desktop 0.12 is now available. [Click here to download it](/downloads)!\\n\\n![podman-desktop-0-12-hero](img/podman-desktop-release-0.12/podman-desktop-release-0.12.png)\\n\\n\x3c!--truncate--\x3e\\n\\n---\\n\\n## Release Details\\n\\n### Update to Podman v4.4.1 [#1456](https://github.com/containers/podman-desktop/pull/1456)\\n\\nPodman Desktop 0.12 embeds [Podman 4.4.1](https://github.com/containers/podman/releases/tag/v4.4.1) in Windows and macOS installers. Make sure to upgrade to benefit from the latest Podman features and bug fixes.\\n\\n### Configuring port mappings when an image has no exported port [#1265](https://github.com/containers/podman-desktop/pull/1265)\\n\\nWith the latest update, users can now add multiple local-to-remote port mappings when starting a container from an image that has no exported ports. This feature provides users with the flexibility to specify which ports on their local machine should map to which ports on the container, even if the container does not have any exported ports by default.\\n\\n![port-mapping](https://user-images.githubusercontent.com/49404737/215112797-86dcf3f0-121a-487e-a71f-ad41e91f93da.gif)\\n\\n### Installing Podman Desktop on Windows Home Edition [#1268](https://github.com/containers/podman-desktop/pull/1268)\\n\\nPodman Desktop 0.12 offers the ability to be installed on Windows Home Edition. The mechanism uses Virtual Machine Platform detection, instead of hyper-v. WSL2 is still requires but can be installed along with the installation process.\\n\\n![install-windows-home-edition-2](https://user-images.githubusercontent.com/436777/215121429-7c757aaa-a838-43db-98a2-78ad368f407e.png)\\n\\n### Option to automatically minimize Podman Desktop on login [#1374](https://github.com/containers/podman-desktop/pull/1374)\\n\\nPodman Desktop now provides a \\"start minimized\\" option when users log in onto the laptop. This option, available from the application\'s settings, can be useful if users want to automatically launch Podman Desktop at log in, but prefer not to have the window visible on the screen. With this feature, you can ensure that Podman Desktop is up and running in the background without any interruption to your workflows.\\n\\n- Go to ** Settings > Preferences > Login: Minimize** to activate the option.\\n\\n![minimize-on-login](https://user-images.githubusercontent.com/6422176/216651424-bcf756fd-7554-4b24-a838-e3e2f798fe6e.png)\\n\\n### UI and UX Improvements\\n\\n#### Improved actions consistency [#1225](https://github.com/containers/podman-desktop/pull/1225)\\n\\nActions displayed in the list pages for Images and Containers have been reviewed and made consistent between other pages.\\n\\n![action-consistency-1](https://user-images.githubusercontent.com/19958075/214104678-2d4148d7-484e-41f9-9da9-aecee328ae2b.png)\\n\\nActions displayed in the header of the container\'s details page have been improved so that the actions are always displayed in the same order.\\n\\n![action-consistency-2](https://user-images.githubusercontent.com/19958075/214104663-64fa0601-bb79-49bf-8226-6a78a88d3622.png)\\n\\n#### Consistent status icons for Pods, Containers, Images and Volumes [#1326](https://github.com/containers/podman-desktop/pull/1326), [#1377](https://github.com/containers/podman-desktop/pull/1377), [#1459](https://github.com/containers/podman-desktop/pull/1459) and [#1245](https://github.com/containers/podman-desktop/pull/1245)\\n\\nThe status icons for Pods, Containers, Images, and Volumes have been unified and use consistent states.\\n\\n![pods-status-icon](https://user-images.githubusercontent.com/19958075/216671859-bdd8dca4-56b7-40a8-961a-dcb6e01be61e.png)\\n\\nIcons in empty screens have been updated to use the same consistent SVG icon as the status icons.\\n\\n![empty-screen-2](https://user-images.githubusercontent.com/436777/214577726-f4cfde7b-017a-499d-a2a9-e50d455ffaf0.png)\\n\\n#### Placeholder when logs for containers are being fetched [#1353](https://github.com/containers/podman-desktop/pull/1353)\\n\\nA placeholder is now displayed when logs are being fetched.\\n![placeholder-loading-logs](https://user-images.githubusercontent.com/49404737/216952505-899308ae-183e-487a-b6e5-28832a0b6452.gif)\\n\\n#### Fixed alignment in badges from the navigation sidebar [#1357](https://github.com/containers/podman-desktop/pull/1357)\\n\\nBadges in the sidebar are now aligned with the title of the section.\\n\\n![alignement-badges](https://user-images.githubusercontent.com/49404737/216336502-2a34dea3-fd41-4184-8cfe-9226d70da070.png)\\n\\n#### Enable/disable open browser action based on container state [#1395](https://github.com/containers/podman-desktop/pull/1395) and [#1397](https://github.com/containers/podman-desktop/pull/1397)\\n\\nThe action to open the browser if a port is opened in a container, is now disabled when the container is stopped. It is also hidden in the kebab menu.\\n\\n![enable-disable-container-actions](https://user-images.githubusercontent.com/49404737/217284414-1bdc820b-30a8-485e-b0f9-485229026696.gif)\\n\\n---\\n\\n## Other Notable Enhancements\\n\\n- Display extension icons [#1058](https://github.com/containers/podman-desktop/pull/1058)\\n- Solid Icons [#1267](https://github.com/containers/podman-desktop/pull/1276)\\n- Differentiate icons compared to status icons [#1268](https://github.com/containers/podman-desktop/pull/1298)\\n- Refactors window initializing [#1309](https://github.com/containers/podman-desktop/pull/1309)\\n- Change window creation background color to dark [#1310](https://github.com/containers/podman-desktop/pull/1310)\\n- Use Podman `machine inspect` to read the address to connect to the Podman machine [#1364](https://github.com/containers/podman-desktop/pull/1364)\\n- Update the editor content when the pod name changes, and disable the deploy button when empty [#1403](https://github.com/containers/podman-desktop/pull/1403)\\n- Ability to manually set color of tray icon for Windows and Linux [#1243](https://github.com/containers/podman-desktop/pull/1243)\\n- Better UI feedback when starting pods [#1242](https://github.com/containers/podman-desktop/pull/1242)\\n\\n---\\n\\n## Documentation\\n\\nThe documentation had many editorial reviews, and new content.\\n\\n- [Link to simple WSL2 installation instructions](/docs/installation/windows-install)\\n- [Refresh Windows Installation](/docs/installation/windows-install)\\n- [Revamped installation introduction](/docs/installation)\\n- [Reorganized Linux installation](/docs/installation/linux-install)\\n- [Installing Podman with OpenShift Local](/docs/podman/installing-podman-with-openshift-local-on-windows)\\n- [Installing Podman Desktop on Windows in a restricted environment](/docs/installation/windows-install/installing-podman-desktop-and-podman-in-a-restricted-environment)\\n- [Fixed documentation on `podman-mac-helper` setup](/docs/migrating-from-docker/using-podman-mac-helper)\\n\\n---\\n\\n## Notable bug fixes\\n\\n- Fixed handling path with spaces on Windows when installing Podman [#1270](https://github.com/containers/podman-desktop/pull/1270)\\n- Removed padding from SVG icons [#1253](https://github.com/containers/podman-desktop/pull/1253)\\n- Website: fixed download links for Windows and macOS binaries [#1255](https://github.com/containers/podman-desktop/pull/1255)\\n- Fixed prettier commands on Windows [#1266](https://github.com/containers/podman-desktop/pull/1267)\\n- Fixed new xterm instance spawn when clicking the logs route [#1344](https://github.com/containers/podman-desktop/pull/1344)\\n- Fixed need to wait that telemetry has been initialized before proceeding [#1373](https://github.com/containers/podman-desktop/pull/1373)\\n- Fixed new xterm instance spawn when clicking the logs route in pod details[#1393](https://github.com/containers/podman-desktop/pull/1393)\\n- Fixed stop spinner if image cannot be retrieved [#1394](https://github.com/containers/podman-desktop/pull/1394)\\n- Fixed escape command with quotes only for Windows [#1462](https://github.com/containers/podman-desktop/pull/1462)\\n- Fixed random CRC status change [#1420](https://github.com/containers/podman-desktop/pull/1420)\\n\\n---\\n\\n## Community Thank You\\n\\n\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make Podman Desktop 0.12 even better:\\n\\n- [Philipp Wagner](https://github.com/imphil) in [#1274 - Link to simple WSL2 installation instructions](https://github.com/containers/podman-desktop/pull/1274)\\n- [Arthur S](https://github.com/arixmkii) in [#1364 - Get podman machine socketPath from podman machine inspect first](https://github.com/containers/podman-desktop/pull/1364)\\n- [Mitch West](https://github.com/Mitch9378) in [#1428 - Fix old documentation for \'podman-mac-helper setup\'](https://github.com/containers/podman-desktop/pull/1428)\\n\\n## Final Notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A0.12.0).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"podman-desktop-release-0.11","metadata":{"permalink":"/blog/podman-desktop-release-0.11","source":"@site/blog/2023-01-18-release-0.11.md","title":"Release Notes - Podman Desktop 0.11","description":"Podman Desktop 0.11 has been released!","date":"2023-01-18T00:00:00.000Z","formattedDate":"January 18, 2023","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"}],"readingTime":9.43,"hasTruncateMarker":true,"authors":[{"name":"Stevan Le Meur","title":"Product Manager","url":"https://github.com/slemeur","imageURL":"https://github.com/slemeur.png","key":"slemeur"}],"frontMatter":{"title":"Release Notes - Podman Desktop 0.11","description":"Podman Desktop 0.11 has been released!","slug":"podman-desktop-release-0.11","authors":["slemeur"],"tags":["podman-desktop","release","kubernetes"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 0.12","permalink":"/blog/podman-desktop-release-0.12"},"nextItem":{"title":"Release Notes - Podman Desktop 0.10","permalink":"/blog/podman-desktop-release-0.10"}},"content":"import ReactPlayer from \'react-player\'\\n\\nThis release note covers Podman Desktop 0.11 release changes.\\n\\n- **Air-Gapped Installation**: New all-in-one binaries for air-gapped installation.\\n- **Feedback**: Submit feedback directly from Podman Desktop.\\n- **Docker Compatibility Mode**: Information about the Docker compatibility mode.\\n- **Proxy Setting**: Toggle on/off the proxy setting.\\n- **Deploy to Kubernetes**: Select the namespace to deploy to Kubernetes.\\n- **Registry Configuration**: Simplified registry configuration for well known registries.\\n- **UX/UI Improvements**: View pod\'s container logs, better visual feedback, configurable editor font size, and more.\\n\\nPodman Desktop 0.11 is now available. [Click here to download it](/downloads)!\\n\\n\x3c!--truncate--\x3e\\n\\n---\\n\\n## Release Details\\n\\n### Air-Gapped installation [#1104](https://github.com/containers/podman-desktop/pull/1104) [#1120](https://github.com/containers/podman-desktop/pull/1120)\\n\\nFor users who are not able to connect to the internet, a new all-in-one (airgap) binary that includes the Podman Desktop application and the Podman binaries is now available for both Mac and Windows. When initializing a new Podman machine using all-in-one binaries, it\'ll use the embedded files and not grab them from internet:\\n\\n- on Mac, it embeds the qemu FCOS binaries.\\n- on Windows, it embeds the WSL binary.\\n\\nTo differentiate the air-gapped binaries from the regular ones, you can check the artifactname, they\'re containing \'airgap\' and are bigger.\\nPlease note, that those binaries are available only on releases and not the pre-releases.\\n\\nThere is also an optional way to provide a custom Podman machine image in the create machine form. By providing the path to the image you want, Podman Desktop will create a machine with that image. Leaving the field empty will use the default image (the one included in the binary).\\n\\n\\n\\n### Feedback within Podman Desktop [#1078](https://github.com/containers/podman-desktop/pull/1078)\\n\\nSubmitting feedback on Podman Desktop is getting easier as it is possible directly within the tool. This will help to get more information about the issues you are facing and will help us to improve the tool.\\n\\n\\n\\nPlease feel free to submit any feedback you have, we are looking forward to hearing from you!\\n\\n### Docker compatibility mode [#1047](https://github.com/containers/podman-desktop/pull/1047)\\n\\nThe Docker compatibility mode is a feature that allows to use Podman as a drop-in replacement for Docker. It relies on the Docker socket helper provided with Podman and automatically handle the local setup of Podman path to the Docker socket. Tools like [Testcontainers](https://www.testcontainers.org/) or others are relying on this to communicate to the container engine.\\n\\nIn this new version of Podman Desktop, we are now providing information to the user about the status of this compatibility mode directly on the dashboard page. The way it works is the following:\\n\\n- When Docker is running: the socket is pointing to Docker.\\n- When Podman is starting and Docker is not running: the docker API socket will use Podman.\\n\\nIn case the compatibility mode is not activated, new documentation on how to activate it and how to easily switch between Docker and Podman is available here: [https://podman-desktop.io/docs/migrating-from-docker](https://podman-desktop.io/docs/migrating-from-docker).\\n\\nThis is a warning displayed for Windows users:\\n![windows-docker-compatibility](https://user-images.githubusercontent.com/436777/209305744-9056addd-f122-4f75-9e03-ad27a0109375.png)\\n\\nThis is the warning for Mac users:\\n![mac-docker-compatibility](https://user-images.githubusercontent.com/6422176/207964861-a9c1f72c-89d6-4816-beab-397af4125620.png)\\n\\n### Allow to toggle on/off the proxy setting [#983](https://github.com/containers/podman-desktop/pull/983)\\n\\nIn some context, users need the ability to disable and re-enable the proxy configuration very quickly, without having to entirely reconfigure it. This is now possible from the Podman Desktop settings page, where a toggle to enable/disable the proxy configuration has been added.\\n\\n\\n\\nNote: extensions can read this information and then update the proxy configuration.\\n\\n### Namespace selection for deploy to Kubernetes [#1008](https://github.com/containers/podman-desktop/pull/1008)\\n\\nA new dropdown menu has been added to the deploy to Kubernetes screen to allow selecting the namespace to deploy to. Defaults to defaultnamespace, if unable to get any from kube_client module.\\n\\nIf the user have set `kubectl config set-context --current --namespace=NAMESPACE` it honors that as the chosen value.\\n\\n![deploy-kubernetes-namespace](https://user-images.githubusercontent.com/7339809/206688886-095e4f15-42ae-4a0a-b1c6-ae4b547fcdfb.gif)\\n\\n### Configure Podman binary path [#941](https://github.com/containers/podman-desktop/pull/941)\\n\\nUsers might use a custom path to the podman binary. An option within settings (Settings -> Preferences) to allow providing an additional path to Podman binary has been added.\\nThis is useful for users who have installed Podman using a package manager and want to use the binary provided by the package manager.\\nSee: [Unable to set custom binary path for Podman on macOS](/docs/troubleshooting/troubleshooting-podman-on-macos#unable-to-set-custom-binary-path-for-podman-on-macos)\\n![custom-path](https://user-images.githubusercontent.com/6422176/204832063-5858065a-2fc3-49de-8d23-3b99b7d10dbf.png)\\n\\n### Provide pre-defined registries [#1201](https://github.com/containers/podman-desktop/pull/1201)\\n\\nThe experience of configuring a registry is getting simplified for the most popular ones. The user will be able to select a registry from a pre-defined list and will only have to provide the username and password. The following registries will be pre-defined:\\n\\n- Dockerhub\\n- Red Hat Quay\\n- GitHub\\n- IBM Container Registry\\n- Google Container Registry\\n\\n\\n\\n### UI/UX Improvements\\n\\n#### View Pods logs [#1122](https://github.com/containers/podman-desktop/pull/1122)\\n\\nThe pods details view provides the ability to view the logs of each containers that might be running in a pod. Moreover, as it can also be hard to scan and identify which container is producing which output, we appended the container name at the beginning of each output and differentiate each container with a different color.\\n\\n![pods-logs](https://user-images.githubusercontent.com/6422176/211024673-eee9bad8-1b0c-4446-b8d1-97a226282c4d.png)\\n\\n#### Improved feedback when clicking on container list action icons [#1150](https://github.com/containers/podman-desktop/pull/1150) [#1161](https://github.com/containers/podman-desktop/pull/1161)\\n\\nWhen starting/stopping or deleting a container, a spinner is now displayed. In case of error, a message indicating that the action failed will also be better indicated.\\n\\n\\n\\nFor containers that exit immediately or short-lived containers, the feedback is also improved and include report of error now provide a better feedback to the user [#1161](https://github.com/containers/podman-desktop/pull/1161).\\n\\n\\n\\n#### Allows to change the default font size for the editor [#1160](https://github.com/containers/podman-desktop/pull/1160)\\n\\nAn editor is used in several screens of Podman Desktop, from the inspect screen to container\'s outputs and Kubernetes YAML. The default font size is 10 pixels. It\'s now possible to adjust the font size to the one the one you prefer. This setting is persisted and will be used for all the editors of Podman Desktop and available from the preferences page (Settings -> Preferences).\\n\\n\\n\\n#### Keep expanded state of pods when refreshing containers [#1042](https://github.com/containers/podman-desktop/pull/1042)\\n\\nWhen switching from different screens of the application or simply refreshing the list of containers, the expanded state of each item in the list is now persisted and will be properly restored.\\n\\n\\n\\n#### Click on the Pod name redirects to the Pod details page [#1159](https://github.com/containers/podman-desktop/pull/1159)\\n\\nThe list of containers also displays pods, now clicking on the pod name directly redirects to the Pod details page.\\n\\n\\n\\n#### Improved styles of buttons for actions [#984](https://github.com/containers/podman-desktop/pull/984)\\n\\nThe style of the buttons for actions on item in the list of in details pages have been improved. The background has been removed, but to make the hover state more visible, the \\"hover\\" circle is visible and the icon\'s color is also changing.\\n\\nOn lists:\\n![list-actions](https://user-images.githubusercontent.com/6422176/205979121-b49a0ddf-03bb-4a4d-8d12-bc8d0bd52387.png)\\n\\nOn details pages:\\n![details-actions](https://user-images.githubusercontent.com/6422176/205979123-ea420b17-e834-4029-82eb-22949889eee9.png)\\n\\n#### Improved alignments in pages with lists [#1182](https://github.com/containers/podman-desktop/pull/1182)\\n\\nThe alignment of the items in the list of containers and pods have been improved. The header of each columns are now aligned with the text. and the actions icons are now aligned with the top of the text.\\n\\n![list-actions](https://user-images.githubusercontent.com/19958075/212712580-096fd090-0beb-40a4-8dc6-b3fdc5e81e35.png)\\n\\n---\\n\\n## Other Notable Enhancements\\n\\n- Statistics area in container details are always shown. ([#1131](https://github.com/containers/podman-desktop/pull/1131))\\n- Add more descriptive wording and more information to extensions. ([#985](https://github.com/containers/podman-desktop/pull/985))\\n- Allow to install on-the fly Podman Desktop extensions using an OCI image. ([#1187](https://github.com/containers/podman-desktop/pull/1187))\\n- Display correctly non-multiplexed stream in logs (when using non interactive mode). ([#1197](https://github.com/containers/podman-desktop/pull/1197))\\n- Font changed from white to gray for non-name sections (creation date, size). ([#1206](https://github.com/containers/podman-desktop/pull/1206))\\n- Add Help/about menu for macOS/Windows/Linux. ([#1207](https://github.com/containers/podman-desktop/pull/1207))\\n\\n---\\n\\n## Documentation\\n\\nComing with this new version of Podman Desktop, the documentation has been getting attention (with number of editorial reviews) and new content have been added.\\n\\nContent for helping users to migrate from Docker to Podman has been added:\\n\\n- [Using the `podman-mac-helper` tool to migrate from Docker to Podman on macOS](https://github.com/containers/podman-desktop/pull/1088)\\n- [better identify podman-mac-helper verification steps](https://github.com/containers/podman-desktop/pull/1129)\\n- [Emulating Docker CLI using Podman to migrate from Docker to Podman](https://github.com/containers/podman-desktop/pull/1143)\\n- [Migrating from Docker section](https://github.com/containers/podman-desktop/pull/1146)\\n- [Verifying that your tools are using Podman](https://github.com/containers/podman-desktop/pull/1152)\\n- [Importing saved containers](https://github.com/containers/podman-desktop/pull/1144)\\n\\nSeveral of other improvements have been made to the documentation and the website:\\n\\n- [Troubleshooting for Apple Silicon and brew x86_64 installs](https://github.com/containers/podman-desktop/pull/962)\\n- [Change text of custom binary location, add docs](https://github.com/containers/podman-desktop/pull/972)\\n- [Silent install option for windows](https://github.com/containers/podman-desktop/pull/974)\\n- [Upgrade to vite v4 and rollup v3](https://github.com/containers/podman-desktop/pull/1079)\\n- [Refreshing documentation on installing on Linux](https://github.com/containers/podman-desktop/pull/1118)\\n- [Identify the shell sessions in Installing on Linux](https://github.com/containers/podman-desktop/pull/1130)\\n- [Website: the linux binary is not a source, it should be promoted as a binary](https://github.com/containers/podman-desktop/pull/1133)\\n- [Introducing tabs for operatings systems and container engines](https://github.com/containers/podman-desktop/pull/1162)\\n- [website: In the landing page, update plugins and container engines lists](https://github.com/containers/podman-desktop/pull/1165)\\n- [Document where code is located within Podman Desktop](https://github.com/containers/podman-desktop/pull/1163)\\n- [(extension-api): Documentation on how to write an extension and use the api](https://github.com/containers/podman-desktop/pull/1172)\\n\\n---\\n\\n## Notable bug fixes\\n\\n- Update to v0.3.2 Docker Desktop API for extensions - [#1070](https://github.com/containers/podman-desktop/pull/1070)\\n- Updated link to the Matrix room - [#1076](https://github.com/containers/podman-desktop/pull/1076)\\n- Report error when container name already exists - [#1142](https://github.com/containers/podman-desktop/pull/1142)\\n- Fixed connectivity to the Podman machine when the generated socket length is greater than 104 characters in MacOS - [#1145](https://github.com/containers/podman-desktop/pull/1145)\\n- Do not use long calls for external clients - [#1151](https://github.com/containers/podman-desktop/pull/1151)\\n- Invalid name/tag for images with registries using a different port - [#1127](https://github.com/containers/podman-desktop/pull/1127)\\n- Invalid badge count for images when two images have the same tag - [#1124](https://github.com/containers/podman-desktop/pull/1124)\\n- Fixed detection of WSL2 - [#981](https://github.com/containers/podman-desktop/pull/981)\\n- Handle invalid kubeconfig files instead of crashing - [#953](https://github.com/containers/podman-desktop/pull/953)\\n- Removed redundant actions from details pages - [#1200](https://github.com/containers/podman-desktop/pull/1200)\\n- Fixed registry URL not aligned with header - [#1205](https://github.com/containers/podman-desktop/pull/1205)\\n- Moved SVGs to reusable components - [#1211](https://github.com/containers/podman-desktop/pull/1211)\\n\\n**Extensions API has also been improved in this new release:**\\n\\n- (extension-api): Allows to register a factory for kubernetes connection objects (like for container connections) - [#1040](https://github.com/containers/podman-desktop/pull/1040)\\n- (extension-api): List or inspect containers, be notified on events - [#1041](https://github.com/containers/podman-desktop/pull/1041)\\n- (extension-api): Allows to get provider notification - [#1045](https://github.com/containers/podman-desktop/pull/1045)\\n- (dd-extension-api): Implement toast API - [#1154](https://github.com/containers/podman-desktop/pull/1154)\\n- (extension-api): Moved extension properties to preferences - [#948](https://github.com/containers/podman-desktop/pull/948)\\n- (dd-extension-api): Added open dev console on dd webview in development mode - [#1071](https://github.com/containers/podman-desktop/pull/1071)\\n- (extension-api): Added notes on extension and frameworks/tooling of Podman Desktop - [#1166](https://github.com/containers/podman-desktop/pull/1166)\\n- (extension-api): Documentation on how to write an extension and use the api - [#1172](https://github.com/containers/podman-desktop/pull/1172)\\n- (dd-extension-api): DD extensions should see only minimal information on containers - [#1191](https://github.com/containers/podman-desktop/pull/1191)\\n\\n---\\n\\n## Community Thank You\\n\\n\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make Podman Desktop 0.11 even better:\\n\\n- [Emmanuel Bernard](https://github.com/emmanuelbernard) in [#962 - Troubleshooting for Apple Silicon](https://github.com/containers/podman-desktop/pull/962)\\n- [Michael Prankl](https://github.com/eidottermihi) in [#974 - Silent install option for windows](https://github.com/containers/podman-desktop/pull/974)\\n- [Endre Lervik](https://github.com/elervik) in [#1008 - Namespace selection for deploy to kubernetes](https://github.com/containers/podman-desktop/pull/1008)\\n- [Evan FP](https://github.com/evanfpearson) in [#1145 - fixed socket path length error](https://github.com/containers/podman-desktop/pull/1145)\\n- [Lokesh Mandvekar](https://github.com/lsm5) in [#956 - add repository key to package.json](https://github.com/containers/podman-desktop/pull/956)\\n- [Jean Fran\xe7ois Maury](https://github.com/jeffmaury) in [#1194 - Cannot create Kind cluster on Windows](https://github.com/containers/podman-desktop/pull/1194)\\n\\n## Final Notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A0.11.0).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"podman-desktop-release-0.10","metadata":{"permalink":"/blog/podman-desktop-release-0.10","source":"@site/blog/2022-12-01-release-0.10-blog.md","title":"Release Notes - Podman Desktop 0.10","description":"Podman Desktop 0.10 has been released! New Create Container Wizard, improved Kubernetes workflows, revamped registries configuration, and more!","date":"2022-12-01T00:00:00.000Z","formattedDate":"December 1, 2022","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"release","permalink":"/blog/tags/release"},{"label":"kubernetes","permalink":"/blog/tags/kubernetes"}],"readingTime":4.115,"hasTruncateMarker":true,"authors":[{"name":"Dev Kumar","title":"Technical PMM Intern","url":"https://github.com/deekay2310","imageURL":"https://github.com/deekay2310.png","key":"deekay2310"}],"frontMatter":{"title":"Release Notes - Podman Desktop 0.10","description":"Podman Desktop 0.10 has been released! New Create Container Wizard, improved Kubernetes workflows, revamped registries configuration, and more!","slug":"podman-desktop-release-0.10","authors":["deekay2310"],"tags":["podman-desktop","release","kubernetes"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 0.11","permalink":"/blog/podman-desktop-release-0.11"},"nextItem":{"title":"Build & run Podman Desktop in a DevContainer","permalink":"/blog/develop-using-devcontainer"}},"content":"This release note covers Podman Desktop 0.10 release changes.\\n\\n- **Containers Configuration**: Container creation wizzard allowing to define environment variables, networking and more configuration options.\\n- **Kubernetes Improvements**: Play Kubernetes YAML, custom Kubeconfig path support, reload of kube context.\\n- **Registries Configuration**: Revamped registries configuration UI.\\n- **Podman Version**: Podman 4.3.1 now included in Windows and Mac installers.\\n- **UX/UI Improvements**: Improved lists, better contrast, and more.\\n\\nPodman Desktop 0.10 is now available. [Click here to download it](/downloads)!\\n\\n\x3c!--truncate--\x3e\\n\\n---\\n\\n## Release Details\\n\\n### New configuration wizzard to create containers ([#773](https://github.com/containers/podman-desktop/pull/773))\\n\\nUntil now, we could only specify port binding when building images to start containers. The create container wizzard now includes several options enabling configuring volumes, environment variables, restart policy and settings on networking and security. It is also possible to reuse an existing (and already configured) a network when creating containers.\\n\\n![new container creation wizard](img/podman-desktop-release-0.10/new_container_creation_wizard.gif)\\n\\n### Kubernetes Capabilities Improvements\\n\\n**Custom Kubeconfig file path ([#780](https://github.com/containers/podman-desktop/pull/780))**\\n\\nKubeconfig path location is now configurable from ** Settings > Preferences > Kubernetes: Kubeconfig** and can be set to a custom path. By default, Podman Desktop use the path `$HOME/.kube/config` for the Kubeconfig file.\\n\\n![custom kubeconfig file path](img/podman-desktop-release-0.10/custom-kubeconfig.png)\\n\\n**Play Kubernetes YAML from the Pods list ([#739](https://github.com/containers/podman-desktop/pull/739))**\\n\\nPodman Desktop enables to play existing Kubernetes YAML files. This is now available from `Play Kubernetes YAML` button added to the Pods list, in addition to the Containers list.\\n\\n![play k8s yaml](img/podman-desktop-release-0.10/play_k8s_yaml.gif)\\n\\n**Kube context automatically reloaded when updated ([#813](https://github.com/containers/podman-desktop/pull/813))**\\n\\nAny change to the kube context will now be detected by Podman Desktop in its running state. The system tray, allowing to select which Kubernetes environment to work with, will now reload the kube context without restarting Podman Desktop.\\n\\n### Revamped Container Registries UI ([#446](https://github.com/containers/podman-desktop/issues/446))\\n\\nThe registries configuration UI has been revamped. Instead of using tiles for displaying the registries, now it uses a list where each registry can be added or edited directly in the list. The kebab menu provides options to edit or remove a registry from the list.\\n\\n![registries](img/podman-desktop-release-0.10/registries.png)\\n\\n### Update to Podman 4.3.1 ([#913](https://github.com/containers/podman-desktop/issues/913))\\n\\nPodman Desktop 0.10 is now embedding [Podman 4.3.1](https://github.com/containers/podman/releases/tag/v4.3.1) in Windows and macOS installers.\\n\\n### UI/UX Improvements\\n\\n**Improved lists UX ([#877](https://github.com/containers/podman-desktop/pull/877))**\\n\\nTo reduce the width used in the lists when displaying all the icons, main actions icons are now always displayed (before it was on hover) and the secondary actions are displayed in a kebab menu. For example Start/Stop and delete are primary actions while open the browser, inspect, generate kube yaml, etc. are secondary options.\\n\\n![kebab menu](img/podman-desktop-release-0.10/kebab-menu.png)\\n\\n**Delay appearance of text in navbar ([#767](https://github.com/containers/podman-desktop/pull/767))**\\n\\nWhen minimizing or expanding the navbar, the text was overlapping for a few second the page. Now it\'s displayed with a fading animation.\\n\\n**Selected state: better text color contrast ([#802](https://github.com/containers/podman-desktop/pull/802))**\\n\\nIn the `Images` page, on hover for both the image and the name column, the text contrast has been increased for better visibility: violet indicates that you have selected it.\\n\\n![text color when hover](img/podman-desktop-release-0.10/text-color.gif)\\n\\n**On Linux and Windows, the menu bar is now hidden by default ([#668](https://github.com/containers/podman-desktop/pull/668))**\\n\\nWith this change, the menu bar looks more integrated to the Operating System. The menu can appear if you hit the `Alt` key. Thanks to [Dylan M. Taylor](https://github.com/dylanmtaylor) for contributing to fix this.\\n\\n**Exit when clicking on the close icon of the dashboard on Linux ([#671](https://github.com/containers/podman-desktop/pull/671))**\\n\\nFor most users on Linux, there is no tray icon support. In this situation, when closed, Podman Desktop continues to run in background. [Dylan M. Taylor](https://github.com/dylanmtaylor) added a property to exit the app by default when clicking on the close icon. For people having tray icon support or with the desire of a different behavior, it is possible to disable it from the Settings.\\n\\n---\\n\\n## Other Notable Enhancements\\n\\n- Rename `Started` into `Age` in Containers list.([#878](https://github.com/containers/podman-desktop/pull/878))\\n- Added domain validation when adding a registry. ([#838](https://github.com/containers/podman-desktop/pull/838))\\n- Provided a consistent behavior with Podman CLI, `podman-machine-default` is now the default name when creating a Podman machine from Podman Desktop. ([#775](https://github.com/containers/podman-desktop/pull/775))\\n\\n---\\n\\n## Notable bug fixes\\n\\n- Fixed error handling when pulling images of Desktop Extensions. ([#782](https://github.com/containers/podman-desktop/pull/782))\\n- Fixed use of the full height of the screen when displaying log in the details of a container. ([#946](https://github.com/containers/podman-desktop/discussions/946))\\n- Fixed First start of Podman Desktop on flatpak was not seeing the podman engine ([#860](https://github.com/containers/podman-desktop/pull/860))\\n\\n## Community Thank You\\n\\n\ud83c\udf89 We\u2019d like to say a big thank you to everyone who helped to make Podman Desktop 0.10 even better:\\n\\n- [Dylan M. Taylor](https://github.com/dylanmtaylor) in [#671](https://github.com/containers/podman-desktop/pull/671)\\n- [Fionn Kelleher](https://github.com/osslate) in [#713](https://github.com/containers/podman-desktop/pull/713)\\n- [Rostislav Svoboda](https://github.com/rsvoboda) in [#737](https://github.com/containers/podman-desktop/pull/737)\\n- [Denis Shemanaev](https://github.com/shemanaev) in [#783](https://github.com/containers/podman-desktop/pull/783)\\n- [Fabrice Flore-Th\xe9bault](https://github.com/themr0c) in [#856](https://github.com/containers/podman-desktop/pull/856)\\n- [Kevin](https://github.com/KevinAtSesam) in [#864](https://github.com/containers/podman-desktop/pull/864)\\n- [@sfrunza13](https://github.com/sfrunza13) in [#872](https://github.com/containers/podman-desktop/pull/872)\\n- [Anjan Nath](https://github.com/anjannath) in [#918](https://github.com/containers/podman-desktop/pull/918)\\n\\n## Final Notes\\n\\nThe complete list of issues fixed in this release is available [here](https://github.com/containers/podman-desktop/issues?q=is%3Aclosed+milestone%3A0.10.0).\\n\\nGet the latest release from the [Downloads](/downloads) section of the website and boost your development journey with Podman Desktop. Additionally, visit the [GitHub repository](https://github.com/containers/podman-desktop) and see how you can help us make Podman Desktop better."},{"id":"develop-using-devcontainer","metadata":{"permalink":"/blog/develop-using-devcontainer","source":"@site/blog/2022-11-17-develop-podman-using-codespaces.md","title":"Build & run Podman Desktop in a DevContainer","description":"Develop Podman Desktop using a DevContainer locally or using GitHub Codespaces.","date":"2022-11-17T00:00:00.000Z","formattedDate":"November 17, 2022","tags":[{"label":"podman-desktop","permalink":"/blog/tags/podman-desktop"},{"label":"devcontainer","permalink":"/blog/tags/devcontainer"},{"label":"codespaces","permalink":"/blog/tags/codespaces"}],"readingTime":6.985,"hasTruncateMarker":true,"authors":[{"name":"Florent Benoit","title":"Principal Software Engineer","url":"https://github.com/benoitf","imageURL":"https://github.com/benoitf.png","key":"benoitf"}],"frontMatter":{"title":"Build & run Podman Desktop in a DevContainer","description":"Develop Podman Desktop using a DevContainer locally or using GitHub Codespaces.","slug":"develop-using-devcontainer","authors":["benoitf"],"tags":["podman-desktop","devcontainer","codespaces"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Release Notes - Podman Desktop 0.10","permalink":"/blog/podman-desktop-release-0.10"}},"content":"GitHub [announced last week](https://github.blog/changelog/2022-11-09-codespaces-for-free-and-pro-accounts/) that Codespaces is available for everyone and it includes free minutes.\\n\\nLet see how we can use a [Development Container](https://containers.dev/) having all the tools to build and run Podman Desktop. The Development Container works locally using Visual Studio Code but in this blog post we will see how it works directly with a simple click from GitHub.\\n\\nThe challenges are to run a desktop tool (Podman Desktop) and running a container engine (Podman) inside this Development Container without using too many memory !\\n\\n\x3c!--truncate--\x3e\\n\\n## Defining image of the container\\n\\nThe first thing is in the choice of the image for the container. It is possible to pick-up a default image and add some features but there is no existing feature for Podman at https://github.com/devcontainers/features/tree/main/src and most of the features are expecting to run on top of Debian/Ubuntu\\n\\nIf you are not interested in how to setup the image, jump to the [next section](#configure-the-devcontainer-using-devcontainerjson).\\n\\nPodman binaries are available quickly after the releases for Fedora. I decided then to use `Fedora 37` as the base image.\\n\\nLet start the Containerfile using:\\n\\n```docker\\nFROM quay.io/fedora/fedora:37\\n```\\n\\nThen I install Node.js 16 from official nodejs.org repository. It\'s easier to switch to the version that we need.\\n\\n```docker\\n# install Node.js + yarn\\nENV NODE_VERSION 16.18.1\\nRUN curl -SLO \\"https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz\\" && \\\\\\n tar -xzf \\"node-v$NODE_VERSION-linux-x64.tar.gz\\" -C /usr/local --strip-components=1 && \\\\\\n rm \\"node-v$NODE_VERSION-linux-x64.tar.gz\\" && \\\\\\n npm install -g yarn\\n```\\n\\nNow, all system dependencies used to run an Electron application needs to be installed.\\n\\nPodman is also installed so we can run some containers inside this container.\\n\\nAnd of course, we need to install VNC (I choose [tigervnc](https://tigervnc.org/)) with a light Window Manager ([fluxbox](http://fluxbox.org/)).\\n\\nTo connect to the display of the container, we need to expose VNC over HTML/websocket using [noVNC](https://novnc.com/)\\n\\nxterm is installed to start a terminal from the VNC side.\\n\\n```docker\\nRUN dnf -y update && \\\\\\n yum -y reinstall shadow-utils && \\\\\\n yum install -y git \\\\\\n # dependencies for Podman Desktop\\n nss \\\\\\n atk \\\\\\n at-spi2-atk \\\\\\n cups-libs \\\\\\n gtk3 \\\\\\n # for remote Display\\n fluxbox \\\\\\n tigervnc-server \\\\\\n xorg-x11-fonts-Type1 \\\\\\n novnc \\\\\\n supervisor \\\\\\n xdpyinfo \\\\\\n # for podman\\n podman \\\\\\n fuse-overlayfs --exclude container-selinux \\\\\\n xterm && \\\\\\n rm -rf /var/cache /var/log/dnf* /var/log/yum.*\\n```\\n\\nSupervisord setup the launch of the VNC server and the Window manager\\n\\n```docker\\nCOPY supervisord.conf /etc/supervisord.conf\\n```\\n\\nA custom theme for fluxbox:\\n\\n```docker\\nCOPY fluxbox /usr/share/fluxbox/init\\n```\\n\\nThen we need a special configuration to allow to have Podman working inside the container\\n\\nWe add the `podman-desktop` user with correct range on subuid and subgid when running containers. I used the [tutorial](https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md#etcsubuid-and-etcsubgid-configuration).\\n\\n```docker\\nRUN useradd -u 1000 podman-desktop && echo podman-desktop:10000:5000 > /etc/subuid && echo podman-desktop:10000:5000 > /etc/subgid\\n```\\n\\nThen use some default configuration files\\n\\n```docker\\n# initialize conf files\\nADD https://raw.githubusercontent.com/containers/libpod/master/contrib/podmanimage/stable/containers.conf /etc/containers/containers.conf\\nADD https://raw.githubusercontent.com/containers/libpod/master/contrib/podmanimage/stable/podman-containers.conf /home/podman-desktop/.config/containers/containers.conf\\n```\\n\\nand make sure that all permissions are correct following the guide [https://www.redhat.com/sysadmin/podman-inside-container](https://www.redhat.com/sysadmin/podman-inside-container)\\n\\n```docker\\n# set permissions\\nRUN chown podman-desktop:podman-desktop -R /home/podman-desktop && chmod 644 /etc/containers/containers.conf && \\\\\\n mkdir -p /var/lib/shared/overlay-images /var/lib/shared/overlay-layers /var/lib/shared/vfs-images /var/lib/shared/vfs-layers; touch /var/lib/shared/overlay-images/images.lock; touch /var/lib/shared/overlay-layers/layers.lock; touch /var/lib/shared/vfs-images/images.lock; touch /var/lib/shared/vfs-layers/layers.lock && \\\\\\n mkdir -p /run/user/1000 && chown podman-desktop:podman-desktop /run/user/1000\\n```\\n\\nplus define an empty user namespace.\\n\\n```docker\\nENV _CONTAINERS_USERNS_CONFIGURED=\\"\\"\\n```\\n\\nMake sure Podman will create the socket in an expected directory:\\n\\n```docker\\n# socket path for podman\\nENV XDG_RUNTIME_DIR=/run/user/1000\\n```\\n\\nOK ! we have a custom Containerfile providing all the tools to build and run Podman Desktop (using VNC for the display), run Podman and run Electron.\\n\\nThe current file is available at https://github.com/containers/podman-desktop/blob/main/.devcontainer/.parent/Containerfile\\n\\nLet\'s configure the DevContainer.\\n\\n## Configure the DevContainer using devcontainer.json\\n\\nDevContainer definition is stored at `.devcontainer/devcontainer.json` file.\\n\\nWe need to reuse the image of the previous step. For that let\'s use the build section of the `devcontainer.json` file.\\n\\n```json\\n\\"build\\": {\\n \\"dockerfile\\": \\"Containerfile\\"\\n},\\n```\\n\\nIn order to avoid to redo all the build steps each time we open a workspace using this dev container, we published the image to quay.io at [quay.io/podman-desktop/devcontainer-parent:next\\n](https://quay.io/repository/podman-desktop/devcontainer-parent?tab=tags&tag=next). This parent image is not changing much so it\'s better to use is as a parent one.\\n\\nInside `.devcontainer` directory there is a `.parent` directory with everything related to the parent image.\\n\\nAnd in the `.devcontainer/Containerfile` file we reference this image\\n\\n```docker\\nFROM quay.io/podman-desktop/devcontainer-parent:next\\n```\\n\\nBy default, we will be `root` in the container and this is probably not what we expect. Let\'s change that.\\n\\n```json\\n\\"containerUser\\": \\"podman-desktop\\"\\n```\\n\\nSome Visual Studio Code extensions are nice to use and we can add them\\n\\n```json\\n \\"extensions\\": [\\"svelte.svelte-vscode\\", \\"bradlc.vscode-tailwindcss\\"]\\n```\\n\\nThen here is the tricky part, how to run our container allowing to run again inside the container some containers with podman.\\n\\nWe specify the arguments to make it possible. It\'s possible to use `--privileged` flag but I prefer to list the subset of permissions.\\nUsing `--privileged` we don\'t really know what are the privilege that are required while specifying all of them, people are aware of what is granted/denied.\\n\\n```json\\n\\"runArgs\\": [\\n \\"--cap-add=sys_admin\\",\\n \\"--security-opt\\",\\n \\"seccomp=unconfined\\",\\n \\"--device\\",\\n \\"/dev/fuse\\",\\n \\"--security-opt\\",\\n \\"label=disable\\",\\n \\"--security-opt\\",\\n \\"apparmor=unconfined\\"\\n ],\\n```\\n\\nSource code of Podman Desktop needs to be editable within the DevContainer so it needs to be mounted.\\n\\n```json\\n\\"workspaceMount\\": \\"source=${localWorkspaceFolder},target=/workspace,type=bind\\",\\n\\"workspaceFolder\\": \\"/workspace\\",\\n```\\n\\nThen we need a command to build Podman Desktop.\\n\\nFor that, we use `onCreateCommand` hook with a custom command\\n\\n```json\\n\\"onCreateCommand\\": \\"${containerWorkspaceFolder}/.devcontainer/onCreateCommand.sh\\",\\n```\\n\\nand in the `.devcontainer` folder the `onCreateCommand.sh` script is the following\\n\\n```shell\\n#!/bin/sh\\nyarn\\n\\nMODE=production yarn run build && yarn run electron-builder build --linux --dir --config .electron-builder.config.cjs\\n```\\n\\nTwo instructions:\\n\\n1. Fetch all Node.js dependencies.\\n2. build Podman Desktop in the `dist` folder using `Linux` as target Operating System.\\n\\nAfter the start of the container, how to launch Podman Desktop, the website and VNC, etc ?\\n\\nJust use `postStartCommand` hook.\\n\\n```json\\n\\"postStartCommand\\": \\"${containerWorkspaceFolder}/.devcontainer/postStartCommand.sh\\",\\n```\\n\\nand in the `.devcontainer` folder the `postStartCommand.sh` script is the following:\\n\\n```shell\\n#!/bin/sh\\n\\n# Start all services\\n/usr/bin/supervisord -c /etc/supervisord.conf &\\n\\n# wait X server to be ready or after 2mn exit\\necho \\"Waiting for X server to be ready\\"\\ntimeout 120 bash -c \'until xdpyinfo -display :0 &> /dev/null; do printf \\".\\"; sleep 1; done\'\\n\\n# launch podman desktop\\necho \\"Launching Podman Desktop\\"\\ncd dist/linux-unpacked/&& ./podman-desktop &\\n\\n# Launch the 9000 redirect after 20 seconds\\nsleep 20\\nwebsockify --web=/usr/share/novnc localhost:9000 localhost:5900 &\\n\\n# launch the website rendering\\necho \\"Launching Website\\"\\ncd website && yarn start\\n```\\n\\nIt starts VNC and noVNC, start precompiled Podman Desktop and start the documentation rendering.\\n\\nIt is not launching the Watch mode/development mode of Podman Desktop as it requires a container having more than 8GB of memory.\\n\\nPicking up a larger instance with for example 16GB, it\'s possible to use development mode.\\n\\nOf course, to make VNC happy, we need to specify the `DISPLAY` environment variable.\\n\\n```json\\n\\"remoteEnv\\": {\\n \\"DISPLAY\\": \\":0\\"\\n}\\n```\\n\\nWhen the DevContainer is fully available, we want to have a way to quickly open the `Website rendering URL` and `noVNC`\\n\\nLet\'s tweak the `devcontainer.json` file by adding the `portsAttributes` section\\n\\n```json\\n\\"portsAttributes\\": {\\n \\"9000\\": {\\n \\"label\\": \\"vnc\\",\\n \\"onAutoForward\\": \\"openPreview\\"\\n },\\n \\"3000\\": {\\n \\"label\\": \\"website\\"\\n }\\n}\\n```\\n\\nAfter all post-creation steps, the `Preview` browser inside the VS Code editor will open a window to VNC. And another port (`3000`) is flagged for the website.\\n\\n## Using the DevContainer.json on Github Codespace\\n\\nAs a user, opening a workspace with all what we configured is done using a single click.\\n\\nGo to https://github.com/containers/podman-desktop then click on the `< > Code` dropdown and click on `Create codespace on main` button.\\n\\n![Open Codespace](img/develop-podman-using-codespaces/codespaces-click-repository.png)\\n\\nOnce you click on the button, the codespace is setting up:\\n\\n![Preparing Codespace](img/develop-podman-using-codespaces/codespaces-preparing-codespace.png)\\n\\nAfter few minutes, as there is not yet [prebuilt codespaces](https://docs.github.com/en/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds), the codespace is opening.\\n\\nThe simple Browser displays the noVNC window:\\n![Opening Codespace](img/develop-podman-using-codespaces/codespaces-open-novnc.png)\\n\\nClick on the connect button. Then on the terminal you can enter `podman run quay.io/podman/hello` and the container is detected in Podman Desktop.\\n![Testing Codespace](img/develop-podman-using-codespaces/codespaces-testing-podman-desktop.png)\\n\\nIt\'s also possible using the port widget to get on `3000` port by clicking on the world icon a preview of the website in another tab. Changing source code of the website will refresh the content of the window.\\n\\nDepending on the usecase, it\'s also possible to open documentation in the preview browser.\\n\\n![Edit website Codespace](img/develop-podman-using-codespaces/codespaces-edit-website.png)\\n\\n## Conclusion\\n\\nThe DevContainer image for Podman Desktop is recent so it\'ll probably evolve over time by adding new capabilities but it allows you to easily build/run/experiment and **contribute** to the tool or the website."}]}')}}]); \ No newline at end of file diff --git a/assets/js/b39cdcf9.5b4d2d45.js b/assets/js/b39cdcf9.5b4d2d45.js deleted file mode 100644 index f0140adfa5d..00000000000 --- a/assets/js/b39cdcf9.5b4d2d45.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[592],{8756:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var t=n(24246),s=n(71670);const i={title:"5 things to know about Podman Desktop for a Docker user",description:"Important things to know when switching from Docker Desktop to Podman Desktop",slug:"5-things-to-know-for-a-docker-user",authors:["benoitf"],tags:["podman-desktop","docker","migrating"],hide_table_of_contents:!1},r=void 0,a={permalink:"/blog/5-things-to-know-for-a-docker-user",source:"@site/blog/2023-03-24-5-things-to-know-for-a-docker-user.md",title:"5 things to know about Podman Desktop for a Docker user",description:"Important things to know when switching from Docker Desktop to Podman Desktop",date:"2023-03-24T00:00:00.000Z",formattedDate:"March 24, 2023",tags:[{label:"podman-desktop",permalink:"/blog/tags/podman-desktop"},{label:"docker",permalink:"/blog/tags/docker"},{label:"migrating",permalink:"/blog/tags/migrating"}],readingTime:4.285,hasTruncateMarker:!0,authors:[{name:"Florent Benoit",title:"Maintainer of Podman Desktop",url:"https://github.com/benoitf",imageURL:"https://github.com/benoitf.png",key:"benoitf"}],frontMatter:{title:"5 things to know about Podman Desktop for a Docker user",description:"Important things to know when switching from Docker Desktop to Podman Desktop",slug:"5-things-to-know-for-a-docker-user",authors:["benoitf"],tags:["podman-desktop","docker","migrating"],hide_table_of_contents:!1},unlisted:!1,prevItem:{title:"Release Notes - Podman Desktop 0.13",permalink:"/blog/podman-desktop-release-0.13"},nextItem:{title:"Release Notes - Podman Desktop 0.12",permalink:"/blog/podman-desktop-release-0.12"}},c={authorsImageUrls:[void 0]},d=[{value:"Use Podman Desktop to interact with containers running in Docker",id:"use-podman-desktop-to-interact-with-containers-running-in-docker",level:2},{value:"Docker compatibility mode",id:"docker-compatibility-mode",level:2},{value:"Socket file compatibility",id:"socket-file-compatibility",level:3},{value:"CLI compatibility",id:"cli-compatibility",level:3},{value:"Compose",id:"compose",level:2},{value:"Kubernetes",id:"kubernetes",level:2},{value:"Rootless mode",id:"rootless-mode",level:2}];function l(e){const o={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",hr:"hr",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.p,{children:"The 5 things to know being a Docker user by using Podman Desktop:"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.strong,{children:"Use a single UI"}),": Podman Desktop works with several container engines, including Docker."]}),"\n",(0,t.jsxs)(o.li,{children:["The ",(0,t.jsx)(o.strong,{children:"compatibility mode"}),": How to ensure tools are working with Podman instead of Docker."]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.strong,{children:"Compose"})," support: How to work with Compose files and Podman."]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.strong,{children:"Kubernetes"})," support: How to use Kubernetes with Podman."]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.strong,{children:"Security"}),": Use ",(0,t.jsx)(o.code,{children:"rootless"})," mode or containers without root privileges."]}),"\n"]}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"5-things-to-know-for-a-docker-user-hero",src:n(63440).Z+"",width:"800",height:"462"})}),"\n",(0,t.jsx)(o.hr,{}),"\n",(0,t.jsx)(o.h2,{id:"use-podman-desktop-to-interact-with-containers-running-in-docker",children:"Use Podman Desktop to interact with containers running in Docker"}),"\n",(0,t.jsx)(o.p,{children:"Docker Desktop provides a UI to interact with containers and images. But the UI depends on Docker API and it is not possible to use the UI with Docker and Podman at the same time."}),"\n",(0,t.jsx)(o.p,{children:"Podman Desktop is a multi-engine UI tool. The UI is compatible with the API of Docker and Podman. It means all containers and images from all the engines at the same time are visible in the UI."}),"\n",(0,t.jsx)(o.p,{children:"When migrating from Docker to Podman, you can use Podman Desktop to interact with containers running in Docker. Explore all commands and features of Podman Desktop and see all the resources from Docker."}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"Many container engines at the same time",src:n(86).Z+"",width:"1253",height:"712"})}),"\n",(0,t.jsx)(o.h2,{id:"docker-compatibility-mode",children:"Docker compatibility mode"}),"\n",(0,t.jsxs)(o.p,{children:["Using Podman with Podman Desktop or with the Podman CLI is straightforward. But some tools expect to find ",(0,t.jsx)(o.code,{children:"docker"})," CLI or ",(0,t.jsx)(o.code,{children:"docker.sock"})," socket. In this case, you have to use the compatibility mode of Podman."]}),"\n",(0,t.jsx)(o.h3,{id:"socket-file-compatibility",children:"Socket file compatibility"}),"\n",(0,t.jsx)(o.p,{children:"The socket compatibility mode is a feature of Podman that allows to bind the Podman socket under the Docker socket path."}),"\n",(0,t.jsxs)(o.p,{children:["On Windows the socket compatibility mode is always enabled by default. On macOS, by using the ",(0,t.jsx)(o.code,{children:".pkg installer"})," it is active by default. But when installing with ",(0,t.jsx)(o.code,{children:"brew"}),", it will not be there because it requires some admin permissions."]}),"\n",(0,t.jsxs)(o.p,{children:["That is not an issue because you can enable it by ",(0,t.jsx)(o.a,{href:"https://podman-desktop.io/docs/migrating-from-docker/using-podman-mac-helper",children:"invoking a CLI tool"})," that will setup the compatibility mode."]}),"\n",(0,t.jsxs)(o.p,{children:["For example if you use ",(0,t.jsx)(o.a,{href:"https://www.testcontainers.org/",children:(0,t.jsx)(o.code,{children:"TestContainers"})})," in your Java project, you can use the compatibility mode to ensure that the tool will use Podman instead of Docker."]}),"\n",(0,t.jsx)(o.h3,{id:"cli-compatibility",children:"CLI compatibility"}),"\n",(0,t.jsxs)(o.p,{children:["If you have scripts relying on ",(0,t.jsx)(o.code,{children:"docker"})," CLI, you can use the compatibility mode to ensure that the tool is working with Podman instead of Docker."]}),"\n",(0,t.jsxs)(o.p,{children:["If you have the ",(0,t.jsx)(o.code,{children:"docker"})," CLI installed on your computer, you can use the socket file compatibility of docker to ensure that the tool is working with Podman engine instead of Docker."]}),"\n",(0,t.jsxs)(o.p,{children:["If you do not have the ",(0,t.jsx)(o.code,{children:"docker"})," CLI installed on your computer, you can ",(0,t.jsx)(o.a,{href:"https://podman-desktop.io/docs/migrating-from-docker/emulating-docker-cli-with-podman",children:"Create a script"})," called ",(0,t.jsx)(o.code,{children:"docker"})," that will call the ",(0,t.jsx)(o.code,{children:"podman"})," CLI"]}),"\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:(0,t.jsx)(o.em,{children:"NOTE:"})})," creating a shell prompt alias, for example ",(0,t.jsx)(o.code,{children:"alias docker=podman"}),", will not work inside scripts that you call."]}),"\n",(0,t.jsx)(o.h2,{id:"compose",children:"Compose"}),"\n",(0,t.jsxs)(o.p,{children:["As a user of Docker, you might use ",(0,t.jsx)(o.code,{children:"docker compose"})," (or ",(0,t.jsx)(o.code,{children:"docker-compose"}),") to run some of your applications."]}),"\n",(0,t.jsxs)(o.p,{children:["For now Podman does not include a ",(0,t.jsx)(o.code,{children:"Compose"})," support directly in the CLI with a command ",(0,t.jsx)(o.code,{children:"podman compose"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.code,{children:"Compose"})," can work with the Podman socket."]}),"\n",(0,t.jsxs)(o.p,{children:["Based on the compatibility mode (see ",(0,t.jsx)(o.a,{href:"#docker-compatibility-mode",children:"section about Docker compatibility mode"}),"):"]}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:["Enabled: you can use the ",(0,t.jsx)(o.code,{children:"compose"})," binary to run your applications."]}),"\n",(0,t.jsxs)(o.li,{children:["Disabled: you need to ",(0,t.jsx)(o.a,{href:"https://podman-desktop.io/docs/migrating-from-docker/using-the-docker_host-environment-variable",children:"export the environment variable DOCKER_HOST"})," before running compose."]}),"\n"]}),"\n",(0,t.jsxs)(o.p,{children:["You can now use the ",(0,t.jsx)(o.code,{children:"compose"})," binary to run your applications and it will use Podman engine."]}),"\n",(0,t.jsxs)(o.p,{children:["Podman Desktop has a ",(0,t.jsx)(o.code,{children:"compose"})," extension that can fetch ",(0,t.jsx)(o.code,{children:"compose"})," binary if not already available on the filesystem."]}),"\n",(0,t.jsxs)(o.p,{children:["Podman Desktop UI displays the containers created by ",(0,t.jsx)(o.code,{children:"Compose"})," are in the same group."]}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"Compose support in the UI",src:n(70226).Z+"",width:"1253",height:"712"})}),"\n",(0,t.jsx)(o.h2,{id:"kubernetes",children:"Kubernetes"}),"\n",(0,t.jsx)(o.p,{children:"It is possible to start a Kubernetes cluster with Docker."}),"\n",(0,t.jsxs)(o.p,{children:["Podman supports directly a subset of Kubernetes resources that you can use with ",(0,t.jsx)(o.code,{children:".yaml"})," files."]}),"\n",(0,t.jsxs)(o.p,{children:["For example if you only want to create a ",(0,t.jsx)(o.code,{children:"Pod"})," resource, you can use the ",(0,t.jsx)(o.code,{children:"Play Kubernetes YAML"})," button from the ",(0,t.jsx)(o.code,{children:"Containers"})," list screen with your ",(0,t.jsx)(o.code,{children:".yaml"})," file. No need to install or start a Kubernetes cluster."]}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"Play Kubernetes YAML",src:n(39179).Z+"",width:"1253",height:"712"})}),"\n",(0,t.jsxs)(o.p,{children:["It is possible to do the counter-part. Export the definition of a container or pod to a Kubernetes resource. You can use the ",(0,t.jsx)(o.code,{children:"Generate kube"})," button from the kebab menu of a given container or pod."]}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"Kubernetes generate",src:n(76467).Z+"",width:"1253",height:"712"})}),"\n",(0,t.jsx)(o.p,{children:"Podman handles pods and in the Podman Desktop UI, you can see all the pods inside a Pod section. All containers inside the pod are in the same group."}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"Pods in the UI",src:n(56726).Z+"",width:"1253",height:"712"})}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"Containers from pod",src:n(91958).Z+"",width:"1253",height:"712"})}),"\n",(0,t.jsxs)(o.p,{children:["An experimental ",(0,t.jsx)(o.code,{children:"kind"})," extension is bringing the creation of full-blown Kubernetes cluster with Podman."]}),"\n",(0,t.jsx)(o.h2,{id:"rootless-mode",children:"Rootless mode"}),"\n",(0,t.jsx)(o.p,{children:"One of the difference of Docker and Podman is the way they handle containers. Docker requires root privileges to run containers by default. Podman can run containers without root privileges by default."}),"\n",(0,t.jsx)(o.p,{children:"It means that for example, starting a container with a port < 1024 will not work. You need to use a port > 1024."}),"\n",(0,t.jsx)(o.p,{children:"If you still need to create containers with a port < 1024, you can change the Podman machine configuration of the Podman Machine if you are on Windows or macOS."}),"\n",(0,t.jsxs)(o.p,{children:["The command is ",(0,t.jsx)(o.code,{children:"podman machine set --rootful"})," to enable the execution with root privileges or ",(0,t.jsx)(o.code,{children:"podman machine set --rootful=false"})," to switch back to rootless mode."]})]})}function h(e={}){const{wrapper:o}={...(0,s.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},63440:(e,o,n)=>{n.d(o,{Z:()=>t});const t=n.p+"assets/images/5-things-to-know-for-a-docker-user-hero-376f962671072e8cd6909702d92c90b1.png"},70226:(e,o,n)=>{n.d(o,{Z:()=>t});const t=n.p+"assets/images/compose-containers-in-ui-0528fa58b39f08da7008c01b27744042.png"},91958:(e,o,n)=>{n.d(o,{Z:()=>t});const t=n.p+"assets/images/containers-from-pod-a149547e10f972aeb503bc0bbcb53f07.png"},76467:(e,o,n)=>{n.d(o,{Z:()=>t});const t=n.p+"assets/images/kube-generate-3e6c658947cad795467c8fdc5db13c10.png"},86:(e,o,n)=>{n.d(o,{Z:()=>t});const t=n.p+"assets/images/multiple-container-engines-aeb03d9e5dab3b2d502066aaa300be41.png"},39179:(e,o,n)=>{n.d(o,{Z:()=>t});const t=n.p+"assets/images/play-kubernetes-yaml-ce2ce5fd9101d6731dfe4eac4414910a.png"},56726:(e,o,n)=>{n.d(o,{Z:()=>t});const t=n.p+"assets/images/pods-in-ui-ecd61f20dce88252ee58cd26303e469b.png"},71670:(e,o,n)=>{n.d(o,{Z:()=>a,a:()=>r});var t=n(27378);const s={},i=t.createContext(s);function r(e){const o=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b39cdcf9.ee25241a.js b/assets/js/b39cdcf9.ee25241a.js new file mode 100644 index 00000000000..b4fa82c1eb2 --- /dev/null +++ b/assets/js/b39cdcf9.ee25241a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[592],{8756:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>a,toc:()=>d});var t=n(24246),i=n(71670);const s={title:"5 things to know about Podman Desktop for a Docker user",description:"Important things to know when switching from Docker Desktop to Podman Desktop",slug:"5-things-to-know-for-a-docker-user",authors:["benoitf"],tags:["podman-desktop","docker","migrating"],hide_table_of_contents:!1},r=void 0,a={permalink:"/blog/5-things-to-know-for-a-docker-user",source:"@site/blog/2023-03-24-5-things-to-know-for-a-docker-user.md",title:"5 things to know about Podman Desktop for a Docker user",description:"Important things to know when switching from Docker Desktop to Podman Desktop",date:"2023-03-24T00:00:00.000Z",formattedDate:"March 24, 2023",tags:[{label:"podman-desktop",permalink:"/blog/tags/podman-desktop"},{label:"docker",permalink:"/blog/tags/docker"},{label:"migrating",permalink:"/blog/tags/migrating"}],readingTime:4.285,hasTruncateMarker:!0,authors:[{name:"Florent Benoit",title:"Principal Software Engineer",url:"https://github.com/benoitf",imageURL:"https://github.com/benoitf.png",key:"benoitf"}],frontMatter:{title:"5 things to know about Podman Desktop for a Docker user",description:"Important things to know when switching from Docker Desktop to Podman Desktop",slug:"5-things-to-know-for-a-docker-user",authors:["benoitf"],tags:["podman-desktop","docker","migrating"],hide_table_of_contents:!1},unlisted:!1,prevItem:{title:"Release Notes - Podman Desktop 0.13",permalink:"/blog/podman-desktop-release-0.13"},nextItem:{title:"Release Notes - Podman Desktop 0.12",permalink:"/blog/podman-desktop-release-0.12"}},c={authorsImageUrls:[void 0]},d=[{value:"Use Podman Desktop to interact with containers running in Docker",id:"use-podman-desktop-to-interact-with-containers-running-in-docker",level:2},{value:"Docker compatibility mode",id:"docker-compatibility-mode",level:2},{value:"Socket file compatibility",id:"socket-file-compatibility",level:3},{value:"CLI compatibility",id:"cli-compatibility",level:3},{value:"Compose",id:"compose",level:2},{value:"Kubernetes",id:"kubernetes",level:2},{value:"Rootless mode",id:"rootless-mode",level:2}];function l(e){const o={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",hr:"hr",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.p,{children:"The 5 things to know being a Docker user by using Podman Desktop:"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.strong,{children:"Use a single UI"}),": Podman Desktop works with several container engines, including Docker."]}),"\n",(0,t.jsxs)(o.li,{children:["The ",(0,t.jsx)(o.strong,{children:"compatibility mode"}),": How to ensure tools are working with Podman instead of Docker."]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.strong,{children:"Compose"})," support: How to work with Compose files and Podman."]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.strong,{children:"Kubernetes"})," support: How to use Kubernetes with Podman."]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.strong,{children:"Security"}),": Use ",(0,t.jsx)(o.code,{children:"rootless"})," mode or containers without root privileges."]}),"\n"]}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"5-things-to-know-for-a-docker-user-hero",src:n(63440).Z+"",width:"800",height:"462"})}),"\n",(0,t.jsx)(o.hr,{}),"\n",(0,t.jsx)(o.h2,{id:"use-podman-desktop-to-interact-with-containers-running-in-docker",children:"Use Podman Desktop to interact with containers running in Docker"}),"\n",(0,t.jsx)(o.p,{children:"Docker Desktop provides a UI to interact with containers and images. But the UI depends on Docker API and it is not possible to use the UI with Docker and Podman at the same time."}),"\n",(0,t.jsx)(o.p,{children:"Podman Desktop is a multi-engine UI tool. The UI is compatible with the API of Docker and Podman. It means all containers and images from all the engines at the same time are visible in the UI."}),"\n",(0,t.jsx)(o.p,{children:"When migrating from Docker to Podman, you can use Podman Desktop to interact with containers running in Docker. Explore all commands and features of Podman Desktop and see all the resources from Docker."}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"Many container engines at the same time",src:n(86).Z+"",width:"1253",height:"712"})}),"\n",(0,t.jsx)(o.h2,{id:"docker-compatibility-mode",children:"Docker compatibility mode"}),"\n",(0,t.jsxs)(o.p,{children:["Using Podman with Podman Desktop or with the Podman CLI is straightforward. But some tools expect to find ",(0,t.jsx)(o.code,{children:"docker"})," CLI or ",(0,t.jsx)(o.code,{children:"docker.sock"})," socket. In this case, you have to use the compatibility mode of Podman."]}),"\n",(0,t.jsx)(o.h3,{id:"socket-file-compatibility",children:"Socket file compatibility"}),"\n",(0,t.jsx)(o.p,{children:"The socket compatibility mode is a feature of Podman that allows to bind the Podman socket under the Docker socket path."}),"\n",(0,t.jsxs)(o.p,{children:["On Windows the socket compatibility mode is always enabled by default. On macOS, by using the ",(0,t.jsx)(o.code,{children:".pkg installer"})," it is active by default. But when installing with ",(0,t.jsx)(o.code,{children:"brew"}),", it will not be there because it requires some admin permissions."]}),"\n",(0,t.jsxs)(o.p,{children:["That is not an issue because you can enable it by ",(0,t.jsx)(o.a,{href:"https://podman-desktop.io/docs/migrating-from-docker/using-podman-mac-helper",children:"invoking a CLI tool"})," that will setup the compatibility mode."]}),"\n",(0,t.jsxs)(o.p,{children:["For example if you use ",(0,t.jsx)(o.a,{href:"https://www.testcontainers.org/",children:(0,t.jsx)(o.code,{children:"TestContainers"})})," in your Java project, you can use the compatibility mode to ensure that the tool will use Podman instead of Docker."]}),"\n",(0,t.jsx)(o.h3,{id:"cli-compatibility",children:"CLI compatibility"}),"\n",(0,t.jsxs)(o.p,{children:["If you have scripts relying on ",(0,t.jsx)(o.code,{children:"docker"})," CLI, you can use the compatibility mode to ensure that the tool is working with Podman instead of Docker."]}),"\n",(0,t.jsxs)(o.p,{children:["If you have the ",(0,t.jsx)(o.code,{children:"docker"})," CLI installed on your computer, you can use the socket file compatibility of docker to ensure that the tool is working with Podman engine instead of Docker."]}),"\n",(0,t.jsxs)(o.p,{children:["If you do not have the ",(0,t.jsx)(o.code,{children:"docker"})," CLI installed on your computer, you can ",(0,t.jsx)(o.a,{href:"https://podman-desktop.io/docs/migrating-from-docker/emulating-docker-cli-with-podman",children:"Create a script"})," called ",(0,t.jsx)(o.code,{children:"docker"})," that will call the ",(0,t.jsx)(o.code,{children:"podman"})," CLI"]}),"\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:(0,t.jsx)(o.em,{children:"NOTE:"})})," creating a shell prompt alias, for example ",(0,t.jsx)(o.code,{children:"alias docker=podman"}),", will not work inside scripts that you call."]}),"\n",(0,t.jsx)(o.h2,{id:"compose",children:"Compose"}),"\n",(0,t.jsxs)(o.p,{children:["As a user of Docker, you might use ",(0,t.jsx)(o.code,{children:"docker compose"})," (or ",(0,t.jsx)(o.code,{children:"docker-compose"}),") to run some of your applications."]}),"\n",(0,t.jsxs)(o.p,{children:["For now Podman does not include a ",(0,t.jsx)(o.code,{children:"Compose"})," support directly in the CLI with a command ",(0,t.jsx)(o.code,{children:"podman compose"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.code,{children:"Compose"})," can work with the Podman socket."]}),"\n",(0,t.jsxs)(o.p,{children:["Based on the compatibility mode (see ",(0,t.jsx)(o.a,{href:"#docker-compatibility-mode",children:"section about Docker compatibility mode"}),"):"]}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:["Enabled: you can use the ",(0,t.jsx)(o.code,{children:"compose"})," binary to run your applications."]}),"\n",(0,t.jsxs)(o.li,{children:["Disabled: you need to ",(0,t.jsx)(o.a,{href:"https://podman-desktop.io/docs/migrating-from-docker/using-the-docker_host-environment-variable",children:"export the environment variable DOCKER_HOST"})," before running compose."]}),"\n"]}),"\n",(0,t.jsxs)(o.p,{children:["You can now use the ",(0,t.jsx)(o.code,{children:"compose"})," binary to run your applications and it will use Podman engine."]}),"\n",(0,t.jsxs)(o.p,{children:["Podman Desktop has a ",(0,t.jsx)(o.code,{children:"compose"})," extension that can fetch ",(0,t.jsx)(o.code,{children:"compose"})," binary if not already available on the filesystem."]}),"\n",(0,t.jsxs)(o.p,{children:["Podman Desktop UI displays the containers created by ",(0,t.jsx)(o.code,{children:"Compose"})," are in the same group."]}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"Compose support in the UI",src:n(70226).Z+"",width:"1253",height:"712"})}),"\n",(0,t.jsx)(o.h2,{id:"kubernetes",children:"Kubernetes"}),"\n",(0,t.jsx)(o.p,{children:"It is possible to start a Kubernetes cluster with Docker."}),"\n",(0,t.jsxs)(o.p,{children:["Podman supports directly a subset of Kubernetes resources that you can use with ",(0,t.jsx)(o.code,{children:".yaml"})," files."]}),"\n",(0,t.jsxs)(o.p,{children:["For example if you only want to create a ",(0,t.jsx)(o.code,{children:"Pod"})," resource, you can use the ",(0,t.jsx)(o.code,{children:"Play Kubernetes YAML"})," button from the ",(0,t.jsx)(o.code,{children:"Containers"})," list screen with your ",(0,t.jsx)(o.code,{children:".yaml"})," file. No need to install or start a Kubernetes cluster."]}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"Play Kubernetes YAML",src:n(39179).Z+"",width:"1253",height:"712"})}),"\n",(0,t.jsxs)(o.p,{children:["It is possible to do the counter-part. Export the definition of a container or pod to a Kubernetes resource. You can use the ",(0,t.jsx)(o.code,{children:"Generate kube"})," button from the kebab menu of a given container or pod."]}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"Kubernetes generate",src:n(76467).Z+"",width:"1253",height:"712"})}),"\n",(0,t.jsx)(o.p,{children:"Podman handles pods and in the Podman Desktop UI, you can see all the pods inside a Pod section. All containers inside the pod are in the same group."}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"Pods in the UI",src:n(56726).Z+"",width:"1253",height:"712"})}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"Containers from pod",src:n(91958).Z+"",width:"1253",height:"712"})}),"\n",(0,t.jsxs)(o.p,{children:["An experimental ",(0,t.jsx)(o.code,{children:"kind"})," extension is bringing the creation of full-blown Kubernetes cluster with Podman."]}),"\n",(0,t.jsx)(o.h2,{id:"rootless-mode",children:"Rootless mode"}),"\n",(0,t.jsx)(o.p,{children:"One of the difference of Docker and Podman is the way they handle containers. Docker requires root privileges to run containers by default. Podman can run containers without root privileges by default."}),"\n",(0,t.jsx)(o.p,{children:"It means that for example, starting a container with a port < 1024 will not work. You need to use a port > 1024."}),"\n",(0,t.jsx)(o.p,{children:"If you still need to create containers with a port < 1024, you can change the Podman machine configuration of the Podman Machine if you are on Windows or macOS."}),"\n",(0,t.jsxs)(o.p,{children:["The command is ",(0,t.jsx)(o.code,{children:"podman machine set --rootful"})," to enable the execution with root privileges or ",(0,t.jsx)(o.code,{children:"podman machine set --rootful=false"})," to switch back to rootless mode."]})]})}function h(e={}){const{wrapper:o}={...(0,i.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},63440:(e,o,n)=>{n.d(o,{Z:()=>t});const t=n.p+"assets/images/5-things-to-know-for-a-docker-user-hero-376f962671072e8cd6909702d92c90b1.png"},70226:(e,o,n)=>{n.d(o,{Z:()=>t});const t=n.p+"assets/images/compose-containers-in-ui-0528fa58b39f08da7008c01b27744042.png"},91958:(e,o,n)=>{n.d(o,{Z:()=>t});const t=n.p+"assets/images/containers-from-pod-a149547e10f972aeb503bc0bbcb53f07.png"},76467:(e,o,n)=>{n.d(o,{Z:()=>t});const t=n.p+"assets/images/kube-generate-3e6c658947cad795467c8fdc5db13c10.png"},86:(e,o,n)=>{n.d(o,{Z:()=>t});const t=n.p+"assets/images/multiple-container-engines-aeb03d9e5dab3b2d502066aaa300be41.png"},39179:(e,o,n)=>{n.d(o,{Z:()=>t});const t=n.p+"assets/images/play-kubernetes-yaml-ce2ce5fd9101d6731dfe4eac4414910a.png"},56726:(e,o,n)=>{n.d(o,{Z:()=>t});const t=n.p+"assets/images/pods-in-ui-ecd61f20dce88252ee58cd26303e469b.png"},71670:(e,o,n)=>{n.d(o,{Z:()=>a,a:()=>r});var t=n(27378);const i={},s=t.createContext(i);function r(e){const o=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(s.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ba5b9f11.3afcedc2.js b/assets/js/ba5b9f11.3afcedc2.js deleted file mode 100644 index 3ef72d3564f..00000000000 --- a/assets/js/ba5b9f11.3afcedc2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7251],{50896:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>r,toc:()=>d});var t=o(24246),a=o(71670);const s={title:"Build & run Podman Desktop in a DevContainer",description:"Develop Podman Desktop using a DevContainer locally or using GitHub Codespaces.",slug:"develop-using-devcontainer",authors:["benoitf"],tags:["podman-desktop","devcontainer","codespaces"],hide_table_of_contents:!1},i=void 0,r={permalink:"/blog/develop-using-devcontainer",source:"@site/blog/2022-11-17-develop-podman-using-codespaces.md",title:"Build & run Podman Desktop in a DevContainer",description:"Develop Podman Desktop using a DevContainer locally or using GitHub Codespaces.",date:"2022-11-17T00:00:00.000Z",formattedDate:"November 17, 2022",tags:[{label:"podman-desktop",permalink:"/blog/tags/podman-desktop"},{label:"devcontainer",permalink:"/blog/tags/devcontainer"},{label:"codespaces",permalink:"/blog/tags/codespaces"}],readingTime:6.985,hasTruncateMarker:!0,authors:[{name:"Florent Benoit",title:"Maintainer of Podman Desktop",url:"https://github.com/benoitf",imageURL:"https://github.com/benoitf.png",key:"benoitf"}],frontMatter:{title:"Build & run Podman Desktop in a DevContainer",description:"Develop Podman Desktop using a DevContainer locally or using GitHub Codespaces.",slug:"develop-using-devcontainer",authors:["benoitf"],tags:["podman-desktop","devcontainer","codespaces"],hide_table_of_contents:!1},unlisted:!1,prevItem:{title:"Release Notes - Podman Desktop 0.10",permalink:"/blog/podman-desktop-release-0.10"}},l={authorsImageUrls:[void 0]},d=[];function c(e){const n={a:"a",p:"p",...(0,a.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["GitHub ",(0,t.jsx)(n.a,{href:"https://github.blog/changelog/2022-11-09-codespaces-for-free-and-pro-accounts/",children:"announced last week"})," that Codespaces is available for everyone and it includes free minutes."]}),"\n",(0,t.jsxs)(n.p,{children:["Let see how we can use a ",(0,t.jsx)(n.a,{href:"https://containers.dev/",children:"Development Container"})," having all the tools to build and run Podman Desktop. The Development Container works locally using Visual Studio Code but in this blog post we will see how it works directly with a simple click from GitHub."]}),"\n",(0,t.jsx)(n.p,{children:"The challenges are to run a desktop tool (Podman Desktop) and running a container engine (Podman) inside this Development Container without using too many memory !"})]})}function p(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},71670:(e,n,o)=>{o.d(n,{Z:()=>r,a:()=>i});var t=o(27378);const a={},s=t.createContext(a);function i(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ba5b9f11.993dc57e.js b/assets/js/ba5b9f11.993dc57e.js new file mode 100644 index 00000000000..10347873cf4 --- /dev/null +++ b/assets/js/ba5b9f11.993dc57e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7251],{50896:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>r,toc:()=>d});var o=t(24246),a=t(71670);const s={title:"Build & run Podman Desktop in a DevContainer",description:"Develop Podman Desktop using a DevContainer locally or using GitHub Codespaces.",slug:"develop-using-devcontainer",authors:["benoitf"],tags:["podman-desktop","devcontainer","codespaces"],hide_table_of_contents:!1},i=void 0,r={permalink:"/blog/develop-using-devcontainer",source:"@site/blog/2022-11-17-develop-podman-using-codespaces.md",title:"Build & run Podman Desktop in a DevContainer",description:"Develop Podman Desktop using a DevContainer locally or using GitHub Codespaces.",date:"2022-11-17T00:00:00.000Z",formattedDate:"November 17, 2022",tags:[{label:"podman-desktop",permalink:"/blog/tags/podman-desktop"},{label:"devcontainer",permalink:"/blog/tags/devcontainer"},{label:"codespaces",permalink:"/blog/tags/codespaces"}],readingTime:6.985,hasTruncateMarker:!0,authors:[{name:"Florent Benoit",title:"Principal Software Engineer",url:"https://github.com/benoitf",imageURL:"https://github.com/benoitf.png",key:"benoitf"}],frontMatter:{title:"Build & run Podman Desktop in a DevContainer",description:"Develop Podman Desktop using a DevContainer locally or using GitHub Codespaces.",slug:"develop-using-devcontainer",authors:["benoitf"],tags:["podman-desktop","devcontainer","codespaces"],hide_table_of_contents:!1},unlisted:!1,prevItem:{title:"Release Notes - Podman Desktop 0.10",permalink:"/blog/podman-desktop-release-0.10"}},l={authorsImageUrls:[void 0]},d=[];function c(e){const n={a:"a",p:"p",...(0,a.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(n.p,{children:["GitHub ",(0,o.jsx)(n.a,{href:"https://github.blog/changelog/2022-11-09-codespaces-for-free-and-pro-accounts/",children:"announced last week"})," that Codespaces is available for everyone and it includes free minutes."]}),"\n",(0,o.jsxs)(n.p,{children:["Let see how we can use a ",(0,o.jsx)(n.a,{href:"https://containers.dev/",children:"Development Container"})," having all the tools to build and run Podman Desktop. The Development Container works locally using Visual Studio Code but in this blog post we will see how it works directly with a simple click from GitHub."]}),"\n",(0,o.jsx)(n.p,{children:"The challenges are to run a desktop tool (Podman Desktop) and running a container engine (Podman) inside this Development Container without using too many memory !"})]})}function p(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>i});var o=t(27378);const a={},s=o.createContext(a);function i(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f6360934.71a1098b.js b/assets/js/f6360934.71a1098b.js new file mode 100644 index 00000000000..b86097a1bdd --- /dev/null +++ b/assets/js/f6360934.71a1098b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5594],{72989:s=>{s.exports=JSON.parse('{"label":"podman","permalink":"/blog/tags/podman","allTagsPath":"/blog/tags","count":1,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/f9fb4395.5cad7669.js b/assets/js/f9fb4395.5cad7669.js new file mode 100644 index 00000000000..31e72e74e33 --- /dev/null +++ b/assets/js/f9fb4395.5cad7669.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4573],{13547:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var t=i(24246),s=i(71670);const o={title:"Share your local podman images with the Kubernetes cluster",description:"Build image and use it directly in your kubernetes cluster",slug:"sharing-podman-images-with-kubernetes-cluster",authors:["benoitf"],tags:["podman-desktop","podman","images","kubernetes"],hide_table_of_contents:!1,image:"/blog/img/sharing-podman-images-with-kubernetes-cluster/selkie-family.png"},a=void 0,r={permalink:"/blog/sharing-podman-images-with-kubernetes-cluster",source:"@site/blog/2023-12-06-sharing-podman-images-with-kubernetes-cluster.md",title:"Share your local podman images with the Kubernetes cluster",description:"Build image and use it directly in your kubernetes cluster",date:"2023-12-06T00:00:00.000Z",formattedDate:"December 6, 2023",tags:[{label:"podman-desktop",permalink:"/blog/tags/podman-desktop"},{label:"podman",permalink:"/blog/tags/podman"},{label:"images",permalink:"/blog/tags/images"},{label:"kubernetes",permalink:"/blog/tags/kubernetes"}],readingTime:7.71,hasTruncateMarker:!0,authors:[{name:"Florent Benoit",title:"Principal Software Engineer",url:"https://github.com/benoitf",imageURL:"https://github.com/benoitf.png",key:"benoitf"}],frontMatter:{title:"Share your local podman images with the Kubernetes cluster",description:"Build image and use it directly in your kubernetes cluster",slug:"sharing-podman-images-with-kubernetes-cluster",authors:["benoitf"],tags:["podman-desktop","podman","images","kubernetes"],hide_table_of_contents:!1,image:"/blog/img/sharing-podman-images-with-kubernetes-cluster/selkie-family.png"},unlisted:!1,nextItem:{title:"Release Notes - Podman Desktop 1.5",permalink:"/blog/podman-desktop-release-1.5"}},c={authorsImageUrls:[void 0]},d=[{value:"Introduction",id:"introduction",level:2},{value:"podman and kubernetes/cri-o",id:"podman-and-kubernetescri-o",level:2},{value:"Minikube to the rescue",id:"minikube-to-the-rescue",level:2},{value:"kind",id:"kind",level:3},{value:"Minikube",id:"minikube",level:3},{value:"Minikube options",id:"minikube-options",level:4},{value:"Minikube kicbase image",id:"minikube-kicbase-image",level:4},{value:"Trying out cri-o using the podman machine storage folder",id:"trying-out-cri-o-using-the-podman-machine-storage-folder",level:4},{value:"Verification",id:"verification",level:4},{value:"Conclusion",id:"conclusion",level:3}];function l(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",hr:"hr",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"As developers we constantly improve and refine our applications. One of the challenges we face is quickly iterating when working with container images and kubernetes deployments/pods."}),"\n",(0,t.jsxs)(n.p,{children:["For example, when we want to try a new image in a kubernetes pod, this image needs to be available on a private/public registry or on the nodes of the kubernetes cluster.\nSometimes we need to call extra commands such as ",(0,t.jsx)(n.code,{children:"kind load docker-image"})," or ",(0,t.jsx)(n.code,{children:"minikube cache add "})," or publish the image first to a 3rd party registry."]}),"\n",(0,t.jsx)(n.p,{children:"You'll agree that trying out a new image in a Kubernetes pod should be as seamless as building the image itself."}),"\n",(0,t.jsx)(n.p,{children:"In this blog post, we will explore the best practice for streamlining the image iteration process in Kubernetes with Podman Desktop."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"hero",src:i(77538).Z+"",width:"1920",height:"1080"})}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,t.jsx)(n.p,{children:"When using kind or minikube or other 3rd party tools to setup a local kubernetes cluster, we have several ways to publish images."}),"\n",(0,t.jsxs)(n.p,{children:["Minikube published 8 ways of doing that at ",(0,t.jsx)(n.a,{href:"https://minikube.sigs.k8s.io/docs/handbook/pushing/",children:"https://minikube.sigs.k8s.io/docs/handbook/pushing/"})]}),"\n",(0,t.jsxs)(n.p,{children:["There are pros and cons either way. Using a third party registry implies that you need to publish the image after each build of the image before being able to use it in the kubernetes cluster. While Podman Desktop could automate the synchronization between the local registry (where you are doing ",(0,t.jsx)(n.code,{children:"podman build"}),") and the third party registry, there remains a duplication of layers between the local and third party registry. And if you change the first layer, it can take a lot of time to send again all the data."]}),"\n",(0,t.jsx)(n.p,{children:"Loading images requires to pack/unpack the files so it's not adequate for large images."}),"\n",(0,t.jsx)(n.p,{children:"Minikube offers a Podman environment, but it's important to note that it utilizes version 3.4 inside a container within the Podman machine. This implies the existence of two Podman instances."}),"\n",(0,t.jsx)(n.p,{children:"The 3.4 version is considerably outdated and do not provide new enhancements and support towards compose, compliance with Docker REST API and 3rd party tools."}),"\n",(0,t.jsx)(n.p,{children:"Could we just build the image and use it in kubernetes?"}),"\n",(0,t.jsx)(n.h2,{id:"podman-and-kubernetescri-o",children:"podman and kubernetes/cri-o"}),"\n",(0,t.jsx)(n.p,{children:"In the kubernetes world, we need a container engine runtime. At the early stage, container runtimes were integrated with ad hoc solutions on top of docker, rkt, or others."}),"\n",(0,t.jsxs)(n.p,{children:['But to separate concerns and to be extensible, a new interface was added: CRI for "Container Runtime Interface". Using the CRI interface we can plug container engines. And there are several runtimes such as containerd, cri-o and others.\n',(0,t.jsx)(n.a,{href:"https://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/container-runtime-interface.md",children:"https://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/container-runtime-interface.md"})]}),"\n",(0,t.jsxs)(n.p,{children:["What is interesting to us is the cri-o project. This project is implementing the CRI interface but also adopting some projects of the ",(0,t.jsx)(n.a,{href:"https://github.com/containers",children:"containers"})," organization where ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman",children:"podman"})," and ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop",children:"podman-desktop"})," live."]}),"\n",(0,t.jsxs)(n.p,{children:["So it means cri-o uses image management from ",(0,t.jsx)(n.a,{href:"https://github.com/containers/image",children:"https://github.com/containers/image"})," project and handle storage with ",(0,t.jsx)(n.a,{href:"https://github.com/containers/storage",children:"https://github.com/containers/storage"})," project."]}),"\n",(0,t.jsxs)(n.p,{children:["And this is what is really interesting as a podman user. As it is using common libraries between cri-o and podman, it means that in the same environment, podman and cri-o read and write the images at a common location in ",(0,t.jsx)(n.code,{children:"/var/lib/containers"})," folder."]}),"\n",(0,t.jsxs)(n.p,{children:["If we move one step ahead, if we mount the ",(0,t.jsx)(n.code,{children:"/var/lib/containers"})," folder of podman into the cri-o container it means that the kubernetes cluster could find the images that the podman machine is building."]}),"\n",(0,t.jsx)(n.p,{children:"Oh wait, it means that no more registry, additional steps would be required? Yes just build and load it."}),"\n",(0,t.jsx)(n.h2,{id:"minikube-to-the-rescue",children:"Minikube to the rescue"}),"\n",(0,t.jsx)(n.p,{children:"While we have the goal of using both cri-o and podman altogether, we can explore the current projects allowing us to quickly setup kubernetes clusters."}),"\n",(0,t.jsx)(n.h3,{id:"kind",children:"kind"}),"\n",(0,t.jsxs)(n.p,{children:["On the ",(0,t.jsx)(n.code,{children:"kind"})," side, there is a default configuration that is using containerd and there is no plan to support an alternative such as cri-o ",(0,t.jsx)(n.a,{href:"https://github.com/kubernetes-sigs/kind/issues/1369#issuecomment-867440704",children:"https://github.com/kubernetes-sigs/kind/issues/1369#issuecomment-867440704"})]}),"\n",(0,t.jsxs)(n.p,{children:["That said, some people try to maintain a way to do that but not officialy ",(0,t.jsx)(n.a,{href:"https://gist.github.com/aojea/bd1fb766302779b77b8f68fa0a81c0f2",children:"https://gist.github.com/aojea/bd1fb766302779b77b8f68fa0a81c0f2"})]}),"\n",(0,t.jsxs)(n.p,{children:["By doing that, we would also need to mount ",(0,t.jsx)(n.code,{children:"/var/lib/containers"})," folder from the host (the podman machine) to the container. And there is no easy flag in kind."]}),"\n",(0,t.jsx)(n.h3,{id:"minikube",children:"Minikube"}),"\n",(0,t.jsx)(n.h4,{id:"minikube-options",children:"Minikube options"}),"\n",(0,t.jsx)(n.p,{children:"Minikube supports more options and provides a way to select the container engine runtime. And it includes support for cri-o."}),"\n",(0,t.jsxs)(n.p,{children:["We can use the ",(0,t.jsx)(n.code,{children:"container-runtime"})," parameter and ask for ",(0,t.jsx)(n.code,{children:"cri-o"})," runtime. Command-line should include ",(0,t.jsx)(n.code,{children:"--container-runtime=cri-o"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Then, we do have a podman/cri-o environment inside the container and can use ",(0,t.jsx)(n.code,{children:"eval $(minikube podman-env)"})," to use the Windows/macOS podman CLI."]}),"\n",(0,t.jsx)(n.p,{children:"One issue is that we then have two 'Podman engines': one running inside the Podman machine and another one running inside the container. The Podman included in the container is using version 3.4, as it's on Debian/Ubuntu stable, while the recent version of Podman is 4.7.x."}),"\n",(0,t.jsxs)(n.p,{children:["Can we mount the podman machine ",(0,t.jsx)(n.code,{children:"/var/lib/containers"})," into the container ?"]}),"\n",(0,t.jsxs)(n.p,{children:["Yes! minikube provides some options to do additional mount with ",(0,t.jsx)(n.code,{children:"--mount-string"})," argument. It is not obvious but you also need to add the ",(0,t.jsx)(n.code,{children:"--mount"})," in addition to this parameter. Full argument is ",(0,t.jsx)(n.code,{children:'--mount --mount-string ""'})]}),"\n",(0,t.jsxs)(n.p,{children:["But ",(0,t.jsx)(n.code,{children:"/var"})," is already a mounted folder. So here the idea is to change the path of where cri-o is storing its data."]}),"\n",(0,t.jsxs)(n.p,{children:["So we can provide a custom mounted path and make cri-o use that custom location. Let's pickup ",(0,t.jsx)(n.code,{children:"/host-containers"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["When starting minikube we need then to add ",(0,t.jsx)(n.code,{children:'--mount --mount-string "/var/lib/containers:/host-containers"'}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Regarding the configuration of cri-o, currently, it's not achievable using Minikube options. However, Minikube does offer the flexibility to modify the base image."}),"\n",(0,t.jsx)(n.h4,{id:"minikube-kicbase-image",children:"Minikube kicbase image"}),"\n",(0,t.jsx)(n.p,{children:"Let's do our own base image named kicbase image."}),"\n",(0,t.jsxs)(n.p,{children:["Minikube includes a default configuration file for cri-o.\n",(0,t.jsx)(n.a,{href:"https://github.com/kubernetes/minikube/blob/v1.32.0/deploy/kicbase/02-crio.conf",children:"https://github.com/kubernetes/minikube/blob/v1.32.0/deploy/kicbase/02-crio.conf"})]}),"\n",(0,t.jsxs)(n.p,{children:["We need to change this default configuration to say that for storing the images, cri-o needs to use another directory. This new directory ",(0,t.jsx)(n.code,{children:"/host-containers"})," will be mounted from the ",(0,t.jsx)(n.code,{children:"/var/lib/containers"})," folder inside the podman machine. This is how cri-o is able to see podman images."]}),"\n",(0,t.jsx)(n.p,{children:"Let's include the configuration part in this file."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-toml",children:'[crio]\nroot = "/host-containers/storage"\nrunroot = "/host-containers/storage"\n'})}),"\n",(0,t.jsx)(n.p,{children:"Let's also upgrade the Podman inside the container by adding the necessary instruction to the Dockerfile."}),"\n",(0,t.jsxs)(n.p,{children:["The Dockerfile is coming from ",(0,t.jsx)(n.a,{href:"https://github.com/kubernetes/minikube/blob/v1.32.0/deploy/kicbase/Dockerfile#L178-L186",children:"https://github.com/kubernetes/minikube/blob/v1.32.0/deploy/kicbase/Dockerfile#L178-L186"})]}),"\n",(0,t.jsx)(n.p,{children:"In the file, replace"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-Dockerfile",children:"RUN clean-install podman && \\\n"})}),"\n",(0,t.jsx)(n.p,{children:"with"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-Dockerfile",children:"RUN sh -c \"echo 'deb https://downloadcontent.opensuse.org/repositories/devel:/kubic:/libcontainers:/unstable/xUbuntu_22.04/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:unstable.list\" && \\\n curl -LO https://downloadcontent.opensuse.org/repositories/devel:kubic:libcontainers:unstable/xUbuntu_22.04/Release.key && \\\n apt-key add - < Release.key && \\\n # need to add dbus-user-session else we have\n # cannot open sd-bus: No such file or directory: OCI runtime attempted to invoke a command that was not found\n clean-install dbus-user-session podman && \\\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Let's rebuild the image and publish it. You can find it at ",(0,t.jsx)(n.code,{children:"quay.io/fbenoit/kicbase:multiarch-2023-11-06"})," .\nTo build the image, clone ",(0,t.jsx)(n.a,{href:"https://github.com/kubernetes/minikube",children:"https://github.com/kubernetes/minikube"})," repository, and edit the files referenced before."]}),"\n",(0,t.jsxs)(n.p,{children:["The command to build the kicbase image is ",(0,t.jsx)(n.code,{children:"make local-kicbase"}),"."]}),"\n",(0,t.jsx)(n.h4,{id:"trying-out-cri-o-using-the-podman-machine-storage-folder",children:"Trying out cri-o using the podman machine storage folder"}),"\n",(0,t.jsxs)(n.p,{children:["At the time of writing this blog post, the version ",(0,t.jsx)(n.code,{children:"v1.32.0-beta.0"})," has been used. For different versions you might need to build your own kicbase image."]}),"\n",(0,t.jsxs)(n.p,{children:["One crucial note: cri-o is running in root mode, this is why we mount to ",(0,t.jsx)(n.code,{children:"/var/lib/containers"})," (and then in rootful mode)."]}),"\n",(0,t.jsx)(n.p,{children:"For simplicity, let's use a rootful podman machine to map the same folder at the two locations."}),"\n",(0,t.jsx)(n.p,{children:"Ok now let's try in two steps:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Create a podman machine:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"podman machine init --cpus 4 --memory 6000 --rootful\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"2",children:["\n",(0,t.jsx)(n.li,{children:"Start the cluster using our kicbase image"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"We specify Podman as the driver (the default is Docker), state our preference to use cri-o as the container runtime instead of containerd, use our custom image that performs the update of Podman's version and the modification of cri-o's configuration to use a different storage folder. Finally, we specify an additional mount."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:'minikube start --driver=podman --container-runtime=cri-o --base-image=quay.io/fbenoit/kicbase:multiarch-2023-11-06 --mount --mount-string "/var/lib/containers:/host-containers"\n'})}),"\n",(0,t.jsx)(n.h4,{id:"verification",children:"Verification"}),"\n",(0,t.jsxs)(n.p,{children:["Assuming the cluster was able to start, there is a new kubernetes cluster configured in the ",(0,t.jsx)(n.code,{children:"$HOME/.kube/config"})," file."]}),"\n",(0,t.jsxs)(n.p,{children:["Using ",(0,t.jsx)(n.code,{children:"kubectl"})," we can start a deployment"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"kubectl apply -f https://k8s.io/examples/application/deployment.yaml\n"})}),"\n",(0,t.jsx)(n.p,{children:"you can check pods are running using"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"kubectl get pods -l app=nginx\n"})}),"\n",(0,t.jsx)(n.p,{children:"and if you check your podman images"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"podman images\n"})}),"\n",(0,t.jsx)(n.p,{children:"you'll see nginx being listed so images are shared."}),"\n",(0,t.jsx)(n.p,{children:"Now, you can build image using a Containerfile or pull an image, connect to the control plane instance in Podman Desktop (open a shell in minikube container) and run"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"crictl images\n"})}),"\n",(0,t.jsx)(n.p,{children:"It will list the images of podman"}),"\n",(0,t.jsxs)(n.p,{children:["Note: by default, kubernetes will use the image pull policy ",(0,t.jsx)(n.code,{children:"Always"})," using the ",(0,t.jsx)(n.code,{children:"latest"})," tag on your image. So it might try to fetch/pull/refresh the image you built locally. Use a specific tag or change the ",(0,t.jsx)(n.code,{children:"imagePullPolicy"})," to ",(0,t.jsx)(n.code,{children:"IfNotPresent"})," in your deployments."]}),"\n",(0,t.jsxs)(n.p,{children:["You can now use your own Containerfile/Dockerfile and build an image using ",(0,t.jsx)(n.code,{children:"podman build"})," command. And then check that the image is available as well in the kubernetes cluster by listing images:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"crictl images\n"})}),"\n",(0,t.jsx)(n.h3,{id:"conclusion",children:"Conclusion"}),"\n",(0,t.jsx)(n.p,{children:"We have explored how developers can significantly reduce turnaround times by integrating Podman and Kubernetes seamlessly."}),"\n",(0,t.jsxs)(n.p,{children:["Now, let's experiment with it and provide feedback through the Podman Desktop issue tracker at ",(0,t.jsx)(n.a,{href:"https://github.com/containers/podman-desktop/issues/",children:"https://github.com/containers/podman-desktop/issues/"})," ."]}),"\n",(0,t.jsx)(n.p,{children:"Here are the next steps Podman Desktop plans to take to enhance ease of use for users:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"To make things easier, automate the process by adding this setup to a creation wizard."}),"\n",(0,t.jsx)(n.li,{children:"Collaborate with upstream Minikube project to simplify choices and remove the requirement for customized kicbase images."}),"\n",(0,t.jsx)(n.li,{children:"Enhancing the overall user-friendliness of the solution for an improved developer experience."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},77538:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/selkie-family-1b33ecd1c85565d5af69c52a03180a61.png"},71670:(e,n,i)=>{i.d(n,{Z:()=>r,a:()=>a});var t=i(27378);const s={},o=t.createContext(s);function a(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.10641e27.js b/assets/js/main.10641e27.js deleted file mode 100644 index d73b51adeae..00000000000 --- a/assets/js/main.10641e27.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.10641e27.js.LICENSE.txt */ -(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[179],{56573:(e,t,n)=>{"use strict";n.d(t,{W:()=>o});var r=n(27378);function o(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},23427:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>i});var r=n(27378),o=n(24246);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},93002:(e,t,n)=>{"use strict";var r=n(27378),o=n(37634),a=n(4289),i=n(92883),s=n(161);const l=[n(70142),n(23815),n(54374),n(26222)];var c=n(76623),u=n(3620),d=n(95473),p=n(24246);function f(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var g=n(7092),m=n(50353),h=n(98948),b=n(20624),y=n(1123),v=n(43714),k=n(70174),w=n(13149),x=n(51721),S=n(60505);function _(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,m.Z)(),r=(0,v.l)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,p.jsxs)(g.Z,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function E(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,m.Z)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,m.Z)(),{pathname:r}=(0,u.TH)();return e+(0,x.applyTrailingSlash)((0,h.Z)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,p.jsxs)(g.Z,{children:[(0,p.jsx)("meta",{property:"og:url",content:o}),(0,p.jsx)("link",{rel:"canonical",href:o})]})}function C(){const{i18n:{currentLocale:e}}=(0,m.Z)(),{metadata:t,image:n}=(0,b.L)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(g.Z,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:k.h})]}),n&&(0,p.jsx)(y.d,{image:n}),(0,p.jsx)(E,{}),(0,p.jsx)(_,{}),(0,p.jsx)(S.Z,{tag:w.HX,locale:e}),(0,p.jsx)(g.Z,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const T=new Map;function A(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var N=n(23427),P=n(83340),j=n(9834);function L(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const O=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,j.Z)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),L("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function R(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class I extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.Z.canUseDOM?L("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=L("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),R(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,p.jsx)(O,{previousLocation:this.previousLocation,location:t,children:(0,p.jsx)(u.AW,{location:t,render:()=>e})})}}const M=I,D="__docusaurus-base-url-issue-banner-container",F="__docusaurus-base-url-issue-banner",B="__docusaurus-base-url-issue-banner-suggestion-container";function z(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${D}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n\n`}(e)).replace(/{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Y=n(13361);const Q=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!Q.has(e))(e))return!1;Q.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(q).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?K(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),R(e))},te=Object.freeze(ee),ne=Boolean(!0);if(s.Z.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,p.jsx)(i.B6,{children:(0,p.jsx)(a.VK,{children:(0,p.jsx)(G,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},s=()=>{if(ne)r.startTransition((()=>{o.hydrateRoot(e,t,{onRecoverableError:n})}));else{const a=o.createRoot(e,{onRecoverableError:n});r.startTransition((()=>{a.render(t)}))}};R(window.location.pathname).then(s)}},83340:(e,t,n)=>{"use strict";n.d(t,{_:()=>d,M:()=>p});var r=n(27378),o=n(36809);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"intro","docs":[{"id":"compose/index","path":"/docs/compose/","sidebar":"mySidebar"},{"id":"compose/running-compose","path":"/docs/compose/running-compose","sidebar":"mySidebar"},{"id":"compose/setting-up-compose","path":"/docs/compose/setting-up-compose","sidebar":"mySidebar"},{"id":"containers/creating-a-pod","path":"/docs/containers/creating-a-pod","sidebar":"mySidebar"},{"id":"containers/images/building-an-image","path":"/docs/containers/images/building-an-image","sidebar":"mySidebar"},{"id":"containers/images/index","path":"/docs/containers/images/","sidebar":"mySidebar"},{"id":"containers/images/pulling-an-image","path":"/docs/containers/images/pulling-an-image","sidebar":"mySidebar"},{"id":"containers/images/pushing-an-image-to-a-registry","path":"/docs/containers/images/pushing-an-image-to-a-registry","sidebar":"mySidebar"},{"id":"containers/index","path":"/docs/containers/","sidebar":"mySidebar"},{"id":"containers/onboarding","path":"/docs/containers/onboarding","sidebar":"mySidebar"},{"id":"containers/registries/authenticating-to-a-preconfigured-registry","path":"/docs/containers/registries/authenticating-to-a-preconfigured-registry","sidebar":"mySidebar"},{"id":"containers/registries/index","path":"/docs/containers/registries/","sidebar":"mySidebar"},{"id":"containers/registries/insecure-registry","path":"/docs/containers/registries/insecure-registry","sidebar":"mySidebar"},{"id":"containers/starting-a-container","path":"/docs/containers/starting-a-container","sidebar":"mySidebar"},{"id":"extensions/index","path":"/docs/extensions/","sidebar":"mySidebar"},{"id":"extensions/install/index","path":"/docs/extensions/install/","sidebar":"mySidebar"},{"id":"extensions/publish/index","path":"/docs/extensions/publish/","sidebar":"mySidebar"},{"id":"extensions/write/index","path":"/docs/extensions/write/","sidebar":"mySidebar"},{"id":"extensions/write/onboarding-workflow","path":"/docs/extensions/write/onboarding-workflow","sidebar":"mySidebar"},{"id":"extensions/write/when-clause-context","path":"/docs/extensions/write/when-clause-context","sidebar":"mySidebar"},{"id":"installation/index","path":"/docs/installation/","sidebar":"mySidebar"},{"id":"installation/linux-install/index","path":"/docs/installation/linux-install/","sidebar":"mySidebar"},{"id":"installation/linux-install/installing-podman-desktop-from-a-compressed-tar-file","path":"/docs/installation/linux-install/installing-podman-desktop-from-a-compressed-tar-file","sidebar":"mySidebar"},{"id":"installation/linux-install/installing-podman-desktop-from-a-flatpak-bundle","path":"/docs/installation/linux-install/installing-podman-desktop-from-a-flatpak-bundle","sidebar":"mySidebar"},{"id":"installation/macos-install","path":"/docs/installation/macos-install","sidebar":"mySidebar"},{"id":"installation/windows-install/index","path":"/docs/installation/windows-install/","sidebar":"mySidebar"},{"id":"installation/windows-install/installing-podman-desktop-and-podman-in-a-restricted-environment","path":"/docs/installation/windows-install/installing-podman-desktop-and-podman-in-a-restricted-environment","sidebar":"mySidebar"},{"id":"installation/windows-install/installing-podman-desktop-silently-with-the-windows-installer","path":"/docs/installation/windows-install/installing-podman-desktop-silently-with-the-windows-installer","sidebar":"mySidebar"},{"id":"installation/windows-install/installing-podman-desktop-with-chocolatey","path":"/docs/installation/windows-install/installing-podman-desktop-with-chocolatey","sidebar":"mySidebar"},{"id":"installation/windows-install/installing-podman-desktop-with-scoop","path":"/docs/installation/windows-install/installing-podman-desktop-with-scoop","sidebar":"mySidebar"},{"id":"installation/windows-install/installing-podman-desktop-with-winget","path":"/docs/installation/windows-install/installing-podman-desktop-with-winget","sidebar":"mySidebar"},{"id":"intro","path":"/docs/intro","sidebar":"mySidebar"},{"id":"kind/building-an-image-and-testing-it-in-kind","path":"/docs/kind/building-an-image-and-testing-it-in-kind","sidebar":"mySidebar"},{"id":"kind/configuring-podman-for-kind-on-windows","path":"/docs/kind/configuring-podman-for-kind-on-windows","sidebar":"mySidebar"},{"id":"kind/creating-a-kind-cluster","path":"/docs/kind/creating-a-kind-cluster","sidebar":"mySidebar"},{"id":"kind/deleting-your-kind-cluster","path":"/docs/kind/deleting-your-kind-cluster","sidebar":"mySidebar"},{"id":"kind/index","path":"/docs/kind/","sidebar":"mySidebar"},{"id":"kind/installing","path":"/docs/kind/installing","sidebar":"mySidebar"},{"id":"kind/pushing-an-image-to-kind","path":"/docs/kind/pushing-an-image-to-kind","sidebar":"mySidebar"},{"id":"kind/restarting-your-kind-cluster","path":"/docs/kind/restarting-your-kind-cluster","sidebar":"mySidebar"},{"id":"kind/working-with-your-local-kind-cluster","path":"/docs/kind/working-with-your-local-kind-cluster","sidebar":"mySidebar"},{"id":"kubernetes/deploying-a-container-to-kubernetes","path":"/docs/kubernetes/deploying-a-container-to-kubernetes","sidebar":"mySidebar"},{"id":"kubernetes/deploying-a-pod-to-kubernetes","path":"/docs/kubernetes/deploying-a-pod-to-kubernetes","sidebar":"mySidebar"},{"id":"kubernetes/existing-kubernetes/index","path":"/docs/kubernetes/existing-kubernetes/","sidebar":"mySidebar"},{"id":"kubernetes/index","path":"/docs/kubernetes/","sidebar":"mySidebar"},{"id":"kubernetes/kind/pushing-an-image-to-kind","path":"/docs/kubernetes/kind/pushing-an-image-to-kind","sidebar":"mySidebar"},{"id":"kubernetes/viewing-and-selecting-current-kubernete-context","path":"/docs/kubernetes/viewing-and-selecting-current-kubernete-context","sidebar":"mySidebar"},{"id":"kubernetes/viewing-and-selecting-current-kubernete-context-in-the-status-bar","path":"/docs/kubernetes/viewing-and-selecting-current-kubernete-context-in-the-status-bar","sidebar":"mySidebar"},{"id":"lima/creating-a-kubernetes-instance","path":"/docs/lima/creating-a-kubernetes-instance","sidebar":"mySidebar"},{"id":"lima/creating-a-lima-instance","path":"/docs/lima/creating-a-lima-instance","sidebar":"mySidebar"},{"id":"lima/customizing","path":"/docs/lima/customizing","sidebar":"mySidebar"},{"id":"lima/index","path":"/docs/lima/","sidebar":"mySidebar"},{"id":"lima/installing","path":"/docs/lima/installing","sidebar":"mySidebar"},{"id":"migrating-from-docker/emulating-docker-cli-with-podman","path":"/docs/migrating-from-docker/emulating-docker-cli-with-podman","sidebar":"mySidebar"},{"id":"migrating-from-docker/importing-saved-containers","path":"/docs/migrating-from-docker/importing-saved-containers","sidebar":"mySidebar"},{"id":"migrating-from-docker/index","path":"/docs/migrating-from-docker/","sidebar":"mySidebar"},{"id":"migrating-from-docker/using-podman-mac-helper","path":"/docs/migrating-from-docker/using-podman-mac-helper","sidebar":"mySidebar"},{"id":"migrating-from-docker/using-the-docker_host-environment-variable","path":"/docs/migrating-from-docker/using-the-docker_host-environment-variable","sidebar":"mySidebar"},{"id":"migrating-from-docker/verifying-your-tools-are-using-podman","path":"/docs/migrating-from-docker/verifying-your-tools-are-using-podman","sidebar":"mySidebar"},{"id":"minikube/building-an-image-and-testing-it-in-minikube","path":"/docs/minikube/building-an-image-and-testing-it-in-minikube","sidebar":"mySidebar"},{"id":"minikube/configuring-podman-for-minikube-on-windows","path":"/docs/minikube/configuring-podman-for-minikube-on-windows","sidebar":"mySidebar"},{"id":"minikube/creating-a-minikube-cluster","path":"/docs/minikube/creating-a-minikube-cluster","sidebar":"mySidebar"},{"id":"minikube/deleting-your-minikube-cluster","path":"/docs/minikube/deleting-your-minikube-cluster","sidebar":"mySidebar"},{"id":"minikube/index","path":"/docs/minikube/","sidebar":"mySidebar"},{"id":"minikube/installing","path":"/docs/minikube/installing","sidebar":"mySidebar"},{"id":"minikube/pushing-an-image-to-minikube","path":"/docs/minikube/pushing-an-image-to-minikube","sidebar":"mySidebar"},{"id":"minikube/restarting-your-minikube-cluster","path":"/docs/minikube/restarting-your-minikube-cluster","sidebar":"mySidebar"},{"id":"minikube/working-with-your-local-minikube-cluster","path":"/docs/minikube/working-with-your-local-minikube-cluster","sidebar":"mySidebar"},{"id":"openshift/developer-sandbox/index","path":"/docs/openshift/developer-sandbox/","sidebar":"mySidebar"},{"id":"openshift/index","path":"/docs/openshift/","sidebar":"mySidebar"},{"id":"openshift/openshift-local/index","path":"/docs/openshift/openshift-local/","sidebar":"mySidebar"},{"id":"podman/creating-a-podman-machine","path":"/docs/podman/creating-a-podman-machine","sidebar":"mySidebar"},{"id":"podman/index","path":"/docs/podman/","sidebar":"mySidebar"},{"id":"podman/installing","path":"/docs/podman/installing","sidebar":"mySidebar"},{"id":"podman/installing-podman-with-openshift-local-on-windows","path":"/docs/podman/installing-podman-with-openshift-local-on-windows","sidebar":"mySidebar"},{"id":"podman/setting-podman-machine-default-connection","path":"/docs/podman/setting-podman-machine-default-connection","sidebar":"mySidebar"},{"id":"proxy/index","path":"/docs/proxy/","sidebar":"mySidebar"},{"id":"proxy/using-a-proxy","path":"/docs/proxy/using-a-proxy","sidebar":"mySidebar"},{"id":"proxy/using-a-proxy-in-your-containers","path":"/docs/proxy/using-a-proxy-in-your-containers","sidebar":"mySidebar"},{"id":"proxy/using-a-proxy-on-linux","path":"/docs/proxy/using-a-proxy-on-linux","sidebar":"mySidebar"},{"id":"proxy/using-a-proxy-requiring-a-custom-ca","path":"/docs/proxy/using-a-proxy-requiring-a-custom-ca","sidebar":"mySidebar"},{"id":"proxy/using-a-vpn-on-windows","path":"/docs/proxy/using-a-vpn-on-windows","sidebar":"mySidebar"},{"id":"troubleshooting/index","path":"/docs/troubleshooting/","sidebar":"mySidebar"},{"id":"troubleshooting/troubleshooting-openshift-local","path":"/docs/troubleshooting/troubleshooting-openshift-local","sidebar":"mySidebar"},{"id":"troubleshooting/troubleshooting-podman","path":"/docs/troubleshooting/troubleshooting-podman","sidebar":"mySidebar"},{"id":"troubleshooting/troubleshooting-podman-on-linux","path":"/docs/troubleshooting/troubleshooting-podman-on-linux","sidebar":"mySidebar"},{"id":"troubleshooting/troubleshooting-podman-on-macos","path":"/docs/troubleshooting/troubleshooting-podman-on-macos","sidebar":"mySidebar"},{"id":"troubleshooting/troubleshooting-podman-on-windows","path":"/docs/troubleshooting/troubleshooting-podman-on-windows","sidebar":"mySidebar"}],"draftIds":[],"sidebars":{"mySidebar":{"link":{"path":"/docs/intro","label":"intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(57529);const l=JSON.parse('{"docusaurusVersion":"3.0.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.0.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.0.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.0.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.0.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.0.0"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"3.0.0"},"docusaurus-tailwindcss":{"type":"local"},"docusaurus-plugin-goatcounter":{"type":"package","name":"docusaurus-plugin-goatcounter","version":"3.0.0"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"3.0.0"},"docusaurus-theme-mermaid":{"type":"package","name":"@docusaurus/theme-mermaid","version":"3.0.0"}}}');var c=n(24246);const u={siteConfig:o.default,siteMetadata:l,globalData:a,i18n:i,codeTranslations:s},d=r.createContext(u);function p(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},46293:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(27378),o=n(161),a=n(7092),i=n(51721),s=n(1965),l=n(24246);function c(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,l.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,l.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,l.jsx)(u,{error:t})]})}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,l.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function d(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)(f,{fallback:()=>(0,l.jsx)(c,{error:t,tryAgain:n}),children:[(0,l.jsx)(a.Z,{children:(0,l.jsx)("title",{children:"Page Error"})}),(0,l.jsx)(s.Z,{children:(0,l.jsx)(c,{error:t,tryAgain:n})})]})}const p=e=>(0,l.jsx)(d,{...e});class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??p)(e)}return e??null}}},161:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},7092:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(27378);var r=n(92883),o=n(24246);function a(e){return(0,o.jsx)(r.ql,{...e})}},81884:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(27378),o=n(4289),a=n(51721),i=n(50353),s=n(45626),l=n(161),c=n(24246);const u=r.createContext({collectLink:()=>{}});var d=n(98948);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:g,isActive:m,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:{trailingSlash:v,baseUrl:k}}=(0,i.Z)(),{withBaseUrl:w}=(0,d.C)(),x=(0,r.useContext)(u),S=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>S.current));const _=p||f;const E=(0,s.Z)(_),C=_?.replace("pathname://","");let T=void 0!==C?(A=C,b&&(e=>e.startsWith("/"))(A)?w(A):A):void 0;var A;T&&E&&(T=(0,a.applyTrailingSlash)(T,{trailingSlash:v,baseUrl:k}));const N=(0,r.useRef)(!1),P=n?o.OL:o.rU,j=l.Z.canUseIntersectionObserver,L=(0,r.useRef)(),O=()=>{N.current||null==T||(window.docusaurus.preload(T),N.current=!0)};(0,r.useEffect)((()=>(!j&&E&&null!=T&&window.docusaurus.prefetch(T),()=>{j&&L.current&&L.current.disconnect()})),[L,T,j,E]);const R=T?.startsWith("#")??!1,I=!T||!E||R;return I||h||x.collectLink(T),I?(0,c.jsx)("a",{ref:S,href:T,..._&&!E&&{target:"_blank",rel:"noopener noreferrer"},...y}):(0,c.jsx)(P,{...y,onMouseEnter:O,onTouchStart:O,innerRef:e=>{S.current=e,j&&e&&E&&(L.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(L.current.unobserve(e),L.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),L.current.observe(e))},to:T,...n&&{isActive:m,activeClassName:g}})}const f=r.forwardRef(p)},99213:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c,I:()=>l});var r=n(27378),o=n(24246);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(57529);function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const i=s({message:t,id:n});return(0,o.jsx)(o.Fragment,{children:a(i,r)})}},45688:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},45626:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},98948:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>s});var r=n(27378),o=n(50353),a=n(45626);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+s:s}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},50353:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(27378),o=n(83340);function a(){return(0,r.useContext)(o._)}},76457:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(27378),o=n(23427);function a(){return(0,r.useContext)(o._)}},9834:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(27378);const o=n(161).Z.canUseDOM?r.useLayoutEffect:r.useEffect},13361:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const s=o?`${o}.${a}`:a;r(i)?e(i,s):t[s]=i}))}(e),t}},66881:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>i});var r=n(27378),o=n(24246);const a=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(a),s=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,o.jsx)(a.Provider,{value:s,children:t})}},62935:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>b,gA:()=>f,WS:()=>g,_r:()=>d,Jo:()=>y,zh:()=>p,yW:()=>h,gB:()=>m});var r=n(3620),o=n(50353),a=n(45688);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function c(e,t){const n=l(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const u={},d=()=>i("docusaurus-plugin-content-docs")??u,p=e=>function(e,t,n){void 0===t&&(t=a.m),void 0===n&&(n={});const r=i(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=d(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function g(e){void 0===e&&(e={});const t=f(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:l(t.pluginData,n)}}function m(e){return p(e).versions}function h(e){const t=p(e);return s(t)}function b(e){const t=p(e),{pathname:n}=(0,r.TH)();return c(t,n)}function y(e){const t=p(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=s(e);return{latestDocSuggestion:c(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},54374:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(8504),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},23815:(e,t,n)=>{"use strict";n.r(t);var r=n(87711),o=n(36809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(13109),n(60926)(`./prism-${e}`)})),delete globalThis.Prism}(r.p1)},1999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});n(27378);var r=n(38944),o=n(99213),a=n(20624),i=n(81884);const s={anchorWithStickyNavbar:"anchorWithStickyNavbar_JmGV",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_pMLv"};var l=n(24246);function c(e){let{as:t,id:n,...c}=e;const{navbar:{hideOnScroll:u}}=(0,a.L)();if("h1"===t||!n)return(0,l.jsx)(t,{...c,id:void 0});const d=(0,o.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof c.children?c.children:n});return(0,l.jsxs)(t,{...c,className:(0,r.Z)("anchor",u?s.anchorWithHideOnScrollNavbar:s.anchorWithStickyNavbar,c.className),id:n,children:[c.children,(0,l.jsx)(i.Z,{className:"hash-link",to:`#${n}`,"aria-label":d,title:d,children:"\u200b"})]})}},6125:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(27378);const r={iconExternalLink:"iconExternalLink_nPrP"};var o=n(24246);function a(e){let{width:t=13.5,height:n=13.5}=e;return(0,o.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,o.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},1965:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Tt});var r=n(27378),o=n(38944),a=n(46293),i=n(1123),s=n(3620),l=n(99213),c=n(24993),u=n(24246);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const g=(0,l.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function m(e){const t=e.children??g,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":g,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var h=n(75484),b=n(70174);const y={skipToContent:"skipToContent_oPtH"};function v(){return(0,u.jsx)(m,{className:y.skipToContent})}var k=n(20624),w=n(10);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:o=1.2,className:a,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,u.jsx)("g",{stroke:r,strokeWidth:o,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_J5rP"};function _(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.Z)("clean-btn close",S.closeButton,e.className),children:(0,u.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const E={content:"content_bSb_"};function C(e){const{announcementBar:t}=(0,k.L)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,o.Z)(E.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const T={announcementBar:"announcementBar_zJRd",announcementBarPlaceholder:"announcementBarPlaceholder_NpUd",announcementBarClose:"announcementBarClose_Jjdj",announcementBarContent:"announcementBarContent_t7IR"};function A(){const{announcementBar:e}=(0,k.L)(),{isActive:t,close:n}=(0,w.nT)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:a}=e;return(0,u.jsxs)("div",{className:T.announcementBar,style:{backgroundColor:r,color:o},role:"banner",children:[a&&(0,u.jsx)("div",{className:T.announcementBarPlaceholder}),(0,u.jsx)(C,{className:T.announcementBarContent}),a&&(0,u.jsx)(_,{onClick:n,className:T.announcementBarClose})]})}var N=n(85536),P=n(83457);var j=n(41763),L=n(63471);const O=r.createContext(null);function R(e){let{children:t}=e;const n=function(){const e=(0,N.e)(),t=(0,L.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,j.D9)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return(0,u.jsx)(O.Provider,{value:n,children:t})}function I(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function M(){const e=(0,r.useContext)(O);if(!e)throw new j.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,L.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:I(a)})),[o,a,t])}function D(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:a}=M();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var F=n(55421),B=n(76457);function z(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function $(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const U={toggle:"toggle_ki11",toggleButton:"toggleButton_MMFG",darkToggleIcon:"darkToggleIcon_U96C",lightToggleIcon:"lightToggleIcon_lgto",toggleButtonDisabled:"toggleButtonDisabled_Uw7m"};function H(e){let{className:t,buttonClassName:n,value:r,onChange:a}=e;const i=(0,B.Z)(),s=(0,l.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,o.Z)(U.toggle,t),children:(0,u.jsxs)("button",{className:(0,o.Z)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,u.jsx)(z,{className:(0,o.Z)(U.toggleIcon,U.lightToggleIcon)}),(0,u.jsx)($,{className:(0,o.Z)(U.toggleIcon,U.darkToggleIcon)})]})})}const Z=r.memo(H),V={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_m8pZ"};function W(e){let{className:t}=e;const n=(0,k.L)().navbar.style,r=(0,k.L)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,F.I)();return r?null:(0,u.jsx)(Z,{className:t,buttonClassName:"dark"===n?V.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var G=n(10898);function q(){return(0,u.jsx)(G.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,N.e)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Y(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(q,{}),(0,u.jsx)(W,{className:"margin-right--md"}),(0,u.jsx)(K,{})]})}var Q=n(81884),X=n(98948),J=n(45626),ee=n(61503),te=n(6125);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:o,label:a,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...c}=e;const d=(0,X.Z)(r),p=(0,X.Z)(t),f=(0,X.Z)(o,{forcePrependBaseUrl:!0}),g=a&&o&&!(0,J.Z)(o),m=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[a,g&&(0,u.jsx)(te.Z,{...s&&{width:12,height:12}})]})};return o?(0,u.jsx)(Q.Z,{href:l?f:o,...c,...m}):(0,u.jsx)(Q.Z,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?(0,ee.F)(n,t.pathname):t.pathname.startsWith(p)},...c,...m})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const a=(0,u.jsx)(ne,{className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:a}):a}function oe(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,o.Z)("menu__link",t),...r})})}function ae(e){let{mobile:t=!1,position:n,...r}=e;const o=t?oe:re;return(0,u.jsx)(o,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(80376),se=n(8862),le=n(50353);function ce(e,t){return e.some((e=>function(e,t){return!!(0,se.Mg)(e.to,t)||!!(0,ee.F)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ue(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",a),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:s.children??s.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(He,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function de(e){let{items:t,className:n,position:a,onClick:i,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ce(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:g}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&g(!d)}),[c,d,g]),(0,u.jsxs)("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsx)(ne,{role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),f()},children:l.children??l.label}),(0,u.jsx)(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(He,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function pe(e){let{mobile:t=!1,...n}=e;const r=t?de:ue;return(0,u.jsx)(r,{...n})}var fe=n(43714);function ge(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const me="iconLanguage_kvP7";function he(){return r.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},r.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var be=n(56573),ye=["translations"];function ve(){return ve=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Se="Ctrl";var _e=r.forwardRef((function(e,t){var n=e.translations,o=void 0===n?{}:n,a=xe(e,ye),i=o.buttonText,s=void 0===i?"Search":i,l=o.buttonAriaLabel,c=void 0===l?"Search":l,u=ke((0,r.useState)(null),2),d=u[0],p=u[1];return(0,r.useEffect)((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?p("\u2318"):p(Se))}),[]),r.createElement("button",ve({type:"button",className:"DocSearch DocSearch-Button","aria-label":c},a,{ref:t}),r.createElement("span",{className:"DocSearch-Button-Container"},r.createElement(be.W,null),r.createElement("span",{className:"DocSearch-Button-Placeholder"},s)),r.createElement("span",{className:"DocSearch-Button-Keys"},null!==d&&r.createElement(r.Fragment,null,r.createElement("kbd",{className:"DocSearch-Button-Key"},d===Se?r.createElement(he,null):d),r.createElement("kbd",{className:"DocSearch-Button-Key"},"K"))))})),Ee=n(7092),Ce=n(53584),Te=n(42473),Ae=n(13149);var Ne=n(31542);const Pe={button:{buttonText:(0,l.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),buttonAriaLabel:(0,l.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"})},modal:{searchBox:{resetButtonTitle:(0,l.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),resetButtonAriaLabel:(0,l.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),cancelButtonText:(0,l.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"}),cancelButtonAriaLabel:(0,l.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"})},startScreen:{recentSearchesTitle:(0,l.I)({id:"theme.SearchModal.startScreen.recentSearchesTitle",message:"Recent",description:"The title for recent searches"}),noRecentSearchesText:(0,l.I)({id:"theme.SearchModal.startScreen.noRecentSearchesText",message:"No recent searches",description:"The text when no recent searches"}),saveRecentSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.saveRecentSearchButtonTitle",message:"Save this search",description:"The label for save recent search button"}),removeRecentSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.removeRecentSearchButtonTitle",message:"Remove this search from history",description:"The label for remove recent search button"}),favoriteSearchesTitle:(0,l.I)({id:"theme.SearchModal.startScreen.favoriteSearchesTitle",message:"Favorite",description:"The title for favorite searches"}),removeFavoriteSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle",message:"Remove this search from favorites",description:"The label for remove favorite search button"})},errorScreen:{titleText:(0,l.I)({id:"theme.SearchModal.errorScreen.titleText",message:"Unable to fetch results",description:"The title for error screen of search modal"}),helpText:(0,l.I)({id:"theme.SearchModal.errorScreen.helpText",message:"You might want to check your network connection.",description:"The help text for error screen of search modal"})},footer:{selectText:(0,l.I)({id:"theme.SearchModal.footer.selectText",message:"to select",description:"The explanatory text of the action for the enter key"}),selectKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.selectKeyAriaLabel",message:"Enter key",description:"The ARIA label for the Enter key button that makes the selection"}),navigateText:(0,l.I)({id:"theme.SearchModal.footer.navigateText",message:"to navigate",description:"The explanatory text of the action for the Arrow up and Arrow down key"}),navigateUpKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.navigateUpKeyAriaLabel",message:"Arrow up",description:"The ARIA label for the Arrow up key button that makes the navigation"}),navigateDownKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.navigateDownKeyAriaLabel",message:"Arrow down",description:"The ARIA label for the Arrow down key button that makes the navigation"}),closeText:(0,l.I)({id:"theme.SearchModal.footer.closeText",message:"to close",description:"The explanatory text of the action for Escape key"}),closeKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.closeKeyAriaLabel",message:"Escape key",description:"The ARIA label for the Escape key button that close the modal"}),searchByText:(0,l.I)({id:"theme.SearchModal.footer.searchByText",message:"Search by",description:"The text explain that the search is making by Algolia"})},noResultsScreen:{noResultsText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.noResultsText",message:"No results for",description:"The text explains that there are no results for the following search"}),suggestedQueryText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.suggestedQueryText",message:"Try searching for",description:"The text for the suggested query when no results are found for the following search"}),reportMissingResultsText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsText",message:"Believe this query should return results?",description:"The text for the question where the user thinks there are missing results"}),reportMissingResultsLinkText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText",message:"Let us know.",description:"The text for the link to report missing results"})}},placeholder:(0,l.I)({id:"theme.SearchModal.placeholder",message:"Search docs",description:"The placeholder of the input of the DocSearch pop-up modal"})};let je=null;function Le(e){let{hit:t,children:n}=e;return(0,u.jsx)(Q.Z,{to:t.url,children:n})}function Oe(e){let{state:t,onClose:n}=e;const r=(0,Ce.M)();return(0,u.jsx)(Q.Z,{to:r(t.query),onClick:n,children:(0,u.jsx)(l.Z,{id:"theme.SearchBar.seeAll",values:{count:t.context.nbHits},children:"See all {count} results"})})}function Re(e){let{contextualSearch:t,externalUrlRegex:o,...a}=e;const{siteMetadata:i}=(0,le.Z)(),l=(0,Te.l)(),c=function(){const{locale:e,tags:t}=(0,Ae._q)();return[`language:${e}`,t.map((e=>`docusaurus_tag:${e}`))]}(),d=a.searchParameters?.facetFilters??[],p=t?function(e,t){const n=e=>"string"==typeof e?[e]:e;return[...n(e),...n(t)]}(c,d):d,f={...a.searchParameters,facetFilters:p},g=(0,s.k6)(),m=(0,r.useRef)(null),h=(0,r.useRef)(null),[b,y]=(0,r.useState)(!1),[v,k]=(0,r.useState)(void 0),w=(0,r.useCallback)((()=>je?Promise.resolve():Promise.all([n.e(3041).then(n.bind(n,93041)),Promise.all([n.e(532),n.e(9127)]).then(n.bind(n,89127)),Promise.all([n.e(532),n.e(4670)]).then(n.bind(n,34670))]).then((e=>{let[{DocSearchModal:t}]=e;je=t}))),[]),x=(0,r.useCallback)((()=>{w().then((()=>{m.current=document.createElement("div"),document.body.insertBefore(m.current,document.body.firstChild),y(!0)}))}),[w,y]),S=(0,r.useCallback)((()=>{y(!1),m.current?.remove()}),[y]),_=(0,r.useCallback)((e=>{w().then((()=>{y(!0),k(e.key)}))}),[w,y,k]),E=(0,r.useRef)({navigate(e){let{itemUrl:t}=e;(0,ee.F)(o,t)?window.location.href=t:g.push(t)}}).current,C=(0,r.useRef)((e=>a.transformItems?a.transformItems(e):e.map((e=>({...e,url:l(e.url)}))))).current,T=(0,r.useMemo)((()=>e=>(0,u.jsx)(Oe,{...e,onClose:S})),[S]),A=(0,r.useCallback)((e=>(e.addAlgoliaAgent("docusaurus",i.docusaurusVersion),e)),[i.docusaurusVersion]);return function(e){var t=e.isOpen,n=e.onOpen,o=e.onClose,a=e.onInput,i=e.searchButtonRef;r.useEffect((function(){function e(e){var r;(27===e.keyCode&&t||"k"===(null===(r=e.key)||void 0===r?void 0:r.toLowerCase())&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?o():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),i&&i.current===document.activeElement&&a&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&a(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,o,a,i])}({isOpen:b,onOpen:x,onClose:S,onInput:_,searchButtonRef:h}),(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(Ee.Z,{children:(0,u.jsx)("link",{rel:"preconnect",href:`https://${a.appId}-dsn.algolia.net`,crossOrigin:"anonymous"})}),(0,u.jsx)(_e,{onTouchStart:w,onFocus:w,onMouseOver:w,onClick:x,ref:h,translations:Pe.button}),b&&je&&m.current&&(0,Ne.createPortal)((0,u.jsx)(je,{onClose:S,initialScrollY:window.scrollY,initialQuery:v,navigator:E,transformItems:C,hitComponent:Le,transformSearchClient:A,...a.searchPagePath&&{resultsFooterComponent:T},...a,searchParameters:f,placeholder:Pe.placeholder,translations:Pe.modal}),m.current)]})}function Ie(){const{siteConfig:e}=(0,le.Z)();return(0,u.jsx)(Re,{...e.themeConfig.algolia})}const Me={navbarSearchContainer:"navbarSearchContainer_bzqh"};function De(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,o.Z)(n,Me.navbarSearchContainer),children:t})}var Fe=n(62935),Be=n(45161);var ze=n(24453);const $e=e=>e.docs.find((t=>t.id===e.mainDocId));const Ue={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:o="",...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.Z)(),p=(0,fe.l)(),{search:f,hash:g}=(0,s.TH)(),m=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${g}${o}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],h=t?(0,l.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,u.jsx)(pe,{...a,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(ge,{className:me}),h]}),items:m})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(De,{className:n,children:(0,u.jsx)(Ie,{})})},dropdown:pe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:a=!1}=e;const i=a?"li":"div";return(0,u.jsx)(i,{className:(0,o.Z)({navbar__item:!r&&!a,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,Fe.Iw)(r),i=(0,Be.vY)(t,r),s=a?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>s||!!a?.sidebar&&a.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,Fe.Iw)(r),i=(0,Be.oz)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>a?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...o}=e;const a=(0,Be.lO)(r)[0],i=t??a.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return(0,u.jsx)(ae,{...o,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:o,dropdownItemsAfter:a,...i}=e;const{search:c,hash:d}=(0,s.TH)(),p=(0,Fe.Iw)(n),f=(0,Fe.gB)(n),{savePreferredVersionName:g}=(0,ze.J)(n),m=[...o,...f.map((e=>{const t=p.alternateDocVersions[e.name]??$e(e);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>g(e.name)}})),...a],h=(0,Be.lO)(n)[0],b=t&&m.length>1?(0,l.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):h.label,y=t&&m.length>1?void 0:$e(h).path;return m.length<=1?(0,u.jsx)(ae,{...i,mobile:t,label:b,to:y,isActive:r?()=>!1:void 0}):(0,u.jsx)(pe,{...i,mobile:t,label:b,to:y,items:m,isActive:r?()=>!1:void 0})}};function He(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Ue[r];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(o,{...n})}function Ze(){const e=(0,N.e)(),t=(0,k.L)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(He,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Ve(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function We(){const e=0===(0,k.L)().navbar.items.length,t=M();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(Ve,{onClick:()=>t.hide()}),t.content]})}function Ge(){const e=(0,N.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(D,{header:(0,u.jsx)(Y,{}),primaryMenu:(0,u.jsx)(Ze,{}),secondaryMenu:(0,u.jsx)(We,{})}):null}const qe={navbarHideable:"navbarHideable_hhpl",navbarHidden:"navbarHidden_nmcs"};function Ke(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,o.Z)("navbar-sidebar__backdrop",e.className)})}function Ye(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,k.L)(),i=(0,N.e)(),{navbarRef:s,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,P.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=s?n(!1):i+c{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,u.jsxs)("nav",{ref:s,"aria-label":(0,l.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[qe.navbarHideable,!d&&qe.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(Ke,{onClick:i.toggle}),(0,u.jsx)(Ge,{})]})}var Qe=n(19441);const Xe="right";function Je(e){let{width:t=30,height:n=30,className:r,...o}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function et(){const{toggle:e,shown:t}=(0,N.e)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(Je,{})})}const tt={colorModeToggle:"colorModeToggle_Hewu"};function nt(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(Qe.QW,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(He,{...e})},t)))})}function rt(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function ot(){const e=(0,N.e)(),t=(0,k.L)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Xe)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,u.jsx)(rt,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(et,{}),(0,u.jsx)(q,{}),(0,u.jsx)(nt,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(nt,{items:r}),(0,u.jsx)(W,{className:tt.colorModeToggle}),!o&&(0,u.jsx)(De,{children:(0,u.jsx)(Ie,{})})]})})}function at(){return(0,u.jsx)(Ye,{children:(0,u.jsx)(ot,{})})}function it(e){let{item:t}=e;const{to:n,href:r,label:o,prependBaseUrlToHref:a,...i}=t,s=(0,X.Z)(n),l=(0,X.Z)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(Q.Z,{className:"footer__link-item",...r?{href:a?l:r}:{to:s},...i,children:[o,r&&!(0,J.Z)(r)&&(0,u.jsx)(te.Z,{})]})}function st(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(it,{item:t})},t.href??t.to)}function lt(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(st,{item:e},t)))})]})}function ct(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(lt,{column:e},t)))})}function ut(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function dt(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(it,{item:t})}function pt(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(dt,{item:e}),t.length!==n+1&&(0,u.jsx)(ut,{})]},n)))})})}function ft(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(ct,{columns:t}):(0,u.jsx)(pt,{links:t})}var gt=n(66925);const mt={footerLogoLink:"footerLogoLink_tutC"};function ht(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)(gt.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function bt(e){let{logo:t}=e;return t.href?(0,u.jsx)(Q.Z,{href:t.href,className:mt.footerLogoLink,target:t.target,children:(0,u.jsx)(ht,{logo:t})}):(0,u.jsx)(ht,{logo:t})}function yt(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function vt(e){let{style:t,links:n,logo:r,copyright:a}=e;return(0,u.jsx)("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||a)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),a]})]})})}function kt(){const{footer:e}=(0,k.L)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,u.jsx)(vt,{style:o,links:n&&n.length>0&&(0,u.jsx)(ft,{links:n}),logo:r&&(0,u.jsx)(bt,{logo:r}),copyright:t&&(0,u.jsx)(yt,{copyright:t})})}const wt=r.memo(kt),xt=(0,j.Qc)([F.S,w.pl,P.OC,ze.L5,i.VC,function(e){let{children:t}=e;return(0,u.jsx)(L.n2,{children:(0,u.jsx)(N.M,{children:(0,u.jsx)(R,{children:t})})})}]);function St(e){let{children:t}=e;return(0,u.jsx)(xt,{children:t})}var _t=n(1999);function Et(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(_t.Z,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(Qe.Cw,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(Qe.aG,{error:t})})]})})})}const Ct={mainWrapper:"mainWrapper_MB5r"};function Tt(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,b.t)(),(0,u.jsxs)(St,{children:[(0,u.jsx)(i.d,{title:s,description:l}),(0,u.jsx)(v,{}),(0,u.jsx)(A,{}),(0,u.jsx)(at,{}),(0,u.jsx)("div",{id:d,className:(0,o.Z)(h.k.wrapper.main,Ct.mainWrapper,r),children:(0,u.jsx)(a.Z,{fallback:e=>(0,u.jsx)(Et,{...e}),children:t})}),!n&&(0,u.jsx)(wt,{})]})}},10898:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(27378);var r=n(81884),o=n(98948),a=n(50353),i=n(20624),s=n(66925),l=n(24246);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,o.Z)(t.src),dark:(0,o.Z)(t.srcDark||t.src)},i=(0,l.jsx)(s.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function u(e){const{siteConfig:{title:t}}=(0,a.Z)(),{navbar:{title:n,logo:s}}=(0,i.L)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,o.Z)(s?.href||"/"),g=n?"":t,m=s?.alt??g;return(0,l.jsxs)(r.Z,{to:f,...p,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(c,{logo:s,alt:m,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},60505:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(27378);var r=n(7092),o=n(24246);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return(0,o.jsxs)(r.Z,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_version",content:n}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),i&&(0,o.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,o.jsx)("meta",{name:"docsearch:version",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},66925:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(27378),o=n(38944),a=n(76457),i=n(55421);const s={themedComponent:"themedComponent_siVc","themedComponent--light":"themedComponent--light_hHel","themedComponent--dark":"themedComponent--dark_yETr"};var l=n(24246);function c(e){let{className:t,children:n}=e;const c=(0,a.Z)(),{colorMode:u}=(0,i.I)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const a=n({theme:e,className:(0,o.Z)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:a},e)}))})}function u(e){const{sources:t,className:n,alt:r,...o}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:a}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:a,...o})}})}},80376:(e,t,n)=>{"use strict";n.d(t,{u:()=>c,z:()=>b});var r=n(27378),o=n(161),a=n(9834),i=n(56903),s=n(24246);const l="ease-in-out";function c(e){let{initialState:t}=e;const[n,o]=(0,r.useState)(t??!1),a=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:n,setCollapsed:o,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:o}=e;const a=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=o?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${o?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return p(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,o])}function g(e){if(!o.Z.canUseDOM)return e?u:d}function m(e){let{as:t="div",collapsed:n,children:o,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:c}=e;const u=(0,r.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:a}),(0,s.jsx)(t,{ref:u,style:c?void 0:g(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(u.current,n),i?.(n))},className:l,children:o})}function h(e){let{collapsed:t,...n}=e;const[o,i]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,a.Z)((()=>{t||i(!0)}),[t]),(0,a.Z)((()=>{o&&c(t)}),[o,t]),o?(0,s.jsx)(m,{...n,collapsed:l}):null}function b(e){let{lazy:t,...n}=e;const r=t?h:m;return(0,s.jsx)(r,{...n})}},10:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>g});var r=n(27378),o=n(76457),a=n(71819),i=n(41763),s=n(20624),l=n(24246);const c=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=r.createContext(null);function g(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{a(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&p(!1),!r&&d()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(f.Provider,{value:n,children:t})}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},55421:(e,t,n)=>{"use strict";n.d(t,{I:()=>b,S:()=>h});var r=n(27378),o=n(161),a=n(41763),i=n(71819),s=n(20624),l=n(24246);const c=r.createContext(void 0),u="theme",d=(0,i.WA)(u),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,g=e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{d.set(f(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[o,a]=(0,r.useState)(g(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&m(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[o,i])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function b(){const e=(0,r.useContext)(c);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},24453:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>b,Oh:()=>k});var r=n(27378),o=n(62935),a=n(45688),i=n(20624),s=n(45161),l=n(41763),c=n(71819),u=n(24246);const d=e=>`docs-preferred-version-${e}`,p={save:(e,t,n)=>{(0,c.WA)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(d(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const g=r.createContext(null);function m(){const e=(0,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,s]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=p.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){p.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return(0,u.jsx)(g.Provider,{value:n,children:t})}function b(e){let{children:t}=e;return s.cE?(0,u.jsx)(h,{children:t}):(0,u.jsx)(u.Fragment,{children:t})}function y(){const e=(0,r.useContext)(g);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,i]=y(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function k(){const e=(0,o._r)(),[t]=y();function n(n){const r=e[n],{preferredVersionName:o}=t[n];return r.versions.find((e=>e.name===o))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},52095:(e,t,n)=>{"use strict";n.d(t,{V:()=>c,b:()=>l});var r=n(27378),o=n(41763),a=n(24246);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:o}=e;const i=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return(0,a.jsx)(s.Provider,{value:i,children:t})}function c(){const e=(0,r.useContext)(s);if(e===i)throw new o.i6("DocsSidebarProvider");return e}},25611:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>s});var r=n(27378),o=n(41763),a=n(24246);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new o.i6("DocsVersionProvider");return e}},85536:(e,t,n)=>{"use strict";n.d(t,{M:()=>p,e:()=>f});var r=n(27378),o=n(63471),a=n(58357),i=n(30654),s=n(20624),l=n(41763),c=n(24246);const u=r.createContext(void 0);function d(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,s.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[l,c]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(l)return c(!1),!1}));const u=(0,r.useCallback)((()=>{c((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&c(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:l})),[e,n,u,l])}function p(e){let{children:t}=e;const n=d();return(0,c.jsx)(u.Provider,{value:n,children:t})}function f(){const e=r.useContext(u);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},63471:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>c,n2:()=>s});var r=n(27378),o=n(41763),a=n(24246);const i=r.createContext(null);function s(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const a=(0,r.useContext)(i);if(!a)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,s]=a,l=(0,o.Ql)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},70174:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(27378);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},53584:(e,t,n)=>{"use strict";n.d(t,{K:()=>s,M:()=>l});var r=n(27378),o=n(50353),a=n(30654);const i="q";function s(){return(0,a.Nc)(i)}function l(){const{siteConfig:{baseUrl:e,themeConfig:t}}=(0,o.Z)(),{algolia:{searchPagePath:n}}=t;return(0,r.useCallback)((t=>`${e}${n}?${i}=${encodeURIComponent(t)}`),[e,n])}},58357:(e,t,n)=>{"use strict";n.d(t,{i:()=>s});var r=n(27378),o=n(161);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(){const[e,t]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){t(function(){if(!o.Z.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>i?a.desktop:a.mobile}())}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[]),e}},75484:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},56903:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},45161:(e,t,n)=>{"use strict";n.d(t,{LM:()=>f,SN:()=>_,_F:()=>h,cE:()=>p,f:()=>y,lO:()=>w,oz:()=>x,s1:()=>k,vY:()=>S});var r=n(27378),o=n(3620),a=n(95473),i=n(62935),s=n(24453),l=n(25611),c=n(52095),u=n(70784),d=n(8862);const p=!!i._r;function f(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=f(t);if(e)return e}}(e):void 0:e.href}const g=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?g(e.href,t):"category"===e.type&&(g(e.href,t)||m(e.items,t))}function b(e,t){switch(e.type){case"category":return h(e,t)||e.items.some((e=>b(e,t)));case"link":return!e.unlisted||h(e,t);default:return!1}}function y(e,t){return(0,r.useMemo)((()=>e.filter((e=>b(e,t)))),[e,t])}function v(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,d.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,d.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function k(){const e=(0,c.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?v({sidebarItems:e.items,pathname:t}):null}function w(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,s.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,o].filter(Boolean))),[t,n,o])}function x(e,t){const n=w(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=w(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function _(e){let{route:t}=e;const n=(0,o.TH)(),r=(0,l.E)(),i=t.routes,s=i.find((e=>(0,o.LX)(n.pathname,e)));if(!s)return null;const c=s.sidebar,u=c?r.docsSidebars[c]:void 0;return{docElement:(0,a.H)(i),sidebarName:c,sidebarItems:u}}},19441:(e,t,n)=>{"use strict";n.d(t,{aG:()=>u,Ac:()=>c,Cw:()=>l,QW:()=>d});var r=n(27378),o=n(99213),a=n(51721);const i={errorBoundaryError:"errorBoundaryError_WE6Q",errorBoundaryFallback:"errorBoundaryFallback_bdJX"};var s=n(24246);function l(e){return(0,s.jsx)("button",{type:"button",...e,children:(0,s.jsx)(o.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function c(e){let{error:t,tryAgain:n}=e;return(0,s.jsxs)("div",{className:i.errorBoundaryFallback,children:[(0,s.jsx)("p",{children:t.message}),(0,s.jsx)(l,{onClick:n})]})}function u(e){let{error:t}=e;const n=(0,a.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,s.jsx)("p",{className:i.errorBoundaryError,children:n})}class d extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}},99162:(e,t,n)=>{"use strict";n.d(t,{p:()=>o});var r=n(50353);function o(e){const{siteConfig:t}=(0,r.Z)(),{title:n,titleDelimiter:o}=t;return e?.trim().length?`${e.trim()} ${o} ${n}`:n}},30654:(e,t,n)=>{"use strict";n.d(t,{Nc:()=>l,Rb:()=>i,_X:()=>s});var r=n(27378),o=n(3620),a=n(41763);function i(e){!function(e){const t=(0,o.k6)(),n=(0,a.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){return function(e){const t=(0,o.k6)();return(0,r.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}function l(e){const t=s(e)??"",n=function(){const e=(0,o.k6)();return(0,r.useCallback)(((t,n,r)=>{const o=new URLSearchParams(e.location.search);n?o.set(t,n):o.delete(t),(r?.push?e.push:e.replace)({search:o.toString()})}),[e])}();return[t,(0,r.useCallback)(((t,r)=>{n(e,t,r)}),[n,e])]}},70784:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function o(e){return Array.from(new Set(e))}n.d(t,{j:()=>o,l:()=>r})},1123:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>d,VC:()=>g});var r=n(27378),o=n(38944),a=n(7092),i=n(66881);function s(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(98948),c=n(99162),u=n(24246);function d(e){let{title:t,description:n,keywords:r,image:o,children:i}=e;const s=(0,c.p)(t),{withBaseUrl:d}=(0,l.C)(),p=o?d(o,{absolute:!0}):void 0;return(0,u.jsxs)(a.Z,{children:[t&&(0,u.jsx)("title",{children:s}),t&&(0,u.jsx)("meta",{property:"og:title",content:s}),n&&(0,u.jsx)("meta",{name:"description",content:n}),n&&(0,u.jsx)("meta",{property:"og:description",content:n}),r&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,u.jsx)("meta",{property:"og:image",content:p}),p&&(0,u.jsx)("meta",{name:"twitter:image",content:p}),i]})}const p=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(p),s=(0,o.Z)(i,t);return(0,u.jsxs)(p.Provider,{value:s,children:[(0,u.jsx)(a.Z,{children:(0,u.jsx)("html",{className:s})}),n]})}function g(e){let{children:t}=e;const n=s(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return(0,u.jsx)(f,{className:(0,o.Z)(r,a),children:t})}},41763:(e,t,n)=>{"use strict";n.d(t,{D9:()=>s,Qc:()=>u,Ql:()=>c,i6:()=>l,zX:()=>i});var r=n(27378),o=n(9834),a=n(24246);function i(e){const t=(0,r.useRef)(e);return(0,o.Z)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,o.Z)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),n)})}}},61503:(e,t,n)=>{"use strict";function r(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}n.d(t,{F:()=>r})},8862:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var r=n(27378),o=n(76623),a=n(50353);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},83457:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>m,OC:()=>u,RF:()=>f,o5:()=>g});var r=n(27378),o=n(161),a=n(76457),i=n(9834),s=n(41763),l=n(24246);const c=r.createContext(void 0);function u(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function d(){const e=(0,r.useContext)(c);if(null==e)throw new s.i6("ScrollControllerProvider");return e}const p=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=d(),o=(0,r.useRef)(p()),a=(0,s.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=p();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function g(){const e=d(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),o=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,i.Z)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:o}}function m(){const e=(0,r.useRef)(null),t=(0,a.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&ot&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},13149:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>l,os:()=>s});var r=n(62935),o=n(50353),a=n(24453);const i="default";function s(e,t){return`docs-${e}-${t}`}function l(){const{i18n:e}=(0,o.Z)(),t=(0,r._r)(),n=(0,r.WS)(),l=(0,a.Oh)();const c=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,o=l[e],a=t[e].versions.find((e=>e.isLast));return s(e,(r??o??a).name)}))];return{locale:e.currentLocale,tags:c}}},71819:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>u,WA:()=>c});var r=n(27378);const o="localStorage";function a(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function i(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=i(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),a({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),a({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function u(e,t){const n=(0,r.useRef)((()=>null===e?l:c(e,t))).current(),o=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,r.useSyncExternalStore)(o,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},43714:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(50353),o=n(3620),a=n(51721);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.Z)(),{pathname:l}=(0,o.TH)(),c=(0,a.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},24993:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(27378),o=n(3620),a=n(41763);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},20624:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(50353);function o(){return(0,r.Z)().siteConfig.themeConfig}},80632:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(50353);function o(){const{siteConfig:{themeConfig:e}}=(0,r.Z)();return e}},42473:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var r=n(27378),o=n(61503),a=n(98948),i=n(80632);function s(){const{withBaseUrl:e}=(0,a.C)(),{algolia:{externalUrlRegex:t,replaceSearchResultPathname:n}}=(0,i.L)();return(0,r.useCallback)((r=>{const a=new URL(r);if((0,o.F)(t,a.href))return r;const i=`${a.pathname+a.hash}`;return e(function(e,t){return t?e.replaceAll(new RegExp(t.from,"g"),t.to):e}(i,n))}),[e,t,n])}},42520:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,a)}},86102:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},51721:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(42520);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(86102);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},76623:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(27378);var r=n(51237),o=n.n(r),a=n(16887);const i={"006e489c":[()=>Promise.all([n.e(5628),n.e(8145)]).then(n.bind(n,11956)),"@site/blog/2023-03-29-release-0.13.md",11956],"014457dd":[()=>n.e(6521).then(n.bind(n,10428)),"@site/docs/containers/images/building-an-image.md",10428],"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,79898)),"@theme/BlogTagsListPage",79898],"021eaa84":[()=>Promise.all([n.e(5628),n.e(7875)]).then(n.bind(n,61708)),"@site/blog/2023-11-03-release-1.5.md?truncated=true",61708],"02e265ea":[()=>n.e(9133).then(n.t.bind(n,36901,19)),"~blog/default/blog-tags-kind-429-list.json",36901],"03685665":[()=>n.e(4672).then(n.t.bind(n,44279,19)),"~docs/default/tag-docs-tags-docker-f43.json",44279],"03ccf92d":[()=>n.e(3259).then(n.t.bind(n,87276,19)),"~blog/default/blog-tags-codespaces-a42-list.json",87276],"059d1c6a":[()=>Promise.all([n.e(7849),n.e(8262)]).then(n.bind(n,96187)),"@site/src/pages/downloads/index.tsx",96187],"07f59c2a":[()=>n.e(9372).then(n.bind(n,80272)),"@site/blog/2022-12-01-release-0.10-blog.md",80272],"08570680":[()=>n.e(9944).then(n.bind(n,56261)),"@site/docs/extensions/write/when-clause-context.md",56261],"09b168a7":[()=>n.e(9579).then(n.bind(n,43456)),"@site/docs/minikube/index.md",43456],"0b40a488":[()=>n.e(7134).then(n.t.bind(n,55473,19)),"~blog/default/blog-tags-compose-c2a-list.json",55473],"0cbb83d7":[()=>n.e(406).then(n.t.bind(n,49751,19)),"~blog/default/blog-tags-onboarding-c3d.json",49751],"0d040286":[()=>n.e(8860).then(n.t.bind(n,37951,19)),"~blog/default/blog-tags-podman-desktop-31d-list.json",37951],"0e384e19":[()=>n.e(9671).then(n.bind(n,68675)),"@site/docs/intro.md",68675],"10ce918d":[()=>n.e(7918).then(n.bind(n,84376)),"@site/docs/lima/creating-a-lima-instance.md",84376],"12f1535e":[()=>n.e(4781).then(n.bind(n,61645)),"@site/blog/2023-02-15-release-0.12.md?truncated=true",61645],17896441:[()=>Promise.all([n.e(532),n.e(7849),n.e(1006),n.e(2339)]).then(n.bind(n,87823)),"@theme/DocItem",87823],"181ef600":[()=>n.e(3296).then(n.bind(n,34593)),"@site/docs/installation/windows-install/installing-podman-desktop-and-podman-in-a-restricted-environment.md",34593],"19eded63":[()=>n.e(4459).then(n.bind(n,44324)),"@site/docs/lima/installing.md",44324],"1a16e8bf":[()=>Promise.all([n.e(5628),n.e(2079)]).then(n.bind(n,7792)),"@site/blog/2023-06-08-release-1.1.md",7792],"1a4e3797":[()=>Promise.all([n.e(532),n.e(7920)]).then(n.bind(n,36351)),"@theme/SearchPage",36351],"1ce91f4c":[()=>n.e(3324).then(n.t.bind(n,73280,19)),"~docs/default/tag-docs-tags-openshift-f50.json",73280],"1cfced13":[()=>Promise.all([n.e(5628),n.e(8215)]).then(n.bind(n,36277)),"@site/blog/2023-07-12-release-1.2.md",36277],"1dcf37fa":[()=>n.e(2242).then(n.bind(n,53724)),"@site/docs/podman/installing-podman-with-openshift-local-on-windows.md",53724],"1df93b7f":[()=>Promise.all([n.e(7849),n.e(3237)]).then(n.bind(n,57501)),"@site/src/pages/index.tsx",57501],"213182ef":[()=>n.e(7722).then(n.t.bind(n,2030,19)),"~blog/default/blog-tags-onboarding-c3d-list.json",2030],"2295be0e":[()=>n.e(1859).then(n.t.bind(n,37668,19)),"~blog/default/blog-tags-settings-b55.json",37668],"22de4147":[()=>n.e(5240).then(n.bind(n,85579)),"@site/blog/2023-04-19-running-a-local-kubernetes-cluster-with-podman-desktop.md?truncated=true",85579],"232c546d":[()=>Promise.all([n.e(7849),n.e(3163)]).then(n.bind(n,53330)),"@site/src/pages/downloads/macos.tsx",53330],"24bda87b":[()=>n.e(4918).then(n.bind(n,93582)),"@site/docs/podman/creating-a-podman-machine.md",93582],25622900:[()=>n.e(1896).then(n.bind(n,17676)),"@site/docs/minikube/creating-a-minikube-cluster.md",17676],"2658ced2":[()=>n.e(7881).then(n.bind(n,30772)),"@site/docs/compose/index.md",30772],"2ae2e7fe":[()=>n.e(6692).then(n.t.bind(n,29428,19)),"~docs/default/tag-docs-tags-restricted-environment-357.json",29428],"2bbe04e6":[()=>n.e(4220).then(n.bind(n,38836)),"@site/docs/containers/images/index.md",38836],"2d629ea6":[()=>n.e(3879).then(n.bind(n,22591)),"@site/docs/kubernetes/deploying-a-container-to-kubernetes.md",22591],"308aae28":[()=>n.e(522).then(n.bind(n,64674)),"@site/docs/troubleshooting/troubleshooting-podman-on-windows.md",64674],"31de1779":[()=>n.e(7653).then(n.bind(n,65250)),"@site/docs/installation/windows-install/installing-podman-desktop-silently-with-the-windows-installer.md",65250],"3289a752":[()=>Promise.all([n.e(532),n.e(8811)]).then(n.bind(n,41609)),"@site/docs/migrating-from-docker/verifying-your-tools-are-using-podman.md",41609],"330dfcdb":[()=>n.e(4929).then(n.bind(n,61228)),"@site/blog/2023-04-14-release-0.14.md?truncated=true",61228],33942509:[()=>n.e(10).then(n.t.bind(n,21670,19)),"~docs/default/tag-docs-tags-lima-ea4.json",21670],"33a21d7d":[()=>n.e(3152).then(n.bind(n,78250)),"@site/docs/minikube/installing.md",78250],"34cf6fc7":[()=>n.e(1297).then(n.t.bind(n,65368,19)),"~docs/default/tag-docs-tags-when-clause-c95.json",65368],"35a7a45c":[()=>n.e(3414).then(n.bind(n,8347)),"@site/docs/proxy/using-a-vpn-on-windows.md",8347],"368cce37":[()=>n.e(2667).then(n.bind(n,63616)),"@site/blog/2023-05-17-release-1.0.md",63616],"3720c009":[()=>Promise.all([n.e(532),n.e(3751)]).then(n.bind(n,84889)),"@theme/DocTagsListPage",84889],"382c5d2b":[()=>n.e(1441).then(n.t.bind(n,96591,19)),"~blog/default/blog-tags-podman-desktop-31d.json",96591],"38a042e4":[()=>n.e(7138).then(n.bind(n,95583)),"@site/blog/2022-11-17-develop-podman-using-codespaces.md",95583],"3b85f227":[()=>n.e(9469).then(n.t.bind(n,49034,19)),"~docs/default/tag-docs-tags-compose-d41.json",49034],"3e03f778":[()=>n.e(7034).then(n.t.bind(n,86597,19)),"~docs/default/tag-docs-tags-podman-4ff.json",86597],"3ed6e2e9":[()=>n.e(6536).then(n.t.bind(n,98969,19)),"~docs/default/tag-docs-tags-macos-7ec.json",98969],"3fe48f60":[()=>n.e(8290).then(n.t.bind(n,85859,19)),"~docs/default/tag-docs-tags-minikube-36f.json",85859],"4213e5b1":[()=>n.e(9973).then(n.bind(n,85006)),"@site/docs/containers/starting-a-container.md",85006],"43b416ef":[()=>n.e(7847).then(n.t.bind(n,15745,19)),"/home/runner/work/podman-desktop/podman-desktop/website/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",15745],"473de3ed":[()=>n.e(9043).then(n.bind(n,49887)),"@site/docs/kubernetes/kind/pushing-an-image-to-kind.md",49887],"4816649b":[()=>Promise.all([n.e(5628),n.e(6690)]).then(n.bind(n,47883)),"@site/blog/2023-04-14-release-0.14.md",47883],"48b6ff5f":[()=>n.e(7573).then(n.bind(n,60862)),"@site/docs/installation/linux-install/installing-podman-desktop-from-a-flatpak-bundle.md",60862],"4974f5d2":[()=>n.e(1447).then(n.bind(n,60158)),"@site/docs/lima/index.md",60158],"4b8121dd":[()=>n.e(534).then(n.bind(n,78505)),"@site/docs/kubernetes/existing-kubernetes/index.md",78505],"4cb6c19a":[()=>n.e(1046).then(n.bind(n,29294)),"@site/docs/kind/index.md",29294],"4f561e31":[()=>n.e(9817).then(n.bind(n,52965)),"@site/docs/proxy/using-a-proxy-on-linux.md",52965],"5087625a":[()=>Promise.all([n.e(7849),n.e(1724)]).then(n.bind(n,50036)),"@site/src/pages/downloads/windows.tsx",50036],"5099f3e0":[()=>n.e(6608).then(n.bind(n,308)),"@site/docs/installation/windows-install/installing-podman-desktop-with-scoop.md",308],"512fbd77":[()=>n.e(649).then(n.bind(n,96278)),"@site/blog/2023-06-08-release-1.1.md?truncated=true",96278],"51dec273":[()=>n.e(6026).then(n.t.bind(n,20936,19)),"~docs/default/tag-docs-tags-migrating-from-docker-f4d.json",20936],"51e516cc":[()=>n.e(6158).then(n.bind(n,38224)),"@site/docs/containers/creating-a-pod.md",38224],"524ce9a0":[()=>n.e(8768).then(n.bind(n,16588)),"@site/docs/kind/configuring-podman-for-kind-on-windows.md",16588],"54590fd2":[()=>n.e(138).then(n.bind(n,27265)),"@site/docs/kubernetes/deploying-a-pod-to-kubernetes.md",27265],"55960ee5":[()=>n.e(4121).then(n.t.bind(n,88070,19)),"~docs/default/tags-list-current-prop-15a.json",88070],"562ca3e9":[()=>n.e(3840).then(n.bind(n,92372)),"@site/docs/kind/creating-a-kind-cluster.md",92372],"5660752d":[()=>Promise.all([n.e(532),n.e(8176)]).then(n.bind(n,42253)),"@site/docs/openshift/openshift-local/index.md",42253],"56c3a9b2":[()=>Promise.all([n.e(7849),n.e(3010)]).then(n.bind(n,55646)),"@site/src/pages/core-values/index.tsx",55646],"583db3ef":[()=>n.e(7363).then(n.bind(n,7910)),"@site/docs/extensions/index.md",7910],"59a6f192":[()=>n.e(3233).then(n.bind(n,15389)),"@site/docs/containers/onboarding.md",15389],"5c63ba15":[()=>n.e(2549).then(n.t.bind(n,45174,19)),"~docs/default/tag-docs-tags-registries-8ab.json",45174],"5df556a2":[()=>Promise.all([n.e(5628),n.e(3870)]).then(n.bind(n,86489)),"@site/blog/2023-05-02-release-0.15.md",86489],"5e95c892":[()=>n.e(9661).then(n.bind(n,32108)),"@theme/DocsRoot",32108],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,36809)),"@generated/docusaurus.config",36809],"608238a8":[()=>n.e(2778).then(n.t.bind(n,75185,19)),"~blog/default/blog-tags-openshift-7f4.json",75185],"6101b3fc":[()=>Promise.all([n.e(7849),n.e(5248)]).then(n.bind(n,93963)),"@site/src/pages/downloads/linux.tsx",93963],"6194ac84":[()=>n.e(397).then(n.t.bind(n,299,19)),"~docs/default/tag-docs-tags-podman-desktop-be3.json",299],"61d4c13a":[()=>n.e(743).then(n.t.bind(n,76362,19)),"~blog/default/blog-tags-migrating-0ed.json",76362],"6269f1c0":[()=>Promise.all([n.e(532),n.e(2609)]).then(n.bind(n,28689)),"@site/docs/migrating-from-docker/importing-saved-containers.md",28689],"64abd3af":[()=>n.e(745).then(n.bind(n,80946)),"@site/docs/kind/pushing-an-image-to-kind.md",80946],"657ac0bc":[()=>n.e(5625).then(n.t.bind(n,83769,19)),"/home/runner/work/podman-desktop/podman-desktop/website/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",83769],"65a10ffa":[()=>n.e(2472).then(n.bind(n,99867)),"@site/blog/2023-03-24-5-things-to-know-for-a-docker-user.md?truncated=true",99867],"6603ef13":[()=>n.e(3207).then(n.bind(n,14361)),"@site/docs/installation/index.md",14361],"6875c492":[()=>Promise.all([n.e(532),n.e(7849),n.e(1006),n.e(7260),n.e(8610)]).then(n.bind(n,41071)),"@theme/BlogTagsPostsPage",41071],"69c5f318":[()=>n.e(4322).then(n.bind(n,60285)),"@site/docs/kind/working-with-your-local-kind-cluster.md",60285],"6af14956":[()=>n.e(8221).then(n.t.bind(n,16567,19)),"~docs/default/tag-docs-tags-linux-f75.json",16567],"6bf124c2":[()=>n.e(8960).then(n.bind(n,86294)),"@site/docs/minikube/deleting-your-minikube-cluster.md",86294],"6c80b6fe":[()=>n.e(2323).then(n.bind(n,16063)),"@site/docs/troubleshooting/troubleshooting-podman-on-linux.md",16063],"708d858d":[()=>n.e(7377).then(n.bind(n,91777)),"@site/docs/migrating-from-docker/emulating-docker-cli-with-podman.md",91777],72486833:[()=>n.e(3505).then(n.t.bind(n,83722,19)),"~blog/default/blog-tags-kubernetes-4b9-list.json",83722],"724f3974":[()=>n.e(5414).then(n.bind(n,41606)),"@site/docs/minikube/configuring-podman-for-minikube-on-windows.md",41606],"72dd8f7e":[()=>n.e(9106).then(n.t.bind(n,96956,19)),"~docs/default/tag-docs-tags-mac-0-s-b35.json",96956],75281220:[()=>n.e(7366).then(n.bind(n,60820)),"@site/docs/kubernetes/index.md",60820],"7591d420":[()=>n.e(7220).then(n.t.bind(n,97304,19)),"~docs/default/tag-docs-tags-migrating-to-kubernetes-dc1.json",97304],79551407:[()=>n.e(9179).then(n.t.bind(n,42725,19)),"~docs/default/tag-docs-tags-images-58d.json",42725],"79665d43":[()=>n.e(2111).then(n.t.bind(n,66920,19)),"~docs/default/tag-docs-tags-kubernetes-664.json",66920],"7bdcd7a7":[()=>n.e(7714).then(n.bind(n,58711)),"@site/docs/extensions/write/index.md",58711],"7d88b63f":[()=>n.e(7741).then(n.bind(n,99152)),"@site/docs/troubleshooting/troubleshooting-openshift-local.md",99152],"814f3328":[()=>n.e(2535).then(n.t.bind(n,45641,19)),"~blog/default/blog-post-list-prop-default.json",45641],"819ef483":[()=>n.e(1676).then(n.t.bind(n,33832,19)),"~docs/default/tag-docs-tags-kind-9c3.json",33832],"81e486a8":[()=>n.e(9626).then(n.bind(n,13318)),"@site/docs/kind/restarting-your-kind-cluster.md",13318],"822c343e":[()=>n.e(7149).then(n.t.bind(n,24469,19)),"/home/runner/work/podman-desktop/podman-desktop/website/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",24469],"83245ae6":[()=>Promise.all([n.e(5628),n.e(7679)]).then(n.bind(n,24900)),"@site/blog/2023-01-18-release-0.11.md",24900],"83d480e9":[()=>n.e(205).then(n.t.bind(n,43672,19)),"~blog/default/blog-tags-release-b5c.json",43672],"83e10f72":[()=>n.e(4157).then(n.t.bind(n,38130,19)),"~docs/default/tag-docs-tags-containers-6f8.json",38130],"840a98fb":[()=>n.e(809).then(n.t.bind(n,98272,19)),"~docs/default/tag-docs-tags-openshift-local-64e.json",98272],"846a5e19":[()=>n.e(3317).then(n.t.bind(n,37958,19)),"~docs/default/tag-docs-tags-extension-c4d.json",37958],"8593ff01":[()=>n.e(7007).then(n.t.bind(n,89064,19)),"~blog/default/blog-tags-docker-f07.json",89064],"86063cd3":[()=>n.e(2958).then(n.bind(n,16699)),"@site/docs/lima/customizing.md",16699],"86f2a982":[()=>Promise.all([n.e(532),n.e(70)]).then(n.bind(n,52529)),"@site/docs/troubleshooting/troubleshooting-podman.md",52529],"88efc5aa":[()=>n.e(6088).then(n.t.bind(n,21917,19)),"~blog/default/blog-tags-kind-429.json",21917],"894e67a6":[()=>n.e(3714).then(n.bind(n,35392)),"@site/blog/2023-09-18-release-1.4.md?truncated=true",35392],"8b4dd820":[()=>n.e(3636).then(n.bind(n,84066)),"@site/blog/2022-12-01-release-0.10-blog.md?truncated=true",84066],"901c37e5":[()=>n.e(1021).then(n.bind(n,95409)),"@site/docs/minikube/working-with-your-local-minikube-cluster.md",95409],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"94f3d131":[()=>n.e(4651).then(n.bind(n,3827)),"@site/docs/minikube/restarting-your-minikube-cluster.md",3827],"94fb813f":[()=>n.e(1705).then(n.t.bind(n,68161,19)),"~docs/default/tag-docs-tags-publishing-899.json",68161],95366386:[()=>n.e(4617).then(n.bind(n,80587)),"@site/blog/2023-05-02-release-0.15.md?truncated=true",80587],"959a8cfe":[()=>Promise.all([n.e(532),n.e(6317)]).then(n.bind(n,30399)),"@site/docs/containers/registries/insecure-registry.md",30399],"97615df2":[()=>Promise.all([n.e(5628),n.e(5375)]).then(n.bind(n,61980)),"@site/blog/2023-07-12-release-1.2.md?truncated=true",61980],"987564cc":[()=>n.e(9979).then(n.t.bind(n,91520,19)),"~blog/default/blog-tags-extensions-1ab.json",91520],99245987:[()=>n.e(8445).then(n.t.bind(n,41506,19)),"~blog/default/blog-tags-migrating-0ed-list.json",41506],"9aa62c0e":[()=>n.e(506).then(n.t.bind(n,9694,19)),"~docs/default/tag-docs-tags-chocolatey-ce7.json",9694],"9c021584":[()=>n.e(7438).then(n.t.bind(n,98055,19)),"~blog/default/blog-tags-release-b5c-list.json",98055],"9cb03f5d":[()=>n.e(4059).then(n.t.bind(n,4947,19)),"~docs/default/tag-docs-tags-writing-569.json",4947],"9dce5486":[()=>n.e(8566).then(n.bind(n,53252)),"@site/blog/2023-02-15-release-0.12.md",53252],"9e4087bc":[()=>n.e(3608).then(n.bind(n,7507)),"@theme/BlogArchivePage",7507],"9e8f4e9c":[()=>n.e(1074).then(n.bind(n,16929)),"@site/docs/extensions/install/index.md",16929],"9f97f9d1":[()=>Promise.all([n.e(5628),n.e(6843)]).then(n.bind(n,31482)),"@site/blog/2023-08-16-release-1.3.md?truncated=true",31482],a00af9f0:[()=>Promise.all([n.e(5628),n.e(822)]).then(n.bind(n,5416)),"@site/blog/2023-11-03-release-1.5.md",5416],a0323d9f:[()=>n.e(523).then(n.bind(n,78083)),"@site/docs/minikube/pushing-an-image-to-minikube.md",78083],a35cf155:[()=>n.e(9341).then(n.bind(n,62105)),"@site/docs/installation/windows-install/index.md",62105],a5e1f61e:[()=>n.e(3820).then(n.t.bind(n,61163,19)),"~docs/default/tag-docs-tags-winget-d3b.json",61163],a67ca768:[()=>n.e(1032).then(n.t.bind(n,62346,19)),"~docs/default/tag-docs-tags-pods-274.json",62346],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(7849),n.e(1006),n.e(7260),n.e(3089)]).then(n.bind(n,63462)),"@theme/BlogListPage",63462],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,53457,19)),"~blog/default/blog-tags-tags-4c2.json",53457],a766a857:[()=>n.e(1342).then(n.t.bind(n,76018,19)),"~docs/default/tag-docs-tags-windows-4a4.json",76018],a7bd4aaa:[()=>n.e(8518).then(n.bind(n,84987)),"@theme/DocVersionRoot",84987],a8ce95ee:[()=>n.e(7159).then(n.bind(n,15979)),"@site/docs/containers/images/pulling-an-image.md",15979],a94703ab:[()=>Promise.all([n.e(532),n.e(4368)]).then(n.bind(n,53505)),"@theme/DocRoot",53505],a9a76bf7:[()=>n.e(4356).then(n.t.bind(n,28826,19)),"~docs/default/tag-docs-tags-onboarding-2eb.json",28826],aaabcfd8:[()=>n.e(6932).then(n.bind(n,27543)),"@site/docs/lima/creating-a-kubernetes-instance.md",27543],abc85917:[()=>n.e(2896).then(n.bind(n,24539)),"@site/docs/compose/setting-up-compose.md",24539],ae79aff5:[()=>n.e(4386).then(n.bind(n,3750)),"@site/docs/migrating-from-docker/index.md",3750],af231220:[()=>n.e(5326).then(n.bind(n,31282)),"@site/docs/kind/installing.md",31282],b00bc883:[()=>n.e(1830).then(n.bind(n,96477)),"@site/docs/installation/linux-install/installing-podman-desktop-from-a-compressed-tar-file.md",96477],b0f1c099:[()=>n.e(9387).then(n.t.bind(n,36462,19)),"~blog/default/blog-tags-kubernetes-4b9.json",36462],b104dd1e:[()=>n.e(6623).then(n.bind(n,14257)),"@site/docs/compose/running-compose.md",14257],b2b675dd:[()=>n.e(533).then(n.t.bind(n,28017,19)),"~blog/default/blog-c06.json",28017],b2e1a0c8:[()=>n.e(944).then(n.t.bind(n,95958,19)),"~docs/default/tag-docs-tags-vpn-b32.json",95958],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,30010,19)),"~blog/default/blog-archive-80c.json",30010],b39cdcf9:[()=>n.e(592).then(n.bind(n,8756)),"@site/blog/2023-03-24-5-things-to-know-for-a-docker-user.md",8756],b4657d81:[()=>n.e(8502).then(n.bind(n,79549)),"@site/docs/proxy/using-a-proxy-in-your-containers.md",79549],b5abacaa:[()=>n.e(7141).then(n.t.bind(n,34508,19)),"~blog/default/blog-tags-story-66d.json",34508],b799648a:[()=>n.e(1981).then(n.bind(n,92445)),"@site/blog/2023-05-17-release-1.0.md?truncated=true",92445],b985118d:[()=>n.e(899).then(n.bind(n,43688)),"@site/docs/installation/macos-install.md",43688],ba1dc56d:[()=>n.e(8893).then(n.t.bind(n,39216,19)),"~blog/default/blog-tags-openshift-7f4-list.json",39216],ba322490:[()=>n.e(2178).then(n.t.bind(n,7085,19)),"/home/runner/work/podman-desktop/podman-desktop/website/.docusaurus/docusaurus-theme-search-algolia/default/plugin-route-context-module-100.json",7085],ba5b9f11:[()=>n.e(7251).then(n.bind(n,50896)),"@site/blog/2022-11-17-develop-podman-using-codespaces.md?truncated=true",50896],bc816bf2:[()=>n.e(347).then(n.bind(n,62219)),"@site/docs/podman/index.md",62219],bd80aa65:[()=>n.e(3427).then(n.bind(n,48198)),"@site/docs/kind/deleting-your-kind-cluster.md",48198],c0d19596:[()=>n.e(6328).then(n.bind(n,60045)),"@site/docs/installation/windows-install/installing-podman-desktop-with-chocolatey.md",60045],c11c87f7:[()=>n.e(4940).then(n.bind(n,46220)),"@site/docs/openshift/index.md",46220],c276ecb2:[()=>n.e(182).then(n.t.bind(n,31444,19)),"~blog/default/blog-tags-devcontainer-050-list.json",31444],c37b4a03:[()=>n.e(921).then(n.t.bind(n,40717,19)),"~blog/default/blog-tags-story-66d-list.json",40717],c5b2f0f9:[()=>n.e(2193).then(n.bind(n,1782)),"@site/docs/containers/images/pushing-an-image-to-a-registry.md",1782],c6346fcf:[()=>n.e(3154).then(n.bind(n,10100)),"@site/docs/installation/linux-install/index.md",10100],c685778b:[()=>n.e(563).then(n.t.bind(n,70383,19)),"~docs/default/tag-docs-tags-installing-ce0.json",70383],c6aad055:[()=>n.e(203).then(n.bind(n,2315)),"@site/docs/containers/index.md",2315],c6f0d1b2:[()=>n.e(8626).then(n.bind(n,11341)),"@site/docs/podman/installing.md",11341],c95aa39f:[()=>n.e(2938).then(n.t.bind(n,8516,19)),"~docs/default/tag-docs-tags-mac-os-829.json",8516],cabda5f8:[()=>n.e(873).then(n.bind(n,7278)),"@site/blog/2023-03-29-release-0.13.md?truncated=true",7278],ccc49370:[()=>Promise.all([n.e(532),n.e(7849),n.e(1006),n.e(7260),n.e(6103)]).then(n.bind(n,83227)),"@theme/BlogPostPage",83227],cd23aec9:[()=>n.e(7698).then(n.bind(n,20871)),"@site/docs/proxy/index.md",20871],cd509849:[()=>n.e(5018).then(n.t.bind(n,99547,19)),"~docs/default/tag-docs-tags-flathub-b2e.json",99547],d18d294a:[()=>n.e(5765).then(n.t.bind(n,24788,19)),"~blog/default/blog-tags-settings-b55-list.json",24788],d1b15a6d:[()=>n.e(8532).then(n.bind(n,55019)),"@site/docs/minikube/building-an-image-and-testing-it-in-minikube.md",55019],d4840880:[()=>n.e(6120).then(n.bind(n,38484)),"@site/docs/extensions/publish/index.md",38484],d4bf7e47:[()=>n.e(8989).then(n.bind(n,6177)),"@site/docs/troubleshooting/troubleshooting-podman-on-macos.md",6177],d651e2ee:[()=>n.e(8514).then(n.bind(n,7762)),"@site/docs/troubleshooting/index.md",7762],d7fbbe43:[()=>n.e(2217).then(n.bind(n,10464)),"@site/src/pages/features/index.tsx",10464],dbbb982f:[()=>n.e(7622).then(n.t.bind(n,50194,19)),"~blog/default/blog-tags-docker-f07-list.json",50194],de311ed4:[()=>n.e(1625).then(n.bind(n,79790)),"@site/blog/2023-04-19-running-a-local-kubernetes-cluster-with-podman-desktop.md",79790],df203c0f:[()=>Promise.all([n.e(532),n.e(9924)]).then(n.bind(n,67051)),"@theme/DocTagDocListPage",67051],df322e14:[()=>Promise.all([n.e(532),n.e(945)]).then(n.bind(n,61377)),"@site/docs/kubernetes/viewing-and-selecting-current-kubernete-context.md",61377],e44de27e:[()=>n.e(2599).then(n.bind(n,26546)),"@site/docs/podman/setting-podman-machine-default-connection.md",26546],e5638e51:[()=>n.e(6766).then(n.bind(n,31989)),"@site/docs/proxy/using-a-proxy.md",31989],e665718d:[()=>n.e(114).then(n.bind(n,31261)),"@site/src/pages/extend/index.tsx",31261],e6fb1369:[()=>n.e(8800).then(n.bind(n,58488)),"@site/blog/2023-01-18-release-0.11.md?truncated=true",58488],e85ba0e6:[()=>n.e(2082).then(n.t.bind(n,63409,19)),"~blog/default/blog-tags-compose-c2a.json",63409],e8dc4d98:[()=>n.e(6308).then(n.t.bind(n,11680,19)),"~docs/default/tag-docs-tags-proxy-901.json",11680],eb17771c:[()=>n.e(7480).then(n.bind(n,67347)),"@site/docs/kubernetes/viewing-and-selecting-current-kubernete-context-in-the-status-bar.md",67347],ed75cfcb:[()=>n.e(3584).then(n.bind(n,42864)),"@site/docs/migrating-from-docker/using-podman-mac-helper.md",42864],efc2a09d:[()=>n.e(7739).then(n.bind(n,15799)),"@site/docs/extensions/write/onboarding-workflow.md",15799],f0057c03:[()=>n.e(5708).then(n.t.bind(n,77018,19)),"~docs/default/tag-docs-tags-scoop-7df.json",77018],f0e3a130:[()=>Promise.all([n.e(5628),n.e(5776)]).then(n.bind(n,11316)),"@site/blog/2023-08-16-release-1.3.md",11316],f213dd13:[()=>n.e(6049).then(n.t.bind(n,81326,19)),"~blog/default/blog-tags-codespaces-a42.json",81326],f3d54061:[()=>n.e(8533).then(n.bind(n,53502)),"@site/docs/installation/windows-install/installing-podman-desktop-with-winget.md",53502],f41c0109:[()=>n.e(9558).then(n.t.bind(n,90333,19)),"~blog/default/blog-tags-extensions-1ab-list.json",90333],f425c855:[()=>n.e(2783).then(n.bind(n,54718)),"@site/docs/containers/registries/authenticating-to-a-preconfigured-registry.md",54718],f523fb3f:[()=>Promise.all([n.e(532),n.e(3973)]).then(n.bind(n,9669)),"@site/docs/migrating-from-docker/using-the-docker_host-environment-variable.md",9669],f6e0e63c:[()=>n.e(7536).then(n.t.bind(n,39592,19)),"~blog/default/blog-tags-devcontainer-050.json",39592],f7b7f9b7:[()=>n.e(465).then(n.t.bind(n,7196,19)),"~docs/default/tag-docs-tags-flatpak-1be.json",7196],fb50ea3a:[()=>n.e(2451).then(n.bind(n,7516)),"@site/docs/kind/building-an-image-and-testing-it-in-kind.md",7516],fc8a94e3:[()=>n.e(1425).then(n.bind(n,38966)),"@site/docs/openshift/developer-sandbox/index.md",38966],fd684bd6:[()=>n.e(4117).then(n.bind(n,1744)),"@site/docs/containers/registries/index.md",1744],ff38b1ce:[()=>n.e(7759).then(n.bind(n,99766)),"@site/blog/2023-09-18-release-1.4.md",99766],ff8f5ed0:[()=>n.e(5803).then(n.bind(n,47074)),"@site/docs/proxy/using-a-proxy-requiring-a-custom-ca.md",47074]};var s=n(24246);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(13361),u=n(66881);function d(e,t){if("*"===e)return o()({loading:l,loader:()=>n.e(4094).then(n.bind(n,14094)),modules:["@theme/NotFound"],webpack:()=>[14094],render(e,t){const n=e.default;return(0,s.jsx)(u.z,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],g=(0,c.Z)(r);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;return delete o.__context,(0,s.jsx)(u.z,{value:i,children:(0,s.jsx)(a,{...o,...n})})}})}const p=[{path:"/blog",component:d("/blog","b54"),exact:!0},{path:"/blog/5-things-to-know-for-a-docker-user",component:d("/blog/5-things-to-know-for-a-docker-user","4d1"),exact:!0},{path:"/blog/archive",component:d("/blog/archive","376"),exact:!0},{path:"/blog/develop-using-devcontainer",component:d("/blog/develop-using-devcontainer","8bd"),exact:!0},{path:"/blog/podman-desktop-release-0.10",component:d("/blog/podman-desktop-release-0.10","1f2"),exact:!0},{path:"/blog/podman-desktop-release-0.11",component:d("/blog/podman-desktop-release-0.11","bc8"),exact:!0},{path:"/blog/podman-desktop-release-0.12",component:d("/blog/podman-desktop-release-0.12","680"),exact:!0},{path:"/blog/podman-desktop-release-0.13",component:d("/blog/podman-desktop-release-0.13","9ec"),exact:!0},{path:"/blog/podman-desktop-release-0.14",component:d("/blog/podman-desktop-release-0.14","7d5"),exact:!0},{path:"/blog/podman-desktop-release-0.15",component:d("/blog/podman-desktop-release-0.15","005"),exact:!0},{path:"/blog/podman-desktop-release-1.0",component:d("/blog/podman-desktop-release-1.0","b1d"),exact:!0},{path:"/blog/podman-desktop-release-1.1",component:d("/blog/podman-desktop-release-1.1","18e"),exact:!0},{path:"/blog/podman-desktop-release-1.2",component:d("/blog/podman-desktop-release-1.2","fbd"),exact:!0},{path:"/blog/podman-desktop-release-1.3",component:d("/blog/podman-desktop-release-1.3","3b7"),exact:!0},{path:"/blog/podman-desktop-release-1.4",component:d("/blog/podman-desktop-release-1.4","d65"),exact:!0},{path:"/blog/podman-desktop-release-1.5",component:d("/blog/podman-desktop-release-1.5","1d2"),exact:!0},{path:"/blog/running-a-local-kubernetes-cluster-with-podman-desktop",component:d("/blog/running-a-local-kubernetes-cluster-with-podman-desktop","726"),exact:!0},{path:"/blog/tags",component:d("/blog/tags","01c"),exact:!0},{path:"/blog/tags/codespaces",component:d("/blog/tags/codespaces","954"),exact:!0},{path:"/blog/tags/compose",component:d("/blog/tags/compose","01d"),exact:!0},{path:"/blog/tags/devcontainer",component:d("/blog/tags/devcontainer","f90"),exact:!0},{path:"/blog/tags/docker",component:d("/blog/tags/docker","ce7"),exact:!0},{path:"/blog/tags/extensions",component:d("/blog/tags/extensions","7c0"),exact:!0},{path:"/blog/tags/kind",component:d("/blog/tags/kind","980"),exact:!0},{path:"/blog/tags/kubernetes",component:d("/blog/tags/kubernetes","e15"),exact:!0},{path:"/blog/tags/migrating",component:d("/blog/tags/migrating","935"),exact:!0},{path:"/blog/tags/onboarding",component:d("/blog/tags/onboarding","361"),exact:!0},{path:"/blog/tags/openshift",component:d("/blog/tags/openshift","c9c"),exact:!0},{path:"/blog/tags/podman-desktop",component:d("/blog/tags/podman-desktop","e1e"),exact:!0},{path:"/blog/tags/release",component:d("/blog/tags/release","87f"),exact:!0},{path:"/blog/tags/settings",component:d("/blog/tags/settings","704"),exact:!0},{path:"/blog/tags/story",component:d("/blog/tags/story","f01"),exact:!0},{path:"/core-values",component:d("/core-values","1ca"),exact:!0},{path:"/downloads",component:d("/downloads","ae5"),exact:!0},{path:"/downloads/linux",component:d("/downloads/linux","4a4"),exact:!0},{path:"/downloads/macos",component:d("/downloads/macos","ebf"),exact:!0},{path:"/downloads/windows",component:d("/downloads/windows","6e4"),exact:!0},{path:"/extend",component:d("/extend","2be"),exact:!0},{path:"/features",component:d("/features","606"),exact:!0},{path:"/search",component:d("/search","cf9"),exact:!0},{path:"/docs",component:d("/docs","072"),routes:[{path:"/docs",component:d("/docs","937"),routes:[{path:"/docs/tags",component:d("/docs/tags","0cc"),exact:!0},{path:"/docs/tags/chocolatey",component:d("/docs/tags/chocolatey","d89"),exact:!0},{path:"/docs/tags/compose",component:d("/docs/tags/compose","ceb"),exact:!0},{path:"/docs/tags/containers",component:d("/docs/tags/containers","1e6"),exact:!0},{path:"/docs/tags/docker",component:d("/docs/tags/docker","8ce"),exact:!0},{path:"/docs/tags/extension",component:d("/docs/tags/extension","c3e"),exact:!0},{path:"/docs/tags/flathub",component:d("/docs/tags/flathub","dc5"),exact:!0},{path:"/docs/tags/flatpak",component:d("/docs/tags/flatpak","8ed"),exact:!0},{path:"/docs/tags/images",component:d("/docs/tags/images","f8e"),exact:!0},{path:"/docs/tags/installing",component:d("/docs/tags/installing","b2b"),exact:!0},{path:"/docs/tags/kind",component:d("/docs/tags/kind","94f"),exact:!0},{path:"/docs/tags/kubernetes",component:d("/docs/tags/kubernetes","fbb"),exact:!0},{path:"/docs/tags/lima",component:d("/docs/tags/lima","247"),exact:!0},{path:"/docs/tags/linux",component:d("/docs/tags/linux","083"),exact:!0},{path:"/docs/tags/mac-0-s",component:d("/docs/tags/mac-0-s","95c"),exact:!0},{path:"/docs/tags/mac-os",component:d("/docs/tags/mac-os","8f3"),exact:!0},{path:"/docs/tags/macos",component:d("/docs/tags/macos","722"),exact:!0},{path:"/docs/tags/migrating-from-docker",component:d("/docs/tags/migrating-from-docker","84c"),exact:!0},{path:"/docs/tags/migrating-to-kubernetes",component:d("/docs/tags/migrating-to-kubernetes","130"),exact:!0},{path:"/docs/tags/minikube",component:d("/docs/tags/minikube","c9f"),exact:!0},{path:"/docs/tags/onboarding",component:d("/docs/tags/onboarding","fe8"),exact:!0},{path:"/docs/tags/openshift",component:d("/docs/tags/openshift","317"),exact:!0},{path:"/docs/tags/openshift-local",component:d("/docs/tags/openshift-local","956"),exact:!0},{path:"/docs/tags/podman",component:d("/docs/tags/podman","6cf"),exact:!0},{path:"/docs/tags/podman-desktop",component:d("/docs/tags/podman-desktop","62e"),exact:!0},{path:"/docs/tags/pods",component:d("/docs/tags/pods","012"),exact:!0},{path:"/docs/tags/proxy",component:d("/docs/tags/proxy","a05"),exact:!0},{path:"/docs/tags/publishing",component:d("/docs/tags/publishing","20b"),exact:!0},{path:"/docs/tags/registries",component:d("/docs/tags/registries","741"),exact:!0},{path:"/docs/tags/restricted-environment",component:d("/docs/tags/restricted-environment","b84"),exact:!0},{path:"/docs/tags/scoop",component:d("/docs/tags/scoop","cb3"),exact:!0},{path:"/docs/tags/vpn",component:d("/docs/tags/vpn","731"),exact:!0},{path:"/docs/tags/when-clause",component:d("/docs/tags/when-clause","1af"),exact:!0},{path:"/docs/tags/windows",component:d("/docs/tags/windows","bd3"),exact:!0},{path:"/docs/tags/winget",component:d("/docs/tags/winget","a62"),exact:!0},{path:"/docs/tags/writing",component:d("/docs/tags/writing","c12"),exact:!0},{path:"/docs",component:d("/docs","265"),routes:[{path:"/docs/compose",component:d("/docs/compose","c7b"),exact:!0,sidebar:"mySidebar"},{path:"/docs/compose/running-compose",component:d("/docs/compose/running-compose","f60"),exact:!0,sidebar:"mySidebar"},{path:"/docs/compose/setting-up-compose",component:d("/docs/compose/setting-up-compose","52a"),exact:!0,sidebar:"mySidebar"},{path:"/docs/containers",component:d("/docs/containers","27c"),exact:!0,sidebar:"mySidebar"},{path:"/docs/containers/creating-a-pod",component:d("/docs/containers/creating-a-pod","30d"),exact:!0,sidebar:"mySidebar"},{path:"/docs/containers/images",component:d("/docs/containers/images","e4c"),exact:!0,sidebar:"mySidebar"},{path:"/docs/containers/images/building-an-image",component:d("/docs/containers/images/building-an-image","324"),exact:!0,sidebar:"mySidebar"},{path:"/docs/containers/images/pulling-an-image",component:d("/docs/containers/images/pulling-an-image","09e"),exact:!0,sidebar:"mySidebar"},{path:"/docs/containers/images/pushing-an-image-to-a-registry",component:d("/docs/containers/images/pushing-an-image-to-a-registry","dac"),exact:!0,sidebar:"mySidebar"},{path:"/docs/containers/onboarding",component:d("/docs/containers/onboarding","ba3"),exact:!0,sidebar:"mySidebar"},{path:"/docs/containers/registries",component:d("/docs/containers/registries","805"),exact:!0,sidebar:"mySidebar"},{path:"/docs/containers/registries/authenticating-to-a-preconfigured-registry",component:d("/docs/containers/registries/authenticating-to-a-preconfigured-registry","e9d"),exact:!0,sidebar:"mySidebar"},{path:"/docs/containers/registries/insecure-registry",component:d("/docs/containers/registries/insecure-registry","206"),exact:!0,sidebar:"mySidebar"},{path:"/docs/containers/starting-a-container",component:d("/docs/containers/starting-a-container","a38"),exact:!0,sidebar:"mySidebar"},{path:"/docs/extensions",component:d("/docs/extensions","0c7"),exact:!0,sidebar:"mySidebar"},{path:"/docs/extensions/install",component:d("/docs/extensions/install","1cf"),exact:!0,sidebar:"mySidebar"},{path:"/docs/extensions/publish",component:d("/docs/extensions/publish","c62"),exact:!0,sidebar:"mySidebar"},{path:"/docs/extensions/write",component:d("/docs/extensions/write","500"),exact:!0,sidebar:"mySidebar"},{path:"/docs/extensions/write/onboarding-workflow",component:d("/docs/extensions/write/onboarding-workflow","6c2"),exact:!0,sidebar:"mySidebar"},{path:"/docs/extensions/write/when-clause-context",component:d("/docs/extensions/write/when-clause-context","ae6"),exact:!0,sidebar:"mySidebar"},{path:"/docs/installation",component:d("/docs/installation","2c4"),exact:!0,sidebar:"mySidebar"},{path:"/docs/installation/linux-install",component:d("/docs/installation/linux-install","f24"),exact:!0,sidebar:"mySidebar"},{path:"/docs/installation/linux-install/installing-podman-desktop-from-a-compressed-tar-file",component:d("/docs/installation/linux-install/installing-podman-desktop-from-a-compressed-tar-file","520"),exact:!0,sidebar:"mySidebar"},{path:"/docs/installation/linux-install/installing-podman-desktop-from-a-flatpak-bundle",component:d("/docs/installation/linux-install/installing-podman-desktop-from-a-flatpak-bundle","f71"),exact:!0,sidebar:"mySidebar"},{path:"/docs/installation/macos-install",component:d("/docs/installation/macos-install","cfc"),exact:!0,sidebar:"mySidebar"},{path:"/docs/installation/windows-install",component:d("/docs/installation/windows-install","a69"),exact:!0,sidebar:"mySidebar"},{path:"/docs/installation/windows-install/installing-podman-desktop-and-podman-in-a-restricted-environment",component:d("/docs/installation/windows-install/installing-podman-desktop-and-podman-in-a-restricted-environment","2df"),exact:!0,sidebar:"mySidebar"},{path:"/docs/installation/windows-install/installing-podman-desktop-silently-with-the-windows-installer",component:d("/docs/installation/windows-install/installing-podman-desktop-silently-with-the-windows-installer","a63"),exact:!0,sidebar:"mySidebar"},{path:"/docs/installation/windows-install/installing-podman-desktop-with-chocolatey",component:d("/docs/installation/windows-install/installing-podman-desktop-with-chocolatey","dbf"),exact:!0,sidebar:"mySidebar"},{path:"/docs/installation/windows-install/installing-podman-desktop-with-scoop",component:d("/docs/installation/windows-install/installing-podman-desktop-with-scoop","516"),exact:!0,sidebar:"mySidebar"},{path:"/docs/installation/windows-install/installing-podman-desktop-with-winget",component:d("/docs/installation/windows-install/installing-podman-desktop-with-winget","7bb"),exact:!0,sidebar:"mySidebar"},{path:"/docs/intro",component:d("/docs/intro","0c0"),exact:!0,sidebar:"mySidebar"},{path:"/docs/kind",component:d("/docs/kind","482"),exact:!0,sidebar:"mySidebar"},{path:"/docs/kind/building-an-image-and-testing-it-in-kind",component:d("/docs/kind/building-an-image-and-testing-it-in-kind","7c3"),exact:!0,sidebar:"mySidebar"},{path:"/docs/kind/configuring-podman-for-kind-on-windows",component:d("/docs/kind/configuring-podman-for-kind-on-windows","ba3"),exact:!0,sidebar:"mySidebar"},{path:"/docs/kind/creating-a-kind-cluster",component:d("/docs/kind/creating-a-kind-cluster","45b"),exact:!0,sidebar:"mySidebar"},{path:"/docs/kind/deleting-your-kind-cluster",component:d("/docs/kind/deleting-your-kind-cluster","b26"),exact:!0,sidebar:"mySidebar"},{path:"/docs/kind/installing",component:d("/docs/kind/installing","6d9"),exact:!0,sidebar:"mySidebar"},{path:"/docs/kind/pushing-an-image-to-kind",component:d("/docs/kind/pushing-an-image-to-kind","649"),exact:!0,sidebar:"mySidebar"},{path:"/docs/kind/restarting-your-kind-cluster",component:d("/docs/kind/restarting-your-kind-cluster","583"),exact:!0,sidebar:"mySidebar"},{path:"/docs/kind/working-with-your-local-kind-cluster",component:d("/docs/kind/working-with-your-local-kind-cluster","3e6"),exact:!0,sidebar:"mySidebar"},{path:"/docs/kubernetes",component:d("/docs/kubernetes","fa6"),exact:!0,sidebar:"mySidebar"},{path:"/docs/kubernetes/deploying-a-container-to-kubernetes",component:d("/docs/kubernetes/deploying-a-container-to-kubernetes","b73"),exact:!0,sidebar:"mySidebar"},{path:"/docs/kubernetes/deploying-a-pod-to-kubernetes",component:d("/docs/kubernetes/deploying-a-pod-to-kubernetes","a02"),exact:!0,sidebar:"mySidebar"},{path:"/docs/kubernetes/existing-kubernetes",component:d("/docs/kubernetes/existing-kubernetes","d69"),exact:!0,sidebar:"mySidebar"},{path:"/docs/kubernetes/kind/pushing-an-image-to-kind",component:d("/docs/kubernetes/kind/pushing-an-image-to-kind","528"),exact:!0,sidebar:"mySidebar"},{path:"/docs/kubernetes/viewing-and-selecting-current-kubernete-context",component:d("/docs/kubernetes/viewing-and-selecting-current-kubernete-context","940"),exact:!0,sidebar:"mySidebar"},{path:"/docs/kubernetes/viewing-and-selecting-current-kubernete-context-in-the-status-bar",component:d("/docs/kubernetes/viewing-and-selecting-current-kubernete-context-in-the-status-bar","53f"),exact:!0,sidebar:"mySidebar"},{path:"/docs/lima",component:d("/docs/lima","a8b"),exact:!0,sidebar:"mySidebar"},{path:"/docs/lima/creating-a-kubernetes-instance",component:d("/docs/lima/creating-a-kubernetes-instance","4a6"),exact:!0,sidebar:"mySidebar"},{path:"/docs/lima/creating-a-lima-instance",component:d("/docs/lima/creating-a-lima-instance","49e"),exact:!0,sidebar:"mySidebar"},{path:"/docs/lima/customizing",component:d("/docs/lima/customizing","c19"),exact:!0,sidebar:"mySidebar"},{path:"/docs/lima/installing",component:d("/docs/lima/installing","db2"),exact:!0,sidebar:"mySidebar"},{path:"/docs/migrating-from-docker",component:d("/docs/migrating-from-docker","b36"),exact:!0,sidebar:"mySidebar"},{path:"/docs/migrating-from-docker/emulating-docker-cli-with-podman",component:d("/docs/migrating-from-docker/emulating-docker-cli-with-podman","0d2"),exact:!0,sidebar:"mySidebar"},{path:"/docs/migrating-from-docker/importing-saved-containers",component:d("/docs/migrating-from-docker/importing-saved-containers","8a8"),exact:!0,sidebar:"mySidebar"},{path:"/docs/migrating-from-docker/using-podman-mac-helper",component:d("/docs/migrating-from-docker/using-podman-mac-helper","79d"),exact:!0,sidebar:"mySidebar"},{path:"/docs/migrating-from-docker/using-the-docker_host-environment-variable",component:d("/docs/migrating-from-docker/using-the-docker_host-environment-variable","05f"),exact:!0,sidebar:"mySidebar"},{path:"/docs/migrating-from-docker/verifying-your-tools-are-using-podman",component:d("/docs/migrating-from-docker/verifying-your-tools-are-using-podman","5a1"),exact:!0,sidebar:"mySidebar"},{path:"/docs/minikube",component:d("/docs/minikube","6c6"),exact:!0,sidebar:"mySidebar"},{path:"/docs/minikube/building-an-image-and-testing-it-in-minikube",component:d("/docs/minikube/building-an-image-and-testing-it-in-minikube","89d"),exact:!0,sidebar:"mySidebar"},{path:"/docs/minikube/configuring-podman-for-minikube-on-windows",component:d("/docs/minikube/configuring-podman-for-minikube-on-windows","a36"),exact:!0,sidebar:"mySidebar"},{path:"/docs/minikube/creating-a-minikube-cluster",component:d("/docs/minikube/creating-a-minikube-cluster","62d"),exact:!0,sidebar:"mySidebar"},{path:"/docs/minikube/deleting-your-minikube-cluster",component:d("/docs/minikube/deleting-your-minikube-cluster","ad8"),exact:!0,sidebar:"mySidebar"},{path:"/docs/minikube/installing",component:d("/docs/minikube/installing","638"),exact:!0,sidebar:"mySidebar"},{path:"/docs/minikube/pushing-an-image-to-minikube",component:d("/docs/minikube/pushing-an-image-to-minikube","ff1"),exact:!0,sidebar:"mySidebar"},{path:"/docs/minikube/restarting-your-minikube-cluster",component:d("/docs/minikube/restarting-your-minikube-cluster","fcc"),exact:!0,sidebar:"mySidebar"},{path:"/docs/minikube/working-with-your-local-minikube-cluster",component:d("/docs/minikube/working-with-your-local-minikube-cluster","d99"),exact:!0,sidebar:"mySidebar"},{path:"/docs/openshift",component:d("/docs/openshift","880"),exact:!0,sidebar:"mySidebar"},{path:"/docs/openshift/developer-sandbox",component:d("/docs/openshift/developer-sandbox","a90"),exact:!0,sidebar:"mySidebar"},{path:"/docs/openshift/openshift-local",component:d("/docs/openshift/openshift-local","943"),exact:!0,sidebar:"mySidebar"},{path:"/docs/podman",component:d("/docs/podman","18b"),exact:!0,sidebar:"mySidebar"},{path:"/docs/podman/creating-a-podman-machine",component:d("/docs/podman/creating-a-podman-machine","13b"),exact:!0,sidebar:"mySidebar"},{path:"/docs/podman/installing",component:d("/docs/podman/installing","7cf"),exact:!0,sidebar:"mySidebar"},{path:"/docs/podman/installing-podman-with-openshift-local-on-windows",component:d("/docs/podman/installing-podman-with-openshift-local-on-windows","493"),exact:!0,sidebar:"mySidebar"},{path:"/docs/podman/setting-podman-machine-default-connection",component:d("/docs/podman/setting-podman-machine-default-connection","755"),exact:!0,sidebar:"mySidebar"},{path:"/docs/proxy",component:d("/docs/proxy","97b"),exact:!0,sidebar:"mySidebar"},{path:"/docs/proxy/using-a-proxy",component:d("/docs/proxy/using-a-proxy","d89"),exact:!0,sidebar:"mySidebar"},{path:"/docs/proxy/using-a-proxy-in-your-containers",component:d("/docs/proxy/using-a-proxy-in-your-containers","d29"),exact:!0,sidebar:"mySidebar"},{path:"/docs/proxy/using-a-proxy-on-linux",component:d("/docs/proxy/using-a-proxy-on-linux","35d"),exact:!0,sidebar:"mySidebar"},{path:"/docs/proxy/using-a-proxy-requiring-a-custom-ca",component:d("/docs/proxy/using-a-proxy-requiring-a-custom-ca","26a"),exact:!0,sidebar:"mySidebar"},{path:"/docs/proxy/using-a-vpn-on-windows",component:d("/docs/proxy/using-a-vpn-on-windows","59d"),exact:!0,sidebar:"mySidebar"},{path:"/docs/troubleshooting",component:d("/docs/troubleshooting","861"),exact:!0,sidebar:"mySidebar"},{path:"/docs/troubleshooting/troubleshooting-openshift-local",component:d("/docs/troubleshooting/troubleshooting-openshift-local","537"),exact:!0,sidebar:"mySidebar"},{path:"/docs/troubleshooting/troubleshooting-podman",component:d("/docs/troubleshooting/troubleshooting-podman","b99"),exact:!0,sidebar:"mySidebar"},{path:"/docs/troubleshooting/troubleshooting-podman-on-linux",component:d("/docs/troubleshooting/troubleshooting-podman-on-linux","3d5"),exact:!0,sidebar:"mySidebar"},{path:"/docs/troubleshooting/troubleshooting-podman-on-macos",component:d("/docs/troubleshooting/troubleshooting-podman-on-macos","735"),exact:!0,sidebar:"mySidebar"},{path:"/docs/troubleshooting/troubleshooting-podman-on-windows",component:d("/docs/troubleshooting/troubleshooting-podman-on-windows","4d9"),exact:!0,sidebar:"mySidebar"}]}]}]},{path:"/",component:d("/","395"),exact:!0},{path:"*",component:d("*")}]},38944:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;to});const o=function(){for(var e,t,n=0,o="";n{"use strict";n.d(t,{lX:()=>k,q_:()=>C,ob:()=>f,PP:()=>A,Ep:()=>p});var r=n(25773);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&o(i[0])||i.unshift("");var g=i.join("/");return n&&"/"!==g.substr(-1)&&(g+="/"),g};var s=n(1115);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function f(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function g(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,m(),k.location);u.confirmTransitionTo(o,r,n,(function(e){e&&(k.entries[k.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=k.index+e;return t>=0&&t{"use strict";var r=n(19185),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,g=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(g){var o=f(n);o&&o!==g&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),m=l(n),h=0;h{"use strict";e.exports=function(e,t,n,r,o,a,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,a,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},70142:(e,t,n)=>{"use strict";n.r(t)},26222:(e,t,n)=>{"use strict";n.r(t)},8504:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function o(e,t,n){return en?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),c=a.querySelector(r.barSelector),u=r.speed,d=r.easing;return a.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){l(a,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),s=e?"-100":a(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},10247:()=>{!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i{!function(e){var t=/\\[\r\n](?:\s|\\[\r\n]|#.*(?!.))*(?![\s#]|\\[\r\n])/.source,n=/(?:[ \t]+(?![ \t])(?:)?|)/.source.replace(//g,(function(){return t})),r=/"(?:[^"\\\r\n]|\\(?:\r\n|[\s\S]))*"|'(?:[^'\\\r\n]|\\(?:\r\n|[\s\S]))*'/.source,o=/--[\w-]+=(?:|(?!["'])(?:[^\s\\]|\\.)+)/.source.replace(//g,(function(){return r})),a={pattern:RegExp(r),greedy:!0},i={pattern:/(^[ \t]*)#.*/m,lookbehind:!0,greedy:!0};function s(e,t){return e=e.replace(//g,(function(){return o})).replace(//g,(function(){return n})),RegExp(e,t)}e.languages.docker={instruction:{pattern:/(^[ \t]*)(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|ONBUILD|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)(?=\s)(?:\\.|[^\r\n\\])*(?:\\$(?:\s|#.*$)*(?![\s#])(?:\\.|[^\r\n\\])*)*/im,lookbehind:!0,greedy:!0,inside:{options:{pattern:s(/(^(?:ONBUILD)?\w+)(?:)*/.source,"i"),lookbehind:!0,greedy:!0,inside:{property:{pattern:/(^|\s)--[\w-]+/,lookbehind:!0},string:[a,{pattern:/(=)(?!["'])(?:[^\s\\]|\\.)+/,lookbehind:!0}],operator:/\\$/m,punctuation:/=/}},keyword:[{pattern:s(/(^(?:ONBUILD)?HEALTHCHECK(?:)*)(?:CMD|NONE)\b/.source,"i"),lookbehind:!0,greedy:!0},{pattern:s(/(^(?:ONBUILD)?FROM(?:)*(?!--)[^ \t\\]+)AS/.source,"i"),lookbehind:!0,greedy:!0},{pattern:s(/(^ONBUILD)\w+/.source,"i"),lookbehind:!0,greedy:!0},{pattern:/^\w+/,greedy:!0}],comment:i,string:a,variable:/\$(?:\w+|\{[^{}"'\\]*\})/,operator:/\\$/m}},comment:i},e.languages.dockerfile=e.languages.docker}(Prism)},5094:()=>{Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json},13109:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,s=i.length;-1!==n.code.indexOf(o=t(r,s));)++s;return i[s]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(s){for(var l=0;l=a.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=a[o],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),g=p.indexOf(f);if(g>-1){++o;var m=p.substring(0,g),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(g+f.length),y=[];m&&y.push.apply(y,i([m])),y.push(h),b&&y.push.apply(y,i([b])),"string"==typeof c?s.splice.apply(s,[l,1].concat(y)):c.content=y}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(Prism)},3069:()=>{!function(e){var t=[/"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/.source,/'[^']*'/.source,/\$'(?:[^'\\]|\\[\s\S])*'/.source,/<<-?\s*(["']?)(\w+)\1\s[\s\S]*?[\r\n]\2/.source].join("|");e.languages["shell-session"]={command:{pattern:RegExp(/^/.source+"(?:"+/[^\s@:$#%*!/\\]+@[^\r\n@:$#%*!/\\]+(?::[^\0-\x1F$#%*?"<>:;|]+)?/.source+"|"+/[/~.][^\0-\x1F$#%*?"<>@:;|]*/.source+")?"+/[$#%](?=\s)/.source+/(?:[^\\\r\n \t'"<$]|[ \t](?:(?!#)|#.*$)|\\(?:[^\r]|\r\n?)|\$(?!')|<(?!<)|<>)+/.source.replace(/<>/g,(function(){return t})),"m"),greedy:!0,inside:{info:{pattern:/^[^#$%]+/,alias:"punctuation",inside:{user:/^[^\s@:$#%*!/\\]+@[^\r\n@:$#%*!/\\]+/,punctuation:/:/,path:/[\s\S]+/}},bash:{pattern:/(^[$#%]\s*)\S[\s\S]*/,lookbehind:!0,alias:"language-bash",inside:e.languages.bash},"shell-symbol":{pattern:/^[$#%]/,alias:"important"}}},output:/.(?:.*(?:[\r\n]|.$))*/},e.languages["sh-session"]=e.languages.shellsession=e.languages["shell-session"]}(Prism)},60926:(e,t,n)=>{var r={"./prism-bash":10247,"./prism-docker":36761,"./prism-json":5094,"./prism-shell-session":3069};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=60926},58772:(e,t,n)=>{"use strict";var r=n(90331);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},23615:(e,t,n)=>{e.exports=n(58772)()},90331:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},43577:(e,t,n)=>{"use strict";var r=n(27378),o=n(91102);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n