<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tauri</title>
    <description>The latest articles on DEV Community by Tauri (@tauri).</description>
    <link>https://dev.to/tauri</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1152%2F330e5f5d-c094-4e92-bb84-a1aefc3bac38.png</url>
      <title>DEV Community: Tauri</title>
      <link>https://dev.to/tauri</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tauri"/>
    <language>en</language>
    <item>
      <title>Tauri 1.0 Release Candidate</title>
      <dc:creator>Daniel Thompson-Yvetot</dc:creator>
      <pubDate>Thu, 10 Feb 2022 22:56:14 +0000</pubDate>
      <link>https://dev.to/tauri/tauri-10-release-candidate-53jk</link>
      <guid>https://dev.to/tauri/tauri-10-release-candidate-53jk</guid>
      <description>&lt;p&gt;&lt;strong&gt;tl;dr;&lt;/strong&gt;&lt;br&gt;
We present the first release candidate of Tauri 1.0, and invite you to look at, comment upon, and try out the new features and security fixes that we are bringing to the table. After several RC iterations, we will release the stable version of 1.0.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/tauri-apps/tauri/releases"&gt;https://github.com/tauri-apps/tauri/releases&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Our Working Method
&lt;/h2&gt;

&lt;p&gt;Over the past 8 months, we have been working together with the community (in public), and third party Security Auditors and Pentesters &lt;a href="https://www.radicallyopensecurity.com/"&gt;Radically Open Security&lt;/a&gt; (in private) to apply needed finish to Tauri Core. This includes not only usability features and fixing incomplete APIs, but also enhancing the overall security of the ecosystem and producing a number of official Tauri plugins.&lt;/p&gt;

&lt;h2&gt;
  
  
  Progress
&lt;/h2&gt;

&lt;p&gt;Our current top priority for 1.0 is delivering a smooth process for not only setting up Tauri requirements on all development platforms, but also the creation of new Tauri projects. To acheive this we need to test it on as many platforms as possible, squash any bugs during a few RC versions, and enhance all of the documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usability
&lt;/h2&gt;

&lt;p&gt;As developers ourselves, we want our tools to be ergonomic and easy to use without sacrificing on performance and security. One of the qualifying features that will enable us to release the stable 1.0 is a perfect tooling setup on all platforms without resorting to hacks or unsafe practices. We will be working on this over several iterations of the release candidates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation
&lt;/h2&gt;

&lt;p&gt;We know that building on Tauri has been a hit or miss experience for many of you, and much of this has to do with outdated documentation. At the same time, the matrix of possible installation platforms for developers makes a system that is in flux makes it really challenging to get right. &lt;/p&gt;

&lt;h2&gt;
  
  
  Security Features
&lt;/h2&gt;

&lt;p&gt;The auditors made a number of findings, which we have resolved and which were accepted in the post-audit review of our fixes. We are now confident that Tauri core is safe, and that we have provided fixes and features that enable the production of industrial-grade secure applications. You may read the full audit report here:&lt;br&gt;
&lt;a href="https://github.com/tauri-apps/tauri/blob/next/audits/Radically_Open_Security-v1-report.pdf"&gt;https://github.com/tauri-apps/tauri/blob/next/audits/Radically_Open_Security-v1-report.pdf&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;Please remember, that a release candidate seeks to qualify the codebase for a stable release. We are certain that we have missed things and probably have bugs. The complications of our CI mean that we will probably fight with the release process a few times. You may discover problems with the installation process, and even have minor issues with consuming the JS libraries. We are counting on you to help us solve (or at least discover) these concerns so they can be resolved and move Tauri as quickly as feasible to a full release.&lt;/p&gt;




&lt;p&gt;&lt;small&gt;Image by &lt;a href="https://alve.io"&gt;Alve&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;

</description>
      <category>tauri</category>
      <category>programming</category>
      <category>opensource</category>
      <category>rust</category>
    </item>
    <item>
      <title>Sustaining Community</title>
      <dc:creator>Daniel Thompson-Yvetot</dc:creator>
      <pubDate>Mon, 10 Jan 2022 14:59:03 +0000</pubDate>
      <link>https://dev.to/tauri/sustaining-community-pm0</link>
      <guid>https://dev.to/tauri/sustaining-community-pm0</guid>
      <description>&lt;p&gt;Open source is a complex entity composed of not only lines of code and miles of documentation, but also a living being that is nurtured by people from all walks of life. Young or old, experienced or beginner, corporate or independent, cis or fluid, Eastern or Western. No matter which reasons we choose to build and use open source software, one thing is clear: Together we are stronger.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tauri.studio"&gt;Tauri&lt;/a&gt;, by its nature, seeks to be inclusionary. Whether rust maximalist or typescript pro, vue or svelte, windows or linux, dominator or solidjs, frontend or backend — Tauri brings classically opposed and tribal communities together, because we know, deep in our hearts, that, just like ice cream, no modern framework is better than any other: It’s all just different flavours for different folks.&lt;/p&gt;

&lt;p&gt;Obviously everyone has their own agenda, and seeks to further their own cause. And yet, by pulling on the same rope we are all moving toward a better system than we could ever make in proprietary isolation. This is the premise and promise of open source, and it is very clear that it works for Tauri. We are in the top 400 most starred projects on Github (out of 14million), we are about to release our horizontally and vertically audited 1.0 stable. We invite anyone interested to become a member of the working groups, and we are doing our best to stay transparent, remain accountable, and make the most elegant, secure, and resource-preserving system we can.&lt;/p&gt;

&lt;p&gt;And yet in every family there can be stress, miscommunication, hurt feelings, and division. In open source, as with all types of community organising, there is not only a massive risk of burnout, but also alienation as a result of perceived entitlement. But the most terrible thing that can happen, is that volunteers work so hard at trying to help others, that they forget about not only taking care of themselves, but also that there are people on the other side of the screen who have real feelings. Frustration can boil over and they lash out to people who are just trying to get their problems solved.&lt;/p&gt;

&lt;p&gt;Since Tauri’s inception, there have been several occasions where the tone of voice of some of us did not meet the mark of our own expectations of ourselves, and were in clear violation of our own &lt;a href="https://github.com/tauri-apps/tauri/blob/next/.github/CODE_OF_CONDUCT.md"&gt;Code of Conduct&lt;/a&gt;. This was even a thematic topic on Hacker News, where frustrated people shared their horrible experiences with the larger community.  We are truly sorry for this, because we want to do better. &lt;/p&gt;

&lt;p&gt;It was a signal to all of us on the Tauri Board of Directors that self-policing doesn’t scale. We urgently need to double down on helping our community take care of itself. &lt;/p&gt;

&lt;p&gt;This is why today, we are making a call for a Lead Community Liason - a one or two-person team to help nurture the community, acting as role-models more than police, and assisting in the mediation of challenging acts of miscommunication. This role will be part time, can be done anywhere by anyone, and will be paid 100% from the donations that the community has made to the project. If you (or you and a friend) are interested in this freelancer position, love Tauri, and are able to write invoices to OPENCOLLECTIVE, please send your CV with relevant community experience to &lt;a class="mentioned-user" href="https://dev.to/nothingismagick"&gt;@nothingismagick&lt;/a&gt; on Discord. We will conduct interviews, and the final decision will be made by the Board of Directors.&lt;/p&gt;

