<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://tauri.app/ko/blog</id>
    <title>Tauri v1 Blog</title>
    <updated>2023-06-15T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://tauri.app/ko/blog"/>
    <subtitle>Tauri v1 Blog</subtitle>
    <icon>https://tauri.app/ko/meta/favicon-32x32.png</icon>
    <entry>
        <title type="html"><![CDATA[Tauri Board Elections & Governance Update]]></title>
        <id>https://tauri.app/ko/blog/2023/06/15/tauri-board-elections-and-governance-updates</id>
        <link href="https://tauri.app/ko/blog/2023/06/15/tauri-board-elections-and-governance-updates"/>
        <updated>2023-06-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The Tauri team is happy to announce the 1.3.0 release.]]></summary>
        <content type="html"><![CDATA[<p>The Tauri Programme is celebrating it's two year anniversary of Tauri becoming a programme within <a href="https://commonsconservancy.org/" target="_blank" rel="noopener noreferrer">The Commons Conservancy</a> as well as the one year milestone of the <a href="/ko/blog/2022/06/19/tauri-1-0">Tauri 1.0 release</a>. This also means we're preparing for the next round of Tauri Board Director elections to welcome in the next chapter of Tauri.</p><p>We wanted to celebrate these milestones but also use this as a chance to reflect on how we've grown since the Tauri 1.0 launch and how to continue evolving Tauri. The Tauri Working Group has been building the next iteration of the governance model for the past several months to make it more accessible for new and existing contributors, and ultimately sustainable for the future of Tauri.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="board-elections">Board Elections<a href="#board-elections" class="hash-link" aria-label="Direct link to Board Elections" title="Direct link to Board Elections">​</a></h2><p>The Tauri Board of Directors is the central decision-making body for the Tauri Programme and is responsible for the overall health and stability of the Tauri Programme. Additional details can be found on the <a href="/ko/about/governance">Tauri Governance page</a>.</p><p>In order to provide continuity from one year to another, the elections of seats are staggered over the course of 2 years. This means that one year a portion of the seats are elected, and the following year the remaining seats are elected. A Tauri Director seat is an elected position with a term of 2 years. The Board has a minimum of 3 Directors and a maximum of 7. This year there are 5 seats open for election.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="diversity">Diversity<a href="#diversity" class="hash-link" aria-label="Direct link to Diversity" title="Direct link to Diversity">​</a></h3><p>This year we'd like to focus on diversifying the Tauri Board. We're looking for candidates that may be a developer who's worked on Tauri, a stakeholder in Tauri's future, experienced individuals from industry, or a person with a passion for regulatory and legal aspects within open source. <strong>If any or all of these are of interest to you then we'd invite you to apply as a candidate.</strong></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="applying-for-candidacy">Applying for Candidacy<a href="#applying-for-candidacy" class="hash-link" aria-label="Direct link to Applying for Candidacy" title="Direct link to Applying for Candidacy">​</a></h3><p>There are 3 steps to express interest and apply for candidacy:</p><ol><li>Learn about the role of a Tauri Board Director on the <a href="/ko/about/governance#tauri-board--board-directors">Governance page</a>.</li><li>Prepare a written introduction about yourself that covers who you are, your history and relevance for Tauri, and what you would like to bring to the Board.</li><li><strong>Apply prior to July 2nd, 2023</strong> by emailing <a href="mailto:board@tauri.app" target="_blank" rel="noopener noreferrer">board@tauri.app</a>, messaging the <code>@board</code> role on the <a href="https://discord.com/invite/tauri" target="_blank" rel="noopener noreferrer">Tauri Discord</a>, or by directly messaging Daniel Thompson-Yvetot on Discord (<code>@Denjell</code>) or email (<a href="mailto:denjell@tauri.app" target="_blank" rel="noopener noreferrer">denjell@tauri.app</a>).</li></ol><p>Voting will take place starting on July 5th through July 12th, 2023 where Tauri Working Group Members will cast their votes. We're expecting to announce the results on or before July 16, 2023. If elected, we'll ask you to sign <a href="https://dracc.commonsconservancy.org/0016/" target="_blank" rel="noopener noreferrer">this pledge</a> if you haven't done so previously.</p><p>If you have any questions or would like more information please reach out by emailing <a href="mailto:board@tauri.app" target="_blank" rel="noopener noreferrer">board@tauri.app</a>, messaging the <code>@board</code> role on the <a href="https://discord.com/invite/tauri" target="_blank" rel="noopener noreferrer">Tauri Discord</a>, or by directly messaging Daniel Thompson-Yvetot on Discord (<code>@Denjell</code>) or email (<a href="mailto:denjell@tauri.app" target="_blank" rel="noopener noreferrer">denjell@tauri.app</a>).</p><hr><h2 class="anchor anchorWithStickyNavbar_LWe7" id="governance-update">Governance Update<a href="#governance-update" class="hash-link" aria-label="Direct link to Governance Update" title="Direct link to Governance Update">​</a></h2><p>Tauri has always had a Working Group that's responsible for the day-to-day direction and execution, but as we grew it became clear that we needed to evolve the Working Group. We also wanted to give new Working Group members a clear places to jump in and get started. We thought of how we could achieve this while building and iterating on the existing framework.  <strong>With these goals in mind, we created two new concepts within the Working Group: Domains and Domain Leads.</strong></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="domains">Domains<a href="#domains" class="hash-link" aria-label="Direct link to Domains" title="Direct link to Domains">​</a></h3><p>A Domain in the Working Group represents a specific area of interest. We're starting with these 4 domains:</p><ul><li><strong>Development</strong>: Developing and maintaining the Tauri software</li><li><strong>Community</strong>: Looks after the broader community resources and the public presence of Tauri</li><li><strong>Governance &amp; Guidance</strong>: Involved with all things organizational in nature</li><li><strong>Operations</strong>: Responsible for all the tooling and infrastructure Tauri needs to get work done</li></ul><p>This gives clear entry points for a new member of the Working Group to jump into right away. It also allows us to continue growing our core competency of core Tauri development while giving additional focus to all areas which support the Tauri organization as a whole. Each of these domains will be represented by Domain Members and Domain Leads, but membership is not mutually exclusive.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="domain-leads">Domain Leads<a href="#domain-leads" class="hash-link" aria-label="Direct link to Domain Leads" title="Direct link to Domain Leads">​</a></h3><p>Within a domain, there is a position for 2-3 Domain Leads. These are core individuals in the Working Group that are critical to their respective Domain. They help by setting the direction and priorities for their domain while also serving as key leaders for the Working Group as a whole.</p><p>Leads are appointed twice a year, in the spring and in the fall. Since this governance update is being rolled out mid-term we're appointing interim leads that have been key members of the Working Group. This fall we'll reflect on the initial experience and host a new round to appoint the Domain Leads. We'll announce information for that process when we're closer to "appointment season".</p><hr><p>We hope that these changes provide the foundation to continue the journey the Tauri Working Group has been on while also  catalyzing the continued growth and sustainability of the organization. You can learn more about these updates in the <a href="https://github.com/tauri-apps/governance-and-guidance" target="_blank" rel="noopener noreferrer">Governance and Guidance repo on GitHub</a>. Give us your feedback on the <a href="https://github.com/tauri-apps/tauri-docs/discussions/1297" target="_blank" rel="noopener noreferrer">GitHub Discussion for this post</a>.</p>]]></content>
        <author>
            <name>Robin van Boven</name>
            <uri>https://github.com/Beanow</uri>
        </author>
        <author>
            <name>Jacob Bolda</name>
            <uri>https://github.com/jbolda</uri>
        </author>
        <author>
            <name>Lorenzo Lewis</name>
            <uri>https://github.com/lorenzolewis</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Announcing Tauri 1.4.0]]></title>
        <id>https://tauri.app/ko/blog/2023/06/14/tauri-1-4</id>
        <link href="https://tauri.app/ko/blog/2023/06/14/tauri-1-4"/>
        <updated>2023-06-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The Tauri team is happy to announce the 1.4.0 release.]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="Tauri 1.4 Launch Hero Image" src="/ko/assets/images/header-8f24f5059dd7bab5bd014a59f916640a.png" width="1280" height="640" class="img_ev3q"></p><p>The Tauri team is excited to announce the 1.4 release. This version includes several new features and important bug fixes such as CLI completions, unit testing capabilities and Windows installer improvements.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="upgrading">Upgrading<a href="#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading">​</a></h2><p>Make sure to update both NPM and Cargo dependencies to the 1.4.0 release. You can update the NPM dependencies with:</p><div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">npm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Yarn Classic</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Yarn Berry</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">pnpm</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">npm</span><span class="token plain"> </span><span class="token function" style="color:#79b6f2">install</span><span class="token plain"> @tauri-apps/cli@</span><span class="token string" style="color:#8dc891">"&gt;1.0.0"</span><span class="token plain"> @tauri-apps/api@</span><span class="token string" style="color:#8dc891">"&gt;1.0.0"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">yarn</span><span class="token plain"> upgrade @tauri-apps/cli@^1.0.0 @tauri-apps/api@^1.0.0</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">yarn</span><span class="token plain"> up @tauri-apps/cli@^1.0.0 @tauri-apps/api@^1.0.0</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">pnpm</span><span class="token plain"> update @tauri-apps/cli@1 @tauri-apps/api@1</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div><p>To update the Cargo dependencies, run the following in the <code>src-tauri</code> folder:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token plain">cargo update</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-in-140">What's in 1.4.0<a href="#whats-in-140" class="hash-link" aria-label="Direct link to What's in 1.4.0" title="Direct link to What's in 1.4.0">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="cli-completions">CLI completions<a href="#cli-completions" class="hash-link" aria-label="Direct link to CLI completions" title="Direct link to CLI completions">​</a></h3><p>The Tauri CLI now can generate shell completions for Bash, Zsh, PowerShell and Fish. See the <a href="/ko/v1/api/cli#completions">documentation</a> for more information.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="disabling-window-controls">Disabling window controls<a href="#disabling-window-controls" class="hash-link" aria-label="Direct link to Disabling window controls" title="Direct link to Disabling window controls">​</a></h3><p>The window's maximize, minimize and close buttons now can be disabled via configuration or API calls. Check out <a href="https://docs.rs/tauri/1/tauri/window/struct.Window.html#method.set_maximizable" target="_blank" rel="noopener noreferrer"><code>set_maximizable</code></a>, <a href="https://docs.rs/tauri/1/tauri/window/struct.Window.html#method.set_minimizable" target="_blank" rel="noopener noreferrer"><code>set_minimizable</code></a> and <a href="https://docs.rs/tauri/1/tauri/window/struct.Window.html#method.set_closable" target="_blank" rel="noopener noreferrer"><code>set_closable</code></a> for the Rust APIs and <a href="/ko/v1/api/js/window#setmaximizable"><code>setMaximizable</code></a>, <a href="/ko/v1/api/js/window#setminimizable"><code>setMinimizable</code></a> and <a href="/ko/v1/api/js/window#setclosable"><code>setClosable</code></a> for the JavaScript APIs.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="nsis-improvements">NSIS improvements<a href="#nsis-improvements" class="hash-link" aria-label="Direct link to NSIS improvements" title="Direct link to NSIS improvements">​</a></h3><p>The 1.4.0 release includes several NSIS bundle enhancements:</p><ul><li>Custom language files</li><li>Custom installer template (.nsi file)</li><li>Support for the dutch, japanese, korean, persian, swedish and turkish languages</li><li>If your application is installed via WiX, the installer will prompt the user to uninstall it</li><li>Improved support to updater install modes</li></ul><p>See the <a href="/ko/v1/guides/building/windows#customizing-the-nsis-installer-template">installer customization guide</a> and <a href="/ko/v1/guides/building/windows#internationalization">installer internationalization</a> for more information.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="msrv-change">MSRV change<a href="#msrv-change" class="hash-link" aria-label="Direct link to MSRV change" title="Direct link to MSRV change">​</a></h3><p>Tauri 1.4 still has a minimum supported Rust version of 1.60, but due to some dependency incompatibility issues we are no longer pinning the patch version of the <code>time</code>, <code>ignore</code>, and <code>winnow</code> crates. If you are still using Rust 1.60, you will need to pin these versions manually with <a href="https://github.com/tauri-apps/tauri/blob/076e1a81a50468e3dfb34ae9ca7e77c5e1758daa/.github/workflows/test-core.yml#L88" target="_blank" rel="noopener noreferrer">cargo update</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="unit-tests">Unit tests<a href="#unit-tests" class="hash-link" aria-label="Direct link to Unit tests" title="Direct link to Unit tests">​</a></h3><p>The <code>tauri</code> crate now exposes the <code>test</code> module under the <code>test</code> Cargo feature. This module is still unstable but allows you to unit test your application by creating a <code>tauri::App</code> instance that can execute without spawning windows. See the <a href="https://docs.rs/tauri/1/tauri/test/index.html" target="_blank" rel="noopener noreferrer">documentation</a> for more information and examples.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="other-changes">Other changes<a href="#other-changes" class="hash-link" aria-label="Direct link to Other changes" title="Direct link to Other changes">​</a></h3><p>Starting on v1.4.0, our changelog format has been improved. Check out the entire list of changes:</p><ul><li><a href="https://github.com/tauri-apps/tauri/releases/tag/tauri-v1.4.0" target="_blank" rel="noopener noreferrer">tauri</a></li><li><a href="https://github.com/tauri-apps/tauri/releases/tag/tauri-cli-v1.4.0" target="_blank" rel="noopener noreferrer">tauri-cli</a></li><li><a href="https://github.com/tauri-apps/tauri/releases/tag/tauri-bundler-v1.3.0" target="_blank" rel="noopener noreferrer">tauri-bundler</a></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="audit">Audit<a href="#audit" class="hash-link" aria-label="Direct link to Audit" title="Direct link to Audit">​</a></h2><p>The <em>internal</em><sup id="fnref-1-a9033b"><a href="#fn-1-a9033b" class="footnote-ref">1</a></sup> audit was performed by Tillmann <a href="https://github.com/tillmann-crabnebula" target="_blank" rel="noopener noreferrer">@tillmann-crabnebula</a>
and Chip <a href="https://github.com/chip-crabnebula" target="_blank" rel="noopener noreferrer">@chip-crabnebula</a>,
who are also involved in security topics at the project under their private handles (<a href="https://github.com/tweidinger" target="_blank" rel="noopener noreferrer">@tweidinger</a> and <a href="https://github.com/chippers" target="_blank" rel="noopener noreferrer">@chippers</a>).</p><p>It was performed during paid time at <a href="https://crabnebula.dev" target="_blank" rel="noopener noreferrer">CrabNebula Ltd.</a> and we are grateful to be able
to spend parts of our work time contributing to the open source project and making it a more secure environment ❤️.</p><p>For this release we manually audited a selection of <a href="https://github.com/tauri-apps/tauri/issues?q=label%3A%22security%3A%20reviewed%22%20is%3Aclosed" target="_blank" rel="noopener noreferrer">PRs</a>
instead of all PRs coming into the release.
The new approach means the reviewers and developers need to decide on their own if a PR is introducing any security relevant change.
A review can be triggered by anyone involved in the change, by adding a label to the PR.</p><p>For the first time we also audited after the official release due to time constraints.
This resulted in a <a href="https://github.com/tauri-apps/tauri/security/advisories/GHSA-wmff-grcw-jcfm" target="_blank" rel="noopener noreferrer">security patch</a> release, fixing the only impactful issue (CVE-2023-34460) discovered during auditing.
In general this release was more focused on fixing and improving the NSIS features and introduced less new features and security relevant changes.</p><div class="footnotes"><hr><ol><li id="fn-1-a9033b">It is internal in the sense that we are also involved in the project itself but performed with the help of an external entity. Calling it external security audit would create false impressions.<a href="#fnref-1-a9033b" class="footnote-backref">↩</a></li></ol></div>]]></content>
        <author>
            <name>Lucas Nogueira</name>
            <uri>https://github.com/lucasfernog</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Announcing Tauri 1.3.0]]></title>
        <id>https://tauri.app/ko/blog/2023/05/03/tauri-1-3</id>
        <link href="https://tauri.app/ko/blog/2023/05/03/tauri-1-3"/>
        <updated>2023-05-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The Tauri team is happy to announce the 1.3.0 release.]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="Tauri 1.3 Launch Hero Image" src="/ko/assets/images/header-633315187fcfdffeddfdb84132f69b24.png" width="1280" height="640" class="img_ev3q"></p><p>The Tauri team is excited to announce the 1.3 release. This version includes security improvements, new features and important bug fixes.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="upgrading">Upgrading<a href="#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading">​</a></h2><p>Make sure to update both NPM and Cargo dependencies to the 1.3.0 release. You can update the NPM dependencies with:</p><div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">npm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Yarn Classic</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Yarn Berry</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">pnpm</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">npm</span><span class="token plain"> </span><span class="token function" style="color:#79b6f2">install</span><span class="token plain"> @tauri-apps/cli@</span><span class="token string" style="color:#8dc891">"&gt;1.0.0"</span><span class="token plain"> @tauri-apps/api@</span><span class="token string" style="color:#8dc891">"&gt;1.0.0"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">yarn</span><span class="token plain"> upgrade @tauri-apps/cli@^1.0.0 @tauri-apps/api@^1.0.0</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">yarn</span><span class="token plain"> up @tauri-apps/cli@^1.0.0 @tauri-apps/api@^1.0.0</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">pnpm</span><span class="token plain"> update @tauri-apps/cli @tauri-apps/api --latest</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div><p>To update the Cargo dependencies, run the following in the <code>src-tauri</code> folder:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token plain">cargo update</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-in-130">What's in 1.3.0<a href="#whats-in-130" class="hash-link" aria-label="Direct link to What's in 1.3.0" title="Direct link to What's in 1.3.0">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="nsis">NSIS<a href="#nsis" class="hash-link" aria-label="Direct link to NSIS" title="Direct link to NSIS">​</a></h3><p>The Tauri CLI can now create Windows application installers using NSIS. This new bundle target is also available on macOS and Linux as an experimental feature, so you can cross-compile your Windows installer. Documentation on the latter will be published soon.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="tauri-13-audit">Tauri 1.3 Audit<a href="#tauri-13-audit" class="hash-link" aria-label="Direct link to Tauri 1.3 Audit" title="Direct link to Tauri 1.3 Audit">​</a></h3><p>The internal audit was performed by <a href="https://github.com/tweidinger" target="_blank" rel="noopener noreferrer">@tweidinger</a> and <a href="https://github.com/chippers" target="_blank" rel="noopener noreferrer">@chippers</a>, who are involved in most security topics at the Tauri project. It was performed during paid time at <a href="https://crabnebula.dev/?utm_campaign=tauri-1-3&amp;utm_source=tauri" target="_blank" rel="noopener noreferrer">CrabNebula</a> and we are grateful to be able to spend parts of our work time contributing to the open source project and making it a more secure environment ❤️.</p><p>We manually audited over 45 <a href="https://github.com/tauri-apps/tauri/pull/5815" target="_blank" rel="noopener noreferrer">PRs</a>. Some PRs (e.g. <a href="https://github.com/tauri-apps/tauri/pull/5544" target="_blank" rel="noopener noreferrer">#5544</a>) lead us to diving into very old RFCs (<a href="https://www.rfc-editor.org/rfc/rfc6068#page-12" target="_blank" rel="noopener noreferrer">RFC6068</a> and <a href="https://www.rfc-editor.org/rfc/rfc3966#section-11" target="_blank" rel="noopener noreferrer">RFC3966</a>), <a href="https://nsis.sourceforge.io/Docs/" target="_blank" rel="noopener noreferrer">NSIS documentation</a> (e.g. <a href="https://github.com/tauri-apps/tauri/pull/6039" target="_blank" rel="noopener noreferrer">#6039</a>) and many other external resources. We documented questions, notes and findings in markdown files and shared these notes with the responsible developers to ensure appropriate fixes.</p><p>The changes from a security perspective and findings of the audit are summarized in the following sub-sections.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="external-api-access-5918">External API Access <a href="https://github.com/tauri-apps/tauri/pull/5918" target="_blank" rel="noopener noreferrer">#5918</a><a href="#external-api-access-5918" class="hash-link" aria-label="Direct link to external-api-access-5918" title="Direct link to external-api-access-5918">​</a></h3><p>This was by far the most impactful and time consuming PR we investigated. This PR introduces a streamlined way for applications to allow external domains access to the Tauri IPC layer<sup id="fnref-1-2cd5f8"><a href="#fn-1-2cd5f8" class="footnote-ref">1</a></sup> and usage majorly impacts the security model of a Tauri application. Security impact<sup id="fnref-2-2cd5f8"><a href="#fn-2-2cd5f8" class="footnote-ref">2</a></sup> depends on exposure<sup id="fnref-3-2cd5f8"><a href="#fn-3-2cd5f8" class="footnote-ref">3</a></sup> of the feature, enabled Tauri commands and the capabilities of an adversary<sup id="fnref-4-2cd5f8"><a href="#fn-4-2cd5f8" class="footnote-ref">4</a></sup>.</p><p>We consider this new feature similar to driving a very fast race car without any safety features enabled and urge developers to <em>very very carefully</em> consider if they really need this exposure.</p><p>Before this addition was merged, a semi-known vulnerability was (ab)used by application developers to achieve the same functionality. To make the whole community aware of this risk we published a <a href="https://github.com/tauri-apps/tauri/security/advisories/GHSA-4wm2-cwcf-wwvp" target="_blank" rel="noopener noreferrer">security advisory</a> to give a heads up. Applications are affected if they allow users to navigate to arbitrary domains or have an open redirect vulnerability<sup id="fnref-5-2cd5f8"><a href="#fn-5-2cd5f8" class="footnote-ref">5</a></sup>. If you implement such a feature you should update to the 1.3 release as fast as possible.</p><p>The initial PR changes allowed wildcards (<code>https://*</code>) and glob patterns, which we believe are helpful but shouldn't be exposed to all Tauri developers. We concluded that the risk of over-exposure, like the allow list toggle to enable all Tauri API endpoints, does not justify this permissive exposure. The final implementation allows to configure specified <em>(sub)domains</em><sup id="fnref-6-2cd5f8"><a href="#fn-6-2cd5f8" class="footnote-ref">6</a></sup> (eg: <code>example.com</code>) to gain remote access to the Tauri IPC.</p><p>The few edge use cases, which require wildcards or even further exposure can be implemented by custom Rust code which is able to dynamically modify the IPC access. We now expose this remote IPC scope in a similar fashion as the <code>fs</code> or <code>http</code> scope.</p><p>Assuming a <strong>fully trusted</strong> web service on <code>https://trusted.example</code> it is now possible to configure the security scope to allow certain windows or even plugins access to custom implemented commands and optionally the inbuilt Tauri API:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token property" style="color:#5a9bcf">"security"</span><span class="token operator" style="color:#d7deea">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token property" style="color:#5a9bcf">"dangerousRemoteUrlIpcAccess"</span><span class="token operator" style="color:#d7deea">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token property" style="color:#5a9bcf">"windows"</span><span class="token operator" style="color:#d7deea">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">[</span><span class="token string" style="color:#8dc891">"main"</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">"settings"</span><span class="token punctuation" style="color:#8dc891">]</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token property" style="color:#5a9bcf">"domain"</span><span class="token operator" style="color:#d7deea">:</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">"trusted.example"</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token property" style="color:#5a9bcf">"plugins"</span><span class="token operator" style="color:#d7deea">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">[</span><span class="token string" style="color:#8dc891">"trusted-plugin"</span><span class="token punctuation" style="color:#8dc891">]</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token property" style="color:#5a9bcf">"enableTauriAPI"</span><span class="token operator" style="color:#d7deea">:</span><span class="token plain"> </span><span class="token boolean" style="color:#ff8b50">false</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token punctuation" style="color:#8dc891">]</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Shared domains <strong>MUST NOT</strong> be used for this in any circumstances. We do not limit access to paths or specific files. You can only scope with <strong>trusted</strong> <em>(sub)domains</em><sup id="fnref-6-2cd5f8"><a href="#fn-6-2cd5f8" class="footnote-ref">6</a></sup>. Another very risky catch is that developers must be sure that the domain ownership does not change over the lifetime of the application. Domain takeover could lead to compromised user devices.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="browser-arguments-5799">Browser Arguments <a href="https://github.com/tauri-apps/tauri/pull/5799" target="_blank" rel="noopener noreferrer">#5799</a><a href="#browser-arguments-5799" class="hash-link" aria-label="Direct link to browser-arguments-5799" title="Direct link to browser-arguments-5799">​</a></h3><p>Due to certain webview features not enabled nor being accessible, a community contribution introduced the possibility to add additional arguments to the webview process, which is created in a new window.</p><p>This feature was exposed to the frontend in the <code>window</code> endpoint. We found that this exposure was highly risky, as most webviews have very impactful features and flags that can be allowed via the process arguments.</p><p>All of the following threat model assumptions are based on the Tauri window creation being allowed in the <code>allowlist</code> of the <code>tauri.conf</code> and therefore exposed to the frontend. This PR affects Windows only, therefore there is no impact on the other supported operating systems.</p><p>An adversary with the capabilities to create windows and pass command line arguments to the webview can elevate their privileges to escape the strict sandboxing of Tauri and the webview.</p><p>The flags allow to enable several dangerous webview features, from loading profiles outside of the current default profile folder (stealing browser sessions from the device) to disabling security measurements of the webview (eg: certificate validation, sandboxing, webdriver/headless mode, device management endpoints, ...).</p><p>We found an old but gold and still unique documentation reference at <a href="https://peter.sh/experiments/chromium-command-line-switches/" target="_blank" rel="noopener noreferrer">https://peter.sh/experiments/chromium-command-line-switches/</a>, which helped us understand possible risks on Windows, as the Webview2 uses the same flags.</p><p>The feature was then changed to be only exposed on the rust side. Tauri application developers can use this to implement custom commands to invoke webview windows with use case specific arguments.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="possible-zipslip-4674">Possible ZipSlip <a href="https://github.com/tauri-apps/tauri/pull/4674" target="_blank" rel="noopener noreferrer">#4674</a><a href="#possible-zipslip-4674" class="hash-link" aria-label="Direct link to possible-zipslip-4674" title="Direct link to possible-zipslip-4674">​</a></h3><p>We found that the components to extract remote bundler files like the Webview2 installer were manually extracting single files with the <a href="https://github.com/tauri-apps/tauri/blob/d1179c78e2ce04067461461868f66d2020802f4b/tooling/bundler/src/bundle/windows/util.rs#L116" target="_blank" rel="noopener noreferrer"><code>extract_zip</code></a> function, which uses <a href="https://docs.rs/zip/0.6/zip/read/struct.ZipFile.html#method.name" target="_blank" rel="noopener noreferrer"><code>ZipFile::name()</code></a> instead of <a href="https://docs.rs/zip/0.6/zip/read/struct.ZipFile.html#method.enclosed_name" target="_blank" rel="noopener noreferrer"><code>ZipFile::enclosed_name()</code></a> as recommended in the documentation. Files which had names like <code>../../../../foo.sh</code> could be extracted outside of the intended directory on the filesystem. This kind of vulnerability is called <a href="https://security.snyk.io/research/zip-slip-vulnerability" target="_blank" rel="noopener noreferrer">ZipSlip</a>.</p><p>As the function was only used on verified and trusted files the impact here was nearly zero. Regardless we changed the implementation to facilitate the proper extraction method.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bundler-hardening-6039">Bundler Hardening <a href="https://github.com/tauri-apps/tauri/pull/6039" target="_blank" rel="noopener noreferrer">#6039</a><a href="#bundler-hardening-6039" class="hash-link" aria-label="Direct link to bundler-hardening-6039" title="Direct link to bundler-hardening-6039">​</a></h3><p>The bundler was not escaping content passed to the <a href="https://github.com/tauri-apps/tauri/blob/35b587c830140609004732d713b8055f38d643d8/tooling/bundler/src/bundle/windows/nsis.rs#L346" target="_blank" rel="noopener noreferrer"><code>handlebars::Handlebars::render()</code></a>, which could cause unwanted code execution during the bundler phase. This was also a low impact issue but was promptly fixed.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="other-changes">Other changes<a href="#other-changes" class="hash-link" aria-label="Direct link to Other changes" title="Direct link to Other changes">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="new">New<a href="#new" class="hash-link" aria-label="Direct link to New" title="Direct link to New">​</a></h4><ul><li><code>additional_browser_args</code> option when creating windows <a href="https://github.com/tauri-apps/tauri/pull/5799" target="_blank" rel="noopener noreferrer">#5799</a></li><li>Add <code>is_minimized()</code> window method. <a href="https://github.com/tauri-apps/tauri/pull/5618" target="_blank" rel="noopener noreferrer">#5618</a></li><li>Add <code>title</code> getter on window. <a href="https://github.com/tauri-apps/tauri/pull/5515" target="_blank" rel="noopener noreferrer">#5515</a></li><li>content protection APIs <a href="https://github.com/tauri-apps/tauri/pull/5513" target="_blank" rel="noopener noreferrer">#5513</a></li><li>Added <code>Builder::device_event_filter</code> and <code>App::set_device_event_filter</code> methods. <a href="https://github.com/tauri-apps/tauri/pull/5562" target="_blank" rel="noopener noreferrer">#5562</a></li><li>Add <code>WindowsAttributes::app_manifest</code> to specify the application manifest on Windows. <a href="https://github.com/tauri-apps/tauri/pull/5730" target="_blank" rel="noopener noreferrer">#5730</a></li><li>Add support for Cargo's workspace inheritance. <a href="https://github.com/tauri-apps/tauri/pull/5775" target="_blank" rel="noopener noreferrer">#5775</a> <a href="https://github.com/tauri-apps/tauri/pull/6144" target="_blank" rel="noopener noreferrer">#6144</a></li><li>Added window's <code>url()</code> getter. <a href="https://github.com/tauri-apps/tauri/pull/5914" target="_blank" rel="noopener noreferrer">#5914</a></li><li>Added <code>Window::on_navigation</code>. <a href="https://github.com/tauri-apps/tauri/pull/5686" target="_blank" rel="noopener noreferrer">#5686</a></li><li>Allow setting the text of the dialog buttons. <a href="https://github.com/tauri-apps/tauri/pull/4383" target="_blank" rel="noopener noreferrer">#4383</a></li><li>Implement <code>SystemTray::with_tooltip</code> and <code>SystemTrayHandle::set_tooltip</code> for Windows and macOS. <a href="https://github.com/tauri-apps/tauri/pull/5938" target="_blank" rel="noopener noreferrer">#5938</a></li><li>Add dylib support to <code>tauri.bundle.macOS.frameworks</code>. <a href="https://github.com/tauri-apps/tauri/pull/5732" target="_blank" rel="noopener noreferrer">#5732</a></li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="enhancements">Enhancements<a href="#enhancements" class="hash-link" aria-label="Direct link to Enhancements" title="Direct link to Enhancements">​</a></h4><ul><li>On Windows, the <code>msi</code> installer's <code>Launch App</code> checkbox will be checked by default. <a href="https://github.com/tauri-apps/tauri/pull/5871" target="_blank" rel="noopener noreferrer">#5871</a></li><li>Add <code>--png</code> option for the <code>icon</code> command to generate custom icon sizes. <a href="https://github.com/tauri-apps/tauri/pull/5246" target="_blank" rel="noopener noreferrer">#5246</a></li><li>On Windows, change webview theme based on Window theme for more accurate <code>prefers-color-scheme</code> support. <a href="https://github.com/tauri-apps/tauri/pull/5874" target="_blank" rel="noopener noreferrer">#5874</a></li><li>Remove default features from Cargo.toml template. <a href="https://github.com/tauri-apps/tauri/pull/6074" target="_blank" rel="noopener noreferrer">#6074</a></li><li>Add a method to the <code>WindowBuilder</code> struct to recreate windows from tauri.conf.json configurations.<a href="https://github.com/tauri-apps/tauri/pull/6073" target="_blank" rel="noopener noreferrer">#6073</a></li><li>Improve the error message when <code>rustc</code> couldn't be found. <a href="https://github.com/tauri-apps/tauri/pull/6021" target="_blank" rel="noopener noreferrer">#6021</a></li><li>Added support for pre-release identifiers and build numbers for the <code>.msi</code> bundle target. Only one of each can be used and it must be numeric only. The version must still be semver compatible according to <a href="https://semver.org/" target="_blank" rel="noopener noreferrer">https://semver.org/</a>. <a href="https://github.com/tauri-apps/tauri/pull/6096" target="_blank" rel="noopener noreferrer">#6096</a></li><li>Add <code>--ci</code> flag and respect the <code>CI</code> environment variable on the <code>signer generate</code> command. In this case the default password will be an empty string and the CLI will not prompt for a value. <a href="https://github.com/tauri-apps/tauri/pull/6097" target="_blank" rel="noopener noreferrer">#6097</a></li><li>Skip the password prompt on the build command when <code>TAURI_KEY_PASSWORD</code> environment variable is empty and the <code>--ci</code> argument is provided or the <code>CI</code> environment variable is set. <a href="https://github.com/tauri-apps/tauri/commit/d4f89af18d69fd95a4d8a1ede8442547c6a6d0ee" target="_blank" rel="noopener noreferrer">d4f89af18d69fd95a4d8a1ede8442547c6a6d0ee</a></li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="fixes">Fixes<a href="#fixes" class="hash-link" aria-label="Direct link to Fixes" title="Direct link to Fixes">​</a></h4><ul><li>Fix <code>tauri info</code> panicking when parsing crates version on a newly created project without a <code>Cargo.lock</code> file. <a href="https://github.com/tauri-apps/tauri/pull/5873" target="_blank" rel="noopener noreferrer">#5873</a></li><li>Fix building apps with unicode characters in their <code>productName</code>. <a href="https://github.com/tauri-apps/tauri/pull/5872" target="_blank" rel="noopener noreferrer">#5872</a></li><li>Sync <code>__TAURI_METADATA__.__windows</code> across all windows. <a href="https://github.com/tauri-apps/tauri/pull/5615" target="_blank" rel="noopener noreferrer">#5615</a></li><li>Fix resize glitch when double clicking a custom titlebar in the top resize area. <a href="https://github.com/tauri-apps/tauri/pull/5966" target="_blank" rel="noopener noreferrer">#5966</a></li><li>Disable cursor mouse events on Linux. <a href="https://github.com/tauri-apps/tauri/pull/6025" target="_blank" rel="noopener noreferrer">#6025</a></li><li>Fix serialization of js <code>Map</code> when used in <code>invoke</code>. <a href="https://github.com/tauri-apps/tauri/pull/6099" target="_blank" rel="noopener noreferrer">#6099</a></li></ul><div class="footnotes"><hr><ol><li id="fn-1-2cd5f8"><em>Inter-Process Communication</em>, in this instance the communication between the Tauri core and the frontend code run inside the webview.<a href="#fnref-1-2cd5f8" class="footnote-backref">↩</a></li><li id="fn-2-2cd5f8"><em>Security Impact</em>: What is the theoretical biggest impact of this threat combination? This highly depends on correct scoping of Tauri API endpoints and hardening of custom implemented Tauri commands.<a href="#fnref-2-2cd5f8" class="footnote-backref">↩</a></li><li id="fn-3-2cd5f8"><em>Exposure</em>: Describes the exposed scope items of this feature to either an user or adversary. It is possible to restrict exposure to only certain domains, windows or only to custom implemented commands.<a href="#fnref-3-2cd5f8" class="footnote-backref">↩</a></li><li id="fn-4-2cd5f8"><em>Adversary Capabilities</em>: Which kind of privileges has the adversary? Can range from tricking user into entering malicious input to code execution in the frontend via cross-site-scripting (which is the highest privilege for frontend code in our case). Common capabilities are described in the <a href="https://owasp.org/www-community/attacks/" target="_blank" rel="noopener noreferrer">OWASP documentation</a>.<a href="#fnref-4-2cd5f8" class="footnote-backref">↩</a></li><li id="fn-5-2cd5f8"><em>An application can be exploited if it parses user input for making an URL redirection decision, which is then not properly validated.</em> <a href="https://en.wikipedia.org/wiki/Open_redirect" target="_blank" rel="noopener noreferrer">Wikipedia Source</a><a href="#fnref-5-2cd5f8" class="footnote-backref">↩</a></li><li id="fn-6-2cd5f8">see the <a href="https://docs.rs/reqwest/latest/reqwest/struct.Url.html#method.domain" target="_blank" rel="noopener noreferrer">Reqwest reference</a><a href="#fnref-6-2cd5f8" class="footnote-backref">↩</a></li></ol></div>]]></content>
        <author>
            <name>Lucas Nogueira</name>
            <uri>https://github.com/lucasfernog</uri>
        </author>
        <author>
            <name>Tillmann Weidinger</name>
            <uri>https://github.com/tweidinger</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tauri 2.0.0-alpha.4 Released]]></title>
        <id>https://tauri.app/ko/blog/2023/03/20/tauri-2-0-0-alpha-4</id>
        <link href="https://tauri.app/ko/blog/2023/03/20/tauri-2-0-0-alpha-4"/>
        <updated>2023-03-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Mobile APIs for Tauri plugins! The 2.0.0-alpha.4 release has been published.]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="Tauri 1.2 Launch Hero Image" src="/ko/assets/images/header-ae623d29abbe5d2ca2509b55e215d83c.png" width="1280" height="640" class="img_ev3q"></p><p>A new alpha release for the 2.0 has been published. This release includes all changes from the upcoming Tauri 1.3 release, an important breaking change on the HTTP client and native mobile capabilities for Tauri plugins.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="updating-dependencies">Updating dependencies<a href="#updating-dependencies" class="hash-link" aria-label="Direct link to Updating dependencies" title="Direct link to Updating dependencies">​</a></h2><p>Make sure to update both NPM and Cargo dependencies to the latest alpha release. You can update the NPM dependencies with:</p><div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">npm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Yarn Classic</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Yarn Berry</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">pnpm</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">npm</span><span class="token plain"> </span><span class="token function" style="color:#79b6f2">install</span><span class="token plain"> @tauri-apps/cli@next @tauri-apps/api@next</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">yarn</span><span class="token plain"> upgrade @tauri-apps/cli@next @tauri-apps/api@next</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">yarn</span><span class="token plain"> up @tauri-apps/cli@next @tauri-apps/api@next</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">pnpm</span><span class="token plain"> update @tauri-apps/cli@next @tauri-apps/api@next</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div><p>To update the Cargo dependencies, run the following in the <code>src-tauri</code> folder:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token plain">cargo </span><span class="token function" style="color:#79b6f2">add</span><span class="token plain"> tauri@2.0.0-alpha.4</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">cargo </span><span class="token function" style="color:#79b6f2">add</span><span class="token plain"> tauri-build@2.0.0-alpha.2 --build</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">cargo </span><span class="token function" style="color:#79b6f2">install</span><span class="token plain"> tauri-cli --version </span><span class="token string" style="color:#8dc891">"^2.0.0-alpha"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Recreate the mobile projects to use the new features:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">rm</span><span class="token plain"> -r src-tauri/gen</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">tauri android init</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">tauri ios init</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="http-client-breaking-change">HTTP Client Breaking Change<a href="#http-client-breaking-change" class="hash-link" aria-label="Direct link to HTTP Client Breaking Change" title="Direct link to HTTP Client Breaking Change">​</a></h2><p>The default HTTP client using <code>attohttpc</code> has been removed due to issues with the development server proxy on Windows. All <code>reqwest-*</code> feature flags have been removed because <code>reqwest</code> is now the client we use.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="native-mobile-functionality-for-tauri-plugins">Native Mobile Functionality for Tauri Plugins<a href="#native-mobile-functionality-for-tauri-plugins" class="hash-link" aria-label="Direct link to Native Mobile Functionality for Tauri Plugins" title="Direct link to Native Mobile Functionality for Tauri Plugins">​</a></h2><p>A Tauri plugin now can access iOS via Swift and Android APIs via Kotlin or Java code, simplifying usage of platform interfaces such as camera or geolocation. To bootstrap the iOS and Android projects on an existing plugin, run <code>tauri plugin ios add</code> and <code>tauri plugin android add</code>. New plugins automatically include all the configuration needed to write native mobile code.</p><p>Here's an example of a plugin that takes a string value and resolves an object:</p><p><strong>Android plugin:</strong></p><div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockTitle_Ktv7">ExamplePlugin.kt</div><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token plain">package com.plugin.example</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">import android.app.Activity</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">import app.tauri.annotation.Command</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">import app.tauri.annotation.TauriPlugin</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">import app.tauri.plugin.JSObject</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">import app.tauri.plugin.Plugin</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">import app.tauri.plugin.Invoke</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">@TauriPlugin</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">class ExamplePlugin(private val activity: Activity): Plugin(activity) {</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    @Command</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    fun ping(invoke: Invoke) {</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        val value = invoke.getString("value") ?: ""</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        val ret = JSObject()</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        ret.put("value", value)</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        invoke.resolve(ret)</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>iOS plugin:</strong></p><div class="language-swift codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockTitle_Ktv7">ExamplePlugin.swift</div><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-swift codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token plain">import UIKit</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">import WebKit</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">import Tauri</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">class ExamplePlugin: Plugin {</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    @objc public func ping(_ invoke: Invoke) throws {</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        let value = invoke.getString("value")</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        invoke.resolve(["value": value as Any])</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">}</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">@_cdecl("init_plugin_example")</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">func initPlugin(name: SRString, webview: WKWebView?) {</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    Tauri.registerPlugin(webview: webview, name: name.toString(), plugin: ExamplePlugin())</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">}</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Rust code to initialize the plugin:</strong></p><div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-rust codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token keyword" style="color:#c5a5c5">use</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">tauri</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token namespace" style="opacity:0.7">plugin</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token punctuation" style="color:#8dc891">{</span><span class="token class-name" style="color:#FAC863">Builder</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">TauriPlugin</span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token class-name" style="color:#FAC863">Manager</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Runtime</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token attribute attr-name" style="color:#c5a5c5">#[cfg(target_os = </span><span class="token attribute attr-name string" style="color:#8dc891">"ios"</span><span class="token attribute attr-name" style="color:#c5a5c5">)]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token namespace" style="opacity:0.7">tauri</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token macro property" style="color:#5a9bcf">ios_plugin_binding!</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">init_plugin_example</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token keyword" style="color:#c5a5c5">pub</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">fn</span><span class="token plain"> </span><span class="token function-definition function" style="color:#79b6f2">init</span><span class="token operator" style="color:#d7deea">&lt;</span><span class="token class-name" style="color:#FAC863">R</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Runtime</span><span class="token operator" style="color:#d7deea">&gt;</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">-&gt;</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">TauriPlugin</span><span class="token operator" style="color:#d7deea">&lt;</span><span class="token class-name" style="color:#FAC863">R</span><span class="token operator" style="color:#d7deea">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token class-name" style="color:#FAC863">Builder</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">new</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token string" style="color:#8dc891">"example"</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">setup</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token closure-params">app</span><span class="token closure-params punctuation" style="color:#8dc891">,</span><span class="token closure-params"> api</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token attribute attr-name" style="color:#c5a5c5">#[cfg(target_os = </span><span class="token attribute attr-name string" style="color:#8dc891">"android"</span><span class="token attribute attr-name" style="color:#c5a5c5">)]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      api</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">register_android_plugin</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token string" style="color:#8dc891">"com.plugin.example"</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">"ExamplePlugin"</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token operator" style="color:#d7deea">?</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token attribute attr-name" style="color:#c5a5c5">#[cfg(target_os = </span><span class="token attribute attr-name string" style="color:#8dc891">"ios"</span><span class="token attribute attr-name" style="color:#c5a5c5">)]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      api</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">register_ios_plugin</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">init_plugin_example</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token operator" style="color:#d7deea">?</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token class-name" style="color:#FAC863">Ok</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">build</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Frontend code to call the plugin command:</strong></p><div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token keyword module" style="color:#c5a5c5">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#8dc891">{</span><span class="token imports"> invoke </span><span class="token imports punctuation" style="color:#8dc891">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#c5a5c5">from</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">'@tauri-apps/api/tauri'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token function" style="color:#79b6f2">invoke</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token string" style="color:#8dc891">'plugin:example|ping'</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#5a9bcf">value</span><span class="token operator" style="color:#d7deea">:</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">'Tauri'</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token method function property-access" style="color:#79b6f2">then</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token parameter punctuation" style="color:#8dc891">{</span><span class="token parameter"> value </span><span class="token parameter punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#d7deea">=&gt;</span><span class="token plain"> </span><span class="token console class-name" style="color:#FAC863">console</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token method function property-access" style="color:#79b6f2">log</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token string" style="color:#8dc891">'Response'</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> value</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Check out the upcoming <a href="https://github.com/tauri-apps/plugins-workspace/pull/260" target="_blank" rel="noopener noreferrer">camera plugin</a> and <a href="https://github.com/tauri-apps/tauri/pull/6339" target="_blank" rel="noopener noreferrer">path plugin</a>.</p>]]></content>
        <author>
            <name>Lucas Nogueira</name>
            <uri>https://github.com/lucasfernog</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[create-tauri-app Version 3 Released]]></title>
        <id>https://tauri.app/ko/blog/2023/03/01/create-tauri-app-version-3-released</id>
        <link href="https://tauri.app/ko/blog/2023/03/01/create-tauri-app-version-3-released"/>
        <updated>2023-03-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[create-tauri-app Version 3 is released with support for alpha versions of Tauri, mobile project support and DX improvements]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="hero image" src="/ko/assets/images/header-a26cf30e099f85bd6c01732d6457a5fd.jpg" width="1280" height="640" class="img_ev3q"></p><p>A new major version of <a href="https://github.com/tauri-apps/create-tauri-app" target="_blank" rel="noopener noreferrer">create-tauri-app</a> has been released. This version adds support for the alpha version of Tauri 2.0, the ability to initialize iOS and Android projects and removes some less commonly used templates to make the project more maintainable.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="tauri-20-alpha--mobile-support">Tauri 2.0 Alpha &amp; Mobile Support<a href="#tauri-20-alpha--mobile-support" class="hash-link" aria-label="Direct link to Tauri 2.0 Alpha &amp; Mobile Support" title="Direct link to Tauri 2.0 Alpha &amp; Mobile Support">​</a></h2><p>The <a href="https://tauri.app/blog/2022/12/09/tauri-mobile-alpha" target="_blank" rel="noopener noreferrer">first alpha version of Tauri 2.0 was published almost 3 months ago</a> which brought initial mobile support for Android and iOS. Previously there wasn't an easy way to create a new project to test either the changes in the alpha version nor the mobile support. Well, that ends now!</p><p>Starting with version 3 of <a href="https://github.com/tauri-apps/create-tauri-app" target="_blank" rel="noopener noreferrer">create-tauri-app</a>, you can now pass <code>--alpha</code> flag and it will bootstrap an app that uses <code>tauri@2.0.0-alpha</code>. When adding the <code>--alpha</code> flag it will automatically prompt you if you'd like to add mobile support. You can also use the <code>--mobile</code> flag to automatically make it mobile compatible.</p><p>To get started:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token comment" style="color:#999999"># pnpm</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token function" style="color:#79b6f2">pnpm</span><span class="token plain"> create tauri-app --alpha</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token comment" style="color:#999999"># yarn</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token function" style="color:#79b6f2">yarn</span><span class="token plain"> create tauri-app --alpha</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token comment" style="color:#999999"># npm</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token function" style="color:#79b6f2">npm</span><span class="token plain"> create tauri-app -- --alpha</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token comment" style="color:#999999"># Cargo</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">cargo </span><span class="token function" style="color:#79b6f2">install</span><span class="token plain"> create-tauri-app</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">cargo create-tauri-app --alpha</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token comment" style="color:#999999"># Bash</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token function" style="color:#79b6f2">sh</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">&lt;</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token function" style="color:#79b6f2">curl</span><span class="token plain"> https://create.tauri.app/sh</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> --alpha</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token comment" style="color:#999999"># Powershell</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token variable" style="color:#d7deea">$env</span><span class="token plain">:CTA_ARGS</span><span class="token operator" style="color:#d7deea">=</span><span class="token string" style="color:#8dc891">"--alpha"</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain">iwr -useb https://create.tauri.app/ps </span><span class="token operator" style="color:#d7deea">|</span><span class="token plain"> iex</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="prompt-improvements">Prompt Improvements<a href="#prompt-improvements" class="hash-link" aria-label="Direct link to Prompt Improvements" title="Direct link to Prompt Improvements">​</a></h2><p>With version 2 of create-tauri-app we also focused on improving the flow and experience of the prompted questions.</p><p>Previously the second prompt would ask "Choose your package manager". This was a bit vague and could leave some with unanswered questions:</p><ul><li>What is <code>cargo</code>?</li><li>Is it a new Node.js package manager?</li><li>Why choose it over <code>pnpm</code> or <code>yarn</code>?</li></ul><p>This would be even more vague if we decided to add a new frontend language (such as a webassembly Golang web application). We added a prompt asking to choose the package manager to ask which language would you prefer. It looks something like this:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token plain">? Choose which language to use for your frontend ›</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  Rust</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">❯ TypeScript / JavaScript  (pnpm, yarn, npm)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>After choosing the frontend language create-tauri-app will then prompt for package manager to use if the language has multiple (such as Node.js with npm, yarn, and pnpm).</p><p>Another prompt that we felt problematic was the template selection prompt. It contained a lot of templates to choose from and was only growing with time:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token plain">✔ Choose your package manager · pnpm</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">? Choose your UI template ›</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  vanilla</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  vanilla-ts</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  vue</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">❯ vue-ts</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  svelte</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  svelte-ts</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  react</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  react-ts</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  solid</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  solid-ts</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  next</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  next-ts</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  preact</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  preact-ts</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  angular</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  clojurescript</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  svelte-kit</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  svelte-kit-ts</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>We decided to split this up into 2 prompts. The first will ask which UI template to use:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token plain">✔ Choose your package manager · pnpm</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">? Choose your UI template ›</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  Vanilla</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">❯ Vue</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  Svelte</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  React</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  Solid</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  Angular</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  Next</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  SvelteKit</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  ClojureScript</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  Preact</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>And then the second will then ask any additional choices that are specific to that template (such as choosing between TypeScript or JavaScript for Vue):</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token plain">✔ Choose your package manager · pnpm</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">✔ Choose your UI template · Vue - (https://vuejs.org)</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">? Choose your UI flavor ›</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">❯ TypeScript</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  JavaScript</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Even with these refinements the list of templates was still quite large and would only grow over time. The next thing to look at was the list of templates themselves.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="removing-templates">Removing Templates<a href="#removing-templates" class="hash-link" aria-label="Direct link to Removing Templates" title="Direct link to Removing Templates">​</a></h2><p>When create-tauri-app version 2 was launched it quickly received PRs to add additional templates beyond what it originally launched with. While it was exciting to receive so much support from the community, it did bring up a couple of new challenges:</p><ul><li>It made it almost impossible to fit them in a single prompt</li><li>Maintaining all the templates was becoming more difficult</li></ul><p>It was a hard balance between showing how flexible Tauri is but also making sure that the project was maintainable and had the DX that we wanted.</p><p>We decided to focus on the most popular frontend frameworks and used guidance from community surveys like <a href="https://2022.stateofjs.com/en-US/libraries/front-end-frameworks/" target="_blank" rel="noopener noreferrer">The State of JS</a> and our own Tauri community feedback. With this we removed the <code>next</code>, <code>next-ts</code>, <code>preact</code>, <code>preact-ts</code>, <code>clojurescript</code>, <code>svelte-kit</code> and <code>svelte-kit-ts</code> templates and also closed PRs which aimed to add more templates.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="community-maintained-templates--previous-versions">Community-Maintained Templates &amp; Previous Versions<a href="#community-maintained-templates--previous-versions" class="hash-link" aria-label="Direct link to Community-Maintained Templates &amp; Previous Versions" title="Direct link to Community-Maintained Templates &amp; Previous Versions">​</a></h2><p>We want to make sure that we offer a place for the Tauri community to provide their own templates for the frameworks they love. The templates section of <a href="https://github.com/tauri-apps/awesome-tauri#templates" target="_blank" rel="noopener noreferrer">awesome-tauri</a> is just the place for that. We invite the community to submit a PR to the awesome-tauri repo with their templates so that they can be shared with the Tauri community. We'll also be creating a section on the Tauri website to highlight and showcase these community templates.</p><p>If you'd still like to use the previous templates from version 2 of create-tauri-app they are still published to npm and crates.io. Here's how you can use a previous version:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token comment" style="color:#999999"># pnpm</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token function" style="color:#79b6f2">pnpm</span><span class="token plain"> create tauri-app@2</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token comment" style="color:#999999"># yarn</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token function" style="color:#79b6f2">yarn</span><span class="token plain"> create tauri-app@2</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token comment" style="color:#999999"># npm</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token function" style="color:#79b6f2">npm</span><span class="token plain"> create tauri-app@2</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token comment" style="color:#999999"># Cargo</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">cargo </span><span class="token function" style="color:#79b6f2">install</span><span class="token plain"> create-tauri-app --version </span><span class="token number" style="color:#5a9bcf">2.8</span><span class="token plain">.0</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">cargo create-tauri-app</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token comment" style="color:#999999"># Bash</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token function" style="color:#79b6f2">sh</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">&lt;</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token function" style="color:#79b6f2">curl</span><span class="token plain"> https://create.tauri.app/v/2.8.0/sh</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token comment" style="color:#999999"># Powershell</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">iwr -useb https://create.tauri.app/v/2.8.0/ps </span><span class="token operator" style="color:#d7deea">|</span><span class="token plain"> iex</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>However, as time goes, these templates will become out of date as Tauri and the frontend frameworks move forward. We'd recommend you look at the community templates in the <a href="https://github.com/tauri-apps/awesome-tauri" target="_blank" rel="noopener noreferrer">awesome-tauri</a> repo and welcome submissions if something is missing.</p><hr><p>We hope that these changes make it easier for the community to try out the alpha and beta versions of Tauri 2.0 and also make the process to create a new Tauri app easier for everyone! We'd love to hear your feedback and invite you to join the conversation on the <a href="https://github.com/tauri-apps/tauri-docs/discussions/1137" target="_blank" rel="noopener noreferrer">GitHub Discussion for this post</a>.</p>]]></content>
        <author>
            <name>Amr Bashir</name>
            <uri>https://github.com/amrbashir</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tauri Community Growth & Feedback]]></title>
        <id>https://tauri.app/ko/blog/2023/02/09/tauri-community-growth-and-feedback</id>
        <link href="https://tauri.app/ko/blog/2023/02/09/tauri-community-growth-and-feedback"/>
        <updated>2023-02-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Tauri Community Survey results and search improvements]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="Community growth and feedback hero image" src="/ko/assets/images/header-e7a34e86e4b8203cb5bf14aa4d4ae353.jpg" width="1280" height="640" class="img_ev3q"></p><p>Tauri has had an amazing past year. We <a href="https://tauri.app/blog/2022/06/19/tauri-1-0/" target="_blank" rel="noopener noreferrer">launched Tauri 1.0</a>, <a href="https://tauri.app/blog/2022/12/09/tauri-mobile-alpha" target="_blank" rel="noopener noreferrer">announced the alpha version of Tauri Mobile</a> and gathered a lot of valuable feedback from our community and users in the 2022 Tauri Community Survey.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="tauri-community-survey-results">Tauri Community Survey Results<a href="#tauri-community-survey-results" class="hash-link" aria-label="Direct link to Tauri Community Survey Results" title="Direct link to Tauri Community Survey Results">​</a></h2><p>This year, we had over 600 responses to the Tauri Community Survey (over 3x more than the previous survey's responses). We'd like to extend a very special thank you to <a href="https://github.com/wusyong" target="_blank" rel="noopener noreferrer">Wu Yu Wei</a> and <a href="https://github.com/dklassic" target="_blank" rel="noopener noreferrer">DK Liao</a> for translating the survey from English into Simplified and Traditional Chinese so that we could include more people from the community and their feedback in the survey. You can download the public data for the survey <a target="_blank" href="/ko/assets/files/tauri-community-survey-2022-data-7e09de641e26bffba241264ea73febdc.csv">here</a>.</p><p>We've heard your feedback and have started a couple of projects to directly address it. The first one we'd like to talk about is search.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="search-improvements-on-tauriapp">Search Improvements on Tauri.app<a href="#search-improvements-on-tauriapp" class="hash-link" aria-label="Direct link to Search Improvements on Tauri.app" title="Direct link to Search Improvements on Tauri.app">​</a></h2><p>Without searching, can you ever find something? And if your telescope is cracked, can you see the planets or stars? We know that our search lens was dusty and scratched; it felt sometimes like a roll of the dice, and some folks even <a href="https://twitter.com/danielcroe/status/1619703406482059265" target="_blank" rel="noopener noreferrer">resorted to using ChatGPT</a> to find answers.</p><p>Search has been a project that we've taken a few runs at over the years, but we've also learned that it's not quite as easy as it first seems. <a href="https://github.com/yankeeinlondon" target="_blank" rel="noopener noreferrer">Ken</a> from the Tauri Working Group did inspirational work with the previous <code>tauri-search</code> project. He created a lot of the foundation and research in the previous project for us to understand what goes into search.</p><hr><p>With the next iteration of search, we had three goals in mind:</p><ol><li>Keep it maintainable</li><li>Keep it working</li><li>Keep it open source</li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="search-engine">Search Engine<a href="#search-engine" class="hash-link" aria-label="Direct link to Search Engine" title="Direct link to Search Engine">​</a></h3><p>First, we needed to choose a backend search engine to store and serve the search index. When evaluating search engines, we wanted to make sure we used something that shared our values of open source software and a small footprint. After comparing and researching players in the search market (and also learning from our previous approach with Meilisearch), we decided on Meilisearch because we knew it fit both of those goals.</p><p><a href="https://www.meilisearch.com" target="_blank" rel="noopener noreferrer">Meilisearch</a> have a passion for open source software and even has their <a href="https://github.com/meilisearch/meilisearch" target="_blank" rel="noopener noreferrer">search engine built in Rust</a> which has a tiny footprint and great performance. They've <a href="https://blog.meilisearch.com/v1-enterprise-ready-stable/" target="_blank" rel="noopener noreferrer">recently announced Meilisearch 1.0</a> and now also have a cloud offering for those who would like a managed instance.</p><p>We decided to partner up with Meilisearch to use their engine and their Meilisearch Cloud offering to host our search engine. They graciously sponsored a hosted plan that they manage for us. This lets us focus on building Tauri, knowing that the maintenance and upkeep of the search engine are in trusted hands.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="search-ingestion--indexing">Search Ingestion &amp; Indexing<a href="#search-ingestion--indexing" class="hash-link" aria-label="Direct link to Search Ingestion &amp; Indexing" title="Direct link to Search Ingestion &amp; Indexing">​</a></h3><p>The next piece of the puzzle is to actually get the content indexed and ingested into the search engine. <a href="https://github.com/FabianLars" target="_blank" rel="noopener noreferrer">Fabian</a> from the Tauri Working Group set up the project using the <a href="https://github.com/meilisearch/docs-scraper" target="_blank" rel="noopener noreferrer">docs-scraper</a> project from Meilisearch.</p><p>Previously, we had a setup that would take our markdown documentation and JavaScript AST and use that to build the search index. Although it led to much faster indexing times, it meant we had a tightly coupled dependency between search indexing and the way we rendered content on our website. This would sometimes lead to the search results getting out of sync with the content on the live website. In order to update the website or optimize the indexer, someone would need to have knowledge of both, making it more difficult to maintain.</p><p>With the current version of the scraper, we can handle all of the configuration and tweaking of results with a <a href="https://github.com/tauri-apps/tauri-docs/blob/dev/scraper.json" target="_blank" rel="noopener noreferrer">single JSON file</a> and let the scraper take care of the rest. We set up a GitHub action that would perform the scraping as part of our CI/CD pipeline and then send those results to our Meilisearch Cloud instance.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="search-frontend">Search Frontend<a href="#search-frontend" class="hash-link" aria-label="Direct link to Search Frontend" title="Direct link to Search Frontend">​</a></h3><p>The final step was to create the frontend UI that people visiting <a href="https://tauri.app" target="_blank" rel="noopener noreferrer">tauri.app</a> would interact with. <a href="https://github.com/amrbashir" target="_blank" rel="noopener noreferrer">Amr</a> from the Tauri Working Group created the <a href="https://github.com/tauri-apps/meilisearch-docsearch" target="_blank" rel="noopener noreferrer">meilisearch-docsearch</a> project to help with this. This repo is compatible with Meilisearch 1.0 (we're using it now on <a href="https://tauri.app" target="_blank" rel="noopener noreferrer">tauri.app</a>).</p><p>It's inspired by the <a href="https://github.com/algolia/docsearch/" target="_blank" rel="noopener noreferrer">algolia/docsearch</a> and <a href="https://github.com/meilisearch/docs-searchbar.js/" target="_blank" rel="noopener noreferrer">meilisearch/docs-searchbar.js</a> projects that provided a very solid foundation to begin with. The beauty of open source is that we can learn from each other and use that to give back to the ecosystem.</p><p>To talk through some of the details, I'll hand it over to Amr:</p><hr><p>The <a href="https://github.com/meilisearch/docs-searchbar.js/" target="_blank" rel="noopener noreferrer">meilisearch/docs-searchbar.js</a> project was good, but I always felt it could use some improvements to get feature parity with <a href="https://github.com/algolia/docsearch/" target="_blank" rel="noopener noreferrer">algolia/docsearch</a>. I also felt we could help with an update to help with UI/UX.</p><p>The main pain points with <a href="https://github.com/meilisearch/docs-searchbar.js/" target="_blank" rel="noopener noreferrer">meilisearch/docs-searchbar.js</a> were:</p><ol><li>On mobile screens, it needed UI/UX improvements so that the search results wouldn't go off-screen.</li><li>On desktop, the search results would normally appear under the search input, which in the case of <a href="https://tauri.app" target="_blank" rel="noopener noreferrer">tauri.app</a> was placed on the top-right. This caused a bad UX because you'd have to keep moving your eyes between the page content in the middle and the search results in the top-right.</li><li>It is missing a common keybinding. <code>ctrl/command + K</code> to start the search, <code>ctrl/command + K</code> is pretty common in the JS ecosystem documentation sites. It also doesn't have the ability to select text on the page and then trigger a search directly from that text.</li></ol><p>I have been always a big fan of <a href="https://github.com/algolia/docsearch/" target="_blank" rel="noopener noreferrer">algolia/docsearch</a> UI/UX. It checked all the features on my list, and I always wanted to have that for <a href="https://tauri.app" target="_blank" rel="noopener noreferrer">tauri.app</a>. In fact, several months ago, I tried to change the <a href="https://github.com/meilisearch/docs-searchbar.js/" target="_blank" rel="noopener noreferrer">meilisearch/docs-searchbar.js</a> CSS on our end to improve point 1 and 2 above but I stopped mid-way because of the difficulty of building on top of existing css and fighting for highest specifity (plus CSS is hard 😉). Other projects also couldn't benefit from our modifications in an easy way.</p><p>Later, we were discussing how to improve the search UI and UX, and we decided that we could improve on the base Meilisearch UI. That project turned into <a href="https://github.com/tauri-apps/meilisearch-docsearch" target="_blank" rel="noopener noreferrer">meilisearch-docsearch</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="seeing-it-in-action">Seeing It In Action<a href="#seeing-it-in-action" class="hash-link" aria-label="Direct link to Seeing It In Action" title="Direct link to Seeing It In Action">​</a></h3><p>The good news is that all of these changes are live! You can see the new search on <a href="https://tauri.app" target="_blank" rel="noopener noreferrer">tauri.app</a>. We'd love to hear your feedback on what works and what could use improvement in the <a href="https://github.com/tauri-apps/tauri-docs/discussions/1115" target="_blank" rel="noopener noreferrer">GitHub Discussion for this blog post</a>. We invite you to not only report bugs, but also if your search result wasn't expected or should be higher up on the list of results.</p><p><img loading="lazy" alt="Search Preview" src="/ko/assets/images/search_preview-0e9a66ad03a1eb6cca01350f9fb3fa68.gif" width="544" height="494" class="img_ev3q"></p><p>We'd like to wrap up by extending a special thank you to <a href="https://github.com/yankeeinlondon" target="_blank" rel="noopener noreferrer">Ken</a> for the original Tauri Search project, <a href="https://github.com/amrbashir" target="_blank" rel="noopener noreferrer">Amr</a> for the <a href="https://github.com/tauri-apps/meilisearch-docsearch" target="_blank" rel="noopener noreferrer">meilisearch-docsearch</a> project, <a href="https://github.com/FabianLars" target="_blank" rel="noopener noreferrer">Fabian</a> for writing the revised index scraper and continuous testing, Meilisearch for their partnership and the Meilisearch Cloud instance and finally the Tauri community for their continual feedback to help us drive Tauri and the community forward.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="next-steps">Next Steps<a href="#next-steps" class="hash-link" aria-label="Direct link to Next Steps" title="Direct link to Next Steps">​</a></h2><p>Over the next year, the Tauri Working Group is excited to continue working towards Tauri 2.0. We also have a website rewrite in the works that we'll be launching in beta this spring. If you'd like to get involved, you can reach out to us in the <a href="https://discord.com/invite/tauri" target="_blank" rel="noopener noreferrer">Tauri Discord</a> and follow us on <a href="https://fosstodon.org/@TauriApps" target="_blank" rel="noopener noreferrer">Mastodon</a> and <a href="https://twitter.com/TauriApps" target="_blank" rel="noopener noreferrer">Twitter</a>.</p>]]></content>
        <author>
            <name>Lorenzo Lewis</name>
            <uri>https://github.com/lorenzolewis</uri>
        </author>
        <author>
            <name>Amr Bashir</name>
            <uri>https://github.com/amrbashir</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Migration to webkit2gtk-4.1 on Linux port]]></title>
        <id>https://tauri.app/ko/blog/2023/02/03/tauri-2-0-0-alpha-3</id>
        <link href="https://tauri.app/ko/blog/2023/02/03/tauri-2-0-0-alpha-3"/>
        <updated>2023-02-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[New v2.0 alpha released and new backend for Linux port]]></summary>
        <content type="html"><![CDATA[<p>Hello everybody! We just released <a href="https://github.com/tauri-apps/tauri/releases/tag/tauri-v2.0.0-alpha.3" target="_blank" rel="noopener noreferrer">Tauri v2.0.0-alpha3</a> recently. While it doesn't bring any major feature, it does bring some huge impacts on Linux port.
We will use <a href="https://webkitgtk.org/reference/webkit2gtk/stable/index.html" target="_blank" rel="noopener noreferrer">WebKit2GTK–4.1</a> in 2.0 from now on.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-does-this-mean">What does this mean?<a href="#what-does-this-mean" class="hash-link" aria-label="Direct link to What does this mean?" title="Direct link to What does this mean?">​</a></h2><p>If you are using Tauri version 1.x, there's nothing to worry about. Everything you need is still the same.
But if you are using Tauri version 2.0 alpha version starting from <code>alpha.3</code>, you will need to install the new WebKit2GTK package with API version 4.1.
We will update the prerequisites in our site soon. But if you want to know how to install such version, here are some instructions from <a href="https://github.com/tauri-apps/wry#linux" target="_blank" rel="noopener noreferrer">wry</a>:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token comment" style="color:#999999"># On Arch Linux / Manjaro:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token function" style="color:#79b6f2">sudo</span><span class="token plain"> pacman -S webkit2gtk-4.1</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token comment" style="color:#999999"># On Debian / Ubuntu:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token function" style="color:#79b6f2">sudo</span><span class="token plain"> </span><span class="token function" style="color:#79b6f2">apt</span><span class="token plain"> </span><span class="token function" style="color:#79b6f2">install</span><span class="token plain"> libwebkit2gtk-4.1-dev</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token comment" style="color:#999999"># On Fedora:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token function" style="color:#79b6f2">sudo</span><span class="token plain"> dnf </span><span class="token function" style="color:#79b6f2">install</span><span class="token plain"> webkit2gtk4.1-devel</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="will-this-bring-breaking-changes-to-my-code">Will this bring breaking changes to my code?<a href="#will-this-bring-breaking-changes-to-my-code" class="hash-link" aria-label="Direct link to Will this bring breaking changes to my code?" title="Direct link to Will this bring breaking changes to my code?">​</a></h2><p>The main difference between version 4.0 and 4.1 are the soup library. WebKit2GTK-4.0 uses soup2 and WebKit2GTK-4.1 uses soup3.
So if you didn't use any soup2-specific APIs, your applications should continue to work fine.</p><p>The reason behind this change is because we aim to add flatpak support, but <a href="https://docs.flatpak.org/en/latest/available-runtimes.html#gnome" target="_blank" rel="noopener noreferrer">Gnome runtime</a> uses webkit2gtk-4.1.
There are also some subtle bugs like <a href="https://github.com/tauri-apps/wry/issues/717" target="_blank" rel="noopener noreferrer">this</a> that only happen in soup2 and they can be fixed by upgrading to soup3.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-other-breaking-changes-we-are-going-to-expect">What other breaking changes we are going to expect?<a href="#what-other-breaking-changes-we-are-going-to-expect" class="hash-link" aria-label="Direct link to What other breaking changes we are going to expect?" title="Direct link to What other breaking changes we are going to expect?">​</a></h2><p>The major one will be the MSRV. With Tauri v2.0.0-alpha.3 released, MSRV is bumped to 1.64. We will also update windows-rs in the future.
This Rust version should satisfy the latest version of windows-rs.
We do plan to update our MSRV with minor releases after 2.0. This could ease the friction to stick to any fixed Rust version while updating dependencies.</p>]]></content>
        <author>
            <name>Wu Yu Wei</name>
            <uri>https://github.com/wusyong</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Announcing the Tauri Mobile Alpha Release]]></title>
        <id>https://tauri.app/ko/blog/2022/12/09/tauri-mobile-alpha</id>
        <link href="https://tauri.app/ko/blog/2022/12/09/tauri-mobile-alpha"/>
        <updated>2022-12-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Tauri mobile is here! The first alpha release 2.0.0-alpha.0 has been published.]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="Tauri 1.2 Launch Hero Image" src="/ko/assets/images/header-ae623d29abbe5d2ca2509b55e215d83c.png" width="1280" height="640" class="img_ev3q"></p><p>Tauri mobile is here! The first alpha release 2.0.0-alpha.0 has been published.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="updating-dependencies">Updating dependencies<a href="#updating-dependencies" class="hash-link" aria-label="Direct link to Updating dependencies" title="Direct link to Updating dependencies">​</a></h2><p>Make sure to update both NPM and Cargo dependencies to the 2.0.0-alpha.0 release. You can update the NPM dependencies with:</p><div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">npm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Yarn Classic</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Yarn Berry</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">pnpm</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">npm</span><span class="token plain"> </span><span class="token function" style="color:#79b6f2">install</span><span class="token plain"> @tauri-apps/cli@next @tauri-apps/api@next</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">yarn</span><span class="token plain"> upgrade @tauri-apps/cli@next @tauri-apps/api@next</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">yarn</span><span class="token plain"> up @tauri-apps/cli@next @tauri-apps/api@next</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">pnpm</span><span class="token plain"> update @tauri-apps/cli@next @tauri-apps/api@next</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div><p>To update the Cargo dependencies, run the following in the <code>src-tauri</code> folder:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token plain">cargo </span><span class="token function" style="color:#79b6f2">add</span><span class="token plain"> tauri@2.0.0-alpha.0</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">cargo </span><span class="token function" style="color:#79b6f2">add</span><span class="token plain"> tauri-build@2.0.0-alpha.0 --build</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">cargo </span><span class="token function" style="color:#79b6f2">install</span><span class="token plain"> tauri-cli --version </span><span class="token string" style="color:#8dc891">"^2.0.0-alpha"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="preview">Preview<a href="#preview" class="hash-link" aria-label="Direct link to Preview" title="Direct link to Preview">​</a></h2><p>You can adapt your existing desktop application to run on mobile or start a fresh project.
