DEV Community

Blessing Krofegha
Blessing Krofegha

Posted on • Edited on

Creating Desktop Apps with ReactJS using Tauri

Introduction

Building desktop apps use to be difficult, first, you would need to know quite a number of languages like Java or C++ and get buried to quite a number of setups which can be wearing. Thankfully as technology progressed, frameworks like ElectronJS came into the picture and simplified the process.
In this article, I’ll introduce you to Tauri, A toolchain for building native desktop apps using any HTML and JavaScript-based front-end framework, such as React, Vue.js, or Angular.

This article will be useful to you if:

  • you’ve been building a web or mobile application and want to see how you could create a desktop app with React.Js.
  • you have been building applications on the web with HTML, CSS, and JavaScript, and you want to use the same technologies to create apps targeted at Windows, macOS, or Linux platforms.
  • you are already building cross-platform desktop apps with technologies like Electron, and you want to check out alternatives.
  • you are a Rust enthusiast, and you’d like to apply it to build native cross-platform applications.

We will look at how to build a native cross-platform application from an existing web project. Let’s get to it!
Note: This article assumes you’re comfortable with HTML, CSS, and React.Js.

What is Tauri.js?

The Official Tauri site describes it as;

  • A framework for building tiny, blazing-fast binaries for all major desktop platforms.
  • It allows a rust-sourced binary with an API that the front-end can interact with.
  • Built with Rust and the CLI leverages Node.js, hence making Tauri a genuinely polyglot approach to creating and maintaining great apps. Polyglot in this context means that Tauri uses multiple programming languages such as Rust, JavaScript, and TypeScript.
  • A Framework-agnostic toolchain for building highly secure native apps that have tiny binaries (i.e. file size) and that are very fast (i.e. minimal RAM usage).

Simply put, Tauri makes you utilize web technologies to create smaller and secured native desktop apps.

Electron Vs Tauri: Their differences

Electron Js has been around for a while now and as even made mass adoption amongst developers and great companies like Atom, Vscode, and more. In this section, we would compare some features that make Tauri distinct from Electron Js.
This table is from it’s Github page.

Features Tauri Electron
Binary Size MacOS 0.6 MB 47.7 MB
Memory Consumption MacOS 13 MB 34.1 MB
Interface Service Provider Varies Chromium
Backend Binding Rust Node.js (ECMAScript)
Underlying Engine C/C++ V8 (C/C++)
FLOSS Yes No
Multithreading Yes No
Bytecode Delivery Yes No
Can Render PDF Yes No
Multiple Windows Soon Yes
Auto Updater Soon Yes
Cross-Platform Yes Yes
Custom App Icon Yes Yes
Windows Binary Yes Yes
MacOS Binary Yes Yes
Linux Binary Yes Yes
iOS Binary Soon No
Android Binary Soon No
Localhost Server Yes Yes
No localhost option Yes No
Desktop Tray Soon Yes
Splashscreen Yes Yes
Sidecar Binaries Yes No

We see from the above table that despite the fact that Tauri is pretty new it has some amazing features and even more, while others are in the pipeline.

Benefits of Tauri

The following are the reason you might want to consider using Tauri in your next Desktop app.

  • It’s compatible with any JavaScript framework, hence you don’t have to change your stack.
  • Its variety of design patterns makes it possible to get started with implementing features with easy configurations.
  • Like you saw from the above table, the size of a Tauri app is just 0.60 MB (600 KB).
  • Also, the memory consumption of a Tauri app is less than half of an Electron-based app. From the table, it is usually about 13 MB.
  • Unlike Electron, relicensing is made possible with Tauri. Apps built with Tauri can be officially shipped into PureOS.
  • The flexibility and framework agnostic ability of Tauri makes it possible to turn a web-based code-base into a native desktop app, without altering anything.

Tauri in Action!

Tauri uses Node.js under the hood to scaffold an HTML, CSS, and JavaScript rendering window as a user interface (UI), majorly bootstrapped by Rust.
The outcome is a monolithic binary that can be distributed as common file types for macOS (app/dmg), Windows (exe/MSI), and Linux (deb/app image).

How Tauri Apps Are Made

A Tauri app is created via the following steps:

  • First, make an interface in your GUI framework, and prepare the HTML, CSS, and JavaScript for consumption.
  • The Tauri CLI takes it and rigs the underlying native code(Rust runner) according to your configuration.
  • In development mode, it creates a WebView window, with debugging and Hot Module Reloading.
  • In build mode, it rigs the bundler and creates a final application(native installers) according to your settings.

Check out more of its operation on Its site.

Setting Up Your Environment

Now that you know what Tauri is and how it works, let’s do the setups.
We will not be covering environment setups for any OS in this tutorials, but you can check the setup for Windows, macOS, and Linus are also available,
For those using the Windows Subsystem for Linux (WSL) please refer to it’s Linux specific instructions instead.

Implementing Tauri With React.JS

Now that we have Tauri installed, let’s bundle an existing web project.
For this application, we would be using a Money Heist Episode Picker I built with React and Typescript. Read how I built it here.