&lt;p&gt;Our hope is that by using donations to help the community be a safer and more inclusive space, that we are taking the right action to make Tauri a better and more sustainable Open Source project.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>tauri</category>
      <category>sustainability</category>
      <category>productivity</category>
    </item>
    <item>
      <title>TAURI FEATURE FREEZE AND SECURITY AUDIT</title>
      <dc:creator>Daniel Thompson-Yvetot</dc:creator>
      <pubDate>Tue, 24 Aug 2021 07:53:49 +0000</pubDate>
      <link>https://dev.to/tauri/tauri-feature-freeze-and-security-audit-1ml1</link>
      <guid>https://dev.to/tauri/tauri-feature-freeze-and-security-audit-1ml1</guid>
      <description>&lt;ul&gt;
&lt;li&gt;Security Audit Begins&lt;/li&gt;
&lt;li&gt;Code Freeze In Place&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/tauri-apps/tauri/tree/next" rel="noopener noreferrer"&gt;&lt;code&gt;next&lt;/code&gt;&lt;/a&gt; Branch in Progress&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At a certain point in the lifecycle of software, you have to just stop and smell the roses. Or in this case, hunt for code smell. And that is what the Tauri team is doing. We will no longer be accepting any feature requests for the forthcoming 1.0 and only accepting bug reports. All new features will then be addressed in the &lt;a href="https://github.com/tauri-apps/tauri/tree/next" rel="noopener noreferrer"&gt;&lt;code&gt;next&lt;/code&gt;&lt;/a&gt; branch.&lt;/p&gt;

&lt;p&gt;Why would we do this, you might be asking yourself. Well, before we can declare Tauri safe to use, we need to put it through the proverbial ringer - and gain confidence that it is not only architected properly, but also that common attack vectors are mitigated against and boundaries are protected.&lt;/p&gt;

&lt;p&gt;After you've been spending years in the forest of your project, it is obvious that you might not see all the trees - or even its place in the greater ecosystem.&lt;/p&gt;

&lt;p&gt;To this end, we are pleased to announce that the Tauri Programme within the &lt;a href="https://commonsconservancy.org/programmes/" rel="noopener noreferrer"&gt;Commons Conservancy&lt;/a&gt; has teamed up with the non-profit group of penetration testing experts at &lt;a href="https://www.radicallyopensecurity.com/" rel="noopener noreferrer"&gt;Radically Open Security&lt;/a&gt; to help us gain not only deeper insight into the entire project, but also acquire the confidence we need to recommend using Tauri in production.&lt;/p&gt;

&lt;p&gt;The Audit consists of both a horizontal and vertical investigation. The horizontal audit will look into all of the crates and libraries that compose Tauri, as well as its tooling and pipelines. The vertical audit will investigate an example application (our examples/api app) on all three platforms to verify that it is safe to use and our security posture is both appropriate and safe.&lt;/p&gt;

&lt;p&gt;At the conclusion of the audit, we will publish the findings and lock our 1.0 release to maintenance such as dependency updates and urgent fixes in case bugs are found. As mentioned above, all further work on new features like mobile and additional API's will be undertaken in the @next branch which will graduate to 2.0 upon its completed audit.&lt;/p&gt;

&lt;p&gt;One last word of caution: Security audits are a regular practice of due diligence and they are not guarantees that everything is safe. Your app's security will have as much (if not more) to do with your coding practices than with Tauri's underlying security. If you are doing anything with private data or using cryptography, you would do well to have your project audited as well. &lt;/p&gt;






&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Disclaimer: It is important to understand the limits of the
Tauri team and Radically Open Security's services. The Tauri
team and Radically Open Security do not (and cannot) give
guarantees that something is secure. It remains the
responsibility of downstream engineers to ensure the 
security of the(ir) projects that use Tauri.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://www.radicallyopensecurity.com/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FI0TVhJO.png" alt="ROS"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tauri</category>
      <category>security</category>
    </item>
    <item>
      <title>Announcing Tauri Beta - More efficient crossplatform apps with better features</title>
      <dc:creator>Daniel Thompson-Yvetot</dc:creator>
      <pubDate>Wed, 12 May 2021 20:26:41 +0000</pubDate>
      <link>https://dev.to/tauri/announcing-tauri-beta-more-efficient-crossplatform-apps-with-better-features-1nbd</link>
      <guid>https://dev.to/tauri/announcing-tauri-beta-more-efficient-crossplatform-apps-with-better-features-1nbd</guid>
      <description>&lt;p&gt;Hello fellow engineers, project managers, and technocrats! Today, after exactly two years of work, we are proud to announce the Beta release of Tauri 1.0. &lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;Github Repository: &lt;a href="https://github.com/tauri-apps/tauri" rel="noopener noreferrer"&gt;https://github.com/tauri-apps/tauri&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Website: &lt;a href="https://tauri.studio" rel="noopener noreferrer"&gt;https://tauri.studio&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  So, what Is Tauri?
&lt;/h2&gt;

&lt;p&gt;Tauri enables you to make apps using the Webview technology stack that each operating system provides. It empowers you to call into the app backend using a JS api, which gives you opt-in access to things like the filesystem. All of this is done without needing to ship a localhost server and while maintaining a secure context for your application.&lt;/p&gt;

&lt;p&gt;Tauri apps can have custom menus and tray-type interfaces. They can be updated securely, and are managed by the user's operating system as expected. Their ultimate binaries are very small, because they not only use the system's webview, they also do not need to ship a runtime (like Node.js), since the final binary is compiled from Rust. This makes Tauri apps quite small and performant, and also turns the reversing of Tauri apps into a task that is neither trivial nor fun.&lt;/p&gt;

&lt;p&gt;If you want to find out more, we recommend checking out the &lt;a href="https://tauri.studio/en/docs/about/intro" rel="noopener noreferrer"&gt;intro on our website&lt;/a&gt; or diving into the &lt;a href="https://github.com/tauri-apps/tauri/tree/dev/ARCHITECTURE.md" rel="noopener noreferrer"&gt;architectural design document&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;In short, Tauri is a toolkit for creating smaller, faster, and more secure desktop apps with a web frontend. Tauri's core system is written in stable Rust and currently uses that for the main process. However, you do not need to write Rust code to interact. Nevertheless, we plan on providing bindings to other languages after the full 1.0 release. &lt;/p&gt;

&lt;p&gt;We are finally happy enough with its shape and approach that we are marking its status as Beta. This means that over the course of the next several months a few things are going to happen:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We will make sure it builds properly on all the platforms we want to support. This includes the major Desktops and the Major Mobile operating systems.&lt;/li&gt;
&lt;li&gt;We will employ a third-party security consultancy to perform a horizontal security audit so that we can be confident that the core libraries are safe to use.&lt;/li&gt;
&lt;li&gt;We will fix bugs that arise and work on reducing final bundle sizes as much as possible.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What's New?
&lt;/h2&gt;

