<?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: Daniel Thompson-Yvetot</title>
    <description>The latest articles on DEV Community by Daniel Thompson-Yvetot (@nothingismagick).</description>
    <link>https://dev.to/nothingismagick</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%2Fuser%2Fprofile_image%2F214883%2F365a969f-a43a-488d-84e5-1aa7158e8bc1.jpeg</url>
      <title>DEV Community: Daniel Thompson-Yvetot</title>
      <link>https://dev.to/nothingismagick</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nothingismagick"/>
    <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>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>Setup and serve Quasar SSR in a Droplet in 30 minutes and in 3 Quick and Easy Steps.</title>
      <dc:creator>Daniel Thompson-Yvetot</dc:creator>
      <pubDate>Wed, 23 Oct 2019 16:46:52 +0000</pubDate>
      <link>https://dev.to/nothingismagick/setup-and-serve-quasar-ssr-in-a-droplet-in-30-minutes-and-in-3-quick-and-easy-steps-49kp</link>
      <guid>https://dev.to/nothingismagick/setup-and-serve-quasar-ssr-in-a-droplet-in-30-minutes-and-in-3-quick-and-easy-steps-49kp</guid>
      <description>&lt;p&gt;I struggled for a few hours the other day trying to convince &lt;code&gt;now.sh&lt;/code&gt; to let me run a &lt;code&gt;Vue SSR&lt;/code&gt; site using the Quasar Framework as my engine. Contrary to what is claimed at the &lt;a href="https://quasar.dev/quasar-cli/developing-ssr/deploying#Deploying-with-Now.sh"&gt;quasar.dev docs&lt;/a&gt;, Quasar SSR and now.sh is an absolute NON-STARTER. NOT V1. NOT V2. &lt;a href="https://github.com/quasarframework/quasar/commit/9addc85088cc0326773fe15ac8395c3a46997db9"&gt;That recommendation to use V1&lt;/a&gt; of the &lt;code&gt;now.sh&lt;/code&gt; API actually breaks some functionality of the now.sh user interface, especially when you are on the free tier. :(&lt;/p&gt;

&lt;p&gt;Running out of time in the deploy window, I thought, well - how hard is it to setup a proper server with Digital Ocean? (And yes, I hate docker and k8's.) It took me about 30 minutes. Here's how it went down:&lt;/p&gt;

&lt;p&gt;Some notes on nomenclature:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;xxx.xxx.xxx.xxx&lt;/code&gt; is the public IP of the droplet&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;%project&lt;/code&gt; is the name of your website, ie: &lt;code&gt;myproject.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;home: $&lt;/code&gt; is your local dev workstation bash console&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;root: $&lt;/code&gt; is remote root user bash console&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;web: $&lt;/code&gt; is the remote sudo user bash console &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tech Used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DigitalOcean&lt;/li&gt;
&lt;li&gt;Ubuntu 18&lt;/li&gt;
&lt;li&gt;Curl&lt;/li&gt;
&lt;li&gt;NVM, Node, Yarn, NPM, PM2&lt;/li&gt;
&lt;li&gt;Quasar SSR (VueJS)&lt;/li&gt;
&lt;li&gt;Nginx&lt;/li&gt;
&lt;li&gt;Let’s Encrypt Certbot&lt;/li&gt;
&lt;li&gt;SSH&lt;/li&gt;
&lt;li&gt;Bash&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step -1. Create a Quasar SSR app
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;home: $ quasar create %project
home: $ cd %project
home: $ git init #link with github however you prefer
home: $ quasar build -m ssr
home: $ git add -a
home: $ git commit -m 'feat(init): quasar ssr'
home: $ git push origin master
home: $ cat .ssh/id_rsa.pub # -&amp;gt; copy to your clipboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 0. Make a new droplet
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Choose Ubuntu 18&lt;/li&gt;
&lt;li&gt;Choose SSH key and paste your dev machine's key that you just copied&lt;/li&gt;
&lt;li&gt;Note the IP Address&lt;/li&gt;
&lt;li&gt;Submit and wait 30 seconds to a minute for the provisioning to finish&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 1. Setup a new user.
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;home: $ ssh root@xxx.xxx.xxx.xxx
-----
root: $ useradd web -m
root: $ passwd web # Write this password down, or manage it.
root: $ visudo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;h1&gt;
  
  
  User privilege specification
&lt;/h1&gt;

&lt;p&gt;root    ALL=(ALL:ALL) ALL&lt;br&gt;
web     ALL=(ALL) ALL&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root: $ usermod --shell /bin/bash web
root: $ su web
-----
web: $ mkdir .ssh
web: $ nano .ssh/authorized_keys
   # paste the key, make ONE new line, save and exit
web: $ exit
----------
root: $ exit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2. Make the Github deploy key
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;home: $ ssh web@xxx.xxx.xxx.xxx
----------
web: $ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.0/install.sh | bash
web: $ nvm install 10
web: $ sudo apt-get update
web: $ sudo apt-get install git
web: $ ssh-keygen # DO NOT ENTER A PASSWORD!
web: $ cat .ssh/id_rsa.pub
   # copy the lines to your clipboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Visit: &lt;a href="https://github.com/%org/%project/settings/keys"&gt;https://github.com/%org/%project/settings/keys&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create a new deploy key&lt;/li&gt;
&lt;li&gt;paste the public ssh key&lt;/li&gt;
&lt;li&gt;give it permissions to change the repo (if you wish)&lt;/li&gt;
&lt;li&gt;give a good name like &lt;code&gt;web@xxx.xxx.xxx.xxx&lt;/code&gt; (the IP address of your server)&lt;/li&gt;
&lt;li&gt;use an ORG, not a personal account (because permissions works differently and better)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 3. Setup your deploy instance and dependencies
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;web: $ npm install -g yarn pm2 @quasar/cli
web: $ git clone git@github.com:%org/%project.git
web: $ cd %project
web: $ git config user.email "web@%project" # in case you want to push back to github
web: $ git config user.name "deploy" # in case you want to push back to github
web: $ yarn
web: $ quasar build -m ssr
web: $ yarn deploy:ssr-pm2
web: $ yarn deploy:ssr-pm2_kill
web: $ yarn deploy:ssr-pm2_watch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  VERIFY
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Visit &lt;code&gt;http://xxx.xxx.xxx.xxx:3000&lt;/code&gt; to confirm that pm2 is working.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  NOTES
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Quasar SSR defaults to serving at 3000. This is fine. Make sure that you are happy with its very conservative CSP settings. Consider using Helmet.&lt;br&gt;
Scroll to the end to see the helpful deploy commands (and a few more) that make managing this much easier.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Step 4. Get nginx to proxy-pass 3000 to :80 and :443
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;web: $ sudo apt install nginx
web: $ sudo ufw app list
web: $ sudo ufw allow 'Nginx Full'
web: $ sudo ufw allow 'OpenSSH'
web: $ sudo ufw enable
web: $ sudo ufw status
web: $ sudo ufw disable
web: $ sudo ufw status
web: $ sudo ufw enable
web: $ sudo nano /etc/nginx/sites-available/%project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;/etc/nginx/sites-available/mywebsite.com&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# in this file we are using a fake website url (mywebsite.com) 
# just because NGINX can be a pain to debug. Use your own,
# and be sure that the file name is also `%project`.

server {
    listen 80;
    listen 443 ssl;

    server_name mywebsite.com www.mywebsite.com;

    location / {
        proxy_pass http://127.0.0.1:3000/;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;web: $ sudo ln -s /etc/nginx/sites-available/%project /etc/nginx/sites-enabled/
web: $ sudo rm /etc/nginx/sites-enabled/default
web: $ sudo systemctl restart nginx
web: $ systemctl status nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  VERIFY
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Visit &lt;code&gt;http://xxx.xxx.xxx.xxx&lt;/code&gt; to make sure the proxy is working&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  NOTES
&lt;/h4&gt;

&lt;p&gt;In the next step, Certbot will slightly rewrite your nginx conf. We are doing it this way because certbot NEEDS port 80 to help itself make the certs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5. Set up Let’s Encrypt with Certbot
&lt;/h3&gt;

&lt;h4&gt;
  
  
  SETUP
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;set the &lt;code&gt;@-record&lt;/code&gt; in your DNS management interface to &lt;code&gt;xxx.xxx.xxx.xxx&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;set the www record in your DNS management to %project
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;web: $ sudo apt install software-properties-common
web: $ sudo add-apt-repository universe
web: $ sudo add-apt-repository ppa:certbot/certbot
web: $ sudo apt-get update
web: $ sudo apt install  certbot python-certbot-nginx
web: $ sudo certbot --nginx -d %project,www.%project
web: $ sudo systemctl restart nginx
web: $ sudo ufw status
web: $ sudo certbot renew --dry-run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  VERIFY
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Visit &lt;code&gt;http://%project&lt;/code&gt; to make sure it redirects to &lt;code&gt;https://%project&lt;/code&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  That's it!
&lt;/h2&gt;

&lt;p&gt;Ok, it was click-baity of me to say 3 steps, but starting a list at -1 and also using 0 let me subtract 2 from 5 - so sue me. ;) And maybe there's better ways to do this, important security features I missed or something else. If so, please leave a comment and I'll consider revising.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deploy Scripts
&lt;/h3&gt;

&lt;p&gt;Here are some useful scripts for managing &lt;code&gt;pm2&lt;/code&gt; (that you should place in the root package.json of your Quasar project):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package.json
“scripts” :{
  "build": "quasar build -m ssr",
  "start": "node dist/ssr/index.js",
  "deploy:fresh": "git pull &amp;amp;&amp;amp; quasar build -m ssr &amp;amp;&amp;amp; yarn deploy:ssr-pm2_restart",
  "deploy:ssr-pm2": "pm2 start ./dist/ssr/index.js --name quasar-ssr",
  "deploy:ssr-pm2_clusterize": "pm2 start ./dist/ssr/index.js --name quasar-ssr -i max",
  "deploy:ssr-pm2_watch": "pm2 start ./dist/ssr/index.js --name quasar-ssr --watch ./dist/ssr",
  "deploy:ssr-pm2_deep-monitoring": "pm2 start ./dist/ssr/index.js --name quasar-ssr --deep-monitoring",
  "deploy:ssr-pm2_restart": "pm2 restart quasar-ssr",
  "deploy:ssr-pm2_stop": "pm2 stop quasar-ssr",
  "deploy:ssr-pm2_monitor": "pm2 monitor quasar-ssr",
  "deploy:ssr-pm2_unmonitor": "pm2 unmonitor quasar-ssr",
  "deploy:ssr-pm2_kill": "pm2 kill"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Image from &lt;a href="https://unsplash.com/@jeahnlaffitte?utm_medium=referral&amp;amp;utm_campaign=photographer-credit"&gt;jeahnlaffitte&lt;/a&gt; at unsplash.&lt;/p&gt;

</description>
      <category>fullstack</category>
      <category>vue</category>
      <category>ssr</category>
      <category>quasarframework</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>