Tauri runs on the connected device or starts an emulator if available.</p><div style="display:flex;flex-direction:column;align-items:center;gap:16px"><img loading="lazy" class="transparent img_ev3q" src="/ko/assets/images/ios-preview-bc80f5f90fb01c15300c92e26801b331.png" alt="iOS preview"><img loading="lazy" class="transparent img_ev3q" src="/ko/assets/images/android-preview-ba953223e8a2bbda8ec69aa6fb76f674.png" alt="Android preview"></div><br><h2 class="anchor anchorWithStickyNavbar_LWe7" id="getting-started">Getting started<a href="#getting-started" class="hash-link" aria-label="Direct link to Getting started" title="Direct link to Getting started">​</a></h2><p>Read the complete guide on the <a href="https://v2.tauri.app" target="_blank" rel="noopener noreferrer"><code>next</code> documentation website</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="known-issues">Known issues<a href="#known-issues" class="hash-link" aria-label="Direct link to Known issues" title="Direct link to Known issues">​</a></h2><ul><li>TLS support has been moved behind a Cargo feature until we figure out how to cross compile OpenSSL on Windows.</li><li>Currently running on a device is not supported when using Xcode 14.</li></ul>]]></content>
        <author>
            <name>Lucas Nogueira</name>
            <uri>https://github.com/lucasfernog</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Announcing Tauri 1.2.0]]></title>
        <id>https://tauri.app/ko/blog/2022/11/08/tauri-1-2</id>
        <link href="https://tauri.app/ko/blog/2022/11/08/tauri-1-2"/>
        <updated>2022-11-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The Tauri team is happy to announce the 1.2.0 release.]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="Tauri 1.2 Launch Hero Image" src="/ko/assets/images/header-23c69af4b74360ebce87f2f9ec1f594e.png" width="1280" height="640" class="img_ev3q"></p><p>The Tauri team is happy to announce the 1.2.0 release. It includes a security fix, so we encourage new and existing users to update to one of the fixed versions. Other changes were internally audited and no security issues were found.</p><p>Make sure to update both NPM and Cargo dependencies to the 1.2.0 release. You can update the NPM dependencies with:</p><div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">npm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Yarn Classic</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Yarn Berry</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">pnpm</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">npm</span><span class="token plain"> </span><span class="token function" style="color:#79b6f2">install</span><span class="token plain"> @tauri-apps/cli@</span><span class="token string" style="color:#8dc891">"&gt;1.0.0"</span><span class="token plain"> @tauri-apps/api@</span><span class="token string" style="color:#8dc891">"&gt;1.0.0"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">yarn</span><span class="token plain"> upgrade @tauri-apps/cli@^1.0.0 @tauri-apps/api@^1.0.0</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">yarn</span><span class="token plain"> up @tauri-apps/cli@^1.0.0 @tauri-apps/api@^1.0.0</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">pnpm</span><span class="token plain"> update @tauri-apps/cli@1 @tauri-apps/api@1</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div><p>To update the Cargo dependencies, run the following in the <code>src-tauri</code> folder:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token plain">cargo update</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-in-120">What's in 1.2.0<a href="#whats-in-120" class="hash-link" aria-label="Direct link to What's in 1.2.0" title="Direct link to What's in 1.2.0">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="security-patch">Security patch<a href="#security-patch" class="hash-link" aria-label="Direct link to Security patch" title="Direct link to Security patch">​</a></h3><p>This release includes a patch for a security vulnerability reported by <a href="https://github.com/MessyComposer" target="_blank" rel="noopener noreferrer">MessyComposer</a>.