&lt;p&gt;So many things have changed that we can't fit the full list here. Instead, we'll just be summarising the biggest changes. If you want the gory details, visit our &lt;a href="https://tauri.studio/en/release-notes" rel="noopener noreferrer"&gt;Release Notes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;However, if you already started a Tauri project back in the Alpha days, check out this &lt;a href="https://tauri.studio/en/docs/usage/guides/migration" rel="noopener noreferrer"&gt;migration page&lt;/a&gt; to get informed as to what you have to do to get back in the saddle.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/tauri-apps/wry" rel="noopener noreferrer"&gt;WRY&lt;/a&gt; (Webview Rendering librarY)
&lt;/h3&gt;

&lt;p&gt;Tauri Alpha used bindings to &lt;a href="https://github.com/webview/webview" rel="noopener noreferrer"&gt;webview/webview&lt;/a&gt;, a C++ library. While these got the job done, they were quite buggy on Windows and were lacking a lot of features we wanted. We've replaced these with WRY, a new, pure Rust Webview library we developed for Tauri. WRY has proven to be much more stable on Windows, and adds the following features to all platforms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom window styles: frameless, transparent, invisible, always-on-top&lt;/li&gt;
&lt;li&gt;Height and width constraints&lt;/li&gt;
&lt;li&gt;Draggable regions&lt;/li&gt;
&lt;li&gt;Programmatic setting of: size and size constraints, window styles, minimized/maximized, title&lt;/li&gt;
&lt;li&gt;Custom app menus&lt;/li&gt;
&lt;li&gt;System tray support&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/tauri-apps/tao" rel="noopener noreferrer"&gt;TAO&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;For the first part of its existence, WRY depended on &lt;a href="https://github.com/rust-windowing/winit" rel="noopener noreferrer"&gt;winit&lt;/a&gt;, the amazing Windowing provider for many operating systems. As time went on, however, we also need some advanced features like menubar and system tray which &lt;a href="https://github.com/rust-windowing/winit/pull/1921" rel="noopener noreferrer"&gt;contradicted&lt;/a&gt; with &lt;a href="https://github.com/rust-windowing/winit/blob/v0.24.0/FEATURES.md#winit-scope" rel="noopener noreferrer"&gt;their vision&lt;/a&gt;, and thus we made the hard decision to fork &lt;code&gt;winit&lt;/code&gt; and republish it under a different name: TAO.&lt;/p&gt;

&lt;p&gt;This means that the TAuri Organisation controls all first-order dependencies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rust CLI
&lt;/h3&gt;

&lt;p&gt;We've moved almost every command to a new CLI, written in Rust. This means Node.js is no longer required for developing Tauri apps, although it is recommended for now (unless you have problems with node.js and compiling some of the libraries for imagemin). We'll be moving the final commands over soon, making the JS CLI a thing of the past. Want to test it while we are still in beta?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;% cargo install tauri-cli --version ^1.0.0-beta
% cargo tauri --version
cargo-tauri 1.0.0-beta.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;cargo run&lt;/code&gt; Support
&lt;/h3&gt;

&lt;p&gt;It is now possible to run your Tauri application with &lt;code&gt;cargo run&lt;/code&gt; instead of through the Tauri CLI. This is possible through a new internal codegen crate that can generate everything required from your Tauri config file. This still requires you to have a valid &lt;code&gt;tauri.conf.json&lt;/code&gt; along with whatever assets inside your &lt;code&gt;distDir&lt;/code&gt; already generated. For the time being, the codegen will &lt;strong&gt;not&lt;/strong&gt; run your &lt;code&gt;beforeBuildCommand&lt;/code&gt; or &lt;code&gt;beforeDevCommand&lt;/code&gt; from the config.&lt;/p&gt;

&lt;h3&gt;
  
  
  New Web Content Loader
&lt;/h3&gt;

&lt;p&gt;We've removed both the no-server and embedded-server modes, and replaced them with a new custom protocol loader. This combines the security of the no-server mode with the stability of the embedded-server, and is more performant than both.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multiwindow
&lt;/h3&gt;

&lt;p&gt;It's finally here! Thanks to WRY's improved interface, we've been able to add one of the most requested features to Tauri. You can now create multiple windows, either at launch through &lt;code&gt;tauri.conf.json&lt;/code&gt; or programatically through Rust. We've used this in our new &lt;a href="https://tauri.studio/en/docs/usage/guides/visual/splashscreen" rel="noopener noreferrer"&gt;Splashscreen Guide&lt;/a&gt;, which allows your app's web contents to load in the background while a splashscreen is displayed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Improved Command Handling
&lt;/h3&gt;

&lt;p&gt;We've added some macros that makes creating Rust commands as simple as writing a function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Defining commands is no longer a multi-file mess&lt;/span&gt;
&lt;span class="nd"&gt;#[tauri::command]&lt;/span&gt;
&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;my_custom_command&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"I was invoked from JS!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nn"&gt;tauri&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;Builder&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;default&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="c1"&gt;// No need to write a fancy handler, either&lt;/span&gt;
    &lt;span class="c1"&gt;// Just pass in a list of all your commands&lt;/span&gt;
    &lt;span class="nf"&gt;.invoke_handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;tauri&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nd"&gt;generate_handler!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;my_custom_command&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//dev-to-uploads.s3.amazonaws.com/uploads/articles/gpkroh61gxeho4aq1ivk.png)&lt;/span&gt;

    &lt;span class="nf"&gt;.run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;tauri&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nd"&gt;generate_context!&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="nf"&gt;.expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"error while running application"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Calling your commands is super easy as well&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;invoke&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@tauri-apps/api/tauri&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="nf"&gt;invoke&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my_custom_command&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tauri's command feature also supports passing arguments, returning values and errors, and running async functions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Updater
&lt;/h3&gt;

&lt;p&gt;We've added a new updater feature, allowing you to easily ship updates to your Tauri apps. You can create a custom update notification and progress indicator, or use the builtin update prompts. Updates are signed on publish and verified before installing, so users can be sure they aren't getting a malicious version of your app.&lt;/p&gt;

&lt;h3&gt;
  
  
  External Audit
&lt;/h3&gt;

&lt;p&gt;We are working together with &lt;a href="https://doyensec.com" rel="noopener noreferrer"&gt;Doyensec&lt;/a&gt; to undertake a complete horizontal audit of the critical components of Tauri, Tao &amp;amp; Wry. Doyensec has a long history of analysing Electron apps, so they are extraordinarily qualified to investigate the issues surrounding desktop apps. Once the audit is completed and we have resolved any and all concerns raised by the auditors, we will have crossed the threshold to a stable ecosystem and the 1.0 release will follow. If you plan to use Tauri in production, please consider making a donation to our &lt;a href="https://opencollective.com/tauri" rel="noopener noreferrer"&gt;Open Collective&lt;/a&gt; fundraising campaign to support this expensive endeavour. &lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started With Tauri
&lt;/h2&gt;

&lt;p&gt;If you'd like to get started making apps with Tauri, check out our &lt;a href="https://tauri.studio/en/docs/getting-started/intro" rel="noopener noreferrer"&gt;getting started guide&lt;/a&gt;. Within a few minutes, you'll have your first Tauri app up and running.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4i4ern24qx4wldcmm37t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4i4ern24qx4wldcmm37t.png" alt="generate"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Tauri does not
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Tauri does not use Internet Explorer based Webviews, so there is no outdated Internet Explorer code being shipped in your app. (Seriously, stop spreading FUD.)&lt;/li&gt;
&lt;li&gt;Tauri does not ship Node.js by default, and actually you don't even need to have Node.js installed on your machine to build Tauri apps. (You can in fact just use the Rust CLI, and even build your entire frontend with a WASM based system like YEW).&lt;/li&gt;
&lt;li&gt;Tauri does not run a devserver for your HTML/CSS/JS framework. There are just too many of them and they change all the time, so it is not worth the maintenance burden.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who is Tauri
&lt;/h2&gt;

