2022-01-23 22:48:42 +03:00
< img src = ".github/splash.png" alt = "Tauri" / >
2019-07-13 22:55:25 +03:00
2022-07-25 18:03:18 +03:00
[![status ](https://img.shields.io/badge/status-stable-blue.svg )](https://github.com/tauri-apps/tauri/tree/dev)
2021-04-25 19:15:05 +03:00
[![License ](https://img.shields.io/badge/License-MIT%20or%20Apache%202-green.svg )](https://opencollective.com/tauri)
2020-05-22 18:40:32 +03:00
[![test library ](https://img.shields.io/github/workflow/status/tauri-apps/tauri/test%20library?label=test%20library )](https://github.com/tauri-apps/tauri/actions?query=workflow%3A%22test+library%22)
2021-04-23 23:34:10 +03:00
[![FOSSA Status ](https://app.fossa.com/api/projects/git%2Bgithub.com%2Ftauri-apps%2Ftauri.svg?type=shield )](https://app.fossa.com/projects/git%2Bgithub.com%2Ftauri-apps%2Ftauri?ref=badge_shield)
2022-07-25 18:03:18 +03:00
[![Chat Server ](https://img.shields.io/badge/chat-discord-7289da.svg )](https://discord.gg/SpmNs4S)
[![website ](https://img.shields.io/badge/website-tauri.app-purple.svg )](https://tauri.app)
2019-07-13 22:55:25 +03:00
[![https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg ](https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg )](https://good-labs.github.io/greater-good-affirmation)
2022-07-25 18:03:18 +03:00
[![support ](https://img.shields.io/badge/sponsor-Open%20Collective-blue.svg )](https://opencollective.com/tauri)
2020-05-22 18:40:32 +03:00
## Current Releases
2022-06-23 21:31:11 +03:00
### Core
| Component | Description | Version | Lin | Win | Mac |
| -------------------------------------------------------------------------------------------- | ----------------------------------------- | -------------------------------------------------------------------------------------------------------- | --- | --- | --- |
| [**tauri** ](https://github.com/tauri-apps/tauri/tree/dev/core/tauri ) | runtime core | [![ ](https://img.shields.io/crates/v/tauri.svg )](https://crates.io/crates/tauri) | ✅ | ✅ | ✅ |
| [**tauri-build** ](https://github.com/tauri-apps/tauri/tree/dev/core/tauri-build ) | applies macros at build-time | [![ ](https://img.shields.io/crates/v/tauri-build.svg )](https://crates.io/crates/tauri-build) | ✅ | ✅ | ✅ |
| [**tauri-codegen** ](https://github.com/tauri-apps/tauri/tree/dev/core/tauri-codegen ) | handles assets, parses tauri.conf.json | [![ ](https://img.shields.io/crates/v/tauri-codegen.svg )](https://crates.io/crates/tauri-codegen) | ✅ | ✅ | ✅ |
| [**tauri-macros** ](https://github.com/tauri-apps/tauri/tree/dev/core/tauri-macros ) | creates macros using tauri-codegen | [![ ](https://img.shields.io/crates/v/tauri-macros.svg )](https://crates.io/crates/tauri-macros) | ✅ | ✅ | ✅ |
| [**tauri-runtime** ](https://github.com/tauri-apps/tauri/tree/dev/core/tauri-runtime ) | layer between Tauri and webview libraries | [![ ](https://img.shields.io/crates/v/tauri-runtime.svg )](https://crates.io/crates/tauri-runtime) | ✅ | ✅ | ✅ |
| [**tauri-runtime-wry** ](https://github.com/tauri-apps/tauri/tree/dev/core/tauri-runtime-wry ) | enables system-level interaction via WRY | [![ ](https://img.shields.io/crates/v/tauri-runtime-wry.svg )](https://crates.io/crates/tauri-runtime-wry) | ✅ | ✅ | ✅ |
| [**tauri-utils** ](https://github.com/tauri-apps/tauri/tree/dev/core/tauri-utils ) | common code used across the tauri crates | [![ ](https://img.shields.io/crates/v/tauri-utils.svg )](https://crates.io/crates/tauri-utils) | ✅ | ✅ | ✅ |
### Tooling
| Component | Description | Version | Lin | Win | Mac |
| --------------------------------------------------------------------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------ | --- | --- | --- |
| [**bundler** ](https://github.com/tauri-apps/tauri/tree/dev/tooling/bundler ) | manufacture the final binaries | [![ ](https://img.shields.io/crates/v/tauri-bundler.svg )](https://crates.io/crates/tauri-bundler) | ✅ | ✅ | ✅ |
| [**api.js** ](https://github.com/tauri-apps/tauri/tree/dev/tooling/api ) | JS API for interaction with Rust backend | [![ ](https://img.shields.io/npm/v/@tauri-apps/api.svg )](https://www.npmjs.com/package/@tauri-apps/api) | ✅ | ✅ | ✅ |
| [**cli.rs** ](https://github.com/tauri-apps/tauri/tree/dev/tooling/cli ) | create, develop and build apps | [![ ](https://img.shields.io/crates/v/tauri-cli.svg )](https://crates.io/crates/tauri-cli) | ✅ | ✅ | ✅ |
| [**cli.js** ](https://github.com/tauri-apps/tauri/tree/dev/tooling/cli/node ) | Node.js CLI wrapper for cli.rs | [![ ](https://img.shields.io/npm/v/@tauri-apps/cli.svg )](https://www.npmjs.com/package/@tauri-apps/cli) | ✅ | ✅ | ✅ |
### Utilities and Plugins
| Component | Description | Version | Lin | Win | Mac |
| ------------------------------------------------------------------------------- | ------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | --- | --- | --- |
| [**create-tauri-app** ](https://github.com/tauri-apps/create-tauri-app ) | Get started with your first Tauri app | [![ ](https://img.shields.io/npm/v/create-tauri-app.svg )](https://www.npmjs.com/package/create-tauri-app) | ✅ | ✅ | ✅ |
| [**vue-cli-plugin-tauri** ](https://github.com/tauri-apps/vue-cli-plugin-tauri/ ) | Vue CLI plugin for Tauri | [![ ](https://img.shields.io/npm/v/vue-cli-plugin-tauri.svg )](https://www.npmjs.com/package/vue-cli-plugin-tauri) | ✅ | ✅ | ✅ |
2020-05-22 18:40:32 +03:00
## Introduction
2022-06-23 21:31:11 +03:00
2022-03-18 12:26:48 +03:00
Tauri is a framework for building tiny, blazingly fast binaries for all major desktop platforms. Developers can integrate any front-end framework that compiles to HTML, JS and CSS for building their user interface. The backend of the application is a rust-sourced binary with an API that the front-end can interact with.
2020-05-22 18:40:32 +03:00
2021-05-10 21:39:24 +03:00
The user interface in Tauri apps currently leverages [`tao` ](https://docs.rs/tao ) as a window handling library on macOS and Windows, and [`gtk` ](https://gtk-rs.org/docs/gtk/ ) on Linux via the **Tauri-team** incubated and maintained [WRY ](https://github.com/tauri-apps/wry ), which creates a unified interface to the system webview (and other goodies like Menu and Taskbar), leveraging WebKit on macOS, WebView2 on Windows and WebKitGTK on Linux.
2020-05-22 18:40:32 +03:00
2021-05-10 21:39:24 +03:00
To learn more about the details of how all of these pieces fit together, please consult this [ARCHITECTURE.md ](https://github.com/tauri-apps/tauri/blob/dev/ARCHITECTURE.md ) document.
2020-05-22 18:40:32 +03:00
## Get Started
2022-06-23 21:31:11 +03:00
2022-08-27 22:18:16 +03:00
If you are interested in making a tauri app, please visit the [documentation website ](https://tauri.app ). This README is directed towards those who are interested in contributing to the core library. But if you just want a quick overview about where `tauri` is at in its development, here's a quick burndown:
2019-07-25 02:06:55 +03:00
2021-12-23 16:09:30 +03:00
### Platforms
2022-06-23 21:31:11 +03:00
Tauri currently supports development and distribution on the following platforms:
| Platform | Versions |
| :----------------------- | :-------------- |
| Windows | 7 and above |
| macOS | 10.15 and above |
| Linux | See below |
| iOS/iPadOS (coming soon) | |
| Android (coming soon) | |
**Linux Support**
For **developing** Tauri apps refer to the [Getting Started guide on tauri.app ](https://tauri.app/v1/guides/getting-started/prerequisites#setting-up-linux ).
For **running** Tauri apps we support the below configurations (these are automatically added as dependencies for .deb and are bundled for AppImage so that your users don't need to manually install them):
- Debian (Ubuntu 18.04 and above or equivalent) with the following packages installed:
- `libwebkit2gtk-4.0-37` , `libgtk-3-0` , `libayatana-appindicator3-1` < sup > 1</ sup >
- Arch with the following packages installed:
- `webkit2gtk` , `gtk3` , `libayatana-appindicator` < sup > 1</ sup >
- Fedora (latest 2 versions) with the following packages installed:
- `webkit2gtk3` , `gtk3` , `libappindicator-gtk3` < sup > 1</ sup >
< sup > 1</ sup > `appindicator` is only required if system trays are used
2021-04-25 19:15:05 +03:00
2021-12-23 16:09:30 +03:00
### App Bundles
2022-06-23 21:31:11 +03:00
2019-12-02 00:57:10 +03:00
- [x] App Icons
2022-06-19 16:23:35 +03:00
- [x] Build on macOS (.app, .dmg)
2020-05-22 18:40:32 +03:00
- [x] Build on Linux (.deb, AppImage)
- [x] Build on Windows (.exe, .msi)
2019-07-31 11:41:46 +03:00
- [x] Copy Buffer
2020-05-22 18:40:32 +03:00
- [x] Device Notifications (toast)
2021-04-25 19:15:05 +03:00
- [x] Self Updater
- [x] App Signing
- [x] Frameless Mode
- [x] Transparent Mode
- [x] Multiwindow Mode
2021-06-21 18:29:15 +03:00
- [x] Tray
2020-05-22 18:40:32 +03:00
- [ ] deeplink RPC (in progress)
2020-07-12 21:52:31 +03:00
- [ ] One-Time commands (coming soon)
2019-07-31 11:41:46 +03:00
### Security Features
2022-06-23 21:31:11 +03:00
2021-04-25 19:15:05 +03:00
- [x] localhost-free (:fire:)
- [x] custom protocol for secure mode
2019-07-31 11:41:46 +03:00
- [x] Dynamic ahead of Time Compilation (dAoT) with functional tree-shaking
- [x] functional Address Space Layout Randomization
2019-12-02 00:57:10 +03:00
- [x] OTP salting of function names and messages at runtime
2019-08-01 11:34:20 +03:00
- [x] CSP Injection
2019-07-13 23:53:44 +03:00
2020-07-12 21:52:31 +03:00
### Utilities
2022-06-23 21:31:11 +03:00
2020-07-12 21:52:31 +03:00
- [x] GH Action for creating binaries for all platforms
- [x] VS Code Extension
- [x] Tauri Core Plugins
2021-04-25 19:15:05 +03:00
- [x] Update core dependencies automatically from the command line
- [x] Rust-based CLI
2020-07-12 21:52:31 +03:00
2019-12-02 00:57:10 +03:00
### Comparison between Tauri and Electron
2019-07-13 20:14:13 +03:00
2021-04-12 07:59:25 +03:00
| Detail | Tauri | Electron |
| -------------------------- | ------ | -------------------- |
| Installer Size Linux | 3.1 MB | 52.1 MB |
| Memory Consumption Linux | 180 MB | 462 MB |
2021-12-23 16:09:30 +03:00
| Launch Time Linux | 0.39s | 0.80s |
2021-04-25 19:15:05 +03:00
| Interface Service Provider | WRY | Chromium |
2021-04-12 07:59:25 +03:00
| Backend Binding | Rust | Node.js (ECMAScript) |
2021-04-25 19:15:05 +03:00
| Underlying Engine | Rust | V8 (C/C++) |
2021-04-12 07:59:25 +03:00
| FLOSS | Yes | No |
| Multithreading | Yes | Yes |
| Bytecode Delivery | Yes | No |
2021-04-25 19:15:05 +03:00
| Multiple Windows | Yes | Yes |
2021-12-23 16:09:30 +03:00
| Auto Updater | Yes | Yes< sup > 1< / sup > |
2021-04-12 07:59:25 +03:00
| Custom App Icon | Yes | Yes |
| Windows Binary | Yes | Yes |
2022-06-19 16:23:35 +03:00
| macOS Binary | Yes | Yes |
2021-04-12 07:59:25 +03:00
| Linux Binary | Yes | Yes |
| iOS Binary | Soon | No |
| Android Binary | Soon | No |
2021-06-21 18:29:15 +03:00
| Desktop Tray | Yes | Yes |
2021-04-12 07:59:25 +03:00
| Sidecar Binaries | Yes | No |
2019-07-13 20:14:13 +03:00
2019-07-14 12:14:14 +03:00
#### Notes
2022-06-23 21:31:11 +03:00
2021-02-28 21:44:29 +03:00
1. Electron has no native auto updater on Linux, but is offered by electron-packager
2020-05-22 18:40:32 +03:00
## Development
Tauri is a system composed of a number of moving pieces:
### Infrastructure
2022-06-23 21:31:11 +03:00
2021-12-23 16:09:30 +03:00
- Git for code management
- GitHub for project management
- GitHub actions for CI and CD
- Discord for discussions
- Netlify-hosted documentation website
2022-06-19 16:23:35 +03:00
- DigitalOcean Meilisearch instance
2020-05-22 18:40:32 +03:00
### Major Runtimes
2022-06-23 21:31:11 +03:00
2021-12-23 16:09:30 +03:00
- Node.js for running the CLI (deno and pure rust are on the roadmap)
- Cargo for testing, running the dev service, building binaries and as the runtime harness for the webview
2020-05-22 18:40:32 +03:00
### Major Languages
2022-06-23 21:31:11 +03:00
2021-04-25 19:15:05 +03:00
- Rust for the CLI
2022-06-19 16:23:35 +03:00
- ECMAScript bindings to the Rust API, written in typescript
2021-04-25 19:15:05 +03:00
- Rust for bindings, rust side of the API, harnesses
- Rust plugins to Tauri backend
2020-05-22 18:40:32 +03:00
### Operating systems
2022-06-23 21:31:11 +03:00
2020-05-22 18:40:32 +03:00
Tauri core can be developed on Mac, Linux and Windows, but you are encouraged to use the latest possible operating systems and build tools for your OS.
2021-12-23 16:09:30 +03:00
### Contributing
2022-06-23 21:31:11 +03:00
2022-05-11 02:05:01 +03:00
Before you start working on something, it's best to check if there is an existing issue first. It's also a good idea to stop by the Discord server and confirm with the team if it makes sense or if someone else is already working on it.
2021-12-23 16:09:30 +03:00
Please make sure to read the [Contributing Guide ](./.github/CONTRIBUTING.md ) before making a pull request.
Thank you to everyone contributing to Tauri!
2020-05-22 18:40:32 +03:00
### Documentation
2022-06-23 21:31:11 +03:00
2020-05-22 18:40:32 +03:00
Documentation in a polyglot system is a tricky proposition. To this end, we prefer to use inline documentation of Rust code and at JSDoc in typescript / javascript code. We autocollect these and publish them using Docusaurus v2 and netlify. Here is the hosting repository for the documentation site: https://github.com/tauri-apps/tauri-docs
### Testing & Linting
2022-06-23 21:31:11 +03:00
2020-05-22 18:40:32 +03:00
Test all the things! We have a number of test suites, but are always looking to improve our coverage:
2022-06-23 21:31:11 +03:00
2020-05-22 18:40:32 +03:00
- Rust (`cargo test`) => sourced via inline `#[cfg(test)]` declarations
- TS (`jest`) => via spec files
2020-07-06 02:00:49 +03:00
- Smoke Tests (run on merges to latest)
2020-05-22 18:40:32 +03:00
- eslint, clippy
### CI/CD
2022-06-23 21:31:11 +03:00
2020-05-22 18:40:32 +03:00
We recommend you read this article to understand better how we run our pipelines: https://www.jacobbolda.com/setting-up-ci-and-cd-for-tauri/
2019-07-14 12:14:14 +03:00
2019-08-28 14:28:49 +03:00
## Organization
2022-06-23 21:31:11 +03:00
2021-04-25 19:15:05 +03:00
Tauri aims to be a sustainable collective based on principles that guide [sustainable free and open software communities ](https://sfosc.org ). To this end it has become a Programme within the [Commons Conservancy ](https://commonsconservancy.org/ ), and you can contribute financially via [Open Collective ](https://opencollective.com/tauri ).
2019-07-14 17:29:41 +03:00
2019-07-13 22:55:25 +03:00
## Semver
2022-06-23 21:31:11 +03:00
2019-08-28 14:28:49 +03:00
**tauri** is following [Semantic Versioning 2.0 ](https://semver.org/ ).
2019-07-13 22:55:25 +03:00
2019-07-13 20:14:13 +03:00
## Licenses
2022-06-23 21:31:11 +03:00
2021-04-25 19:15:05 +03:00
Code: (c) 2015 - 2021 - The Tauri Programme within The Commons Conservancy.
2019-07-25 02:06:55 +03:00
2020-05-22 18:40:32 +03:00
MIT or MIT/Apache 2.0 where applicable.
2019-07-13 20:14:13 +03:00
Logo: CC-BY-NC-ND
2021-04-23 23:34:10 +03:00
2022-06-23 21:31:11 +03:00
- Original Tauri Logo Designs by [Alve Larsson ](https://alve.io/ ), [Daniel Thompson-Yvetot ](https://github.com/nothingismagick ) and [Guillaume Chau ](https://github.com/akryum )
2021-04-23 23:34:10 +03:00
2021-04-25 19:15:05 +03:00
[![FOSSA Status ](https://app.fossa.com/api/projects/git%2Bgithub.com%2Ftauri-apps%2Ftauri.svg?type=large )](https://app.fossa.com/projects/git%2Bgithub.com%2Ftauri-apps%2Ftauri?ref=badge_large)