Due to incorrect escaping of special characters in paths selected via the file dialog and drag and drop functionality, it was possible to partially bypass the <code>fs</code> scope definition.
It was not possible to traverse into arbitrary paths, as the issue was limited to neighboring files and sub folders of already allowed paths.
A successful bypass requires the user to select a pre-existing malicious file or directory during the file picker dialog and an adversary controlled logic to access these files. This means the issue by itself can not be abused and requires further intentional or unintentional privileges.
The patch is also available in 1.0.7 and 1.1.2. See <a href="https://github.com/tauri-apps/tauri/security/advisories/GHSA-q9wv-22m9-vhqh" target="_blank" rel="noopener noreferrer">the advisory</a> for more details.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rust-version-update">Rust version update<a href="#rust-version-update" class="hash-link" aria-label="Direct link to Rust version update" title="Direct link to Rust version update">​</a></h3><p>This release includes a minimum supported Rust version bump. Tauri now requires at least Rust 1.59 to compile. This was necessary due to several dependency updates that demanded this change.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="custom-protocol-headers-on-linux">Custom protocol headers on Linux<a href="#custom-protocol-headers-on-linux" class="hash-link" aria-label="Direct link to Custom protocol headers on Linux" title="Direct link to Custom protocol headers on Linux">​</a></h3><p>The Linux webview binding has been updated and it now has support to custom protocol headers when running on webkit2gtk version 2.36 or above. This fixes CORS issues on production when manually fetching a build asset.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="enhanced-titlebar-configuration-on-macos">Enhanced titlebar configuration on macOS<a href="#enhanced-titlebar-configuration-on-macos" class="hash-link" aria-label="Direct link to Enhanced titlebar configuration on macOS" title="Direct link to Enhanced titlebar configuration on macOS">​</a></h3><p>We finally merged one of the most awaited pull requests, introducing the titlebar style configuration. Your application can now define a transparent or overlay titlebar, hide the window title text and define the window to accept first mouse events so it can be focused immediately after receiving a click event to be dragged.</p><p><img loading="lazy" src="https://i.imgur.com/si99QwD.png" class="img_ev3q">
<em>Window with overlay titlebar style</em></p><p><img loading="lazy" src="https://i.imgur.com/uFZzVaM.png" class="img_ev3q">
<em>Window with transparent titlebar style (uses the window background color)</em></p><h1>Other changes</h1><p>There are a lot of smaller changes and bug fixes in this release. You can see a summary of the release notes in the following sections. The complete changelog can be found on the <a href="https://tauri.app/releases" target="_blank" rel="noopener noreferrer">releases page</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="new">New<a href="#new" class="hash-link" aria-label="Direct link to New" title="Direct link to New">​</a></h2><ul><li>Allow configuring the user agent when creating a window (<a href="https://github.com/tauri-apps/tauri/pull/5317" target="_blank" rel="noopener noreferrer">#5317</a>)</li><li>Reimplemented the option to create unfocused windows (<a href="https://github.com/tauri-apps/tauri/pull/5338" target="_blank" rel="noopener noreferrer">#5338</a>)</li><li>Added the acceptFirstMouse window option (macOS) (<a href="https://github.com/tauri-apps/tauri/pull/5374" target="_blank" rel="noopener noreferrer">#5374</a>)</li><li>Added the tabbingIdentifier window option (macOS) (<a href="https://github.com/tauri-apps/tauri/pull/5399" target="_blank" rel="noopener noreferrer">#5399</a>)</li><li>Enhanced the app-specific directory APIs (<a href="https://www.github.com/tauri-apps/tauri/pull/5272" target="_blank" rel="noopener noreferrer">#5272</a>)</li><li>Added show and hide methods on the app module (macOS) (<a href="https://www.github.com/tauri-apps/tauri/pull/3689" target="_blank" rel="noopener noreferrer">#3689</a>)</li><li>Expose set_title for MacOS tray (<a href="https://github.com/tauri-apps/tauri/pull/5182" target="_blank" rel="noopener noreferrer">#5182</a>)</li><li>hotreload support for frontend static files (<a href="https://github.com/tauri-apps/tauri/pull/5256" target="_blank" rel="noopener noreferrer">#5256</a>)</li><li>Add a configuration option for the bundle publisher (<a href="https://github.com/tauri-apps/tauri/pull/5283" target="_blank" rel="noopener noreferrer">#5283</a>)</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="enhancements">Enhancements<a href="#enhancements" class="hash-link" aria-label="Direct link to Enhancements" title="Direct link to Enhancements">​</a></h2><ul><li>Validate the package name (<a href="https://github.com/tauri-apps/tauri/pull/5262" target="_blank" rel="noopener noreferrer">#5262</a>)</li><li>Drop the WebContext on WebView drop (<a href="https://github.com/tauri-apps/tauri/pull/5240" target="_blank" rel="noopener noreferrer">#5240</a>)</li><li>Set the correct mimetype when streaming files through asset: protocol (<a href="https://github.com/tauri-apps/tauri/pull/5210" target="_blank" rel="noopener noreferrer">#5210</a>)</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="fixes">Fixes<a href="#fixes" class="hash-link" aria-label="Direct link to Fixes" title="Direct link to Fixes">​</a></h2><ul><li>Fix HTML template tags in custom protocol (<a href="https://github.com/tauri-apps/tauri/pull/5247" target="_blank" rel="noopener noreferrer">#5247</a>)</li><li>Fix scope check when reading resource files on macOS (<a href="https://github.com/tauri-apps/tauri/pull/5218" target="_blank" rel="noopener noreferrer">#5218</a>)</li><li>Fix incorrect return type on fs/exists (<a href="https://github.com/tauri-apps/tauri/pull/5252" target="_blank" rel="noopener noreferrer">#5252</a>)</li><li>Initialize Monitor instances with the correct classes for position and size fields instead of plain object (<a href="https://github.com/tauri-apps/tauri/pull/5314" target="_blank" rel="noopener noreferrer">#5313</a>)</li><li>Fix dialog.save return type (<a href="https://www.github.com/tauri-apps/tauri/pull/5373" target="_blank" rel="noopener noreferrer">#5373</a>)</li><li>Use correct code ja-JP for japanese instead of jp-JP (<a href="https://github.com/tauri-apps/tauri/pull/5346" target="_blank" rel="noopener noreferrer">#5346</a>)</li><li>Clear environment variables on the WiX light.exe and candle.exe commands to avoid "Windows Installer Service could not be accessed" error. Variables prefixed with TAURI are propagated. (<a href="https://github.com/tauri-apps/tauri/pull/4819" target="_blank" rel="noopener noreferrer">#4819</a>)</li><li>Fix regression in SystemTray::with_menu_on_left_click (<a href="https://github.com/tauri-apps/tauri/pull/5235" target="_blank" rel="noopener noreferrer">#5235</a>)</li><li>Fix regression introduce in <a href="mailto:tauri@1.1" target="_blank" rel="noopener noreferrer">tauri@1.1</a> which prevented removing tray icon when the app exits on Windows (<a href="https://www.github.com/tauri-apps/tauri/pull/5245" target="_blank" rel="noopener noreferrer">#5245</a>)</li><li>Fix access to the WebviewWindow.getByLabel function in a tauri://window-created event listener (<a href="https://github.com/tauri-apps/tauri/pull/5458" target="_blank" rel="noopener noreferrer">#5458</a>)</li><li>Fix a deadlock when modifying the menu in the on_menu_event closure. (<a href="https://www.github.com/tauri-apps/tauri/pull/5257" target="_blank" rel="noopener noreferrer">#5257</a>)</li><li>Fixes <code>__TAURI_PATTERN__</code> object freeze (<a href="https://github.com/tauri-apps/tauri/pull/5407" target="_blank" rel="noopener noreferrer">#5307</a>)</li></ul>]]></content>
        <author>
            <name>Lucas Nogueira</name>
            <uri>https://github.com/lucasfernog</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Announcing tauri-egui 0.1.0]]></title>
        <id>https://tauri.app/ko/blog/2022/09/19/tauri-egui-0-1</id>
        <link href="https://tauri.app/ko/blog/2022/09/19/tauri-egui-0-1"/>
        <updated>2022-09-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The Tauri team is happy to announce the tauri-egui 0.1.0 release.]]></summary>
        <content type="html"><![CDATA[<p>The Tauri team is pleased to announce the first release of <a href="https://github.com/tauri-apps/tauri-egui" target="_blank" rel="noopener noreferrer">tauri-egui</a>.</p><p><a href="https://github.com/emilk/egui" target="_blank" rel="noopener noreferrer"><code>egui</code></a> is a GUI library written in Rust. It leverages an OpenGL context via <a href="https://github.com/rust-windowing/glutin" target="_blank" rel="noopener noreferrer">glutin</a>.</p><p>tauri-egui is a Tauri plugin that connects with the Tauri runtime event loop to allow you to create glutin windows via our <a href="https://github.com/tauri-apps/glutin" target="_blank" rel="noopener noreferrer">glutin fork</a>
and use egui through our <a href="https://github.com/tauri-apps/egui" target="_blank" rel="noopener noreferrer">egui-tao</a> integration.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="setup">Setup<a href="#setup" class="hash-link" aria-label="Direct link to Setup" title="Direct link to Setup">​</a></h2><p>The first step is to add the crate to your dependencies in Cargo.toml:</p><div class="language-toml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-toml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token punctuation" style="color:#8dc891">[</span><span class="token table class-name" style="color:#FAC863">dependencies</span><span class="token punctuation" style="color:#8dc891">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token key property" style="color:#5a9bcf">tauri-egui</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">=</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">"0.1"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Now you need to enable the plugin:</p><div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-rust codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token keyword" style="color:#c5a5c5">fn</span><span class="token plain"> </span><span class="token function-definition function" style="color:#79b6f2">main</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token namespace" style="opacity:0.7">tauri</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Builder</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">default</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">setup</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token closure-params">app</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      app</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">wry_plugin</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token namespace" style="opacity:0.7">tauri_egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">EguiPluginBuilder</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">new</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">app</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">handle</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token class-name" style="color:#FAC863">Ok</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="create-an-egui-layout">Create an egui layout<a href="#create-an-egui-layout" class="hash-link" aria-label="Direct link to Create an egui layout" title="Direct link to Create an egui layout">​</a></h2><p>To use egui, all you need to do is implement the <code>tauri_egui::eframe::App</code> trait to render elements using the egui API. In the following example, we will create a login layout.</p><ul><li>Define the struct that will be used to render the layout:</li></ul><div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-rust codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token keyword" style="color:#c5a5c5">use</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">std</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token namespace" style="opacity:0.7">sync</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token namespace" style="opacity:0.7">mpsc</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain">channel</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Receiver</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Sender</span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token keyword" style="color:#c5a5c5">use</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">tauri_egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain">eframe</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> egui</span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token keyword" style="color:#c5a5c5">pub</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">struct</span><span class="token plain"> </span><span class="token type-definition class-name" style="color:#FAC863">LoginLayout</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  heading</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">String</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  users</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Vec</span><span class="token operator" style="color:#d7deea">&lt;</span><span class="token class-name" style="color:#FAC863">String</span><span class="token operator" style="color:#d7deea">&gt;</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  user</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">String</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  password</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">String</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  password_checker</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Box</span><span class="token operator" style="color:#d7deea">&lt;</span><span class="token keyword" style="color:#c5a5c5">dyn</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Fn</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token operator" style="color:#d7deea">&amp;</span><span class="token keyword" style="color:#c5a5c5">str</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">-&gt;</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">bool</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">+</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Send</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">+</span><span class="token plain"> </span><span class="token lifetime-annotation symbol" style="color:#5a9bcf">'static</span><span class="token operator" style="color:#d7deea">&gt;</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  tx</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Sender</span><span class="token operator" style="color:#d7deea">&lt;</span><span class="token class-name" style="color:#FAC863">String</span><span class="token operator" style="color:#d7deea">&gt;</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  texture</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Option</span><span class="token operator" style="color:#d7deea">&lt;</span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">TextureHandle</span><span class="token operator" style="color:#d7deea">&gt;</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token keyword" style="color:#c5a5c5">impl</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">LoginLayout</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token keyword" style="color:#c5a5c5">pub</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">fn</span><span class="token plain"> </span><span class="token function-definition function" style="color:#79b6f2">new</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    password_checker</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Box</span><span class="token operator" style="color:#d7deea">&lt;</span><span class="token keyword" style="color:#c5a5c5">dyn</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Fn</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token operator" style="color:#d7deea">&amp;</span><span class="token keyword" style="color:#c5a5c5">str</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">-&gt;</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">bool</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">+</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Send</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">+</span><span class="token plain"> </span><span class="token lifetime-annotation symbol" style="color:#5a9bcf">'static</span><span class="token operator" style="color:#d7deea">&gt;</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    users</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Vec</span><span class="token operator" style="color:#d7deea">&lt;</span><span class="token class-name" style="color:#FAC863">String</span><span class="token operator" style="color:#d7deea">&gt;</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">-&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">(</span><span class="token keyword" style="color:#c5a5c5">Self</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Receiver</span><span class="token operator" style="color:#d7deea">&lt;</span><span class="token class-name" style="color:#FAC863">String</span><span class="token operator" style="color:#d7deea">&gt;</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">tx</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> rx</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token function" style="color:#79b6f2">channel</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> initial_user </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> users</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">iter</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">next</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">cloned</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">unwrap_or_else</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token class-name" style="color:#FAC863">String</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token plain">new</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token keyword" style="color:#c5a5c5">Self</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        heading</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">"Sign in"</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">into</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        users</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        user</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> initial_user</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        password</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">""</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">into</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        password_checker</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        tx</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        texture</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">None</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      rx</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>Implement <code>tauri_egui::eframe::App</code> to use the egui APIs:</li></ul><div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-rust codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token keyword" style="color:#c5a5c5">impl</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">eframe</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">App</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">for</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">LoginLayout</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token comment" style="color:#999999">// Called each time the UI needs repainting</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token comment" style="color:#999999">// see https://docs.rs/eframe/latest/eframe/trait.App.html#tymethod.update for more details</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token keyword" style="color:#c5a5c5">fn</span><span class="token plain"> </span><span class="token function-definition function" style="color:#79b6f2">update</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token operator" style="color:#d7deea">&amp;</span><span class="token keyword" style="color:#c5a5c5">mut</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">self</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> ctx</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">&amp;</span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Context</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> frame</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">&amp;</span><span class="token keyword" style="color:#c5a5c5">mut</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">eframe</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Frame</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">Self</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      heading</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      users</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      user</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      password</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      password_checker</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      tx</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token punctuation" style="color:#8dc891">..</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">self</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> size </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Vec2</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"> x</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token number" style="color:#5a9bcf">320</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> y</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token number" style="color:#5a9bcf">240</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token comment" style="color:#999999">// set the window size</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    frame</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">set_window_size</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">size</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token comment" style="color:#999999">// adds a panel that covers the remainder of the screen</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">CentralPanel</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">default</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">show</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">ctx</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token closure-params">ui</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token comment" style="color:#999999">// our layout will be top-down and centered</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">with_layout</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Layout</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">top_down</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Align</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Center</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token closure-params">ui</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        </span><span class="token comment" style="color:#999999">// we will start adding elements here in the next sections</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>Define some helper functions we will use:</li></ul><div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-rust codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token keyword" style="color:#c5a5c5">fn</span><span class="token plain"> </span><span class="token function-definition function" style="color:#79b6f2">logo_and_heading</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">ui</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">&amp;</span><span class="token keyword" style="color:#c5a5c5">mut</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Ui</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> logo</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Image</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> heading</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">&amp;</span><span class="token keyword" style="color:#c5a5c5">str</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> original_item_spacing_y </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">style</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">spacing</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">item_spacing</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">y</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">style_mut</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">spacing</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">item_spacing</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">y </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token number" style="color:#5a9bcf">8</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">add</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">logo</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">style_mut</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">spacing</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">item_spacing</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">y </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token number" style="color:#5a9bcf">16</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">heading</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">RichText</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">new</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">heading</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">style_mut</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">spacing</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">item_spacing</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">y </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> original_item_spacing_y</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token keyword" style="color:#c5a5c5">fn</span><span class="token plain"> </span><span class="token function-definition function" style="color:#79b6f2">control_label</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">ui</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">&amp;</span><span class="token keyword" style="color:#c5a5c5">mut</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Ui</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> label</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">&amp;</span><span class="token keyword" style="color:#c5a5c5">str</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> original_item_spacing_y </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">style</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">spacing</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">item_spacing</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">y</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">style_mut</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">spacing</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">item_spacing</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">y </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token number" style="color:#5a9bcf">8</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">label</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">label</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">style_mut</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">spacing</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">item_spacing</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">y </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> original_item_spacing_y</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>Load an image, allocate it as a texture and add it to the UI (requires the <code>png</code> dependency):</li></ul><div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-rust codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> texture</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">&amp;</span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">TextureHandle</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">self</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">texture</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">get_or_insert_with</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">mut</span><span class="token plain"> reader </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">png</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Decoder</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">new</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token namespace" style="opacity:0.7">std</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token namespace" style="opacity:0.7">io</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Cursor</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">new</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token macro property" style="color:#5a9bcf">include_bytes!</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token string" style="color:#8dc891">"icons/32x32.png"</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">read_info</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">unwrap</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">mut</span><span class="token plain"> buffer </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Vec</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">new</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token keyword" style="color:#c5a5c5">while</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Ok</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token class-name" style="color:#FAC863">Some</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">row</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> reader</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">next_row</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    buffer</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">extend</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">row</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">data</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> icon_size </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">[</span><span class="token plain">reader</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">info</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">width </span><span class="token keyword" style="color:#c5a5c5">as</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">usize</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> reader</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">info</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">height </span><span class="token keyword" style="color:#c5a5c5">as</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">usize</span><span class="token punctuation" style="color:#8dc891">]</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token comment" style="color:#999999">// Load the texture only once.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  ctx</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">load_texture</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token string" style="color:#8dc891">"icon"</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">ColorImage</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">from_rgba_unmultiplied</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">icon_size</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">&amp;</span><span class="token plain">buffer</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">TextureFilter</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Linear</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token function" style="color:#79b6f2">logo_and_heading</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  ui</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Image</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">new</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">texture</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> texture</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">size_vec2</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  heading</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">as_str</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>Add the user selection ComboBox:</li></ul><div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-rust codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token plain">ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">with_layout</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Layout</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">top_down</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Align</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Min</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token closure-params">ui</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token function" style="color:#79b6f2">control_label</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">ui</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">"User"</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">ComboBox</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">from_id_source</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token string" style="color:#8dc891">"user"</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">width</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">available_width</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">-</span><span class="token plain"> </span><span class="token number" style="color:#5a9bcf">8</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">selected_text</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">RichText</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">new</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">user</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">clone</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">family</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">FontFamily</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Monospace</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">show_ui</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">ui</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">move</span><span class="token plain"> </span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token closure-params">ui</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token keyword" style="color:#c5a5c5">for</span><span class="token plain"> user_name </span><span class="token keyword" style="color:#c5a5c5">in</span><span class="token plain"> users </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">selectable_value</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">user</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> user_name</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">clone</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> user_name</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">clone</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">response</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>Add an entry for password input:</li></ul><div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-rust codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token plain">ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">style_mut</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">spacing</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">item_spacing</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">y </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token number" style="color:#5a9bcf">20</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> textfield </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> ui</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">with_layout</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Layout</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">top_down</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Align</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Min</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token closure-params">ui</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">style_mut</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">spacing</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">item_spacing</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">y </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token number" style="color:#5a9bcf">0</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token function" style="color:#79b6f2">control_label</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">ui</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">"Password"</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">horizontal_wrapped</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token closure-params">ui</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> field </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">add_sized</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        </span><span class="token punctuation" style="color:#8dc891">[</span><span class="token plain">ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">available_width</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token number" style="color:#5a9bcf">18</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token punctuation" style="color:#8dc891">]</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        </span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">TextEdit</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">singleline</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">password</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">password</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token boolean" style="color:#ff8b50">true</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      field</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">inner</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">inner</span><span class="token punctuation" style="color:#8dc891">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>Add a submit button:</li></ul><div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-rust codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">mut</span><span class="token plain"> button </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">add_enabled</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token operator" style="color:#d7deea">!</span><span class="token plain">password</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">is_empty</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Button</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">new</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token string" style="color:#8dc891">"Unlock"</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">button</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">rect</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">min</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">x </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token number" style="color:#5a9bcf">100</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">button</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">rect</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">max</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">x </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token number" style="color:#5a9bcf">100</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token punctuation" style="color:#8dc891">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>Handle submit:</li></ul><div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-rust codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token keyword" style="color:#c5a5c5">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">textfield</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">lost_focus</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">&amp;&amp;</span><span class="token plain"> ui</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">input</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">key_pressed</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token namespace" style="opacity:0.7">egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Key</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Enter</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">||</span><span class="token plain"> button</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">clicked</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token keyword" style="color:#c5a5c5">if</span><span class="token plain"> </span><span class="token function" style="color:#79b6f2">password_checker</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token operator" style="color:#d7deea">&amp;</span><span class="token plain">password</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> _ </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> tx</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">send</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">password</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">clone</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    password</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">clear</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    frame</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">close</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">else</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token operator" style="color:#d7deea">*</span><span class="token plain">heading </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">"Invalid password"</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">into</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    textfield</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">request_focus</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Now that we have created the layout, let's put it on a window and show it in the Tauri application:</p><div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-rust codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token keyword" style="color:#c5a5c5">use</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">tauri</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Manager</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token keyword" style="color:#c5a5c5">fn</span><span class="token plain"> </span><span class="token function-definition function" style="color:#79b6f2">main</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token namespace" style="opacity:0.7">tauri</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">Builder</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">default</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">setup</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token closure-params">app</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      app</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">wry_plugin</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token namespace" style="opacity:0.7">tauri_egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">EguiPluginBuilder</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">new</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">app</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">handle</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token comment" style="color:#999999">// the closure that is called when the submit button is clicked - validate the password</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> password_checker</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Box</span><span class="token operator" style="color:#d7deea">&lt;</span><span class="token keyword" style="color:#c5a5c5">dyn</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Fn</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token operator" style="color:#d7deea">&amp;</span><span class="token keyword" style="color:#c5a5c5">str</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">-&gt;</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">bool</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">+</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Send</span><span class="token operator" style="color:#d7deea">&gt;</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Box</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">new</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token closure-params">s</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token plain"> s </span><span class="token operator" style="color:#d7deea">==</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">"tauri-egui-released"</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">egui_app</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> rx</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">LoginLayout</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">new</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        password_checker</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        </span><span class="token macro property" style="color:#5a9bcf">vec!</span><span class="token punctuation" style="color:#8dc891">[</span><span class="token string" style="color:#8dc891">"John"</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">into</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">"Jane"</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">into</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">"Joe"</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">into</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">]</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> native_options </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">tauri_egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token namespace" style="opacity:0.7">eframe</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">NativeOptions</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        resizable</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token boolean" style="color:#ff8b50">false</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        </span><span class="token punctuation" style="color:#8dc891">..</span><span class="token class-name" style="color:#FAC863">Default</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">default</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      app</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">state</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token operator" style="color:#d7deea">&lt;</span><span class="token namespace" style="opacity:0.7">tauri_egui</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">EguiPluginHandle</span><span class="token operator" style="color:#d7deea">&gt;</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">create_window</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">          </span><span class="token string" style="color:#8dc891">"login"</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">to_string</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">          </span><span class="token class-name" style="color:#FAC863">Box</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">new</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token closure-params">_cc</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Box</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">new</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">egui_app</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">          </span><span class="token string" style="color:#8dc891">"Sign in"</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">into</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">          native_options</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        </span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">unwrap</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token comment" style="color:#999999">// wait for the window to be closed with the user data on another thread</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token comment" style="color:#999999">// you don't need to spawn a thread when using e.g. an async command</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token namespace" style="opacity:0.7">std</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token namespace" style="opacity:0.7">thread</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token function" style="color:#79b6f2">spawn</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token keyword" style="color:#c5a5c5">move</span><span class="token plain"> </span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        </span><span class="token keyword" style="color:#c5a5c5">if</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Ok</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">signal</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> rx</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">recv</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">          </span><span class="token macro property" style="color:#5a9bcf">dbg!</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">signal</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">      </span><span class="token class-name" style="color:#FAC863">Ok</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">run</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token namespace" style="opacity:0.7">tauri</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token macro property" style="color:#5a9bcf">generate_context!</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">expect</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token string" style="color:#8dc891">"error while running tauri application"</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Here's how it will look on <strong>all</strong> platforms:</p><p><img loading="lazy" alt="tauri_egui layout" src="/ko/assets/images/example-993a90d996d8272c78b2074b349d83c0.png" width="864" height="760" class="img_ev3q"></p><p>To customize the look and feel of your egui application, check out the <a href="https://docs.rs/egui/latest/egui/struct.Context.html#method.set_style" target="_blank" rel="noopener noreferrer">Context#set_style API</a>.</p>]]></content>
        <author>
            <name>Lucas Nogueira</name>
            <uri>https://github.com/lucasfernog</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Announcing Tauri 1.1.0]]></title>
        <id>https://tauri.app/ko/blog/2022/09/15/tauri-1-1</id>
        <link href="https://tauri.app/ko/blog/2022/09/15/tauri-1-1"/>
        <updated>2022-09-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[After 113 pull requests and nearly two months of work, the Tauri team is pleased to announce the 1.1.0 release.]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="Tauri 1.1 Launch Hero Image" src="/ko/assets/images/header-1a053e7eda9e578b957d2fa0548d37e0.png" width="1280" height="640" class="img_ev3q"></p><p>After 113 pull requests and nearly two months of work, the Tauri team is pleased to announce the <a href="https://github.com/tauri-apps/tauri/releases/tag/tauri-v1.1.0" target="_blank" rel="noopener noreferrer">1.1.0 release</a>. The changes were internally audited and no security issues were found.</p><p>You can update the NPM dependencies with:</p><div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">npm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Yarn Classic</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Yarn Berry</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">pnpm</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">npm</span><span class="token plain"> </span><span class="token function" style="color:#79b6f2">install</span><span class="token plain"> @tauri-apps/cli@</span><span class="token string" style="color:#8dc891">"&gt;1.0.0"</span><span class="token plain"> @tauri-apps/api@</span><span class="token string" style="color:#8dc891">"&gt;1.0.0"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">yarn</span><span class="token plain"> upgrade @tauri-apps/cli@^1.0.0 @tauri-apps/api@^1.0.0</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">yarn</span><span class="token plain"> up @tauri-apps/cli@^1.0.0 @tauri-apps/api@^1.0.0</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token function" style="color:#79b6f2">pnpm</span><span class="token plain"> update @tauri-apps/cli@1 @tauri-apps/api@1</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div><p>To update the Cargo dependencies, run the following in the <code>src-tauri</code> folder:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token plain">cargo update</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new-in-110">What's New in 1.1.0<a href="#whats-new-in-110" class="hash-link" aria-label="Direct link to What's New in 1.1.0" title="Direct link to What's New in 1.1.0">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="security-patch">Security patch<a href="#security-patch" class="hash-link" aria-label="Direct link to Security patch" title="Direct link to Security patch">​</a></h3><p>This release includes a patch for a security vulnerability reported by <a href="https://github.com/martin-ocasek" target="_blank" rel="noopener noreferrer">@martin-ocasek</a>. The <code>readDir</code> function was able to return entries outside the configured scope when a symlink is found. The patch is also available in Tauri <a href="https://github.com/tauri-apps/tauri/releases/tag/tauri-v1.0.6" target="_blank" rel="noopener noreferrer">1.0.6</a>. See <a href="https://github.com/tauri-apps/tauri/issues/4882" target="_blank" rel="noopener noreferrer">the issue on GitHub</a> for more details.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="icon-generation">Icon Generation<a href="#icon-generation" class="hash-link" aria-label="Direct link to Icon Generation" title="Direct link to Icon Generation">​</a></h3><p>We have been recommending to use the <a href="https://github.com/tauri-apps/tauricon" target="_blank" rel="noopener noreferrer">tauricon</a> project to generate icons for your Tauri application using a single source PNG. Several issues have been reported, and we decided to "Rewrite It In Rust" to enhance its stability. This allowed us to move this functionality to the main Tauri CLI, so now you can use the <a href="https://tauri.app/v1/api/cli#icon" target="_blank" rel="noopener noreferrer"><code>tauri icon</code></a> command.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="cargo-binstall-support-for-tauri-cli"><code>cargo-binstall</code> Support for Tauri CLI<a href="#cargo-binstall-support-for-tauri-cli" class="hash-link" aria-label="Direct link to cargo-binstall-support-for-tauri-cli" title="Direct link to cargo-binstall-support-for-tauri-cli">​</a></h3><p>The Tauri CLI can now be installed using <a href="https://github.com/cargo-bins/cargo-binstall" target="_blank" rel="noopener noreferrer">cargo-binstall</a>, a mechanism to download and install pre-built Rust binaries. The binaries are available for the main targets and can be installed with:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token plain">$ cargo install cargo-binstall</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">$ cargo binstall tauri-cli</span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">$ cargo tauri dev # run any Tauri command!</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="create-system-trays-at-runtime">Create System Trays at Runtime<a href="#create-system-trays-at-runtime" class="hash-link" aria-label="Direct link to Create System Trays at Runtime" title="Direct link to Create System Trays at Runtime">​</a></h3><p>The system tray APIs (previously only available in <code>tauri::Builder::system_tray</code>) can now be used at runtime with <a href="https://docs.rs/tauri/1.1.0/tauri/struct.SystemTray.html" target="_blank" rel="noopener noreferrer"><code>tauri::SystemTray</code></a> giving you control over its lifetime and even create multiple trays.</p><p>Here's a quick example on how to use it:</p><div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-rust codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token keyword" style="color:#c5a5c5">use</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">tauri</span><span class="token namespace punctuation" style="opacity:0.7;color:#8dc891">::</span><span class="token punctuation" style="color:#8dc891">{</span><span class="token class-name" style="color:#FAC863">Builder</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">CustomMenuItem</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">SystemTray</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">SystemTrayEvent</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">SystemTrayMenu</span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token class-name" style="color:#FAC863">Builder</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">default</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">setup</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token closure-params">app</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> handle </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> app</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">handle</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">        </span><span class="token class-name" style="color:#FAC863">SystemTray</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">new</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">            </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">with_id</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token string" style="color:#8dc891">"main"</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">            </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">with_menu</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">                </span><span class="token class-name" style="color:#FAC863">SystemTrayMenu</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">new</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">add_item</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token class-name" style="color:#FAC863">CustomMenuItem</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token function" style="color:#79b6f2">new</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token string" style="color:#8dc891">"quit"</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">"Quit"</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">            </span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">            </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">on_event</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token keyword" style="color:#c5a5c5">move</span><span class="token plain"> </span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token closure-params">event</span><span class="token closure-params closure-punctuation punctuation" style="color:#8dc891">|</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">                </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> tray_handle </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> handle</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">tray_handle_by_id</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token string" style="color:#8dc891">"main"</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">unwrap</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">                </span><span class="token keyword" style="color:#c5a5c5">if</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">SystemTrayEvent</span><span class="token punctuation" style="color:#8dc891">::</span><span class="token class-name" style="color:#FAC863">MenuItemClick</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"> id</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">..</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> event </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">                    </span><span class="token keyword" style="color:#c5a5c5">if</span><span class="token plain"> id </span><span class="token operator" style="color:#d7deea">==</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">"quit"</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">                        tray_handle</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">destroy</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">unwrap</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">                    </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">                </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">            </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">            </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">build</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token operator" style="color:#d7deea">&amp;</span><span class="token plain">handle</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">            </span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">expect</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token string" style="color:#8dc891">"unable to create tray"</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="toml-configuration-support">TOML Configuration Support<a href="#toml-configuration-support" class="hash-link" aria-label="Direct link to TOML Configuration Support" title="Direct link to TOML Configuration Support">​</a></h3><p>In the 1.0 releases Tauri supports the <code>JSON</code> configuration format by default, and <code>JSON5</code> when the <code>config-json5</code> Cargo feature is enabled, meaning the following configurations are valid:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockTitle_Ktv7">tauri.conf.json</div><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token property" style="color:#5a9bcf">"build"</span><span class="token operator" style="color:#d7deea">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token property" style="color:#5a9bcf">"devPath"</span><span class="token operator" style="color:#d7deea">:</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">"http://localhost:8000"</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token property" style="color:#5a9bcf">"distDir"</span><span class="token operator" style="color:#d7deea">:</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">"../dist"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="language-json5 codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockTitle_Ktv7">tauri.conf.json5</div><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json5 codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token property unquoted" style="color:#5a9bcf">build</span><span class="token operator" style="color:#d7deea">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token comment" style="color:#999999">// devServer URL (comments are allowed!)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token property unquoted" style="color:#5a9bcf">devPath</span><span class="token operator" style="color:#d7deea">:</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">'http://localhost:8000'</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">    </span><span class="token property unquoted" style="color:#5a9bcf">distDir</span><span class="token operator" style="color:#d7deea">:</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">'../dist'</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">  </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The 1.1.0 release includes TOML support behind the <code>config-toml</code> Cargo feature. Now you can define your Tauri configuration in a <code>Tauri.toml</code> file:</p><div class="language-toml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockTitle_Ktv7">Tauri.toml</div><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-toml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token punctuation" style="color:#8dc891">[</span><span class="token table class-name" style="color:#FAC863">build</span><span class="token punctuation" style="color:#8dc891">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token key property" style="color:#5a9bcf">dev-path</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">=</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">"http://localhost:8000"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token key property" style="color:#5a9bcf">dist-dir</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">=</span><span class="token plain"> </span><span class="token string" style="color:#8dc891">"../dist"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="클립보드에 코드 복사하기" title="복사" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dependency-updates">Dependency Updates<a href="#dependency-updates" class="hash-link" aria-label="Direct link to Dependency Updates" title="Direct link to Dependency Updates">​</a></h3><p>This release includes some dependency updates that must be handled in your app if you implement platform-specific functionalities using these crates. The most important updates are:</p><ul><li><code>windows</code> updated to 0.39.0</li><li><code>webview2-com</code> updated to 0.19.1</li><li><code>raw-window-handle</code> updated to 0.5.0</li></ul><p>Make sure you also update plugins such as <code>window-vibrancy</code> and <code>window-shadows</code> to latest.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="contributors-to-110">Contributors to 1.1.0<a href="#contributors-to-110" class="hash-link" aria-label="Direct link to Contributors to 1.1.0" title="Direct link to Contributors to 1.1.0">​</a></h2><p>The Tauri team thanks the following contributors for the 1.1.0 release:</p><ul><li><a href="https://github.com/Berrysoft" target="_blank" rel="noopener noreferrer">Berrysoft</a></li><li><a href="https://github.com/keraf" target="_blank" rel="noopener noreferrer">keraf</a></li><li><a href="https://github.com/jsoref" target="_blank" rel="noopener noreferrer">jsoref</a></li><li><a href="https://github.com/A-kirami" target="_blank" rel="noopener noreferrer">A-kirami</a></li><li><a href="https://github.com/olivierlemasle" target="_blank" rel="noopener noreferrer">olivierlemasle</a></li><li><a href="https://github.com/mateo-gallardo" target="_blank" rel="noopener noreferrer">mateo-gallardo</a></li><li><a href="https://github.com/rockerBOO" target="_blank" rel="noopener noreferrer">rockerBOO</a></li><li><a href="https://github.com/Flecart" target="_blank" rel="noopener noreferrer">Flecart</a></li><li><a href="https://github.com/brian14708" target="_blank" rel="noopener noreferrer">brian14708</a></li><li><a href="https://github.com/koriwi" target="_blank" rel="noopener noreferrer">koriwi</a></li><li><a href="https://github.com/paul-soporan" target="_blank" rel="noopener noreferrer">paul-soporan</a></li><li><a href="https://github.com/shniubobo" target="_blank" rel="noopener noreferrer">shniubobo</a></li><li><a href="https://github.com/horochx" target="_blank" rel="noopener noreferrer">horochx</a></li><li><a href="https://github.com/RubenKelevra" target="_blank" rel="noopener noreferrer">RubenKelevra</a></li><li><a href="https://github.com/LIMPIX31" target="_blank" rel="noopener noreferrer">LIMPIX31</a></li><li><a href="https://github.com/AxlLind" target="_blank" rel="noopener noreferrer">AxlLind</a></li></ul><h1>Other Changes</h1><p>There are a lot of smaller changes and bug fixes in this release. You can see a summary of the release notes in the following sections. The complete changelog can be found on the <a href="https://tauri.app/releases" target="_blank" rel="noopener noreferrer">releases page</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="new">New<a href="#new" class="hash-link" aria-label="Direct link to New" title="Direct link to New">​</a></h2><ul><li><code>tauri icon</code> command</li><li><code>exists</code> API in the <code>fs</code> module</li><li>Option to disable the dev watcher with <code>tauri dev --no-watch</code></li><li>Automatically use any <code>.taurignore</code> file as ignore rules for dev watcher and app path finder</li><li>Add support to cargo-binstall for the Tauri CLI</li><li>TOML configuration format (Tauri.toml)</li><li>Theme APIs on Linux</li><li>Create system trays at runtime</li><li><code>beforeBundleCommand</code> configuration</li><li><code>beforeDevCommand</code> and <code>beforeBuildCommand</code> now has an option to configure the current working directory</li><li><code>api::Command::encoding</code> method to set the stdout/stderr encoding</li><li>Added <code>native-tls-vendored</code> and <code>reqwest-native-tls-vendored</code> Cargo features to compile and statically link to a vendored copy of OpenSSL on Linux</li><li>Implement <code>raw_window_handle::HasRawDisplayHandle</code> for <code>App</code> and <code>AppHandle</code></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="fixes">Fixes<a href="#fixes" class="hash-link" aria-label="Direct link to Fixes" title="Direct link to Fixes">​</a></h2><ul><li>CLI parser ignoring inner subcommands.</li><li>Updater breaking the app icon in Finder.</li><li>Fix root of codegen output when using the <code>CodegenContext</code> API.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="security">Security<a href="#security" class="hash-link" aria-label="Direct link to Security" title="Direct link to Security">​</a></h2><ul><li>Fix <code>fs.readDir</code> recursive option reading symlinked directories that are not allowed by the scope</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="improvements">Improvements<a href="#improvements" class="hash-link" aria-label="Direct link to Improvements" title="Direct link to Improvements">​</a></h2><ul><li>Validate updater signature against configured public key</li><li>Return an error if a sidecar is configured with the same file name as the application.</li><li>Keep the created windows in a RefCell instead of a Mutex, avoiding deadlocks</li><li>Prompt for <code>beforeDevCommand</code> and <code>beforeBuildCommand</code> in <code>tauri init</code>.</li><li>Use <code>cargo metadata</code> to detect the workspace root and target directory.</li><li>Allow configuring the <code>before_dev_command</code> to force the CLI to wait for the command to finish before proceeding.</li><li>Avoid re-downloading AppImage build tools on every build.</li><li>Retain command line arguments in <code>api::process::restart</code></li><li>Enhance the dialog style on Windows via the manifest dependency <code>Microsoft.Windows.Common-Controls v6.0.0.0</code>.</li><li>Rerun codegen if assets or icons change</li><li>Only rewrite temporary icon files when the content change, avoid needless rebuilds.</li></ul>]]></content>
        <author>
            <name>Lucas Nogueira</name>
            <uri>https://github.com/lucasfernog</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tauri Programme Turns 1 and Board Elections]]></title>
        <id>https://tauri.app/ko/blog/2022/07/12/tauri-programme-turns-1-and-board-elections</id>
        <link href="https://tauri.app/ko/blog/2022/07/12/tauri-programme-turns-1-and-board-elections"/>
        <updated>2022-07-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The one year anniversary for Tauri becoming a programme within The Commons Conservancy is upcoming on the 16th of July!]]></summary>
        <content type="html"><![CDATA[<p>The one year anniversary for Tauri becoming a programme within <a href="https://commonsconservancy.org/" target="_blank" rel="noopener noreferrer">The Commons Conservancy</a> is upcoming on the 16th of July! On that anniversary, two of our Directors on the Tauri Board will be at the end of their first half-term. The Board will hold an election on the 15th of July to decide the Directors for the next two year term.</p><p>The Tauri Board has a minimum of three, and a maximum of seven people. Right at the start we've had seven people come on board. Meaning we can't add any more people during this election. So if you're applying it means you'll compete with the two project founders for a seat on the Tauri Board.</p><p>Honestly those are big shoes to fill! So to avoid unnecessary disappointment, in this election we decided to add a requirement: <em>You must be currently part of a working group to apply as a candidate.</em></p><p>If you're still with me, then here are some additional details:</p><ul><li>Please notify the board <em><strong>before July 15th 00:00 UTC</strong></em> if you would like to apply as a candidate.</li><li>You can mention <code>@board</code> on Discord, or DM <code>Beanow#5887</code> if you want your application to be kept private within the Board.</li><li>Optionally, you can include a short motivation for your application.</li><li>If there are multiple candidates, the Tauri Board will vote for their preferred candidates.</li><li>The Directors running for office again will have <em><strong>half a vote</strong></em> deducted from votes in their favor (one for each consecutive term served).</li><li><em><strong>After voting on July 15th</strong></em> we'll share the results.</li></ul><p>All this is governed by our <a href="https://dracc.commonsconservancy.org/0035/" target="_blank" rel="noopener noreferrer">statutes and core regulations</a> if you're interested in seeing the fine print.</p><p>We'll be back soon with an update.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="update-election-results">Update: Election results<a href="#update-election-results" class="hash-link" aria-label="Direct link to Update: Election results" title="Direct link to Update: Election results">​</a></h3><p>The results are in, so here is the reveal!</p><p>The existing Directors applied for another term and there were no additional applicants. Meaning no vote was necessary to select between candidates. For the Chair position Daniel ran as the only candidate.</p><p>The Tauri Board then voted unanimously in favor of the following:</p><ol><li>The Board appoints Daniel and Lucas for an additional full term (2 years) as Board Directors, starting the 16th of July.</li><li>The Board appoints Daniel as Chairperson for the next term (1 year), starting the 16th of July.</li></ol><p>Another election will be held around the same time July next year, now with extra time to apply and for the Board to vote. We'll announce the specifics in due time.</p>]]></content>
        <author>
            <name>Robin van Boven</name>
            <uri>https://github.com/Beanow</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tauri 1.0 Release]]></title>
        <id>https://tauri.app/ko/blog/2022/06/19/tauri-1-0</id>
        <link href="https://tauri.app/ko/blog/2022/06/19/tauri-1-0"/>
        <updated>2022-06-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[After 9 months of betas and 4 months of release candidates, Tauri version 1.0 is now available!]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="Tauri 1.0 Launch Hero Image" src="/ko/assets/images/header-35662a534ae509ca079ac165b1ed28fc.png" width="1500" height="500" class="img_ev3q"></p><p>After 9 months of betas and 4 months of release candidates, <a href="https://github.com/tauri-apps/tauri" target="_blank" rel="noopener noreferrer">Tauri version 1.0 is now available!</a></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-tauri">What is Tauri?<a href="#what-is-tauri" class="hash-link" aria-label="Direct link to What is Tauri?" title="Direct link to What is Tauri?">​</a></h2><p>Tauri is an app construction toolkit that lets you build software for all major desktop operating systems using web technologies. The core libraries have been written for you in Rust and the user interface can be written using virtually any frontend framework. It includes an optional and tree-shakeable JavaScript API for comfortable low-level system access, a desktop binary bundler with code signing and artifact verification, a secure updater to keep your users on the latest version, an extensive plugin system, and support for OS-level integrations such as notifications and app trays.</p><p>Tauri is as simple to use as it is easy to extend. For those new to the Rust programming language, Tauri provides a comfortable learning environment that will grow with you. Once you have installed Rust, creating your first app is a mere running of <a href="https://github.com/tauri-apps/create-tauri-app" target="_blank" rel="noopener noreferrer"><code>create-tauri-app</code></a>. But you don't have to use Node.js at all, if you would prefer to remain in the safety and comfort of 100% Rust.</p><p>See our <a href="/ko/v1/guides/getting-started/setup/">Quick Start guides</a> to start building with Tauri.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="tauri-philosophy">Tauri Philosophy<a href="#tauri-philosophy" class="hash-link" aria-label="Direct link to Tauri Philosophy" title="Direct link to Tauri Philosophy">​</a></h2><p>We built Tauri for the security-focused, privacy-respecting, and environmentally-conscious software engineering community.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="security">Security<a href="#security" class="hash-link" aria-label="Direct link to Security" title="Direct link to Security">​</a></h3><p>The entire project has been <a href="https://github.com/tauri-apps/tauri/blob/dev/audits/Radically_Open_Security-v1-report.pdf" target="_blank" rel="noopener noreferrer">horizontally and vertically audited by an independent third party</a>, and we maintain a very strict approach to updating the core. We want you to be confident that major versions are as safe to use as they are ergonomic.</p><figure><p><img loading="lazy" alt="Printed sweatshirt" src="/ko/assets/images/hoodie-604644bdf3d182c82ea90b58b414c18f.jpg" width="1000" height="730" class="img_ev3q"></p><figcaption><i>Hoodie by jprovost</i></figcaption></figure><h3 class="anchor anchorWithStickyNavbar_LWe7" id="privacy">Privacy<a href="#privacy" class="hash-link" aria-label="Direct link to Privacy" title="Direct link to Privacy">​</a></h3><p>Tauri allows you to build "<a href="https://twitter.com/schickling/status/1537134435702714368?cxt=HHwWgMClwYHo_9QqAAAA" target="_blank" rel="noopener noreferrer">local first</a>" applications without a webserver, so your users don't have to share their data with big tech. Using local databases and rust based cryptography have never been easier.</p><figure><p><img loading="lazy" alt="Johannes Schickling at Worker Conf 2022 (photo by @TejasKumar)" src="/ko/assets/images/worker_conf_2022-dc76f4fe18cc340ca85e1070d51329ce.png" width="1003" height="629" class="img_ev3q"></p><figcaption><i>Johannes Schickling at Worker Conf 2022 (photo by<!-- --> <a href="https://twitter.com/TejasKumar_" target="_blank" rel="noopener noreferrer">@TejasKumar via Twitter</a>)</i></figcaption></figure><h3 class="anchor anchorWithStickyNavbar_LWe7" id="environment">Environment<a href="#environment" class="hash-link" aria-label="Direct link to Environment" title="Direct link to Environment">​</a></h3><p>The apps you make are lean and performant, which reduces electricity, storage space, and general natural resource consumption. Every byte saved is a leaf on a tree that gets to grow.</p><p>To illustrate this, we compiled some numbers on the ecological impact of your app's size. As you can see, even small increases in size have a hefty impact on the environment!</p><figure><table><thead><tr><th>App Size</th><th>Unit Time (100Mb/s)</th><th>Downloads</th><th>Transit</th><th>Total Time (100Mb/s)</th><th>Electricity Use (kWh)</th><th>CO2 Produced (Ton)</th><th>Trees Needed 🌳</th></tr></thead><tbody><tr><td>3 MB</td><td>240 milliseconds</td><td>1,000</td><td>3 GB</td><td>24 minutes</td><td>0.3</td><td>0.18</td><td>1</td></tr><tr><td>3 MB</td><td>240 milliseconds</td><td>100,000</td><td>300 GB</td><td>1.7 days</td><td>30</td><td>18</td><td>108</td></tr><tr><td>3 MB</td><td>240 milliseconds</td><td>10,000,000</td><td>30 TB</td><td>167 days</td><td>3,000</td><td>1,800</td><td>10,800</td></tr><tr><td>200 MB</td><td>16 seconds</td><td>1,000</td><td>200 GB</td><td>4.45 hours</td><td>20</td><td>12</td><td>72</td></tr><tr><td>200 MB</td><td>16 seconds</td><td>100,000</td><td>20 TB</td><td>18.5 days</td><td>2,000</td><td>1,200</td><td>7,200</td></tr><tr><td>200 MB</td><td>16 seconds</td><td>10,000,000</td><td>2 PB</td><td>5 years</td><td>200,000</td><td>120,000</td><td>720,000</td></tr><tr><td>600 MB</td><td>48 seconds</td><td>1,000</td><td>0.6 TB</td><td>13 hours</td><td>60</td><td>36</td><td>216</td></tr><tr><td>600 MB</td><td>48 seconds</td><td>100,000</td><td>60 TB</td><td>54.2 days</td><td>6,000</td><td>3,600</td><td>21,600</td></tr><tr><td>600 MB</td><td>48 seconds</td><td>10,000,000</td><td>6 PB</td><td>14.8 years</td><td>600,000</td><td>360,000</td><td>2,160,000</td></tr></tbody></table><figcaption><p><em>The transmission of 1 GB of information takes an estimated 0.1kWh, which is equal to 0.06 kilograms of CO2. (<a href="https://www.emergeinteractive.com/insights/detail/does-irresponsible-web-development-contribute-to-global-warming/" target="_blank" rel="noopener noreferrer">https://www.emergeinteractive.com/insights/detail/does-irresponsible-web-development-contribute-to-global-warming/</a>)</em></p><p><em>Although the carbon absorption capacity can vary, it is generally considered that a tree can store about 167 kg of CO2 per year, or 1 ton of CO2 per year for 6 mature trees (<a href="https://climate.selectra.com/en/news/co2-tree" target="_blank" rel="noopener noreferrer">https://climate.selectra.com/en/news/co2-tree</a>)</em></p></figcaption></figure><h3 class="anchor anchorWithStickyNavbar_LWe7" id="community">Community<a href="#community" class="hash-link" aria-label="Direct link to Community" title="Direct link to Community">​</a></h3><p>We know that open source software is a means of fostering equality and collaboration, which is why we placed the <a href="https://dracc.commonsconservancy.org/0035/" target="_blank" rel="noopener noreferrer">ownership of the code at the Commons Conservancy</a>. You can rest assured knowing that the code base will never be rug-pulled or locked behind open-core pay-to-play feature gates. We believe in open collaboration and safe spaces for all. We have an open working group, accessible to any competent contributors. And we love you all. ❤️</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="accolades">Accolades<a href="#accolades" class="hash-link" aria-label="Direct link to Accolades" title="Direct link to Accolades">​</a></h2><p>Here are some of the things people are saying about Tauri:</p><div class="container"><div class="row"><div class="col col--2"><p><img loading="lazy" alt="Spacedrive Logo" src="/ko/assets/images/spacedrive_logo_light-5204811e262314fab64d78717d47efd8.png#gh-light-mode-only" width="2574" height="644" class="img_ev3q">
<img loading="lazy" alt="Spacedrive Logo" src="/ko/assets/images/spacedrive_logo_dark-119b52901cb7e827f567aa0e9a85e417.png#gh-dark-mode-only" width="2574" height="644" class="img_ev3q"></p></div><div class="col col--10"><p><em>"Spacedrive had to feel native across all platforms, all while being lightweight, instant to launch and extremely fast to use. This just wasn't possible with a web-based UI — until now, thanks to Tauri."</em><br>
<strong>- Jamie Pine</strong>, <a href="https://www.spacedrive.com" target="_blank" rel="noopener noreferrer">Spacedrive</a> Founder</p></div></div><br><div class="row"><div class="col col--2"><p><img loading="lazy" alt="Prism Logo" src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDUwIiBoZWlnaHQ9IjE0NCIgdmlld0JveD0iMCAwIDQ1MCAxNDQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMS4wNTczMSA5MS4yNTM4Qy0wLjM3Mjc0MSA5My41ODY1IC0wLjM1MDYwOSA5Ni41Mjk3IDEuMTE0MzYgOTguODQwN0wyNy42Mjk5IDE0MC42NjhDMjkuMzUwOCAxNDMuMzgzIDMyLjY2NzkgMTQ0LjYyMSAzNS43NDY1IDE0My42OTdMMTEyLjI2NCAxMjAuNzQyQzExNi40NCAxMTkuNDg5IDExOC41NDEgMTE0LjgzMSAxMTYuNzE2IDExMC44NzJMNjcuNTI2NSA0LjE2ODg5QzY1LjEyNzYgLTEuMDM0NzUgNTcuODk2MSAtMS40NjE4OSA1NC45MDEzIDMuNDIzMTdMMS4wNTczMSA5MS4yNTM4Wk02Ni4yMTk1IDI4LjU2MjJDNjUuMTc0MSAyNi4xNDMxIDYxLjYzMzggMjYuNTE1NyA2MS4xMTQ5IDI5LjA5OTVMNDIuMTc3MyAxMjMuMzkzQzQxLjc3OCAxMjUuMzgxIDQzLjYzOTUgMTI3LjA3OSA0NS41ODI3IDEyNi40OTlMOTguNDUwMiAxMTAuNzE4Qzk5Ljk5MzMgMTEwLjI1NyAxMDAuNzg4IDEwOC41NTMgMTAwLjE0OSAxMDcuMDc0TDY2LjIxOTUgMjguNTYyMloiIGZpbGw9IiM0QTU1NjgiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNjMuMjE5IDcxLjcyNTFIMTY3Ljg4QzE3Mi4yMzUgNzEuNzI1MSAxNzUuNDkyIDcwLjg2NTMgMTc3LjY1NiA2OS4xNDRDMTc5LjgxOSA2Ny40MjI4IDE4MC45IDY0LjkxNzUgMTgwLjkgNjEuNjI4M0MxODAuOSA1OC4zMSAxNzkuOTkzIDU1Ljg1OCAxNzguMTgxIDU0LjI3MzhDMTc2LjM2OCA1Mi42ODk3IDE3My41MjkgNTEuODk3NiAxNjkuNjYxIDUxLjg5NzZIMTYzLjIxOVY3MS43MjUxWk0xOTUuMTk5IDYxLjEyNjRDMTk1LjE5OSA2OC4zMTQ3IDE5Mi45NTQgNzMuODEwNyAxODguNDU5IDc3LjYxNzhDMTgzLjk2OCA4MS40MjY1IDE3Ny41OCA4My4zMjg0IDE2OS4yOTYgODMuMzI4NEgxNjMuMjJWMTA3LjA4NkgxNDkuMDU4VjQwLjI5MzlIMTcwLjM5MkMxNzguNDk1IDQwLjI5MzkgMTg0LjY1NCA0Mi4wMzc4IDE4OC44NzIgNDUuNTIzOEMxOTMuMDkxIDQ5LjAxMTUgMTk1LjE5OSA1NC4yMTI0IDE5NS4xOTkgNjEuMTI2NFY2MS4xMjY0WiIgZmlsbD0iIzRBNTU2OCIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIzMi43NCA1NS4wNDk4QzIzNC42MjkgNTUuMDQ5OCAyMzYuMTk3IDU1LjE4NjkgMjM3LjQ0NiA1NS40NjEyTDIzNi4zOTYgNjguNTI2MkMyMzUuMjY4IDY4LjIyMjkgMjMzLjg5OSA2OC4wNjk3IDIzMi4yODQgNjguMDY5N0MyMjcuODM2IDY4LjA2OTcgMjI0LjM3MyA2OS4yMTE4IDIyMS44ODkgNzEuNDk2QzIxOS40MDcgNzMuNzgwMyAyMTguMTY3IDc2Ljk3OTIgMjE4LjE2NyA4MS4wOTEyVjEwNy4wODZIMjA0LjIzMlY1Ni4wMDk2SDIxNC43ODZMMjE2Ljg0MyA2NC41OTgxSDIxNy41MjdDMjE5LjExMSA2MS43MzY0IDIyMS4yNSA1OS40Mjc5IDIyMy45NDcgNTcuNjc2QzIyNi42NDEgNTUuOTI1OCAyMjkuNTcyIDU1LjA0OTggMjMyLjc0IDU1LjA0OTgiIGZpbGw9IiM0QTU1NjgiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yNDQuODM4IDEwNy4wODZIMjU4Ljc3M1Y1Ni4wMDk5SDI0NC44MzhWMTA3LjA4NlpNMjQ0LjI0NiA0Mi44MDZDMjQ0LjI0NiAzOC4yNjgxIDI0Ni43NzQgMzYgMjUxLjgzIDM2QzI1Ni44ODQgMzYgMjU5LjQxMyAzOC4yNjgxIDI1OS40MTMgNDIuODA2QzI1OS40MTMgNDQuOTY5MiAyNTguNzgxIDQ2LjY1MTcgMjU3LjUxOCA0Ny44NTUyQzI1Ni4yNTMgNDkuMDU4NiAyNTQuMzU3IDQ5LjY1ODcgMjUxLjgzIDQ5LjY1ODdDMjQ2Ljc3NCA0OS42NTg3IDI0NC4yNDYgNDcuMzc0NCAyNDQuMjQ2IDQyLjgwNlY0Mi44MDZaIiBmaWxsPSIjNEE1NTY4Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzA3LjgzIDkxLjkxODFDMzA3LjgzIDk3LjE1NzcgMzA2LjAxIDEwMS4xNDcgMzAyLjM2OSAxMDMuODg4QzI5OC43MyAxMDYuNjI5IDI5My4yODUgMTA4IDI4Ni4wMzcgMTA4QzI4Mi4zMjEgMTA4IDI3OS4xNTYgMTA3Ljc0OCAyNzYuNTM2IDEwNy4yNDVDMjczLjkxNiAxMDYuNzQzIDI3MS40NjQgMTA2LjAwNCAyNjkuMTggMTA1LjAzVjkzLjUxNjdDMjcxLjc2OSA5NC43MzYzIDI3NC42ODQgOTUuNzU1OCAyNzcuOTMgOTYuNTc4NUMyODEuMTcyIDk3LjM5OTYgMjg0LjAyNyA5Ny44MTEgMjg2LjQ5NCA5Ny44MTFDMjkxLjU1IDk3LjgxMSAyOTQuMDc5IDk2LjM0OTUgMjk0LjA3OSA5My40MjY0QzI5NC4wNzkgOTIuMzI5NSAyOTMuNzQ0IDkxLjQzOSAyOTMuMDc0IDkwLjc1MzRDMjkyLjQwMyA5MC4wNjc4IDI5MS4yNDYgODkuMjkxOSAyODkuNjAxIDg4LjQyMjRDMjg3Ljk1NyA4Ny41NTQ1IDI4NS43NjMgODYuNTQzIDI4My4wMjIgODUuMzg0OEMyNzkuMDk0IDgzLjc0MSAyNzYuMjA3IDgyLjIxODEgMjc0LjM2NiA4MC44MTYzQzI3Mi41MjIgNzkuNDE2MSAyNzEuMTgyIDc3LjgwOTMgMjcwLjM0NiA3NS45OTYxQzI2OS41MDcgNzQuMTg0NiAyNjkuMDg4IDcxLjk1MzUgMjY5LjA4OCA2OS4zMDMxQzI2OS4wODggNjQuNzY1MyAyNzAuODQ2IDYxLjI1NjYgMjc0LjM2NiA1OC43NzRDMjc3Ljg4MyA1Ni4yOTEzIDI4Mi44NjkgNTUuMDUwOCAyODkuMzI3IDU1LjA1MDhDMjk1LjQ3OSA1NS4wNTA4IDMwMS40NjQgNTYuMzkxMyAzMDcuMjgxIDU5LjA3MDhMMzAzLjA3OSA2OS4xMjA4QzMwMC41MiA2OC4wMjM5IDI5OC4xMjggNjcuMTI2OSAyOTUuOTA1IDY2LjQyNTJDMjkzLjY4MiA2NS43MjUxIDI5MS40MTMgNjUuMzc1MSAyODkuMDk5IDY1LjM3NTFDMjg0Ljk4NyA2NS4zNzUxIDI4Mi45MyA2Ni40ODY1IDI4Mi45MyA2OC43MDk1QzI4Mi45MyA2OS45NTk3IDI4My41OTUgNzEuMDQwNSAyODQuOTE4IDcxLjk1MzVDMjg2LjI0NCA3Mi44NjY2IDI4OS4xNDQgNzQuMjIzMyAyOTMuNjIxIDc2LjAyMDNDMjk3LjYxMiA3Ny42MzUxIDMwMC41MzcgNzkuMTQxOCAzMDIuMzkzIDgwLjU0MkMzMDQuMjUgODEuOTQzOSAzMDUuNjIxIDgzLjU1NzEgMzA2LjUwNSA4NS4zODQ4QzMwNy4zODkgODcuMjEyNSAzMDcuODMgODkuMzkwMyAzMDcuODMgOTEuOTE4MSIgZmlsbD0iIzRBNTU2OCIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTM2My4wMyAxMDcuMDg2SDM0OS4wOTVWNzcuMjUzNEMzNDkuMDk1IDczLjU2OSAzNDguNDc4IDcwLjgwNCAzNDcuMjQ3IDY4Ljk2MThDMzQ2LjAxMSA2Ny4xMTk1IDM0NC4wNyA2Ni4xOTY4IDM0MS40MiA2Ni4xOTY4QzMzNy44NTggNjYuMTk2OCAzMzUuMjY5IDY3LjUwNjcgMzMzLjY1NCA3MC4xMjY1QzMzMi4wMzkgNzIuNzQ2MiAzMzEuMjMzIDc3LjA1NSAzMzEuMjMzIDgzLjA1NlYxMDcuMDg2SDMxNy4yOThWNTYuMDA5NkgzMjcuOTQ0TDMyOS44MTcgNjIuNTQzSDMzMC41OTRDMzMxLjk2NCA2MC4xOTc0IDMzMy45NDUgNTguMzYxNiAzMzYuNTMyIDU3LjAzNzJDMzM5LjEyMSA1NS43MTI4IDM0Mi4wOTEgNTUuMDQ5OCAzNDUuNDQyIDU1LjA0OThDMzUzLjA4NiA1NS4wNDk4IDM1OC4yNjMgNTcuNTQ4NiAzNjAuOTc1IDYyLjU0M0gzNjIuMjA3QzM2My41NzggNjAuMTY2OCAzNjUuNTk3IDU4LjMyNDUgMzY4LjI2MiA1Ny4wMTQ2QzM3MC45MjYgNTUuNzA0OCAzNzMuOTMzIDU1LjA0OTggMzc3LjI4NCA1NS4wNDk4QzM4My4wNyA1NS4wNDk4IDM4Ny40NSA1Ni41MzU1IDM5MC40MTggNTkuNTAzOEMzOTMuMzg4IDYyLjQ3MzYgMzk0Ljg3MiA2Ny4yMzI0IDM5NC44NzIgNzMuNzgwM1YxMDcuMDg2SDM4MC44OTNWNzcuMjUzNEMzODAuODkzIDczLjU2OSAzODAuMjc1IDcwLjgwNCAzNzkuMDQ0IDY4Ljk2MThDMzc3LjgwOCA2Ny4xMTk1IDM3NS44NjggNjYuMTk2OCAzNzMuMjE3IDY2LjE5NjhDMzY5LjgwNyA2Ni4xOTY4IDM2Ny4yNTcgNjcuNDE2MyAzNjUuNTY0IDY5Ljg1MjJDMzYzLjg3NSA3Mi4yODk3IDM2My4wMyA3Ni4xNTY1IDM2My4wMyA4MS40NTU3VjEwNy4wODZaIiBmaWxsPSIjNEE1NTY4Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNDM1LjQyMiA4My40MjA5TDQzMC4wMzEgODMuNjAzMUM0MjUuOTggODMuNzI1NyA0MjIuOTY1IDg0LjQ1NjUgNDIwLjk4NiA4NS43OTcxQzQxOS4wMDUgODcuMTM3NiA0MTguMDE2IDg5LjE3NjYgNDE4LjAxNiA5MS45MTlDNDE4LjAxNiA5NS44NDcxIDQyMC4yNjkgOTcuODExOSA0MjQuNzc2IDk3LjgxMTlDNDI4LjAwNCA5Ny44MTE5IDQzMC41ODcgOTYuODgyNyA0MzIuNTIgOTUuMDI0NEM0MzQuNDU0IDkzLjE2NzYgNDM1LjQyMiA5MC43MDExIDQzNS40MjIgODcuNjIzMlY4My40MjA5Wk00MzkuNTMzIDEwNy4wODZMNDM2LjgzOCAxMDAuMTQxSDQzNi40NzJDNDM0LjEyNiAxMDMuMDk3IDQzMS43MTMgMTA1LjE0NCA0MjkuMjMgMTA2LjI4NkM0MjYuNzQ5IDEwNy40MjggNDIzLjUxMyAxMDcuOTk5IDQxOS41MjQgMTA3Ljk5OUM0MTQuNjE4IDEwNy45OTkgNDEwLjc1OSAxMDYuNTk5IDQwNy45NDEgMTAzLjc5N0M0MDUuMTI1IDEwMC45OTUgNDAzLjcxNiA5Ny4wMDUyIDQwMy43MTYgOTEuODI2OUM0MDMuNzE2IDg2LjQwNjcgNDA1LjYxMiA4Mi40MDkzIDQwOS40MDMgNzkuODM0N0M0MTMuMTk3IDc3LjI2MTcgNDE4LjkxNCA3NS44MzcyIDQyNi41NTkgNzUuNTYzTDQzNS40MjEgNzUuMjg4OFY3My4wNDk3QzQzNS40MjEgNjcuODczIDQzMi43NzEgNjUuMjgzOSA0MjcuNDcyIDY1LjI4MzlDNDIzLjM5IDY1LjI4MzkgNDE4LjU5MyA2Ni41MTY0IDQxMy4wODEgNjguOTg0NUw0MDguNDY3IDU5LjU3MzNDNDE0LjM0NSA1Ni40OTcgNDIwLjg2NCA1NC45NTggNDI4LjAyIDU0Ljk1OEM0MzQuODczIDU0Ljk1OCA0NDAuMTI3IDU2LjQ1MTggNDQzLjc4MyA1OS40MzYyQzQ0Ny40MzYgNjIuNDIwNSA0NDkuMjY0IDY2Ljk1ODQgNDQ5LjI2NCA3My4wNDk3VjEwNy4wODZINDM5LjUzM1oiIGZpbGw9IiM0QTU1NjgiLz4KPC9zdmc+Cg==#gh-light-mode-only" width="450" height="144" class="img_ev3q">
<img loading="lazy" alt="Prism Logo" src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDUwIiBoZWlnaHQ9IjE0NCIgdmlld0JveD0iMCAwIDQ1MCAxNDQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMS4wNTczMSA5MS4yNTM4Qy0wLjM3Mjc0MSA5My41ODY1IC0wLjM1MDYwOSA5Ni41Mjk3IDEuMTE0MzYgOTguODQwN0wyNy42Mjk5IDE0MC42NjhDMjkuMzUwOCAxNDMuMzgzIDMyLjY2NzkgMTQ0LjYyMSAzNS43NDY1IDE0My42OTdMMTEyLjI2NCAxMjAuNzQyQzExNi40NCAxMTkuNDg5IDExOC41NDEgMTE0LjgzMSAxMTYuNzE2IDExMC44NzJMNjcuNTI2NSA0LjE2ODg5QzY1LjEyNzYgLTEuMDM0NzUgNTcuODk2MSAtMS40NjE4OSA1NC45MDEzIDMuNDIzMTdMMS4wNTczMSA5MS4yNTM4Wk02Ni4yMTk1IDI4LjU2MjJDNjUuMTc0MSAyNi4xNDMxIDYxLjYzMzggMjYuNTE1NyA2MS4xMTQ5IDI5LjA5OTVMNDIuMTc3MyAxMjMuMzkzQzQxLjc3OCAxMjUuMzgxIDQzLjYzOTUgMTI3LjA3OSA0NS41ODI3IDEyNi40OTlMOTguNDUwMiAxMTAuNzE4Qzk5Ljk5MzMgMTEwLjI1NyAxMDAuNzg4IDEwOC41NTMgMTAwLjE0OSAxMDcuMDc0TDY2LjIxOTUgMjguNTYyMloiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTYzLjIxOSA3MS43MjUxSDE2Ny44OEMxNzIuMjM1IDcxLjcyNTEgMTc1LjQ5MiA3MC44NjUzIDE3Ny42NTYgNjkuMTQ0QzE3OS44MTkgNjcuNDIyOCAxODAuOSA2NC45MTc1IDE4MC45IDYxLjYyODNDMTgwLjkgNTguMzEgMTc5Ljk5MyA1NS44NTggMTc4LjE4MSA1NC4yNzM4QzE3Ni4zNjggNTIuNjg5NyAxNzMuNTI5IDUxLjg5NzYgMTY5LjY2MSA1MS44OTc2SDE2My4yMTlWNzEuNzI1MVpNMTk1LjE5OSA2MS4xMjY0QzE5NS4xOTkgNjguMzE0NyAxOTIuOTU0IDczLjgxMDcgMTg4LjQ1OSA3Ny42MTc4QzE4My45NjggODEuNDI2NSAxNzcuNTggODMuMzI4NCAxNjkuMjk2IDgzLjMyODRIMTYzLjIyVjEwNy4wODZIMTQ5LjA1OFY0MC4yOTM5SDE3MC4zOTJDMTc4LjQ5NSA0MC4yOTM5IDE4NC42NTQgNDIuMDM3OCAxODguODcyIDQ1LjUyMzhDMTkzLjA5MSA0OS4wMTE1IDE5NS4xOTkgNTQuMjEyNCAxOTUuMTk5IDYxLjEyNjRWNjEuMTI2NFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjMyLjc0IDU1LjA0OThDMjM0LjYyOSA1NS4wNDk4IDIzNi4xOTcgNTUuMTg2OSAyMzcuNDQ2IDU1LjQ2MTJMMjM2LjM5NiA2OC41MjYyQzIzNS4yNjggNjguMjIyOSAyMzMuODk5IDY4LjA2OTcgMjMyLjI4NCA2OC4wNjk3QzIyNy44MzYgNjguMDY5NyAyMjQuMzczIDY5LjIxMTggMjIxLjg4OSA3MS40OTZDMjE5LjQwNyA3My43ODAzIDIxOC4xNjcgNzYuOTc5MiAyMTguMTY3IDgxLjA5MTJWMTA3LjA4NkgyMDQuMjMyVjU2LjAwOTZIMjE0Ljc4NkwyMTYuODQzIDY0LjU5ODFIMjE3LjUyN0MyMTkuMTExIDYxLjczNjQgMjIxLjI1IDU5LjQyNzkgMjIzLjk0NyA1Ny42NzZDMjI2LjY0MSA1NS45MjU4IDIyOS41NzIgNTUuMDQ5OCAyMzIuNzQgNTUuMDQ5OCIgZmlsbD0id2hpdGUiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yNDQuODM4IDEwNy4wODZIMjU4Ljc3M1Y1Ni4wMDk5SDI0NC44MzhWMTA3LjA4NlpNMjQ0LjI0NiA0Mi44MDZDMjQ0LjI0NiAzOC4yNjgxIDI0Ni43NzQgMzYgMjUxLjgzIDM2QzI1Ni44ODQgMzYgMjU5LjQxMyAzOC4yNjgxIDI1OS40MTMgNDIuODA2QzI1OS40MTMgNDQuOTY5MiAyNTguNzgxIDQ2LjY1MTcgMjU3LjUxOCA0Ny44NTUyQzI1Ni4yNTMgNDkuMDU4NiAyNTQuMzU3IDQ5LjY1ODcgMjUxLjgzIDQ5LjY1ODdDMjQ2Ljc3NCA0OS42NTg3IDI0NC4yNDYgNDcuMzc0NCAyNDQuMjQ2IDQyLjgwNlY0Mi44MDZaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTMwNy44MyA5MS45MTgxQzMwNy44MyA5Ny4xNTc3IDMwNi4wMSAxMDEuMTQ3IDMwMi4zNjkgMTAzLjg4OEMyOTguNzMgMTA2LjYyOSAyOTMuMjg2IDEwOCAyODYuMDM4IDEwOEMyODIuMzIxIDEwOCAyNzkuMTU2IDEwNy43NDggMjc2LjUzNiAxMDcuMjQ1QzI3My45MTYgMTA2Ljc0MyAyNzEuNDY0IDEwNi4wMDQgMjY5LjE4IDEwNS4wM1Y5My41MTY3QzI3MS43NjkgOTQuNzM2MyAyNzQuNjg0IDk1Ljc1NTggMjc3LjkzIDk2LjU3ODVDMjgxLjE3MiA5Ny4zOTk2IDI4NC4wMjggOTcuODExIDI4Ni40OTQgOTcuODExQzI5MS41NSA5Ny44MTEgMjk0LjA3OSA5Ni4zNDk1IDI5NC4wNzkgOTMuNDI2NEMyOTQuMDc5IDkyLjMyOTUgMjkzLjc0NCA5MS40MzkgMjkzLjA3NCA5MC43NTM0QzI5Mi40MDMgOTAuMDY3OCAyOTEuMjQ3IDg5LjI5MTkgMjg5LjYwMSA4OC40MjI0QzI4Ny45NTcgODcuNTU0NSAyODUuNzYzIDg2LjU0MyAyODMuMDIzIDg1LjM4NDhDMjc5LjA5NSA4My43NDEgMjc2LjIwNyA4Mi4yMTgxIDI3NC4zNjYgODAuODE2M0MyNzIuNTIzIDc5LjQxNjEgMjcxLjE4MiA3Ny44MDkzIDI3MC4zNDYgNzUuOTk2MUMyNjkuNTA4IDc0LjE4NDYgMjY5LjA4OCA3MS45NTM1IDI2OS4wODggNjkuMzAzMUMyNjkuMDg4IDY0Ljc2NTMgMjcwLjg0NiA2MS4yNTY2IDI3NC4zNjYgNTguNzc0QzI3Ny44ODMgNTYuMjkxMyAyODIuODY5IDU1LjA1MDggMjg5LjMyNyA1NS4wNTA4QzI5NS40OCA1NS4wNTA4IDMwMS40NjQgNTYuMzkxMyAzMDcuMjgxIDU5LjA3MDhMMzAzLjA3OSA2OS4xMjA4QzMwMC41MjEgNjguMDIzOSAyOTguMTI4IDY3LjEyNjkgMjk1LjkwNSA2Ni40MjUyQzI5My42ODIgNjUuNzI1MSAyOTEuNDEzIDY1LjM3NTEgMjg5LjA5OSA2NS4zNzUxQzI4NC45ODggNjUuMzc1MSAyODIuOTMxIDY2LjQ4NjUgMjgyLjkzMSA2OC43MDk1QzI4Mi45MzEgNjkuOTU5NyAyODMuNTk1IDcxLjA0MDUgMjg0LjkxOCA3MS45NTM1QzI4Ni4yNDQgNzIuODY2NiAyODkuMTQ1IDc0LjIyMzMgMjkzLjYyMSA3Ni4wMjAzQzI5Ny42MTIgNzcuNjM1MSAzMDAuNTM3IDc5LjE0MTggMzAyLjM5NCA4MC41NDJDMzA0LjI1IDgxLjk0MzkgMzA1LjYyMiA4My41NTcxIDMwNi41MDYgODUuMzg0OEMzMDcuMzkgODcuMjEyNSAzMDcuODMgODkuMzkwMyAzMDcuODMgOTEuOTE4MSIgZmlsbD0id2hpdGUiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zNjMuMDMgMTA3LjA4NkgzNDkuMDk2Vjc3LjI1MzRDMzQ5LjA5NiA3My41NjkgMzQ4LjQ3OCA3MC44MDQgMzQ3LjI0NyA2OC45NjE4QzM0Ni4wMTEgNjcuMTE5NSAzNDQuMDcxIDY2LjE5NjggMzQxLjQyIDY2LjE5NjhDMzM3Ljg1OCA2Ni4xOTY4IDMzNS4yNjkgNjcuNTA2NyAzMzMuNjU0IDcwLjEyNjVDMzMyLjA0IDcyLjc0NjIgMzMxLjIzMyA3Ny4wNTUgMzMxLjIzMyA4My4wNTZWMTA3LjA4NkgzMTcuMjk5VjU2LjAwOTZIMzI3Ljk0NEwzMjkuODE3IDYyLjU0M0gzMzAuNTk0QzMzMS45NjQgNjAuMTk3NCAzMzMuOTQ1IDU4LjM2MTYgMzM2LjUzMiA1Ny4wMzcyQzMzOS4xMjIgNTUuNzEyOCAzNDIuMDkxIDU1LjA0OTggMzQ1LjQ0MiA1NS4wNDk4QzM1My4wODcgNTUuMDQ5OCAzNTguMjYzIDU3LjU0ODYgMzYwLjk3NSA2Mi41NDNIMzYyLjIwOEMzNjMuNTc5IDYwLjE2NjggMzY1LjU5NyA1OC4zMjQ1IDM2OC4yNjIgNTcuMDE0NkMzNzAuOTI3IDU1LjcwNDggMzczLjkzNCA1NS4wNDk4IDM3Ny4yODQgNTUuMDQ5OEMzODMuMDcxIDU1LjA0OTggMzg3LjQ1IDU2LjUzNTUgMzkwLjQxOSA1OS41MDM4QzM5My4zODggNjIuNDczNiAzOTQuODczIDY3LjIzMjQgMzk0Ljg3MyA3My43ODAzVjEwNy4wODZIMzgwLjg5M1Y3Ny4yNTM0QzM4MC44OTMgNzMuNTY5IDM4MC4yNzUgNzAuODA0IDM3OS4wNDQgNjguOTYxOEMzNzcuODA4IDY3LjExOTUgMzc1Ljg2OCA2Ni4xOTY4IDM3My4yMTcgNjYuMTk2OEMzNjkuODA3IDY2LjE5NjggMzY3LjI1NyA2Ny40MTYzIDM2NS41NjUgNjkuODUyMkMzNjMuODc2IDcyLjI4OTcgMzYzLjAzIDc2LjE1NjUgMzYzLjAzIDgxLjQ1NTdWMTA3LjA4NloiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNDM1LjQyMiA4My40MjA5TDQzMC4wMyA4My42MDMxQzQyNS45OCA4My43MjU3IDQyMi45NjUgODQuNDU2NSA0MjAuOTg1IDg1Ljc5NzFDNDE5LjAwNCA4Ny4xMzc2IDQxOC4wMTUgODkuMTc2NiA0MTguMDE1IDkxLjkxOUM0MTguMDE1IDk1Ljg0NzEgNDIwLjI2OSA5Ny44MTE5IDQyNC43NzYgOTcuODExOUM0MjguMDA0IDk3LjgxMTkgNDMwLjU4NyA5Ni44ODI3IDQzMi41MTkgOTUuMDI0NEM0MzQuNDU0IDkzLjE2NzYgNDM1LjQyMiA5MC43MDExIDQzNS40MjIgODcuNjIzMlY4My40MjA5Wk00MzkuNTMzIDEwNy4wODZMNDM2LjgzOCAxMDAuMTQxSDQzNi40NzFDNDM0LjEyNiAxMDMuMDk3IDQzMS43MTMgMTA1LjE0NCA0MjkuMjMgMTA2LjI4NkM0MjYuNzQ5IDEwNy40MjggNDIzLjUxMyAxMDcuOTk5IDQxOS41MjMgMTA3Ljk5OUM0MTQuNjE4IDEwNy45OTkgNDEwLjc1OSAxMDYuNTk5IDQwNy45NDEgMTAzLjc5N0M0MDUuMTI0IDEwMC45OTUgNDAzLjcxNiA5Ny4wMDUyIDQwMy43MTYgOTEuODI2OUM0MDMuNzE2IDg2LjQwNjcgNDA1LjYxMiA4Mi40MDkzIDQwOS40MDIgNzkuODM0N0M0MTMuMTk3IDc3LjI2MTcgNDE4LjkxNCA3NS44MzcyIDQyNi41NTkgNzUuNTYzTDQzNS40MjEgNzUuMjg4OFY3My4wNDk3QzQzNS40MjEgNjcuODczIDQzMi43NzEgNjUuMjgzOSA0MjcuNDcyIDY1LjI4MzlDNDIzLjM5IDY1LjI4MzkgNDE4LjU5MyA2Ni41MTY0IDQxMy4wODEgNjguOTg0NUw0MDguNDY3IDU5LjU3MzNDNDE0LjM0NSA1Ni40OTcgNDIwLjg2NCA1NC45NTggNDI4LjAyIDU0Ljk1OEM0MzQuODczIDU0Ljk1OCA0NDAuMTI3IDU2LjQ1MTggNDQzLjc4MiA1OS40MzYyQzQ0Ny40MzYgNjIuNDIwNSA0NDkuMjY0IDY2Ljk1ODQgNDQ5LjI2NCA3My4wNDk3VjEwNy4wODZINDM5LjUzM1oiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=#gh-dark-mode-only" width="450" height="144" class="img_ev3q"></p></div><div class="col col--10"><p><em>"Tauri has the potential to unlock a new generation of desktop software that feels native to users but is as easy to build as web apps."</em></p><p><strong>- Johannes Schickling</strong>, <a href="https://www.prisma.io" target="_blank" rel="noopener noreferrer">Prisma</a> Founder</p></div></div><br><div class="row"><div class="col col--2"><p><img loading="lazy" alt="OSSC Logo" src="/ko/assets/images/ossc_logo_light-84470e2d37b02d06b60fb8b0baa6c386.png#gh-light-mode-only" width="4167" height="1276" class="img_ev3q">
<img loading="lazy" alt="OSSC Logo" src="/ko/assets/images/ossc_logo_dark-b51d38a60f0873d1ecb3caed8058e5a8.png#gh-dark-mode-only" width="4167" height="1276" class="img_ev3q"></p></div><div class="col col--10"><p><em>"Tauri stands to reduce the disastrously negative environmental costs of bloated and memory-hogging applications on the internet by orders of magnitude. Any rough approximation of monetary value that could result in, would easily reach hundreds of billions in cost savings for our modern era of grossly underutilized local compute and storage resources."</em></p><p><strong>- Joseph Jacks</strong>, <a href="https://oss.capital" target="_blank" rel="noopener noreferrer">OSS Capital</a> Founder / GP</p></div></div><br><div class="row"><div class="col col--2"><p><img loading="lazy" alt="Padloc Logo" src="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIC0xMiAzODAgMTIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBjbGFzcz0ibG9nbyI+Cgk8ZGVmcz4KCgkJPGZpbHRlciBpZD0ic2hhZG93Ij4KCQkJPGZlT2Zmc2V0IGR5PSIzIiBpbj0iU291cmNlQWxwaGEiIHJlc3VsdD0ic2hhZG93T2Zmc2V0T3V0ZXIxIj48L2ZlT2Zmc2V0PgoJCQk8ZmVDb2xvck1hdHJpeCB2YWx1ZXM9IjAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgMCAwIDAgMC4zIDAiIGluPSJzaGFkb3dPZmZzZXRPdXRlcjEiPjwvZmVDb2xvck1hdHJpeD4KCQk8L2ZpbHRlcj4KCgk8L2RlZnM+CgoJPGcgY2xhc3M9InBhZGxvYyI+CgoJCTxwYXRoIGNsYXNzPSJwIiBkPSJNMjYuNDUyNTkzOSwyMSBDMzEuNDQ2MDU5NiwyMSAzNS45NjUzOTQyLDIyLjE1MzUzNjUgNDAuMDEwNzMzNSwyNC40NjA2NDQgQzQ0LjA1NjA3MjcsMjYuNzY3NzUxNSA0Ny4yMzIyNDg1LDI5Ljk0MzkyNzMgNDkuNTM5MzU2LDMzLjk4OTI2NjUgQzUxLjg0NjQ2MzUsMzguMDM0NjA1OCA1Myw0Mi41NTM5NDA0IDUzLDQ3LjU0NzQwNjEgQzUzLDUyLjQ3NzY2MzMgNTEuODQ2NDYzNSw1Ni45NjUzOTQyIDQ5LjUzOTM1Niw2MS4wMTA3MzM1IEM0Ny4yMzIyNDg1LDY1LjA1NjA3MjcgNDQuMDU2MDcyNyw2OC4yMzIyNDg1IDQwLjAxMDczMzUsNzAuNTM5MzU2IEMzNS45NjUzOTQyLDcyLjg0NjQ2MzUgMzEuNDQ2MDU5Niw3NCAyNi40NTI1OTM5LDc0IEMyMS45NjQ3OTU3LDc0IDE3LjkwMzcxNTMsNzMuMDM2MDg2IDE0LjI2OTIzMDgsNzEuMTA4MjI5IEMxMC42MzQ3NDYzLDY5LjE4MDM3MiA3Ljc3NDYwNzkyLDY2LjU0MTQ1OTggNS42ODg3Mjk4Nyw2My4xOTE0MTMyIEw1LjY4ODcyOTg3LDkyLjc3MjgwODYgQzUuNjg4NzI5ODcsOTMuNjU3NzI2NSA1LjQzNTg5OTk2LDk0LjM1MzAwODggNC45MzAyMzI1Niw5NC44NTg2NzYyIEM0LjQyNDU2NTE1LDk1LjM2NDM0MzYgMy43MjkyODI5LDk1LjYxNzE3MzUgMi44NDQzNjQ5NCw5NS42MTcxNzM1IEMyLjAyMjY1NTQsOTUuNjE3MTczNSAxLjM0MzE3NTAyLDk1LjM2NDM0MzYgMC44MDU5MDMzOTksOTQuODU4Njc2MiBDMC4yNjg2MzE3OCw5NC4zNTMwMDg4IDEuMTM2ODY4MzhlLTEzLDkzLjY1NzcyNjUgMS4xMzY4NjgzOGUtMTMsOTIuNzcyODA4NiBMMS4xMzY4NjgzOGUtMTMsNDYuOTc4NTMzMSBDMC4wNjMyMDg0MjU4LDQyLjExMTQ4NDMgMS4yNjQxNTA1LDM3LjY4Njk2MDkgMy42MDI4NjIyNSwzMy43MDQ4MzAxIEM1Ljk0MTU3NDAxLDI5LjcyMjY5OTIgOS4xMTc3NDk3NiwyNi42MDk3MzEgMTMuMTMxNDg0OCwyNC4zNjU4MzE4IEMxNy4xNDUyMTk4LDIyLjEyMTkzMjcgMjEuNTg1NTQ1MSwyMSAyNi40NTI1OTM5LDIxIFogTTI2LjQ1MjU5MzksNjguNjkwNTE4OCBDMzAuMzcxNTE2Myw2OC42OTA1MTg4IDMzLjkxMTEzNTEsNjcuNzc0MDEwNCAzNy4wNzE1NTY0LDY1Ljk0MDk2NiBDNDAuMjMxOTc3Niw2NC4xMDc5MjE3IDQyLjcyODY3Myw2MS41Nzk2MjI2IDQ0LjU2MTcxNzQsNTguMzU1OTkyOCBDNDYuMzk0NzYxNyw1NS4xMzIzNjMxIDQ3LjMxMTI3MDEsNTEuNTI5NTM2OSA0Ny4zMTEyNzAxLDQ3LjU0NzQwNjEgQzQ3LjMxMTI3MDEsNDMuNTY1Mjc1MyA0Ni4zOTQ3NjE3LDM5Ljk2MjQ0OSA0NC41NjE3MTc0LDM2LjczODgxOTMgQzQyLjcyODY3MywzMy41MTUxODk2IDQwLjIzMTk3NzYsMzAuOTcxMDg4NiAzNy4wNzE1NTY0LDI5LjEwNjQ0MDEgQzMzLjkxMTEzNTEsMjcuMjQxNzkxNSAzMC4zNzE1MTYzLDI2LjMwOTQ4MTIgMjYuNDUyNTkzOSwyNi4zMDk0ODEyIEMyMi41MzM2NzE1LDI2LjMwOTQ4MTIgMTguOTk0MDUyOCwyNy4yNDE3OTE1IDE1LjgzMzYzMTUsMjkuMTA2NDQwMSBDMTIuNjczMjEwMiwzMC45NzEwODg2IDEwLjE5MjMxNjcsMzMuNTE1MTg5NiA4LjM5MDg3NjU3LDM2LjczODgxOTMgQzYuNTg5NDM2NDMsMzkuOTYyNDQ5IDUuNjg4NzI5ODcsNDMuNTY1Mjc1MyA1LjY4ODcyOTg3LDQ3LjU0NzQwNjEgQzUuNjg4NzI5ODcsNTEuNTI5NTM2OSA2LjU4OTQzNjQzLDU1LjEzMjM2MzEgOC4zOTA4NzY1Nyw1OC4zNTU5OTI4IEMxMC4xOTIzMTY3LDYxLjU3OTYyMjYgMTIuNjczMjEwMiw2NC4xMDc5MjE3IDE1LjgzMzYzMTUsNjUuOTQwOTY2IEMxOC45OTQwNTI4LDY3Ljc3NDAxMDQgMjIuNTMzNjcxNSw2OC42OTA1MTg4IDI2LjQ1MjU5MzksNjguNjkwNTE4OCBaIj48L3BhdGg+CgoJCTxwYXRoIGNsYXNzPSJhIiBkPSJNMTAxLjkwMzgxOCwyMSBDMTA2LjgzNDA3NSwyMSAxMTEuMzIxODA2LDIyLjE1MzUzNjUgMTE1LjM2NzE0NSwyNC40NjA2NDQgQzExOS40MTI0ODUsMjYuNzY3NzUxNSAxMjIuNTg4NjYsMjkuOTQzOTI3MyAxMjQuODk1NzY4LDMzLjk4OTI2NjUgQzEyNy4yMDI4NzYsMzguMDM0NjA1OCAxMjguMzU2NDEyLDQyLjU1Mzk0MDQgMTI4LjM1NjQxMiw0Ny41NDc0MDYxIEwxMjguMzU2NDEyLDcwLjU4Njc2MjEgQzEyOC4zNTY0MTIsNzEuNDA4NDcxNiAxMjguMTAzNTgyLDcyLjA4Nzk1MiAxMjcuNTk3OTE1LDcyLjYyNTIyMzYgQzEyNy4wOTIyNDcsNzMuMTYyNDk1MiAxMjYuMzk2OTY1LDczLjQzMTEyNyAxMjUuNTEyMDQ3LDczLjQzMTEyNyBDMTI0LjY5MDMzOCw3My40MzExMjcgMTI0LjAxMDg1Nyw3My4xNjI0OTUyIDEyMy40NzM1ODYsNzIuNjI1MjIzNiBDMTIyLjkzNjMxNCw3Mi4wODc5NTIgMTIyLjY2NzY4Miw3MS40MDg0NzE2IDEyMi42Njc2ODIsNzAuNTg2NzYyMSBMMTIyLjY2NzY4Miw2My4xOTE0MTMyIEMxMjAuNTgxODA0LDY2LjU0MTQ1OTggMTE3LjcyMTY2Niw2OS4xODAzNzIgMTE0LjA4NzE4MSw3MS4xMDgyMjkgQzExMC40NTI2OTcsNzMuMDM2MDg2IDEwNi4zOTE2MTYsNzQgMTAxLjkwMzgxOCw3NCBDOTYuOTEwMzUyNCw3NCA5Mi4zOTEwMTc4LDcyLjg0NjQ2MzUgODguMzQ1Njc4NSw3MC41MzkzNTYgQzg0LjMwMDMzOTMsNjguMjMyMjQ4NSA4MS4xMjQxNjM1LDY1LjA1NjA3MjcgNzguODE3MDU2LDYxLjAxMDczMzUgQzc2LjUwOTk0ODQsNTYuOTY1Mzk0MiA3NS4zNTY0MTIsNTIuNDc3NjYzMyA3NS4zNTY0MTIsNDcuNTQ3NDA2MSBDNzUuMzU2NDEyLDQyLjU1Mzk0MDQgNzYuNTA5OTQ4NCwzOC4wMzQ2MDU4IDc4LjgxNzA1NiwzMy45ODkyNjY1IEM4MS4xMjQxNjM1LDI5Ljk0MzkyNzMgODQuMzAwMzM5MywyNi43Njc3NTE1IDg4LjM0NTY3ODUsMjQuNDYwNjQ0IEM5Mi4zOTEwMTc4LDIyLjE1MzUzNjUgOTYuOTEwMzUyNCwyMSAxMDEuOTAzODE4LDIxIFogTTEwMS45MDM4MTgsNjguNjkwNTE4OCBDMTA1LjgyMjc0LDY4LjY5MDUxODggMTA5LjM2MjM1OSw2Ny43NzQwMTA0IDExMi41MjI3OCw2NS45NDA5NjYgQzExNS42ODMyMDIsNjQuMTA3OTIxNyAxMTguMTY0MDk1LDYxLjU3OTYyMjYgMTE5Ljk2NTUzNSw1OC4zNTU5OTI4IEMxMjEuNzY2OTc2LDU1LjEzMjM2MzEgMTIyLjY2NzY4Miw1MS41Mjk1MzY5IDEyMi42Njc2ODIsNDcuNTQ3NDA2MSBDMTIyLjY2NzY4Miw0My41NjUyNzUzIDEyMS43NjY5NzYsMzkuOTYyNDQ5IDExOS45NjU1MzUsMzYuNzM4ODE5MyBDMTE4LjE2NDA5NSwzMy41MTUxODk2IDExNS42ODMyMDIsMzAuOTcxMDg4NiAxMTIuNTIyNzgsMjkuMTA2NDQwMSBDMTA5LjM2MjM1OSwyNy4yNDE3OTE1IDEwNS44MjI3NCwyNi4zMDk0ODEyIDEwMS45MDM4MTgsMjYuMzA5NDgxMiBDOTcuOTg0ODk1NywyNi4zMDk0ODEyIDk0LjQ0NTI3NjksMjcuMjQxNzkxNSA5MS4yODQ4NTU2LDI5LjEwNjQ0MDEgQzg4LjEyNDQzNDMsMzAuOTcxMDg4NiA4NS42Mjc3MzksMzMuNTE1MTg5NiA4My43OTQ2OTQ2LDM2LjczODgxOTMgQzgxLjk2MTY1MDMsMzkuOTYyNDQ5IDgxLjA0NTE0MTksNDMuNTY1Mjc1MyA4MS4wNDUxNDE5LDQ3LjU0NzQwNjEgQzgxLjA0NTE0MTksNTEuNTI5NTM2OSA4MS45NjE2NTAzLDU1LjEzMjM2MzEgODMuNzk0Njk0Niw1OC4zNTU5OTI4IEM4NS42Mjc3MzksNjEuNTc5NjIyNiA4OC4xMjQ0MzQzLDY0LjEwNzkyMTcgOTEuMjg0ODU1Niw2NS45NDA5NjYgQzk0LjQ0NTI3NjksNjcuNzc0MDEwNCA5Ny45ODQ4OTU3LDY4LjY5MDUxODggMTAxLjkwMzgxOCw2OC42OTA1MTg4IFoiPjwvcGF0aD4KCgkJPHBhdGggY2xhc3M9ImQiIGQ9Ik0yMDAuNDUzNjEyLDEgQzIwMS4zMzEyMSwxIDIwMi4wMjA3NDIsMS4yNTA3Mzg3IDIwMi41MjIyMjcsMS43NTIyMjM2MyBDMjAzLjAyMzcxMiwyLjI1MzcwODU2IDIwMy4yNzQ0NSwyLjk0MzI0IDIwMy4yNzQ0NSwzLjgyMDgzODYzIEwyMDMuMjc0NDUsNDkuMjM2MzQwNSBDMjAzLjIxMTc2NSw1NC4wNjMxMzMgMjAyLjAyMDc1Niw1OC40NTEwNjAzIDE5OS43MDEzODgsNjIuNDAwMjU0MSBDMTk3LjM4MjAyLDY2LjM0OTQ0OCAxOTQuMjMyMTE1LDY5LjQzNjY2ODIgMTkwLjI1MTU3OSw3MS42NjIwMDc2IEMxODYuMjcxMDQyLDczLjg4NzM0NyAxODEuODY3NDQ0LDc1IDE3Ny4wNDA2NTEsNzUgQzE3Mi4wODg0ODcsNzUgMTY3LjYwNjUzMyw3My44NTYwMDQ3IDE2My41OTQ2NTQsNzEuNTY3OTc5NyBDMTU5LjU4Mjc3NCw2OS4yNzk5NTQ3IDE1Ni40MzI4NjksNjYuMTMwMDQ5NyAxNTQuMTQ0ODQ0LDYyLjExODE3MDMgQzE1MS44NTY4MTksNTguMTA2MjkwOCAxNTAuNzEyODI0LDUzLjYyNDMzNjUgMTUwLjcxMjgyNCw0OC42NzIxNzI4IEMxNTAuNzEyODI0LDQzLjc4MjY5NDcgMTUxLjg1NjgxOSwzOS4zMzIwODI3IDE1NC4xNDQ4NDQsMzUuMzIwMjAzMyBDMTU2LjQzMjg2OSwzMS4zMDgzMjM5IDE1OS41ODI3NzQsMjguMTU4NDE4OSAxNjMuNTk0NjU0LDI1Ljg3MDM5MzkgQzE2Ny42MDY1MzMsMjMuNTgyMzY4OSAxNzIuMDg4NDg3LDIyLjQzODM3MzYgMTc3LjA0MDY1MSwyMi40MzgzNzM2IEMxODEuNDkxMzMsMjIuNDM4MzczNiAxODUuNTE4ODIsMjMuMzk0MzE0OSAxODkuMTIzMjQzLDI1LjMwNjIyNjIgQzE5Mi43Mjc2NjYsMjcuMjE4MTM3NSAxOTUuNTY0MTQ4LDI5LjgzNTIyMjcgMTk3LjYzMjc3MywzMy4xNTc1NjA0IEwxOTcuNjMyNzczLDMuODIwODM4NjMgQzE5Ny42MzI3NzMsMi45NDMyNCAxOTcuODk5MTgzLDIuMjUzNzA4NTYgMTk4LjQzMjAxMSwxLjc1MjIyMzYzIEMxOTguOTY0ODM4LDEuMjUwNzM4NyAxOTkuNjM4Njk5LDEgMjAwLjQ1MzYxMiwxIFogTTE3Ny4wNDA2NTEsNjkuNzM0NDM0NiBDMTgwLjkyNzE1OSw2OS43MzQ0MzQ2IDE4NC40Mzc1MDEsNjguODA5ODM1NiAxODcuNTcxNzgyLDY2Ljk2MDYwOTkgQzE5MC43MDYwNjMsNjUuMTExMzg0MiAxOTMuMTY2NDM2LDYyLjU4ODMyNiAxOTQuOTUyOTc2LDU5LjM5MTM1OTYgQzE5Ni43Mzk1MTcsNTYuMTk0MzkzMiAxOTcuNjMyNzczLDUyLjYyMTM2NjYgMTk3LjYzMjc3Myw0OC42NzIxNzI4IEMxOTcuNjMyNzczLDQ0LjcyMjk3OSAxOTYuNzM5NTE3LDQxLjE0OTk1MjUgMTk0Ljk1Mjk3NiwzNy45NTI5ODYgQzE5My4xNjY0MzYsMzQuNzU2MDE5NiAxOTAuNzA2MDYzLDMyLjI0ODYzMjYgMTg3LjU3MTc4MiwzMC40MzA3NDk3IEMxODQuNDM3NTAxLDI4LjYxMjg2NjggMTgwLjkyNzE1OSwyNy43MDM5MzkgMTc3LjA0MDY1MSwyNy43MDM5MzkgQzE3My4xNTQxNDMsMjcuNzAzOTM5IDE2OS42NDM4MDEsMjguNjEyODY2OCAxNjYuNTA5NTIsMzAuNDMwNzQ5NyBDMTYzLjM3NTIzOSwzMi4yNDg2MzI2IDE2MC44OTkxOTUsMzQuNzU2MDE5NiAxNTkuMDgxMzEyLDM3Ljk1Mjk4NiBDMTU3LjI2MzQyOSw0MS4xNDk5NTI1IDE1Ni4zNTQ1MDEsNDQuNzIyOTc5IDE1Ni4zNTQ1MDEsNDguNjcyMTcyOCBDMTU2LjM1NDUwMSw1Mi42MjEzNjY2IDE1Ny4yNjM0MjksNTYuMTk0MzkzMiAxNTkuMDgxMzEyLDU5LjM5MTM1OTYgQzE2MC44OTkxOTUsNjIuNTg4MzI2IDE2My4zNzUyMzksNjUuMTExMzg0MiAxNjYuNTA5NTIsNjYuOTYwNjA5OSBDMTY5LjY0MzgwMSw2OC44MDk4MzU2IDE3My4xNTQxNDMsNjkuNzM0NDM0NiAxNzcuMDQwNjUxLDY5LjczNDQzNDYgWiI+PC9wYXRoPgoKCQk8cGF0aCBjbGFzcz0ibCIgZD0iTTIzMCwyLjg0MjUwOTYgQzIzMCwyLjAyMTMzNjA2IDIzMC4yNjg0NTcsMS4zNDIyOTg4OSAyMzAuODA1Mzc4LDAuODA1Mzc3NzIxIEMyMzEuMzQyMjk5LDAuMjY4NDU2NTU2IDIzMi4wMjEzMzYsMCAyMzIuODQyNTEsMCBDMjMzLjY2MzY4MywwIDIzNC4zNDI3MiwwLjI2ODQ1NjU1NiAyMzQuODc5NjQxLDAuODA1Mzc3NzIxIEMyMzUuNDE2NTYzLDEuMzQyMjk4ODkgMjM1LjY4NTAxOSwyLjAyMTMzNjA2IDIzNS42ODUwMTksMi44NDI1MDk2IEwyMzUuNjg1MDE5LDcxLjE1NzQ5MDQgQzIzNS42ODUwMTksNzEuOTc4NjYzOSAyMzUuNDE2NTYzLDcyLjY1NzcwMTEgMjM0Ljg3OTY0MSw3My4xOTQ2MjIzIEMyMzQuMzQyNzIsNzMuNzMxNTQzNCAyMzMuNjYzNjgzLDc0IDIzMi44NDI1MSw3NCBDMjMyLjAyMTMzNiw3NCAyMzEuMzQyMjk5LDczLjczMTU0MzQgMjMwLjgwNTM3OCw3My4xOTQ2MjIzIEMyMzAuMjY4NDU3LDcyLjY1NzcwMTEgMjMwLDcxLjk3ODY2MzkgMjMwLDcxLjE1NzQ5MDQgTDIzMCwyLjg0MjUwOTYgWiI+PC9wYXRoPgoKCQk8cGF0aCBjbGFzcz0ibyIgZD0iTTI4Ni45NTc5NzUsMjIgQzI5MS44ODgyMzIsMjIgMjk2LjM3NTk2MywyMy4xNTM1MzY1IDMwMC40MjEzMDIsMjUuNDYwNjQ0IEMzMDQuNDY2NjQyLDI3Ljc2Nzc1MTUgMzA3LjY0MjgxNywzMC45NDM5MjczIDMwOS45NDk5MjUsMzQuOTg5MjY2NSBDMzEyLjI1NzAzMiwzOS4wMzQ2MDU4IDMxMy40MTA1NjksNDMuNTUzOTQwNCAzMTMuNDEwNTY5LDQ4LjU0NzQwNjEgQzMxMy40MTA1NjksNTMuNDc3NjYzMyAzMTIuMjU3MDMyLDU3Ljk2NTM5NDIgMzA5Ljk0OTkyNSw2Mi4wMTA3MzM1IEMzMDcuNjQyODE3LDY2LjA1NjA3MjcgMzA0LjQ2NjY0Miw2OS4yMzIyNDg1IDMwMC40MjEzMDIsNzEuNTM5MzU2IEMyOTYuMzc1OTYzLDczLjg0NjQ2MzUgMjkxLjg4ODIzMiw3NSAyODYuOTU3OTc1LDc1IEMyODEuOTY0NTA5LDc1IDI3Ny40NDUxNzUsNzMuODQ2NDYzNSAyNzMuMzk5ODM1LDcxLjUzOTM1NiBDMjY5LjM1NDQ5Niw2OS4yMzIyNDg1IDI2Ni4xNzgzMiw2Ni4wNTYwNzI3IDI2My44NzEyMTMsNjIuMDEwNzMzNSBDMjYxLjU2NDEwNSw1Ny45NjUzOTQyIDI2MC40MTA1NjksNTMuNDc3NjYzMyAyNjAuNDEwNTY5LDQ4LjU0NzQwNjEgQzI2MC40MTA1NjksNDMuNTUzOTQwNCAyNjEuNTY0MTA1LDM5LjAzNDYwNTggMjYzLjg3MTIxMywzNC45ODkyNjY1IEMyNjYuMTc4MzIsMzAuOTQzOTI3MyAyNjkuMzU0NDk2LDI3Ljc2Nzc1MTUgMjczLjM5OTgzNSwyNS40NjA2NDQgQzI3Ny40NDUxNzUsMjMuMTUzNTM2NSAyODEuOTY0NTA5LDIyIDI4Ni45NTc5NzUsMjIgWiBNMjg2Ljk1Nzk3NSwyNy4zMDk0ODEyIEMyODMuMDM5MDUyLDI3LjMwOTQ4MTIgMjc5LjQ5OTQzNCwyOC4yNDE3OTE1IDI3Ni4zMzkwMTIsMzAuMTA2NDQwMSBDMjczLjE3ODU5MSwzMS45NzEwODg2IDI3MC42ODE4OTYsMzQuNTE1MTg5NiAyNjguODQ4ODUxLDM3LjczODgxOTMgQzI2Ny4wMTU4MDcsNDAuOTYyNDQ5IDI2Ni4wOTkyOTksNDQuNTY1Mjc1MyAyNjYuMDk5Mjk5LDQ4LjU0NzQwNjEgQzI2Ni4wOTkyOTksNTIuNTI5NTM2OSAyNjcuMDE1ODA3LDU2LjEzMjM2MzEgMjY4Ljg0ODg1MSw1OS4zNTU5OTI4IEMyNzAuNjgxODk2LDYyLjU3OTYyMjYgMjczLjE3ODU5MSw2NS4xMDc5MjE3IDI3Ni4zMzkwMTIsNjYuOTQwOTY2IEMyNzkuNDk5NDM0LDY4Ljc3NDAxMDQgMjgzLjAzOTA1Miw2OS42OTA1MTg4IDI4Ni45NTc5NzUsNjkuNjkwNTE4OCBDMjkwLjg3Njg5Nyw2OS42OTA1MTg4IDI5NC40MTY1MTYsNjguNzc0MDEwNCAyOTcuNTc2OTM3LDY2Ljk0MDk2NiBDMzAwLjczNzM1OSw2NS4xMDc5MjE3IDMwMy4yMTgyNTIsNjIuNTc5NjIyNiAzMDUuMDE5NjkyLDU5LjM1NTk5MjggQzMwNi44MjExMzIsNTYuMTMyMzYzMSAzMDcuNzIxODM5LDUyLjUyOTUzNjkgMzA3LjcyMTgzOSw0OC41NDc0MDYxIEMzMDcuNzIxODM5LDQ0LjU2NTI3NTMgMzA2LjgyMTEzMiw0MC45NjI0NDkgMzA1LjAxOTY5MiwzNy43Mzg4MTkzIEMzMDMuMjE4MjUyLDM0LjUxNTE4OTYgMzAwLjczNzM1OSwzMS45NzEwODg2IDI5Ny41NzY5MzcsMzAuMTA2NDQwMSBDMjk0LjQxNjUxNiwyOC4yNDE3OTE1IDI5MC44NzY4OTcsMjcuMzA5NDgxMiAyODYuOTU3OTc1LDI3LjMwOTQ4MTIgWiI+PC9wYXRoPgoKCQk8cGF0aCBjbGFzcz0iYyIgZD0iTTM1OS44MjA5NjMsMjIgQzM2My44NzM1NTIsMjIgMzY3LjU3NzgxNiwyMi43OTE1MDk0IDM3MC45MzM4NjYsMjQuMzc0NTUyIEMzNzQuMjg5OTE3LDI1Ljk1NzU5NDUgMzc3LjIwMjY3MSwyOC4zMDA0NjI0IDM3OS42NzIyMTgsMzEuNDAzMjI1OCBDMzgwLjExNTQ2OSwzMi4wMzY0NDI4IDM4MC4zMzcwOTIsMzIuNTc0NjY5MiAzODAuMzM3MDkyLDMzLjAxNzkyMTEgQzM4MC4zMzcwOTIsMzMuOTA0NDI1IDM3OS44OTM4NDcsMzQuNjAwOTUzMyAzNzkuMDA3MzQzLDM1LjEwNzUyNjkgQzM3OC41NjQwOTEsMzUuNDg3NDU3MSAzNzguMDU3NTI1LDM1LjY3NzQxOTQgMzc3LjQ4NzYzLDM1LjY3NzQxOTQgQzM3Ni42MDExMjYsMzUuNjc3NDE5NCAzNzUuODcyOTM3LDM1LjI5NzQ5NDggMzc1LjMwMzA0MiwzNC41Mzc2MzQ0IEMzNzEuMjUwNDUzLDI5LjcyNTE4NSAzNjYuMDg5ODEyLDI3LjMxODk5NjQgMzU5LjgyMDk2MywyNy4zMTg5OTY0IEMzNTYuMTQ4MzA0LDI3LjMxODk5NjQgMzUyLjg4NzI4NiwyOC4yMjEzMTcxIDM1MC4wMzc4MDksMzAuMDI1OTg1NyBDMzQ3LjE4ODMzMiwzMS44MzA2NTQyIDM0NC45ODc5MzYsMzQuMzQ3NjU0MSAzNDMuNDM2NTU0LDM3LjU3NzA2MDkgQzM0MS44ODUxNzMsNDAuODA2NDY3OCAzNDEuMTA5NDk0LDQ0LjQ0NzQxMSAzNDEuMTA5NDk0LDQ4LjUgQzM0MS4xMDk0OTQsNTIuNDg5MjY3MyAzNDEuOTY0MzI0LDU2LjA5ODU1MDIgMzQzLjY3NDAxLDU5LjMyNzk1NyBDMzQ1LjM4MzY5Niw2Mi41NTczNjM4IDM0Ny43NTgyMjQsNjUuMDkwMTkzOSAzNTAuNzk3NjY2LDY2LjkyNjUyMzMgQzM1My44MzcxMDcsNjguNzYyODUyNyAzNTcuMzE5NzQ5LDY5LjY4MTAwMzYgMzYxLjI0NTY5NCw2OS42ODEwMDM2IEMzNjYuODE4MDA0LDY5LjY4MTAwMzYgMzcxLjI4MjExNyw2OC4xMjk2NDUxIDM3NC42MzgxNjcsNjUuMDI2ODgxNyBDMzc1LjIwODA2Myw2NC40NTY5ODY0IDM3NS44NzI5MzEsNjQuMTcyMDQzIDM3Ni42MzI3OTEsNjQuMTcyMDQzIEMzNzcuMzI5MzMsNjQuMTcyMDQzIDM3Ny44OTkyMTcsNjQuMzkzNjY1NiAzNzguMzQyNDY4LDY0LjgzNjkxNzYgQzM3OC45NzU2ODUsNjUuNDA2ODEyOSAzNzkuMjkyMjg5LDY2LjEwMzM0MTIgMzc5LjI5MjI4OSw2Ni45MjY1MjMzIEMzNzkuMjkyMjg5LDY3LjYyMzA2MiAzNzkuMDM5MDA2LDY4LjE5Mjk0ODggMzc4LjUzMjQzMyw2OC42MzYyMDA3IEMzNzYuMzE2MTczLDcwLjY2MjQ5NTIgMzczLjcyMDAyMiw3Mi4yMjk2ODM4IDM3MC43NDM5MDIsNzMuMzM3ODEzNiBDMzY3Ljc2Nzc4Miw3NC40NDU5NDM0IDM2NC42MDE3NDQsNzUgMzYxLjI0NTY5NCw3NSBDMzU2LjM2OTkyMyw3NSAzNTEuOTY5MTMxLDczLjg0NDM5NjMgMzQ4LjA0MzE4NSw3MS41MzMxNTQxIEMzNDQuMTE3MjQsNjkuMjIxOTEyIDM0MS4wMzAzNTMsNjYuMDQwMDQ0MiAzMzguNzgyNDMzLDYxLjk4NzQ1NTIgQzMzNi41MzQ1MTIsNTcuOTM0ODY2MiAzMzUuNDEwNTY5LDUzLjQzOTA5MjggMzM1LjQxMDU2OSw0OC41IEMzMzUuNDEwNTY5LDQzLjQ5NzU4NTUgMzM2LjQ1NTM2MSwzOC45ODU5ODE5IDMzOC41NDQ5NzcsMzQuOTY1MDUzOCBDMzQwLjYzNDU5NCwzMC45NDQxMjU3IDM0My41NDczNDgsMjcuNzc4MDg4IDM0Ny4yODMzMjksMjUuNDY2ODQ1OSBDMzUxLjAxOTMwOSwyMy4xNTU2MDM3IDM1NS4xOTg0NzksMjIgMzU5LjgyMDk2MywyMiBaIj48L3BhdGg+CgoJPC9nPgo8L3N2Zz4=#gh-light-mode-only" width="380" height="120" class="img_ev3q">
<img loading="lazy" alt="Padloc Logo" src="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIC0xMiAzODAgMTIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBjbGFzcz0ibG9nbyI+CgoJPGcgZmlsbD0id2hpdGUiPgoKCQk8cGF0aCBjbGFzcz0icCIgZD0iTTI2LjQ1MjU5MzksMjEgQzMxLjQ0NjA1OTYsMjEgMzUuOTY1Mzk0MiwyMi4xNTM1MzY1IDQwLjAxMDczMzUsMjQuNDYwNjQ0IEM0NC4wNTYwNzI3LDI2Ljc2Nzc1MTUgNDcuMjMyMjQ4NSwyOS45NDM5MjczIDQ5LjUzOTM1NiwzMy45ODkyNjY1IEM1MS44NDY0NjM1LDM4LjAzNDYwNTggNTMsNDIuNTUzOTQwNCA1Myw0Ny41NDc0MDYxIEM1Myw1Mi40Nzc2NjMzIDUxLjg0NjQ2MzUsNTYuOTY1Mzk0MiA0OS41MzkzNTYsNjEuMDEwNzMzNSBDNDcuMjMyMjQ4NSw2NS4wNTYwNzI3IDQ0LjA1NjA3MjcsNjguMjMyMjQ4NSA0MC4wMTA3MzM1LDcwLjUzOTM1NiBDMzUuOTY1Mzk0Miw3Mi44NDY0NjM1IDMxLjQ0NjA1OTYsNzQgMjYuNDUyNTkzOSw3NCBDMjEuOTY0Nzk1Nyw3NCAxNy45MDM3MTUzLDczLjAzNjA4NiAxNC4yNjkyMzA4LDcxLjEwODIyOSBDMTAuNjM0NzQ2Myw2OS4xODAzNzIgNy43NzQ2MDc5Miw2Ni41NDE0NTk4IDUuNjg4NzI5ODcsNjMuMTkxNDEzMiBMNS42ODg3Mjk4Nyw5Mi43NzI4MDg2IEM1LjY4ODcyOTg3LDkzLjY1NzcyNjUgNS40MzU4OTk5Niw5NC4zNTMwMDg4IDQuOTMwMjMyNTYsOTQuODU4Njc2MiBDNC40MjQ1NjUxNSw5NS4zNjQzNDM2IDMuNzI5MjgyOSw5NS42MTcxNzM1IDIuODQ0MzY0OTQsOTUuNjE3MTczNSBDMi4wMjI2NTU0LDk1LjYxNzE3MzUgMS4zNDMxNzUwMiw5NS4zNjQzNDM2IDAuODA1OTAzMzk5LDk0Ljg1ODY3NjIgQzAuMjY4NjMxNzgsOTQuMzUzMDA4OCAxLjEzNjg2ODM4ZS0xMyw5My42NTc3MjY1IDEuMTM2ODY4MzhlLTEzLDkyLjc3MjgwODYgTDEuMTM2ODY4MzhlLTEzLDQ2Ljk3ODUzMzEgQzAuMDYzMjA4NDI1OCw0Mi4xMTE0ODQzIDEuMjY0MTUwNSwzNy42ODY5NjA5IDMuNjAyODYyMjUsMzMuNzA0ODMwMSBDNS45NDE1NzQwMSwyOS43MjI2OTkyIDkuMTE3NzQ5NzYsMjYuNjA5NzMxIDEzLjEzMTQ4NDgsMjQuMzY1ODMxOCBDMTcuMTQ1MjE5OCwyMi4xMjE5MzI3IDIxLjU4NTU0NTEsMjEgMjYuNDUyNTkzOSwyMSBaIE0yNi40NTI1OTM5LDY4LjY5MDUxODggQzMwLjM3MTUxNjMsNjguNjkwNTE4OCAzMy45MTExMzUxLDY3Ljc3NDAxMDQgMzcuMDcxNTU2NCw2NS45NDA5NjYgQzQwLjIzMTk3NzYsNjQuMTA3OTIxNyA0Mi43Mjg2NzMsNjEuNTc5NjIyNiA0NC41NjE3MTc0LDU4LjM1NTk5MjggQzQ2LjM5NDc2MTcsNTUuMTMyMzYzMSA0Ny4zMTEyNzAxLDUxLjUyOTUzNjkgNDcuMzExMjcwMSw0Ny41NDc0MDYxIEM0Ny4zMTEyNzAxLDQzLjU2NTI3NTMgNDYuMzk0NzYxNywzOS45NjI0NDkgNDQuNTYxNzE3NCwzNi43Mzg4MTkzIEM0Mi43Mjg2NzMsMzMuNTE1MTg5NiA0MC4yMzE5Nzc2LDMwLjk3MTA4ODYgMzcuMDcxNTU2NCwyOS4xMDY0NDAxIEMzMy45MTExMzUxLDI3LjI0MTc5MTUgMzAuMzcxNTE2MywyNi4zMDk0ODEyIDI2LjQ1MjU5MzksMjYuMzA5NDgxMiBDMjIuNTMzNjcxNSwyNi4zMDk0ODEyIDE4Ljk5NDA1MjgsMjcuMjQxNzkxNSAxNS44MzM2MzE1LDI5LjEwNjQ0MDEgQzEyLjY3MzIxMDIsMzAuOTcxMDg4NiAxMC4xOTIzMTY3LDMzLjUxNTE4OTYgOC4zOTA4NzY1NywzNi43Mzg4MTkzIEM2LjU4OTQzNjQzLDM5Ljk2MjQ0OSA1LjY4ODcyOTg3LDQzLjU2NTI3NTMgNS42ODg3Mjk4Nyw0Ny41NDc0MDYxIEM1LjY4ODcyOTg3LDUxLjUyOTUzNjkgNi41ODk0MzY0Myw1NS4xMzIzNjMxIDguMzkwODc2NTcsNTguMzU1OTkyOCBDMTAuMTkyMzE2Nyw2MS41Nzk2MjI2IDEyLjY3MzIxMDIsNjQuMTA3OTIxNyAxNS44MzM2MzE1LDY1Ljk0MDk2NiBDMTguOTk0MDUyOCw2Ny43NzQwMTA0IDIyLjUzMzY3MTUsNjguNjkwNTE4OCAyNi40NTI1OTM5LDY4LjY5MDUxODggWiI+PC9wYXRoPgoKCQk8cGF0aCBjbGFzcz0iYSIgZD0iTTEwMS45MDM4MTgsMjEgQzEwNi44MzQwNzUsMjEgMTExLjMyMTgwNiwyMi4xNTM1MzY1IDExNS4zNjcxNDUsMjQuNDYwNjQ0IEMxMTkuNDEyNDg1LDI2Ljc2Nzc1MTUgMTIyLjU4ODY2LDI5Ljk0MzkyNzMgMTI0Ljg5NTc2OCwzMy45ODkyNjY1IEMxMjcuMjAyODc2LDM4LjAzNDYwNTggMTI4LjM1NjQxMiw0Mi41NTM5NDA0IDEyOC4zNTY0MTIsNDcuNTQ3NDA2MSBMMTI4LjM1NjQxMiw3MC41ODY3NjIxIEMxMjguMzU2NDEyLDcxLjQwODQ3MTYgMTI4LjEwMzU4Miw3Mi4wODc5NTIgMTI3LjU5NzkxNSw3Mi42MjUyMjM2IEMxMjcuMDkyMjQ3LDczLjE2MjQ5NTIgMTI2LjM5Njk2NSw3My40MzExMjcgMTI1LjUxMjA0Nyw3My40MzExMjcgQzEyNC42OTAzMzgsNzMuNDMxMTI3IDEyNC4wMTA4NTcsNzMuMTYyNDk1MiAxMjMuNDczNTg2LDcyLjYyNTIyMzYgQzEyMi45MzYzMTQsNzIuMDg3OTUyIDEyMi42Njc2ODIsNzEuNDA4NDcxNiAxMjIuNjY3NjgyLDcwLjU4Njc2MjEgTDEyMi42Njc2ODIsNjMuMTkxNDEzMiBDMTIwLjU4MTgwNCw2Ni41NDE0NTk4IDExNy43MjE2NjYsNjkuMTgwMzcyIDExNC4wODcxODEsNzEuMTA4MjI5IEMxMTAuNDUyNjk3LDczLjAzNjA4NiAxMDYuMzkxNjE2LDc0IDEwMS45MDM4MTgsNzQgQzk2LjkxMDM1MjQsNzQgOTIuMzkxMDE3OCw3Mi44NDY0NjM1IDg4LjM0NTY3ODUsNzAuNTM5MzU2IEM4NC4zMDAzMzkzLDY4LjIzMjI0ODUgODEuMTI0MTYzNSw2NS4wNTYwNzI3IDc4LjgxNzA1Niw2MS4wMTA3MzM1IEM3Ni41MDk5NDg0LDU2Ljk2NTM5NDIgNzUuMzU2NDEyLDUyLjQ3NzY2MzMgNzUuMzU2NDEyLDQ3LjU0NzQwNjEgQzc1LjM1NjQxMiw0Mi41NTM5NDA0IDc2LjUwOTk0ODQsMzguMDM0NjA1OCA3OC44MTcwNTYsMzMuOTg5MjY2NSBDODEuMTI0MTYzNSwyOS45NDM5MjczIDg0LjMwMDMzOTMsMjYuNzY3NzUxNSA4OC4zNDU2Nzg1LDI0LjQ2MDY0NCBDOTIuMzkxMDE3OCwyMi4xNTM1MzY1IDk2LjkxMDM1MjQsMjEgMTAxLjkwMzgxOCwyMSBaIE0xMDEuOTAzODE4LDY4LjY5MDUxODggQzEwNS44MjI3NCw2OC42OTA1MTg4IDEwOS4zNjIzNTksNjcuNzc0MDEwNCAxMTIuNTIyNzgsNjUuOTQwOTY2IEMxMTUuNjgzMjAyLDY0LjEwNzkyMTcgMTE4LjE2NDA5NSw2MS41Nzk2MjI2IDExOS45NjU1MzUsNTguMzU1OTkyOCBDMTIxLjc2Njk3Niw1NS4xMzIzNjMxIDEyMi42Njc2ODIsNTEuNTI5NTM2OSAxMjIuNjY3NjgyLDQ3LjU0NzQwNjEgQzEyMi42Njc2ODIsNDMuNTY1Mjc1MyAxMjEuNzY2OTc2LDM5Ljk2MjQ0OSAxMTkuOTY1NTM1LDM2LjczODgxOTMgQzExOC4xNjQwOTUsMzMuNTE1MTg5NiAxMTUuNjgzMjAyLDMwLjk3MTA4ODYgMTEyLjUyMjc4LDI5LjEwNjQ0MDEgQzEwOS4zNjIzNTksMjcuMjQxNzkxNSAxMDUuODIyNzQsMjYuMzA5NDgxMiAxMDEuOTAzODE4LDI2LjMwOTQ4MTIgQzk3Ljk4NDg5NTcsMjYuMzA5NDgxMiA5NC40NDUyNzY5LDI3LjI0MTc5MTUgOTEuMjg0ODU1NiwyOS4xMDY0NDAxIEM4OC4xMjQ0MzQzLDMwLjk3MTA4ODYgODUuNjI3NzM5LDMzLjUxNTE4OTYgODMuNzk0Njk0NiwzNi43Mzg4MTkzIEM4MS45NjE2NTAzLDM5Ljk2MjQ0OSA4MS4wNDUxNDE5LDQzLjU2NTI3NTMgODEuMDQ1MTQxOSw0Ny41NDc0MDYxIEM4MS4wNDUxNDE5LDUxLjUyOTUzNjkgODEuOTYxNjUwMyw1NS4xMzIzNjMxIDgzLjc5NDY5NDYsNTguMzU1OTkyOCBDODUuNjI3NzM5LDYxLjU3OTYyMjYgODguMTI0NDM0Myw2NC4xMDc5MjE3IDkxLjI4NDg1NTYsNjUuOTQwOTY2IEM5NC40NDUyNzY5LDY3Ljc3NDAxMDQgOTcuOTg0ODk1Nyw2OC42OTA1MTg4IDEwMS45MDM4MTgsNjguNjkwNTE4OCBaIj48L3BhdGg+CgoJCTxwYXRoIGNsYXNzPSJkIiBkPSJNMjAwLjQ1MzYxMiwxIEMyMDEuMzMxMjEsMSAyMDIuMDIwNzQyLDEuMjUwNzM4NyAyMDIuNTIyMjI3LDEuNzUyMjIzNjMgQzIwMy4wMjM3MTIsMi4yNTM3MDg1NiAyMDMuMjc0NDUsMi45NDMyNCAyMDMuMjc0NDUsMy44MjA4Mzg2MyBMMjAzLjI3NDQ1LDQ5LjIzNjM0MDUgQzIwMy4yMTE3NjUsNTQuMDYzMTMzIDIwMi4wMjA3NTYsNTguNDUxMDYwMyAxOTkuNzAxMzg4LDYyLjQwMDI1NDEgQzE5Ny4zODIwMiw2Ni4zNDk0NDggMTk0LjIzMjExNSw2OS40MzY2NjgyIDE5MC4yNTE1NzksNzEuNjYyMDA3NiBDMTg2LjI3MTA0Miw3My44ODczNDcgMTgxLjg2NzQ0NCw3NSAxNzcuMDQwNjUxLDc1IEMxNzIuMDg4NDg3LDc1IDE2Ny42MDY1MzMsNzMuODU2MDA0NyAxNjMuNTk0NjU0LDcxLjU2Nzk3OTcgQzE1OS41ODI3NzQsNjkuMjc5OTU0NyAxNTYuNDMyODY5LDY2LjEzMDA0OTcgMTU0LjE0NDg0NCw2Mi4xMTgxNzAzIEMxNTEuODU2ODE5LDU4LjEwNjI5MDggMTUwLjcxMjgyNCw1My42MjQzMzY1IDE1MC43MTI4MjQsNDguNjcyMTcyOCBDMTUwLjcxMjgyNCw0My43ODI2OTQ3IDE1MS44NTY4MTksMzkuMzMyMDgyNyAxNTQuMTQ0ODQ0LDM1LjMyMDIwMzMgQzE1Ni40MzI4NjksMzEuMzA4MzIzOSAxNTkuNTgyNzc0LDI4LjE1ODQxODkgMTYzLjU5NDY1NCwyNS44NzAzOTM5IEMxNjcuNjA2NTMzLDIzLjU4MjM2ODkgMTcyLjA4ODQ4NywyMi40MzgzNzM2IDE3Ny4wNDA2NTEsMjIuNDM4MzczNiBDMTgxLjQ5MTMzLDIyLjQzODM3MzYgMTg1LjUxODgyLDIzLjM5NDMxNDkgMTg5LjEyMzI0MywyNS4zMDYyMjYyIEMxOTIuNzI3NjY2LDI3LjIxODEzNzUgMTk1LjU2NDE0OCwyOS44MzUyMjI3IDE5Ny42MzI3NzMsMzMuMTU3NTYwNCBMMTk3LjYzMjc3MywzLjgyMDgzODYzIEMxOTcuNjMyNzczLDIuOTQzMjQgMTk3Ljg5OTE4MywyLjI1MzcwODU2IDE5OC40MzIwMTEsMS43NTIyMjM2MyBDMTk4Ljk2NDgzOCwxLjI1MDczODcgMTk5LjYzODY5OSwxIDIwMC40NTM2MTIsMSBaIE0xNzcuMDQwNjUxLDY5LjczNDQzNDYgQzE4MC45MjcxNTksNjkuNzM0NDM0NiAxODQuNDM3NTAxLDY4LjgwOTgzNTYgMTg3LjU3MTc4Miw2Ni45NjA2MDk5IEMxOTAuNzA2MDYzLDY1LjExMTM4NDIgMTkzLjE2NjQzNiw2Mi41ODgzMjYgMTk0Ljk1Mjk3Niw1OS4zOTEzNTk2IEMxOTYuNzM5NTE3LDU2LjE5NDM5MzIgMTk3LjYzMjc3Myw1Mi42MjEzNjY2IDE5Ny42MzI3NzMsNDguNjcyMTcyOCBDMTk3LjYzMjc3Myw0NC43MjI5NzkgMTk2LjczOTUxNyw0MS4xNDk5NTI1IDE5NC45NTI5NzYsMzcuOTUyOTg2IEMxOTMuMTY2NDM2LDM0Ljc1NjAxOTYgMTkwLjcwNjA2MywzMi4yNDg2MzI2IDE4Ny41NzE3ODIsMzAuNDMwNzQ5NyBDMTg0LjQzNzUwMSwyOC42MTI4NjY4IDE4MC45MjcxNTksMjcuNzAzOTM5IDE3Ny4wNDA2NTEsMjcuNzAzOTM5IEMxNzMuMTU0MTQzLDI3LjcwMzkzOSAxNjkuNjQzODAxLDI4LjYxMjg2NjggMTY2LjUwOTUyLDMwLjQzMDc0OTcgQzE2My4zNzUyMzksMzIuMjQ4NjMyNiAxNjAuODk5MTk1LDM0Ljc1NjAxOTYgMTU5LjA4MTMxMiwzNy45NTI5ODYgQzE1Ny4yNjM0MjksNDEuMTQ5OTUyNSAxNTYuMzU0NTAxLDQ0LjcyMjk3OSAxNTYuMzU0NTAxLDQ4LjY3MjE3MjggQzE1Ni4zNTQ1MDEsNTIuNjIxMzY2NiAxNTcuMjYzNDI5LDU2LjE5NDM5MzIgMTU5LjA4MTMxMiw1OS4zOTEzNTk2IEMxNjAuODk5MTk1LDYyLjU4ODMyNiAxNjMuMzc1MjM5LDY1LjExMTM4NDIgMTY2LjUwOTUyLDY2Ljk2MDYwOTkgQzE2OS42NDM4MDEsNjguODA5ODM1NiAxNzMuMTU0MTQzLDY5LjczNDQzNDYgMTc3LjA0MDY1MSw2OS43MzQ0MzQ2IFoiPjwvcGF0aD4KCgkJPHBhdGggY2xhc3M9ImwiIGQ9Ik0yMzAsMi44NDI1MDk2IEMyMzAsMi4wMjEzMzYwNiAyMzAuMjY4NDU3LDEuMzQyMjk4ODkgMjMwLjgwNTM3OCwwLjgwNTM3NzcyMSBDMjMxLjM0MjI5OSwwLjI2ODQ1NjU1NiAyMzIuMDIxMzM2LDAgMjMyLjg0MjUxLDAgQzIzMy42NjM2ODMsMCAyMzQuMzQyNzIsMC4yNjg0NTY1NTYgMjM0Ljg3OTY0MSwwLjgwNTM3NzcyMSBDMjM1LjQxNjU2MywxLjM0MjI5ODg5IDIzNS42ODUwMTksMi4wMjEzMzYwNiAyMzUuNjg1MDE5LDIuODQyNTA5NiBMMjM1LjY4NTAxOSw3MS4xNTc0OTA0IEMyMzUuNjg1MDE5LDcxLjk3ODY2MzkgMjM1LjQxNjU2Myw3Mi42NTc3MDExIDIzNC44Nzk2NDEsNzMuMTk0NjIyMyBDMjM0LjM0MjcyLDczLjczMTU0MzQgMjMzLjY2MzY4Myw3NCAyMzIuODQyNTEsNzQgQzIzMi4wMjEzMzYsNzQgMjMxLjM0MjI5OSw3My43MzE1NDM0IDIzMC44MDUzNzgsNzMuMTk0NjIyMyBDMjMwLjI2ODQ1Nyw3Mi42NTc3MDExIDIzMCw3MS45Nzg2NjM5IDIzMCw3MS4xNTc0OTA0IEwyMzAsMi44NDI1MDk2IFoiPjwvcGF0aD4KCgkJPHBhdGggY2xhc3M9Im8iIGQ9Ik0yODYuOTU3OTc1LDIyIEMyOTEuODg4MjMyLDIyIDI5Ni4zNzU5NjMsMjMuMTUzNTM2NSAzMDAuNDIxMzAyLDI1LjQ2MDY0NCBDMzA0LjQ2NjY0MiwyNy43Njc3NTE1IDMwNy42NDI4MTcsMzAuOTQzOTI3MyAzMDkuOTQ5OTI1LDM0Ljk4OTI2NjUgQzMxMi4yNTcwMzIsMzkuMDM0NjA1OCAzMTMuNDEwNTY5LDQzLjU1Mzk0MDQgMzEzLjQxMDU2OSw0OC41NDc0MDYxIEMzMTMuNDEwNTY5LDUzLjQ3NzY2MzMgMzEyLjI1NzAzMiw1Ny45NjUzOTQyIDMwOS45NDk5MjUsNjIuMDEwNzMzNSBDMzA3LjY0MjgxNyw2Ni4wNTYwNzI3IDMwNC40NjY2NDIsNjkuMjMyMjQ4NSAzMDAuNDIxMzAyLDcxLjUzOTM1NiBDMjk2LjM3NTk2Myw3My44NDY0NjM1IDI5MS44ODgyMzIsNzUgMjg2Ljk1Nzk3NSw3NSBDMjgxLjk2NDUwOSw3NSAyNzcuNDQ1MTc1LDczLjg0NjQ2MzUgMjczLjM5OTgzNSw3MS41MzkzNTYgQzI2OS4zNTQ0OTYsNjkuMjMyMjQ4NSAyNjYuMTc4MzIsNjYuMDU2MDcyNyAyNjMuODcxMjEzLDYyLjAxMDczMzUgQzI2MS41NjQxMDUsNTcuOTY1Mzk0MiAyNjAuNDEwNTY5LDUzLjQ3NzY2MzMgMjYwLjQxMDU2OSw0OC41NDc0MDYxIEMyNjAuNDEwNTY5LDQzLjU1Mzk0MDQgMjYxLjU2NDEwNSwzOS4wMzQ2MDU4IDI2My44NzEyMTMsMzQuOTg5MjY2NSBDMjY2LjE3ODMyLDMwLjk0MzkyNzMgMjY5LjM1NDQ5NiwyNy43Njc3NTE1IDI3My4zOTk4MzUsMjUuNDYwNjQ0IEMyNzcuNDQ1MTc1LDIzLjE1MzUzNjUgMjgxLjk2NDUwOSwyMiAyODYuOTU3OTc1LDIyIFogTTI4Ni45NTc5NzUsMjcuMzA5NDgxMiBDMjgzLjAzOTA1MiwyNy4zMDk0ODEyIDI3OS40OTk0MzQsMjguMjQxNzkxNSAyNzYuMzM5MDEyLDMwLjEwNjQ0MDEgQzI3My4xNzg1OTEsMzEuOTcxMDg4NiAyNzAuNjgxODk2LDM0LjUxNTE4OTYgMjY4Ljg0ODg1MSwzNy43Mzg4MTkzIEMyNjcuMDE1ODA3LDQwLjk2MjQ0OSAyNjYuMDk5Mjk5LDQ0LjU2NTI3NTMgMjY2LjA5OTI5OSw0OC41NDc0MDYxIEMyNjYuMDk5Mjk5LDUyLjUyOTUzNjkgMjY3LjAxNTgwNyw1Ni4xMzIzNjMxIDI2OC44NDg4NTEsNTkuMzU1OTkyOCBDMjcwLjY4MTg5Niw2Mi41Nzk2MjI2IDI3My4xNzg1OTEsNjUuMTA3OTIxNyAyNzYuMzM5MDEyLDY2Ljk0MDk2NiBDMjc5LjQ5OTQzNCw2OC43NzQwMTA0IDI4My4wMzkwNTIsNjkuNjkwNTE4OCAyODYuOTU3OTc1LDY5LjY5MDUxODggQzI5MC44NzY4OTcsNjkuNjkwNTE4OCAyOTQuNDE2NTE2LDY4Ljc3NDAxMDQgMjk3LjU3NjkzNyw2Ni45NDA5NjYgQzMwMC43MzczNTksNjUuMTA3OTIxNyAzMDMuMjE4MjUyLDYyLjU3OTYyMjYgMzA1LjAxOTY5Miw1OS4zNTU5OTI4IEMzMDYuODIxMTMyLDU2LjEzMjM2MzEgMzA3LjcyMTgzOSw1Mi41Mjk1MzY5IDMwNy43MjE4MzksNDguNTQ3NDA2MSBDMzA3LjcyMTgzOSw0NC41NjUyNzUzIDMwNi44MjExMzIsNDAuOTYyNDQ5IDMwNS4wMTk2OTIsMzcuNzM4ODE5MyBDMzAzLjIxODI1MiwzNC41MTUxODk2IDMwMC43MzczNTksMzEuOTcxMDg4NiAyOTcuNTc2OTM3LDMwLjEwNjQ0MDEgQzI5NC40MTY1MTYsMjguMjQxNzkxNSAyOTAuODc2ODk3LDI3LjMwOTQ4MTIgMjg2Ljk1Nzk3NSwyNy4zMDk0ODEyIFoiPjwvcGF0aD4KCgkJPHBhdGggY2xhc3M9ImMiIGQ9Ik0zNTkuODIwOTYzLDIyIEMzNjMuODczNTUyLDIyIDM2Ny41Nzc4MTYsMjIuNzkxNTA5NCAzNzAuOTMzODY2LDI0LjM3NDU1MiBDMzc0LjI4OTkxNywyNS45NTc1OTQ1IDM3Ny4yMDI2NzEsMjguMzAwNDYyNCAzNzkuNjcyMjE4LDMxLjQwMzIyNTggQzM4MC4xMTU0NjksMzIuMDM2NDQyOCAzODAuMzM3MDkyLDMyLjU3NDY2OTIgMzgwLjMzNzA5MiwzMy4wMTc5MjExIEMzODAuMzM3MDkyLDMzLjkwNDQyNSAzNzkuODkzODQ3LDM0LjYwMDk1MzMgMzc5LjAwNzM0MywzNS4xMDc1MjY5IEMzNzguNTY0MDkxLDM1LjQ4NzQ1NzEgMzc4LjA1NzUyNSwzNS42Nzc0MTk0IDM3Ny40ODc2MywzNS42Nzc0MTk0IEMzNzYuNjAxMTI2LDM1LjY3NzQxOTQgMzc1Ljg3MjkzNywzNS4yOTc0OTQ4IDM3NS4zMDMwNDIsMzQuNTM3NjM0NCBDMzcxLjI1MDQ1MywyOS43MjUxODUgMzY2LjA4OTgxMiwyNy4zMTg5OTY0IDM1OS44MjA5NjMsMjcuMzE4OTk2NCBDMzU2LjE0ODMwNCwyNy4zMTg5OTY0IDM1Mi44ODcyODYsMjguMjIxMzE3MSAzNTAuMDM3ODA5LDMwLjAyNTk4NTcgQzM0Ny4xODgzMzIsMzEuODMwNjU0MiAzNDQuOTg3OTM2LDM0LjM0NzY1NDEgMzQzLjQzNjU1NCwzNy41NzcwNjA5IEMzNDEuODg1MTczLDQwLjgwNjQ2NzggMzQxLjEwOTQ5NCw0NC40NDc0MTEgMzQxLjEwOTQ5NCw0OC41IEMzNDEuMTA5NDk0LDUyLjQ4OTI2NzMgMzQxLjk2NDMyNCw1Ni4wOTg1NTAyIDM0My42NzQwMSw1OS4zMjc5NTcgQzM0NS4zODM2OTYsNjIuNTU3MzYzOCAzNDcuNzU4MjI0LDY1LjA5MDE5MzkgMzUwLjc5NzY2Niw2Ni45MjY1MjMzIEMzNTMuODM3MTA3LDY4Ljc2Mjg1MjcgMzU3LjMxOTc0OSw2OS42ODEwMDM2IDM2MS4yNDU2OTQsNjkuNjgxMDAzNiBDMzY2LjgxODAwNCw2OS42ODEwMDM2IDM3MS4yODIxMTcsNjguMTI5NjQ1MSAzNzQuNjM4MTY3LDY1LjAyNjg4MTcgQzM3NS4yMDgwNjMsNjQuNDU2OTg2NCAzNzUuODcyOTMxLDY0LjE3MjA0MyAzNzYuNjMyNzkxLDY0LjE3MjA0MyBDMzc3LjMyOTMzLDY0LjE3MjA0MyAzNzcuODk5MjE3LDY0LjM5MzY2NTYgMzc4LjM0MjQ2OCw2NC44MzY5MTc2IEMzNzguOTc1Njg1LDY1LjQwNjgxMjkgMzc5LjI5MjI4OSw2Ni4xMDMzNDEyIDM3OS4yOTIyODksNjYuOTI2NTIzMyBDMzc5LjI5MjI4OSw2Ny42MjMwNjIgMzc5LjAzOTAwNiw2OC4xOTI5NDg4IDM3OC41MzI0MzMsNjguNjM2MjAwNyBDMzc2LjMxNjE3Myw3MC42NjI0OTUyIDM3My43MjAwMjIsNzIuMjI5NjgzOCAzNzAuNzQzOTAyLDczLjMzNzgxMzYgQzM2Ny43Njc3ODIsNzQuNDQ1OTQzNCAzNjQuNjAxNzQ0LDc1IDM2MS4yNDU2OTQsNzUgQzM1Ni4zNjk5MjMsNzUgMzUxLjk2OTEzMSw3My44NDQzOTYzIDM0OC4wNDMxODUsNzEuNTMzMTU0MSBDMzQ0LjExNzI0LDY5LjIyMTkxMiAzNDEuMDMwMzUzLDY2LjA0MDA0NDIgMzM4Ljc4MjQzMyw2MS45ODc0NTUyIEMzMzYuNTM0NTEyLDU3LjkzNDg2NjIgMzM1LjQxMDU2OSw1My40MzkwOTI4IDMzNS40MTA1NjksNDguNSBDMzM1LjQxMDU2OSw0My40OTc1ODU1IDMzNi40NTUzNjEsMzguOTg1OTgxOSAzMzguNTQ0OTc3LDM0Ljk2NTA1MzggQzM0MC42MzQ1OTQsMzAuOTQ0MTI1NyAzNDMuNTQ3MzQ4LDI3Ljc3ODA4OCAzNDcuMjgzMzI5LDI1LjQ2Njg0NTkgQzM1MS4wMTkzMDksMjMuMTU1NjAzNyAzNTUuMTk4NDc5LDIyIDM1OS44MjA5NjMsMjIgWiI+PC9wYXRoPgoKCTwvZz4KPC9zdmc+#gh-dark-mode-only" width="380" height="120" class="img_ev3q"></p></div><div class="col col--10"><p><em>"With its security-focused design and low memory footprint, Tauri is the electron alternative we've been waiting for. Tauri has allowed us to build a more secure, more performant desktop app while using the same web technologies, which we love. Thanks to the team for their amazing work!</em><br>
<em>P.S.: Can't wait for mobile support!"</em></p><p><strong>- Martin Kleinschrodt</strong>, <a href="https://padloc.app/" target="_blank" rel="noopener noreferrer">Padloc</a> Founder</p></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="feedback">Feedback<a href="#feedback" class="hash-link" aria-label="Direct link to Feedback" title="Direct link to Feedback">​</a></h2><p>You can visit our code base, file a bug-report, request a feature, or join the discussion on <a href="https://github.com/tauri-apps/tauri" target="_blank" rel="noopener noreferrer">GitHub</a>. There's lots of things that people make, and visiting the <a href="https://github.com/tauri-apps/awesome-tauri" target="_blank" rel="noopener noreferrer">awesome-tauri repo on GitHub</a> is a great place to discover and share. If you need support or just want to hang out, you can <a href="https://discord.gg/tauri" target="_blank" rel="noopener noreferrer">join our Discord server</a>.</p><p>Tauri is one of the top 200 projects on GitHub in all programming languages.</p><figure><p><img loading="lazy" alt="github" src="/ko/assets/images/github_stars_light-41c77cf95a806ce2547eda8bffe2c15f.png#gh-light-mode-only" width="1466" height="536" class="img_ev3q">
<img loading="lazy" alt="github" src="/ko/assets/images/github_stars_dark-f371cf73562d814e6cbc45adaea930d4.png#gh-dark-mode-only" width="1468" height="550" class="img_ev3q"></p><figcaption></figcaption></figure><p>People love to discuss what is great and terrible about Tauri on orange websites:</p><figure><p><img loading="lazy" alt="hackernews" src="/ko/assets/images/hackernews-1d0261ac9089b3ec254ca5406a95ca64.jpg" width="1000" height="636" class="img_ev3q"></p><figcaption></figcaption></figure><p>Tauri entered at the top of the charts for the <a href="https://2021.stateofjs.com/en-US/libraries/mobile-desktop" target="_blank" rel="noopener noreferrer">2021 edition of State of JS</a>:</p><a href="https://2021.stateofjs.com/en-US/libraries/mobile-desktop" target="_blank" rel="noopener noreferrer"></a><figure><p><img loading="lazy" alt="State of JS 2021" src="/ko/assets/images/state_of_js-4d3cbc0f2d20816dd8628b38060e04dd.png" width="1969" height="1522" class="img_ev3q"></p><figcaption></figcaption></figure><p>Engineers at big companies seem to be eying up Tauri for future projects.</p><figure><p><img loading="lazy" alt="hackernews" src="/ko/assets/images/ossinsight-45949ccf166d68ac4658b4273dfb61d5.jpg" width="1000" height="532" class="img_ev3q"></p><figcaption><p><a href="https://api.ossinsight.io/share/e0a8c3f4-a28f-48ac-b541-7b19fe08975b" target="_blank" rel="noopener noreferrer">OSS Insight</a></p></figcaption></figure><h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-next">What's Next?<a href="#whats-next" class="hash-link" aria-label="Direct link to What's Next?" title="Direct link to What's Next?">​</a></h2><p>Fresh off the heels of the 1.0 release, the team is already setting our sights on the next steps for Tauri. While we continuously work on improving our documentation, we're also working on:</p><ul><li>Mobile support for both iOS and Android</li><li>Alternative renderers</li><li>IPC enhancements to enable improved debugging</li><li>Runtime plugins</li><li>Support for additional bindings in other languages</li></ul><p>We're also inspired by the community to see which features are being used and what new features will enable them to develop even more amazing applications. Your feedback is the most important thing to Tauri's future innovation!</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="thank-you">Thank You<a href="#thank-you" class="hash-link" aria-label="Direct link to Thank You" title="Direct link to Thank You">​</a></h2><p>A special thanks to all our contributors who volunteered their precious time to make Tauri awesome and all our sponsors whose generous donations made Tauri possible (and financed a large portion of our audit!)!</p><p>The support of industry giants has been really helpful keeping the lights on. Here's an alphabetical list:</p><ul><li><a href="https://www.cloudflare.com/" target="_blank" rel="noopener noreferrer">Cloudflare</a> for sponsoring unlimited workers for the OSS updater service (coming soon)</li><li><a href="https://www.digitalocean.com/" target="_blank" rel="noopener noreferrer">DigitalOcean</a> for comping the droplets that run our bots and search</li><li><a href="https://github.com" target="_blank" rel="noopener noreferrer">GitHub</a> for the extra minutes of CI</li><li><a href="https://www.netlify.com/" target="_blank" rel="noopener noreferrer">Netlify</a> for our website hosting</li><li><a href="https://nlnet.nl/" target="_blank" rel="noopener noreferrer">NLNET</a> who has financially supported Tauri development via grants</li><li><a href="https://www.packtpub.com/" target="_blank" rel="noopener noreferrer">PACKT</a> who will be publishing our books</li></ul><p>Here are a few notable contributors we'd like to thank explicitly:</p><table><thead><tr><th align="left">GitHub Profile</th><th align="left">Contribution</th><th align="left">Repository</th></tr></thead><tbody><tr><td align="left">@malyn</td><td align="left">Fixed http stream</td><td align="left"><code>wry</code></td></tr><tr><td align="left">@wravery</td><td align="left">windows-rs support, webview2-rs</td><td align="left"><code>tao</code>, <code>wry</code></td></tr><tr><td align="left">@liushuyu</td><td align="left">Added headers feature to webkit2gtk</td><td align="left"><code>wry</code></td></tr><tr><td align="left">@emirror-de</td><td align="left">System tray support</td><td align="left"><code>tao</code></td></tr><tr><td align="left">@lorenzolewis</td><td align="left">tauri.app updates</td><td align="left"><code>tauri-docs</code></td></tr><tr><td align="left">@probablykasper</td><td align="left">Support for more accelerators, restructured documentation</td><td align="left"><code>tao</code>, <code>tauri-docs</code></td></tr><tr><td align="left">@grbd</td><td align="left">Added an example to use tauri as a C++ DLL</td><td align="left"><code>tauri</code></td></tr><tr><td align="left">@youngsing</td><td align="left">Added macOS vibrancy</td><td align="left"><code>tauri-plugin-vibrancy</code></td></tr><tr><td align="left">@lemarier</td><td align="left">Updater, menus, system tray, iOS, clipboard api, bytes-stream &amp; ++</td><td align="left"><code>wry</code>, <code>tao</code>, <code>tauri</code></td></tr><tr><td align="left">@JonasKruckenberg</td><td align="left">Tauri plugin upgrades and documentation overhaul</td><td align="left"><code>tauri-plugin-*</code>, <code>tauri-docs</code></td></tr><tr><td align="left">@ImmaZoni</td><td align="left">Code signing guides for macOS and Windows</td><td align="left"><code>tauri-docs</code></td></tr><tr><td align="left">@chippers</td><td align="left">Isolation pattern, shell scope, compile-time code generation and several other security features</td><td align="left"><code>tauri</code></td></tr><tr><td align="left">@fabianlars</td><td align="left">Community support, AppImage fixes, code review</td><td align="left">all repos, mainly <code>tauri</code>, <code>tauri-docs</code></td></tr><tr><td align="left">@amrbashir</td><td align="left">TAO and WRY features and fixes, overall OS guru</td><td align="left"><code>tao</code>, <code>wry</code></td></tr><tr><td align="left">@wusyong</td><td align="left">TAO and WRY founder and researcher</td><td align="left"><code>tao</code>, <code>wry</code></td></tr><tr><td align="left">@nklayman</td><td align="left">custom protocol</td><td align="left"><code>tauri</code></td></tr></tbody></table><br><hr><br><p>We'd like to wrap up by highlighting comments from just a small handful of core Tauri contributors:</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="amr-bashir"><a href="https://github.com/amrbashir" target="_blank" rel="noopener noreferrer">Amr Bashir</a><a href="#amr-bashir" class="hash-link" aria-label="Direct link to amr-bashir" title="Direct link to amr-bashir">​</a></h4><p><strong>What feature are you most excited about?</strong><br>
<!-- -->The customizations we offer for the window but that's because it is what I mostly worked on. I am also excited about how Tauri will change the mindset of some people and help them build secure apps by default.</p><p><strong>What is your proudest moment/contribution with Tauri?</strong><br>
<!-- -->Probably when I removed about 20 lines of code in favor of only 3 lines. I wrote both and that's why it felt special, because it was an indicator of how much I've grown as a developer.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="chip-reed"><a href="https://github.com/chippers" target="_blank" rel="noopener noreferrer">Chip Reed</a><a href="#chip-reed" class="hash-link" aria-label="Direct link to chip-reed" title="Direct link to chip-reed">​</a></h4><p><strong>What feature are you most excited about?</strong><br>
<!-- -->Not needing to use <code>--locked</code> when installing the CLI.</p><p><strong>What is your proudest moment/contribution with Tauri?</strong><br>
<!-- -->Building the Isolation Pattern</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="didrik-nordström"><a href="https://github.com/betamos/" target="_blank" rel="noopener noreferrer">Didrik Nordström</a><a href="#didrik-nordström" class="hash-link" aria-label="Direct link to didrik-nordström" title="Direct link to didrik-nordström">​</a></h4><p><strong>What feature are you most excited about?</strong><br>
<!-- -->File drag &amp; drop.</p><p><strong>What is your proudest moment/contribution with Tauri?</strong><br>
<!-- -->Quality/stability: Tracking down and fixing a segmentation fault: <a href="https://github.com/h4llow3En/mac-notification-sys/pull/40" target="_blank" rel="noopener noreferrer">https://github.com/h4llow3En/mac-notification-sys/pull/40</a></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="fabian-lars"><a href="https://github.com/FabianLars" target="_blank" rel="noopener noreferrer">Fabian-Lars</a><a href="#fabian-lars" class="hash-link" aria-label="Direct link to fabian-lars" title="Direct link to fabian-lars">​</a></h4><p><strong>What feature are you most excited about?</strong><br>
<!-- -->Is "All of them" a valid answer?</p><p><strong>What is your proudest moment/contribution with Tauri?</strong><br>
<!-- -->Hmm, probably when I was asked to join the team. Fixing AppImages again and again and again is a close second...</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="jonas-kruckenberg"><a href="https://github.com/JonasKruckenberg" target="_blank" rel="noopener noreferrer">Jonas Kruckenberg</a><a href="#jonas-kruckenberg" class="hash-link" aria-label="Direct link to jonas-kruckenberg" title="Direct link to jonas-kruckenberg">​</a></h4><p><strong>What feature are you most excited about?</strong><br>
<!-- -->The auto-updater is pretty great but plugins are very dear to me and definitely the most promising feature of Tauri!</p><p><strong>What is your proudest moment/contribution with Tauri?</strong><br>
<!-- -->Moderating the tauri-awesome repo. Seeing so many strangers build cool things with and for the work you've been doing. That's a really great feeling.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="kasper-henningsen"><a href="https://github.com/probablykasper" target="_blank" rel="noopener noreferrer">Kasper Henningsen</a><a href="#kasper-henningsen" class="hash-link" aria-label="Direct link to kasper-henningsen" title="Direct link to kasper-henningsen">​</a></h4><p><strong>What inspired you to join Tauri?</strong><br>
<!-- -->I was making a few Tauri apps, and just found some features/improvements I wanted to go for.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="laegel"><a href="https://github.com/laegel" target="_blank" rel="noopener noreferrer">Laegel</a><a href="#laegel" class="hash-link" aria-label="Direct link to laegel" title="Direct link to laegel">​</a></h4><p><strong>What feature are you most excited about?</strong><br>
<!-- -->It may sound silly but I love customizing stuff, so the possibility to make almost anything with our windows appearance is neat.</p><p><strong>What is your proudest moment/contribution with Tauri?</strong><br>
<!-- -->Creating the foundations of Tauri docs as we know them today and trying to provide clean and easy to understand docs.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="lemarier"><a href="https://github.com/lemarier" target="_blank" rel="noopener noreferrer">lemarier</a><a href="#lemarier" class="hash-link" aria-label="Direct link to lemarier" title="Direct link to lemarier">​</a></h4><p><strong>What feature are you most excited about?</strong><br>
<!-- -->Pretty much everything, getting Tauri out of a proof of concept to something stable is a huge milestone.</p><p><strong>What is your proudest moment/contribution with Tauri?</strong><br>
<!-- -->TAO and all under laying features (menus, trays, etc..), benchmarks and the proof of concept for iOS.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="lorenzo-lewis"><a href="https://github.com/lorenzolewis" target="_blank" rel="noopener noreferrer">Lorenzo Lewis</a><a href="#lorenzo-lewis" class="hash-link" aria-label="Direct link to lorenzo-lewis" title="Direct link to lorenzo-lewis">​</a></h4><p><strong>What feature are you most excited about?</strong><br>
<!-- -->Overall resource efficiency. We've all been where we have a handful of "native" web apps running on our machine and it grinds to a halt. I'm ready for those small bundle sizes!</p><p><strong>What is your proudest moment/contribution with Tauri?</strong><br>
<!-- -->The overall tauri.app website. It was in a really good place when I joined, but I knew I could help boost it up to the next level. Even things like picking a title for a sidebar can take a long time with all the discussions, but at the end of the day we all have the best output from putting our heads together.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="lucas-nogueira"><a href="https://github.com/lucasfernog" target="_blank" rel="noopener noreferrer">Lucas Nogueira</a><a href="#lucas-nogueira" class="hash-link" aria-label="Direct link to lucas-nogueira" title="Direct link to lucas-nogueira">​</a></h4><p><strong>What feature are you most excited about?</strong><br>
<!-- -->Plugins!</p><p><strong>What are you most excited about now that the launch is through?</strong><br>
<!-- -->MOBILE and the upcoming egui integration launch</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="noah-klayman"><a href="https://github.com/nklayman" target="_blank" rel="noopener noreferrer">Noah Klayman</a><a href="#noah-klayman" class="hash-link" aria-label="Direct link to noah-klayman" title="Direct link to noah-klayman">​</a></h4><p><strong>What feature are you most excited about?</strong><br>
<!-- -->Auto-updater. It's really hard to get something that complex right and Tauri has done a fantastic job.</p><p><strong>What is your proudest moment/contribution with Tauri?</strong><br>
<!-- -->Getting the custom protocol based asset loader to work, especially on Windows.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="secdude">secdude<a href="#secdude" class="hash-link" aria-label="Direct link to secdude" title="Direct link to secdude">​</a></h4><p><strong>What feature are you most excited about?</strong><br>
<!-- -->Conditional compilation of features by default.</p><p><strong>What is your proudest moment/contribution with Tauri?</strong><br>
<!-- -->🤷 v1 I guess</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="wu-yu-wei"><a href="https://github.com/wusyong" target="_blank" rel="noopener noreferrer">Wu Yu-Wei</a><a href="#wu-yu-wei" class="hash-link" aria-label="Direct link to wu-yu-wei" title="Direct link to wu-yu-wei">​</a></h4><p><strong>What feature are you most excited about?</strong><br>
<!-- -->Auto-updater I think. A built-in OTA feature feels pretty handy.</p><p><strong>What is your proudest moment/contribution with Tauri?</strong><br>
<!-- -->Published wry crate and particular in this commit: <a href="https://github.com/tauri-apps/wry/commit/722e1212a4795f5f81638667cbd31bc53a5d27ed" target="_blank" rel="noopener noreferrer">https://github.com/tauri-apps/wry/commit/722e1212a4795f5f81638667cbd31bc53a5d27ed</a></p>]]></content>
        <author>
            <name>Daniel Thompson-Yvetot</name>
            <uri>https://github.com/nothingismagick</uri>
        </author>
    </entry>
</feed>