&lt;p&gt;The Tauri organisation aims to be a sustainable collective based on principles that guide &lt;a href="https://sfosc.org" rel="noopener noreferrer"&gt;sustainable free and open software communities&lt;/a&gt;. To this end it is currently becoming a Programme within the &lt;a href="https://commonsconservancy.org/" rel="noopener noreferrer"&gt;Commons Conservancy&lt;/a&gt;, and you can contribute financially via &lt;a href="https://opencollective.com/tauri" rel="noopener noreferrer"&gt;Open Collective&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;We've got a lot planned for Tauri, like Arm/Android/iOS support, a testing framework, and binding to other languages for the main process. See &lt;a href="https://tauri.studio/en/#roadmap" rel="noopener noreferrer"&gt;our roadmap&lt;/a&gt; for the full list. If you'd like to help add these features to Tauri (or if you have any questions), we'd love for your to join our Discord Server at &lt;a href="https://discord.gg/tauri" rel="noopener noreferrer"&gt;https://discord.gg/tauri&lt;/a&gt; . Let us know that you want to contribute, and we'll find a good task for you and guide you along.&lt;/p&gt;

&lt;p&gt;You can also help us out by donating to our &lt;a href="https://opencollective.com/tauri" rel="noopener noreferrer"&gt;Open Collective&lt;/a&gt;, however if your company actually turns a profit using Tauri, you should really consider the benefits of becoming a platinum sponsor. And speaking of sponsoring... how many open source projects do you sponsor? We hear that Babel needs support.&lt;/p&gt;




&lt;p&gt;Title Graphic: Alve Larsson&lt;/p&gt;

</description>
      <category>tauri</category>
      <category>opensource</category>
      <category>rust</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Use deno to build a Tauri App</title>
      <dc:creator>Daniel Thompson-Yvetot</dc:creator>
      <pubDate>Sat, 13 Jun 2020 11:49:56 +0000</pubDate>
      <link>https://dev.to/tauri/use-deno-to-build-a-tauri-app-1f7h</link>
      <guid>https://dev.to/tauri/use-deno-to-build-a-tauri-app-1f7h</guid>
      <description>&lt;p&gt;At Tauri we originally built our CLI with typescript and node.js, but we've been looking into alternatives for a while. In that vein, we just POC'd building a Tauri app with Deno (instead of node.js)&lt;/p&gt;

&lt;p&gt;We won't explain how to install the toolchains (deno, rust and tauri), and expect you to have already built your first Tauri apps already. But if you are new to all of this, here are the details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tauri.studio/docs/getting-started/intro/" rel="noopener noreferrer"&gt;https://tauri.studio/docs/getting-started/intro/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://deno.land" rel="noopener noreferrer"&gt;https://deno.land&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Rig and build!
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

git clone git@github.com:tauri-apps/tauri
cd tauri/cli
git clone git@github.com:lucasfernog/tauri-deno-cli deno
cd ../tauri/examples/communication
deno run --unstable --allow-read --allow-run --allow-net --allow-env --allow-write ../../../cli/deno/index.ts build


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F7m56oldsihfmq9dccyit.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F7m56oldsihfmq9dccyit.png" alt="Tauri by Deno"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Benchmarking
&lt;/h1&gt;