https://codesandbox.io/s/money-heist-episode-picker-react-and-typescript-web-app-px1qe

Go ahead and fork the repository, which will serve as a shell. After forking it, make sure to clone the fork by running this:

git clone https://github.com/[yourUserName]/React-Desktop-App.git
Enter fullscreen mode Exit fullscreen mode

You can install Tauri as both a local and a global dependency, but in this tutorial, we’ll be installing it locally.
After cloning the project, run the following to install the dependencies:

#Using npm
npm install

#using yarn
yarn
Enter fullscreen mode Exit fullscreen mode

After a successful installation of dependencies, start the server with npm start, your app should start on http://localhost:3000.

Defining Tauri

If you decide to use Tauri as a local package with npm, you will have to define a custom script to your package.json:

    {
      // Add Tauri to the script object
      "scripts": {
        "tauri": "tauri",
        "dev": "npm run tauri dev",
        "bundle": "tauri build",
    }
Enter fullscreen mode Exit fullscreen mode
  • Tauri command - defines Tauri and tells your OS, you’re about to create a Tauri based app.
  • dev - It enables us to start your app on our local machine.
  • bundle - Running this command will build our app for production. Initialize Tauri

We will need to add an src-Tauri directory to the root of your app directory. Inside this directory are files and folders used by Tauri to configure your desktop app.
To initialize Tauri in other for us to have this folder, run;

`npm run Tauri init`
Enter fullscreen mode Exit fullscreen mode

While initializing you’ll be asked a few questions, answers them based on your project scope.
Here’s how mine looks

After it’s done initializing, it will create a src-tauri directory, let’s check out the contents:

└── src-tauri
    ├── .gitignore
    ├── Cargo.toml
    ├── rustfmt.toml
    ├── tauri.conf.json
    ├── icons
    │   ├── 128x128.png
    │   ├── 128x128@2x.png
    │   ├── 32x32.png
    │   ├── icon.icns
    │   ├── icon.ico
    │   └── icon.png
    └── src
        ├── build.rs
        ├── cmd.rs
        └── main.rs
Enter fullscreen mode Exit fullscreen mode

Cargo.toml inside src-tauri/Cargo.toml is like the package.json file for Rust.
It contains configurations for our app. The content of this file is beyond the scope of this tutorial.

##Bundling our app

To bundle Money-Heist for your current platform, simply run this:

#builds our react app
npm run build

#builds the Tauri crates
npm run bundle
Enter fullscreen mode Exit fullscreen mode

Note: The first time you run this, it will take some time to collect the Rust crates and build everything, but on subsequent runs, it will only need to rebuild the Tauri crates which is much quicker.
So go grab some chocolates while it’s building 😎

When the above is completed, you should have a binary of money-heist for your current OS.
Because of the way that Cargo builds its targets, the final app is placed in the following folder:
src-Tauri/target/release/money-heist.
Your’s might be src-tauri/target/release/bundle/[your-app].

Conclusion

In this article we have seen how cool it is to build desktop apps with React utilizing Tauri, I’d like to see what you came up with the comment section.
Lemme know what you think about Tauri.
If you enjoyed the article please let’s connect on twitter

Resources

Why You as a Developer Should be Using a CMS
Headless Commerce Explained: Definitions, Use Cases, and Roadblocks | Agility CMS
APIs vs. SDKs: What's the Difference? | Agility CMS
TOP Static Site Generators to Watch in 2021
Difference between Headless CMS and static site generator
What is Netlify and Why Should You Care as an Editor? | Agility CMS
What is a Headless CMS? | Agility CMS
Benefits of Headless CMS vs a Traditional CMS | Agility CMS
Content Architecture: The Key to Organizing and Managing Your Content and Team
WordPress And Its Alternatives: Headless CMS | Agility CMS
Open Source CMS vs. Proprietary CMS: Can You Have the Best of Both? | Agility CMS
Choosing a React CMS: What to Look For? | Agility CMS
Take control of your Content Architecture: Content Modelling
DXP vs Headless CMS: Modern DXP Architecture
Jamstack Development: 10 JAMstack Pioneers You Need To Know About in 2021

Top comments (4)

Collapse
 
nothingismagick profile image
Daniel Thompson-Yvetot

Note to anyone reading this: Tauri beta-rc has arrived, and this tutorial is out of date. If you did something like this, please visit our migration page here:

tauri.studio/en/docs/usage/guides/...

If you still have problems, visit our discord linked from our website above.

Collapse
 
jayanthsaikiran profile image
Jayanth Saikiran

Great article. Can we use tauri to convert a mern stack web app to a desktop application. I tried converting, but I am not able to link backend to tauri. Any resource to solve this issue ?

Collapse
 
adamkaram profile image
Adam karam

if i have postgress or any databse in my app what should i do is just bulding my app and every thing will be fine or should i do extra work

Collapse
 
ngmisl profile image
ngmisl

code is faulty and new tauri versions are out... any chance to update or remove this? really not helping when the tutorial is outdated and straight not working anymore