&lt;p&gt;The second time you run deno build, you'll have all the deps already installed and the rust crates as well, so let's see how long it takes on MacOS (this isn't a scientific bench):&lt;/p&gt;

&lt;h2&gt;
  
  
  deno
&lt;/h2&gt;

&lt;h4&gt;
  
  
  command
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&lt;p&gt;$ time deno run --unstable --allow-read --allow-run --allow-net --allow-env --allow-write ../../../cli/deno/index.ts build&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  with antibloat&lt;br&gt;
&lt;/h4&gt;
&lt;br&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&lt;p&gt;real    1m2.738s&lt;br&gt;
  user    0m42.514s&lt;br&gt;
  sys     0m2.933s&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  no antibloat&lt;br&gt;
&lt;/h4&gt;
&lt;br&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&lt;p&gt;real    0m25.001s&lt;br&gt;
  user    0m16.473s&lt;br&gt;
  sys     0m1.758s&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  no antibloat, just .app&lt;br&gt;
&lt;/h4&gt;
&lt;br&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&lt;p&gt;real    0m5.906s&lt;br&gt;
user    0m11.780s&lt;br&gt;
sys     0m1.268s&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  node.js&lt;br&gt;
&lt;/h2&gt;

&lt;h4&gt;
  
  
  command
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&lt;p&gt;$ time node ../../../cli/tauri.js/bin/tauri build&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  with antibloat&lt;br&gt;
&lt;/h4&gt;
&lt;br&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&lt;p&gt;real    1m10.295s&lt;br&gt;
  user    0m51.990s&lt;br&gt;
  sys     0m3.009s&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  no antibloat&lt;br&gt;
&lt;/h4&gt;
&lt;br&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&lt;p&gt;real    0m44.562s&lt;br&gt;
  user    1m5.383s&lt;br&gt;
  sys     0m3.187s&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  no antibloat, just .app&lt;br&gt;
&lt;/h4&gt;
&lt;br&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&lt;p&gt;real    0m26.423s&lt;br&gt;
user    0m59.936s&lt;br&gt;
sys     0m2.805s&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Discussion&lt;br&gt;
&lt;/h2&gt;

&lt;p&gt;The ~1 minute build time might seem like it takes a long time, but we are actually using these &lt;a href="https://tauri.studio/docs/usage/recipes/bundler/anti-bloat#rust-compression-features" rel="noopener noreferrer"&gt;antibloat&lt;/a&gt; techniques only possible when single-threading.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Also, if you are trying this in your own project, you should know that you will have to run &lt;code&gt;yarn tauri dev&lt;/code&gt; at least once in order to create &lt;code&gt;index.tauri.html&lt;/code&gt;. We haven't started porting the inliner to deno.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nevertheless, deno performs better in both cases - without antibloat almost twice as fast, and just building a &lt;code&gt;.app&lt;/code&gt; its about 4.5x faster. So I absolutely have to agree with Lucas' sentiment: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;deno is f!cking amazing&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>rust</category>
      <category>deno</category>
      <category>tauri</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Setting Up CI and CD for Tauri</title>
      <dc:creator>Jacob Bolda</dc:creator>
      <pubDate>Mon, 23 Mar 2020 13:49:59 +0000</pubDate>
      <link>https://dev.to/tauri/setting-up-ci-and-cd-for-tauri-48pp</link>
      <guid>https://dev.to/tauri/setting-up-ci-and-cd-for-tauri-48pp</guid>
      <description>&lt;h1&gt;
  
  
  Setting Up CI/CD for Tauri
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;When Tauri hit my radar, it was pushing towards releasing an alpha. The repo did not have continuous integration or continuous delivery set up. I had seen the value that it can have in creating focus in a project. I knew I would be able to provide immediate value to the project with CI/CD.&lt;/p&gt;

&lt;p&gt;Thus began my involvement. We decided to use the shiny new GitHub Actions to deliver this. It was still in beta, but it had gone through iterations over months and months. We felt it was stable enough to use (and nearly out of beta anyway). The deep integration with GitHub will be useful for us.&lt;/p&gt;

&lt;p&gt;We didn't have much in the way of tests to run as much of the codebase had been more recently pulled out of other projects. The quickest win was to take and create some example projects. We could then create, what we're calling, our smoke tests on top of the examples. We took the manual process of testing in projects, and dumped . They are "integration" tests where we will take any HTML, CSS and JS and build it with Tauri.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Phase of Testing
&lt;/h2&gt;

&lt;p&gt;This served us well and caught a few bugs in the process. We had the focus to get to and meet our release goal of launching the first alpha build. As the confidence in our code base has risen, the value has flipped. The time these smoke tests take to run has grown faster than to the value delivered. The time that it takes to run the smoke tests has become painful. We had these tests run on every push to a PR, as we wanted a tight feedback loop in fixing any issues we had. Now that we started to add more unit tests. We can back off and not run on every push while still getting the needed feedback. The next phase in our setup will be running our unit tests on every push, and dialing back our smoke test runs.&lt;/p&gt;

&lt;p&gt;Github Actions has two triggers of which we make heavy use: &lt;code&gt;push&lt;/code&gt; and &lt;code&gt;pull_request&lt;/code&gt;. Every commit that made to the repo is a &lt;code&gt;push&lt;/code&gt;. When you open a pull request from a branch (call it &lt;code&gt;great_feature&lt;/code&gt;) to another branch (our working branch, &lt;code&gt;dev&lt;/code&gt;), each commit to &lt;code&gt;great_feature&lt;/code&gt; would possibly trigger both of these events. We can use a filter to focus on the events we care about though. In our workflows, we only PR (pull request) the &lt;code&gt;dev&lt;/code&gt; and &lt;code&gt;master&lt;/code&gt; branches. This means that if we filter to only the &lt;code&gt;dev&lt;/code&gt; and &lt;code&gt;master&lt;/code&gt; branches on commit, we will only run that workflow when we &lt;em&gt;merge&lt;/em&gt; a PR. A merged PR typically only occurs once a day or less so this will be a good fit for the longer running tests, e.g. the smoke tests in our case. Below is how that might look.&lt;/p&gt;

&lt;p&gt;Unit tests:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# these run fast so we can have them run on any commit&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unit tests&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;dev&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;master&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Smoke tests:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# these run slower so we run only on merges to dev or master branch&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;smoke tests&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;dev&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;master&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Tauri operates off the &lt;code&gt;dev&lt;/code&gt; branch as default, and merges to &lt;code&gt;master&lt;/code&gt; for release. With these Github Actions set up, we will run the unit tests on every commit to an open PR (see &lt;code&gt;pull_request&lt;/code&gt;). When that PR is merged into &lt;code&gt;dev&lt;/code&gt;, we will run both the unit tests and the smoke tests.&lt;/p&gt;

&lt;h2&gt;
  
  
  Our Examples (aka Smoke Tests)
&lt;/h2&gt;

&lt;p&gt;Let us touch on this for a moment. The smoke tests are a handful of examples created using the major frameworks (Vue, create-react-app, Quasar, Next.js, Gatsby, ...). Originally these resided in a separate repository. They were then moved into the main Tauri repo for what seemed worthwhile benefits. We implemented the Renovate bot which opens a pull request to upgrade dependencies which includes our examples. Remember those Github Actions? This would trigger our tests to run. It was nice to see these tested every time our examples updated. Having the examples close by and wired up also made for testing locally much easier. The downside is that these pull requests created a lot of noise. The examples were flooding our CI and commit history. To help reduce the noise, we grouped updates into logical chunks and ran them on specific days. That helped but not quite enough.&lt;/p&gt;

&lt;p&gt;Our Github Actions uses a "standard action" called &lt;code&gt;actions/checkout&lt;/code&gt; which pulls in our repo. This was recently updated to &lt;code&gt;v2&lt;/code&gt;, and with it came the feature which made it much easier to checkout multiple repos. This feature gave us enough incentive to shift the examples back into their own repository. We could still implement the update process and test using the examples, but the noise is removed. This changes the local dev workflow, but we can adapt to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Level Publishing
&lt;/h2&gt;

&lt;p&gt;The next big value add that we will see is a programmatic release process. We can set up a system to release our packages to either crates or NPM. While this concept is not new, the difficulty that we are seeing is that none of these existing systems or command line programs are able to deal with a monorepo that has multiple languages. It gets even more involved if we want to release packages independent of one another. We looked at a CLI utility called &lt;code&gt;bumped&lt;/code&gt; that takes a version command and runs specified scripts to version bump and publish. This would publish our packages keeping them in lockstep. There is value though, potentially, in having some packages increment versions with each other and be on the same version. If we do a patch on one package it doesn't necessarily make sense to publish a new patch version on everything in the repo. How shall we best deal with this?&lt;/p&gt;

&lt;p&gt;Since we haven't been able to find anything completely built out, we are going to have to work our own. There is a package called &lt;code&gt;changesets&lt;/code&gt; that is primarily built for use with JavaScript and Yarn. As mentioned before, we do have rust code in our library so we can't use &lt;code&gt;changsets&lt;/code&gt; out of the box, but the bulk of the operations are done through a CLI and managed with markdown files. The package is something that, once we have initialized, can mostly run the CLI in our CI and doesn't need to be handled by the user. For a user to recommend a package change, they need only create a markdown file in the &lt;code&gt;.changesets&lt;/code&gt; folder. While having the CLI create the file for you is nice, it isn't a necessity.&lt;/p&gt;

&lt;p&gt;The version bump and polishing sequences are tightly coupled to JavaScript though. However, the implementation of &lt;code&gt;changesets&lt;/code&gt; is split up nicely into packages each with their own scope. We could use the packages that parse the markdown files into version changes, and build a life cycle around it. It would run version bumps and publishes based on a script that we pass. There is nothing that is yet published, but experimentation has shown promising results. Regardless if the code changing is Rust or JavaScript, we can describe the change in markdown. This will parse the markdown for us and we can then issue commands based on the described version bump. After the version is bumped, we need only issue a publish command for crates or npm. Since we don't need dynamic use of this library, we could manually set each package to publish using a specified script.&lt;/p&gt;

&lt;p&gt;The only sticky point is the changelog creation. It is rather coupled to code around the publishing sequence. We will need to rip out peices of that to keep that functionality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Leveling Up Our Releases
&lt;/h2&gt;

&lt;p&gt;We will look to do even more above and beyond the typical publish workflow in the later phases of our Github Actions use. This project has a deep consideration for security that is worth bringing to our publishing workflow. A workflow could involve publishing the package to multiple package managers including a private one hosted by Tauri. We can also do some interesting things like signing our releases, including a hash in the release and/or even publishing this information on a blockchain that it can be easily verified. Publishing on the blockchain is another avenue to increase the confidence that what is seen on GitHub matches what you have downloaded. The IOTA foundation created a Github Action which will publish a release to their blockchain. This has shown promise, but he gave a couple errors to tackle still.&lt;/p&gt;

&lt;h2&gt;
  
  
  Publish and Release Checklist
&lt;/h2&gt;

&lt;p&gt;Let's wrap all of this into nice little bullet pointed list. (That's basically &lt;code&gt;.yml&lt;/code&gt; right? You will soon be an expert at reading it if you aren't already :D ) This is the ideal that we are working towards. As it stands now, we have #3 through #6 implemented. We manually do #2 which then feeds into #3 and kicks off the rest of the automatic workflow.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;a human pushes to dev through a pull request (can happen any number of times)

&lt;ul&gt;
&lt;li&gt;pull request includes a changeset file describing the change and required version bump&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a pull request is created (or updated) to include the change and version bump

&lt;ul&gt;
&lt;li&gt;this pull request stays open and will be force pushed until it gets merged (and published)&lt;/li&gt;
&lt;li&gt;increase the version number based on changesets&lt;/li&gt;
&lt;li&gt;delete all changeset files&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a codeowner merges the publish PR to dev (no direct push permissible for anyone)

&lt;ul&gt;
&lt;li&gt;all tests (unit, e2e, smoke tests) are run on the PR&lt;/li&gt;
&lt;li&gt;failures prevent the publish so they must pass before merge&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;merge to dev triggers release sequence

&lt;ul&gt;
&lt;li&gt;changes are squashed and a PR is opened against master&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;when PR to master is merged...

&lt;ul&gt;
&lt;li&gt;vulnerability audit (crates and yarn) and output saved&lt;/li&gt;
&lt;li&gt;checksums and metadata and output saved&lt;/li&gt;
&lt;li&gt;packages are published on npm/cargo, tarball/zip created&lt;/li&gt;
&lt;li&gt;release is created for each package that had updates (if version isn't changed, build skips the publish steps)&lt;/li&gt;
&lt;li&gt;output from audit/checksums is piped into the release body&lt;/li&gt;
&lt;li&gt;tarball / zip attached to release&lt;/li&gt;
&lt;li&gt;async process to publish to IOTA tangle (feeless) via release tag [note: still have things to resolve here]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;release is complete

&lt;ul&gt;
&lt;li&gt;master has updated code and tagged&lt;/li&gt;
&lt;li&gt;GitHub release has tarballs, checksums, and changelog (may have multiple releases if more than one package published) [note: is part of step 2 and is not yet implemented]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Hopefully this inspires you to implement this into your own workflows. If you have any questions, feel free to reach out and I would be happy to answer. Cheers! &lt;/p&gt;

</description>
      <category>githubactions</category>
      <category>ci</category>
      <category>cd</category>
    </item>
    <item>
      <title>Use Sass Variables in Javascript</title>
      <dc:creator>Daniel Thompson-Yvetot</dc:creator>
      <pubDate>Sat, 01 Feb 2020 13:41:09 +0000</pubDate>
      <link>https://dev.to/tauri/use-sass-variables-in-javascript-583o</link>
      <guid>https://dev.to/tauri/use-sass-variables-in-javascript-583o</guid>
      <description>&lt;p&gt;&lt;em&gt;Sass variables are awesome in that they guarantee that you are using the right colors, dimensions, animations etc. everywhere in your Webapp. It is, unfortunately, not very straightforward to access them in Javascript - and using them from Tauri is an exercise in mind-bending futility.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is a little writeup about a nice and easy solution for accessing Sass variables in your Javascript. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For this tutorial, we are going to assume you already have Sass working in your project. We're going to be using the VueJS based &lt;a href="https://quasar.dev"&gt;Quasar Framework&lt;/a&gt;, but the same principle should work with other frameworks as well.&lt;/p&gt;

&lt;h3&gt;
  
  
  1) Add the dependency
&lt;/h3&gt;

&lt;p&gt;We don't need to ship this, as we are going to be using it only at build time.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add &lt;span class="nt"&gt;--dev&lt;/span&gt; node-sass-json-importer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2) Update your webpack config
&lt;/h3&gt;

&lt;p&gt;Quasar has a special build setting in &lt;code&gt;quasar.conf.js&lt;/code&gt; that you can easily modify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;jsonImporter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node-sass-json-importer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
    &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="p"&gt;...&lt;/span&gt;
      &lt;span class="na"&gt;sassLoaderOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;sassOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;importer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;jsonImporter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3) Create your variables
&lt;/h3&gt;

&lt;p&gt;You can save your settings as JSON in &lt;code&gt;src/css/quasar.variables.json&lt;/code&gt;. Of course you can add whatever you want here, just be sure not to repeat these keyValues in your real SASS file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"primary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#3215B3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"secondary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#29269A"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"accent"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#9C27FF"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"info"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#3100EC"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"spotColor"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#C0FF33"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4) Update your SASS file:
&lt;/h3&gt;

&lt;p&gt;Replace your &lt;code&gt;src/css/quasar.variables.sass&lt;/code&gt; with the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sass"&gt;&lt;code&gt;&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s"&gt;"./quasar.variables.json"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5) Create and register a bootfile &lt;code&gt;src/boot/sass.js&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;With quasar you can put this in a bootfile.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;sass&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../css/quasar.variables.json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;Vue&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;Vue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$sass&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;sass&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;sass&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// in case you need it outside of vue&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Don't forget to register the bootfile in your &lt;code&gt;quasar.conf.js&lt;/code&gt;!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  6) Use your sass variable in a Vue SFC:
&lt;/h3&gt;

&lt;p&gt;Of course this is just one thing you can do, the approach will work for any number of other things.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  methods: {
    sassColor (colorName) {
      return this.$sass[colorName]
    },
    sassSpotColor () {
      return this.$sass['spotColor']
    }
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7) Relax!
&lt;/h3&gt;




&lt;p&gt;Image from Unsplash: &lt;a href="https://unsplash.com/photos/M6lu8Wa72HQ"&gt;https://unsplash.com/photos/M6lu8Wa72HQ&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sass</category>
      <category>javascript</category>
      <category>vue</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Publish to NPM with Github Actions</title>
      <dc:creator>Daniel Thompson-Yvetot</dc:creator>
      <pubDate>Sat, 25 Jan 2020 14:44:47 +0000</pubDate>
      <link>https://dev.to/tauri/publish-to-npm-with-github-actions-2350</link>
      <guid>https://dev.to/tauri/publish-to-npm-with-github-actions-2350</guid>
      <description>&lt;p&gt;If you are as addicted to CI and CD as we are at Tauri, this brief article will show you how we solved publishing to NPM on the release tag event at Github. &lt;/p&gt;

&lt;h3&gt;
  
  
  Background
&lt;/h3&gt;

&lt;p&gt;Our org is growing, and we don't want individuals to bear the responsibility for publishing to crates.io and npm. That's brittle and bus-factor waiting to happen. And doing things manually is always error prone.&lt;/p&gt;

&lt;h3&gt;
  
  
  What we did:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Setup a CI user at NPM (don't choose 2FA), and copy their token.&lt;/li&gt;
&lt;li&gt;Create a secret at the repo settings, call it &lt;code&gt;npm_token&lt;/code&gt; and paste the token as the secret value.&lt;/li&gt;
&lt;li&gt;Create a file at &lt;code&gt;.github/workflows/publish.yml&lt;/code&gt;with the following contents:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: NPM Publish

on:
  release:
    types: [published]

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Use Node 12
      uses: actions/setup-node@v1
      with:
        # specify node version and the registry for the RELEASE build
        node-version: 12
        registry-url: https://registry.npmjs.org/
    - name: Build package
      run: |
        npm install -g yarn
        yarn install
        yarn rollup -c
    - name: Register Token
      run: |
        echo "//registry.npmjs.org/:_authToken=$NODE_AUTH_TOKEN" &amp;gt; /home/runner/work/_temp/.npmrc
        echo "_auth=$NODE_AUTH_TOKEN" &amp;gt;&amp;gt;  /home/runner/work/_temp/.npmrc
        echo "email=&amp;lt;your@email.address&amp;gt;" &amp;gt;&amp;gt;  /home/runner/work/_temp/.npmrc
        echo "always-auth=true" &amp;gt;&amp;gt;  /home/runner/work/_temp/.npmrc
      env:
        NODE_AUTH_TOKEN: ${{ secrets.npm_token }}
    - name: Publish
      run: npm publish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now just publish a release and let the runner do its thing.&lt;/p&gt;

&lt;p&gt;Let us know in the comments if you've got any improvements!&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/features/actions"&gt;https://github.com/features/actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/tauri-apps/tauri-forage"&gt;https://github.com/tauri-apps/tauri-forage&lt;/a&gt; (the repo where we're using this)&lt;/li&gt;
&lt;li&gt;Image from Unsplash: &lt;a href="https://unsplash.com/photos/Tzm3Oyu_6sk"&gt;https://unsplash.com/photos/Tzm3Oyu_6sk&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>github</category>
      <category>npm</category>
      <category>devops</category>
      <category>node</category>
    </item>
    <item>
      <title>tauri.studio</title>
      <dc:creator>Daniel Thompson-Yvetot</dc:creator>
      <pubDate>Mon, 06 Jan 2020 11:07:35 +0000</pubDate>
      <link>https://dev.to/tauri/tauri-studio-1965</link>
      <guid>https://dev.to/tauri/tauri-studio-1965</guid>
      <description>&lt;p&gt;We're happy to announce that we launched the website for tauri, which you can find here: &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://tauri.studio"&gt;https://tauri.studio&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;You'll find an introduction about how Tauri has been designed to let you use your current web framework to make tiny and really secure apps - and you don't even have to know rust to profit from it.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://tauri.studio/en/patterns"&gt;https://tauri.studio/en/patterns&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;We've also included some comparisons between common patterns that you can use to build your apps, like my personal favourite, the Kamikaze pattern:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mlucpwP6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/vmgelwr0mzzh5iz1wsjv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mlucpwP6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/vmgelwr0mzzh5iz1wsjv.png" alt="Kamikaze Pattern"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://tauri.studio/en/security"&gt;https://tauri.studio/en/security&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;There is also a pretty thorough writeup of our security posture and some of the things we've got in the pipeline.&lt;/p&gt;

&lt;h3&gt;
  
  
  Documentation
&lt;/h3&gt;

&lt;p&gt;For the time being, we are hosting our docs as a GitHub wiki, so if you just want to dive in, please check it out here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/tauri-apps/tauri/wiki"&gt;https://github.com/tauri-apps/tauri/wiki&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Tauri is an MIT licensed FLOSS project that you can contribute to! &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Join a working group at &lt;a href="https://discord.gg/SpmNs4S"&gt;Discord&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Make a donation via &lt;a href="https://github.com/sponsors/nothingismagick"&gt;Github sponsors&lt;/a&gt; or &lt;a href="https://opencollective.com/tauri"&gt;opencollective&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Just try it out and give us your feedback&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>rust</category>
      <category>tauri</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Branding and Rebranding</title>
      <dc:creator>Daniel Thompson-Yvetot</dc:creator>
      <pubDate>Sat, 14 Sep 2019 11:45:49 +0000</pubDate>
      <link>https://dev.to/tauri/branding-and-rebranding-1mmo</link>
      <guid>https://dev.to/tauri/branding-and-rebranding-1mmo</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Tauri has had a few facelifts, but we think we nailed it this time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Proton
&lt;/h2&gt;

&lt;p&gt;The first name for Tauri was Proton, because we wanted to pick a fight with Electron. (We don't anymore, btw. Electron is still super awesome!)&lt;/p&gt;

&lt;p&gt;At the time we were incubated at the Quasar Framework, so it made sense to riff off of the Quasar logo. This is what we had:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--azUdTywI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ztw5mx8pk9u6cd0wj4dw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--azUdTywI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ztw5mx8pk9u6cd0wj4dw.png" alt="Quasar Proton"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So as (bad) luck would have it, every single particle from physics already had a javascript project associated with it, and to our dismay it turned out that Proton-Native was also a thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quasar-Tauri
&lt;/h2&gt;

&lt;p&gt;So we spent about a week discussing a new name, and came up with Tauri, named after the Binary Star type. &lt;/p&gt;

&lt;p&gt;This made sense because of the way we were planning to build Tauri apps. So we removed one of the sub-particles from the Proton logo and ended up with this nice little guy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1pHDKYBG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/lls1xh56a8d2gbty3rnv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1pHDKYBG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/lls1xh56a8d2gbty3rnv.png" alt="Quasar Tauri"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the comments from the community was that it was cool how the logo seemed to riff off of the Gear from Rust. This was totally unintentional though, because Quasar's logo is for a pure JS project, and the "gear" is more of a stylized vortex.&lt;/p&gt;

&lt;h2&gt;
  
  
  Post Quasar
&lt;/h2&gt;

&lt;p&gt;At any rate, after we left the incubator to spin up our own organization, we had to make another logo because we couldn't justify using the former design basis. One of the early ideas was to make a logo with more "bite", so I put together an example using a &lt;a href="https://geargenerator.com/index.php#475,425,50,2,1,2,367363.9000002474,3,1,32,10.666666666666666,3,26,0,1,0,0,0,0,0,13,4.333333333333333,3,26,-130,0,0,0,0,0,0,13,4.333333333333333,3,26,50,0,0,0,0,0,1,3,239"&gt;real gearset&lt;/a&gt; that I prototyped over at &lt;a href="https://geargenerator.com"&gt;https://geargenerator.com&lt;/a&gt; - and the author Abel Vincze even comped us a download. (Fun fact: the Rust logo has the same number of teeth as both healthy adult humans and giraffes: 32.)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TWwwFipE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/uo80fbokizqu1blx22ak.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TWwwFipE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/uo80fbokizqu1blx22ak.png" alt="Two Gears"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But the two inner gears just made it seem too aggressive, and then a third gear was added:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7F3ecSyA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/dtajksc77rrjkp1mjuut.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7F3ecSyA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/dtajksc77rrjkp1mjuut.png" alt="Three Gears"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But it all just seemed a bit off. So, after about a week of discussion and some deep thinking about the name Tauri, we ended up with a graphic stylization of &lt;a href="https://en.wikipedia.org/wiki/Theta_Tauri"&gt;Theta Tauri&lt;/a&gt;, a real binary star whose abbreviation is &lt;code&gt;θ Tau&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;What I loved about that is that the theta symbol could be an impulse for the design, so I found an image of &lt;a href="https://upload.wikimedia.org/wikipedia/commons/b/b0/Hyades_cluster.jpg"&gt;Theta-Tauri&lt;/a&gt; in the Hyades Cluster, and after a bit of back and forth in the Working Group for Media, we ended up with this, our latest design:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XSe1lkot--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/13vwxhbld21kn0oafhvp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XSe1lkot--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/13vwxhbld21kn0oafhvp.png" alt="Tauri Social"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaways
&lt;/h2&gt;

&lt;p&gt;Coming up with a design is hard work. Redesigning things seems to take more time, especially when there are a lot of stakeholders. But its still a valuable exercise in team communication and transparency.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get in Touch
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tauri&lt;/strong&gt; apps aren't quite ready for prime-time and there is a lot of work needed in the codebase and the governance structure to get to that point. Nevertheless, in our quest for transparency and community involvement, we are taking this opportunity to invite everyone from the Rust, Appsec and Dev communities to come around and find out where the project is at, where it is going and how to get involved in the working groups.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tauri&lt;/strong&gt; is an organization that seeks to follow the best practices of the SFOSC &lt;a href="https://sfosc.org/docs/principles/"&gt;principles&lt;/a&gt;. It is our duty and pleasure to humbly invite you to visit our public &lt;a href="https://github.com/tauri-apps"&gt;GitHub project page&lt;/a&gt;, hang out at our &lt;a href="https://discord.gg/SpmNs4S"&gt;Discord chat server&lt;/a&gt;, donate money at our &lt;a href="https://opencollective.com/tauri"&gt;Open Collective&lt;/a&gt; page or simply follow our &lt;a href="https://twitter.com/tauriapps"&gt;Tweets&lt;/a&gt;.&lt;/p&gt;

&lt;h5&gt;
  
  
  About the Author
&lt;/h5&gt;

&lt;p&gt;Daniel Thompson-Yvetot is the principal architect and security engineer behind &lt;a href="https://github.com/tauri-apps"&gt;Tauri&lt;/a&gt;. He has been an open source evangelist for the last 13 years and is an active member of the Sustainable Free and Open Source Communities (&lt;a href="https://sfosc.org"&gt;SFOSC&lt;/a&gt;).&lt;/p&gt;

</description>
      <category>graphicdesign</category>
      <category>logo</category>
      <category>tauri</category>
      <category>rust</category>
    </item>
    <item>
      <title>We want smaller, faster, more secure native apps</title>
      <dc:creator>Daniel Thompson-Yvetot</dc:creator>
      <pubDate>Thu, 05 Sep 2019 20:58:38 +0000</pubDate>
      <link>https://dev.to/tauri/we-want-smaller-faster-more-secure-native-apps-5531</link>
      <guid>https://dev.to/tauri/we-want-smaller-faster-more-secure-native-apps-5531</guid>
      <description>&lt;h2&gt;
  
  
  The Situation Room
&lt;/h2&gt;

&lt;p&gt;In 2019, the manufacture of native-apps from compile-to-javascript user-interface frameworks has become easier and more accessible than ever before. All the same, beginners and seasoned developers alike are confronted with tough choices in a rapidly changing landscape of security and privacy. This is especially true in the semi-trusted environment of user devices, where vendors fragment the already diverse ecosystem with their proprietary "solutions".&lt;/p&gt;

&lt;p&gt;The fragmentation of the app landscape doesn't end with devices though, as there are not only innumerable front-end frameworks like React, Angular, Vue and Svelte ... but also a range of packagers like Capacitor, Electron, Proton-Native and others popping up daily. Multiply this with insecure dependency management and incomplete vulnerability remediation, and we are left with a fractured ecosystem where the winners are merely the lucky ones who haven't gotten hit - yet.&lt;/p&gt;

&lt;p&gt;The fact is that most of these frameworks were never conceived to exist outside of the browser sandbox and have been suddenly thrust into a very hostile environment where development teams resort to applying workarounds like shipping shared certs, hacking on-device registries or stooping to the unfortunately common integration of localhost servers on the devices themselves.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fcn1yw4fmt9nfsdtnzvm8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fcn1yw4fmt9nfsdtnzvm8.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A Paradigm Shift
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tauri&lt;/strong&gt; approaches these issues head on, as it was designed from the ground up to embrace novel patterns for secure development and creative flexibility that leverage the language features of Rust and enable you to grow your app using any front-end framework you like. And all of that in a much more secure distribution environment.&lt;/p&gt;

&lt;p&gt;With &lt;strong&gt;Tauri&lt;/strong&gt; as a component in your toolchain, you will be able to design, build, audit and deploy tiny, fast, robust and secure native applications for the major Desktop and Mobile platforms in record time. You can do all this within your preferred dev environment, using any framework and without even needing to know the Rust programming language. If you know Rust, however, you will be empowered to make even more amazing integrations with the underlying operating system and hardware.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Tauri-Team&lt;/strong&gt; has already completed some initial proofs of concept using WebViews (with really encouraging results such as &amp;lt; 3MB binaries on MacOS, Windows and Linux). At the moment we are finalizing the API, preparing smoke-tests, investigating cross-compilation tools and even building a binary evaluation harness. However, we are not totally satisfied with the WebView approach, and are investigating alternatives like Servo and Webkit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get in Touch
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tauri&lt;/strong&gt; apps aren't quite ready for prime-time and there is a lot of work needed in the codebase and the governance structure to get to that point. Nevertheless, in our quest for transparency and community involvement, we are taking this opportunity to invite everyone from the Rust, Appsec and Dev communities to come around and find out where the project is at, where it is going and how to get involved in the working groups.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tauri&lt;/strong&gt; is an organization that seeks to follow the best practices of the SFOSC &lt;a href="https://sfosc.org/docs/principles/" rel="noopener noreferrer"&gt;principles&lt;/a&gt;. It is our duty and pleasure to humbly invite you to visit our public &lt;a href="https://github.com/tauri-apps" rel="noopener noreferrer"&gt;GitHub project page&lt;/a&gt;, hang out at our &lt;a href="https://discord.gg/SpmNs4S" rel="noopener noreferrer"&gt;Discord chat server&lt;/a&gt;, donate money at our &lt;a href="https://opencollective.com/tauri" rel="noopener noreferrer"&gt;Open Collective&lt;/a&gt; page or simply follow our &lt;a href="https://twitter.com/tauriapps" rel="noopener noreferrer"&gt;Tweets&lt;/a&gt;.&lt;/p&gt;

&lt;h5&gt;
  
  
  About the Author
&lt;/h5&gt;

&lt;p&gt;Daniel Thompson-Yvetot is the principal architect and security engineer behind &lt;a href="https://github.com/tauri-apps" rel="noopener noreferrer"&gt;Tauri&lt;/a&gt;. He has been an open source evangelist for the last 13 years and is an active member of the Sustainable Free and Open Source Communities (&lt;a href="https://sfosc.org" rel="noopener noreferrer"&gt;SFOSC&lt;/a&gt;).&lt;/p&gt;

</description>
      <category>rust</category>
      <category>contributorswanted</category>
      <category>security</category>
    </item>
  </channel>
</rss>
