mirror of
https://github.com/tauri-apps/tauri.git
synced 2024-12-26 04:03:29 +03:00
a50f24b2bd
Co-authored-by: wusyong <wusyong@users.noreply.github.com> Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de> Co-authored-by: Lucas Nogueira <lucas@tauri.studio> Co-authored-by: Simon Hyll <hyllsimon@gmail.com> Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app> Co-authored-by: Lucas Nogueira <lucas@tauri.app> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.studio> Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: chip <chip@chip.sh> Co-authored-by: Raphii <iam@raphii.co> Co-authored-by: Ronie Martinez <ronmarti18@gmail.com> Co-authored-by: hanaTsuk1 <101488209+hanaTsuk1@users.noreply.github.com> Co-authored-by: nathan-fall <39990940+nathan-fall@users.noreply.github.com> Co-authored-by: Akshay <nerdy@peppe.rs> Co-authored-by: KurikoMoe <kurikomoe@gmail.com> Co-authored-by: Guilherme Oenning <me@goenning.net> Co-authored-by: Pierre Cashon <biaocy91@gmail.com> Co-authored-by: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Co-authored-by: Amirhossein Akhlaghpour <m9.akhlaghpoor@gmail.com> Co-authored-by: Risto Stevcev <me@risto.codes> Co-authored-by: Soumt <rltks1305@naver.com> Co-authored-by: yutotnh <57719497+yutotnh@users.noreply.github.com> Co-authored-by: Gökçe Merdun <agmmnn@gmail.com> Co-authored-by: Nathanael Rea <Nathan@NathanaelRea.com> Co-authored-by: Usman Rajab <usman.rajab@gmail.com> Co-authored-by: Francis The Basilisk <36006338+snorkysnark@users.noreply.github.com> Co-authored-by: Lej77 <31554212+Lej77@users.noreply.github.com> Co-authored-by: Tomáš Diblík <dibla.tomas@post.cz> Co-authored-by: Jonas Kruckenberg <iterpre@protonmail.com> Co-authored-by: Pascal Sommer <Pascal-So@users.noreply.github.com> Co-authored-by: Bo <bertonzh@gmail.com> Co-authored-by: Kevin Yue <k3vinyue@gmail.com> fixed grammar and typos (#6937) Fix api.js docs pipeline with updated typedoc dependencies (#6945) closes #6887 (#6922) fix(core): Fix `WindowBuilder::on_navigation` handler never registerd, closes #6865 (#6921) fix(core): Fix `WindowBuilder::on_navigation` handler never registerd, closes #6865 fix broken symlinks in license files (#6336) fix(cli): fix cli connection timeout to dev server (fix #6045) (#6046) fix(bundler): ensure that there are no duplicate extension arguments when bundling on Windows, fixes #6103 (#6917) fix(bundler): ensure that there are no duplicate extension arguments during bundling on Windows (fix #6103) closes #5491 (#6408) fix(nsis): prefill $INSTDIR with previous install path and respect `/D` flag, closes #6928 (#6935) fix(nsis): prefill $INSTDIR with previous install path and respect `/D` flag, closes #6928 fix(updater): emit `UPTODATE` when server responds with 204, closes #6934 (#6970) fix(core): unpin all dependencies, closes #6944 (#6966) fix(bundler): Add new lang_file option in persian variant. (#6972) fix(core/ipc): access url through webview native object, closes #6889 (#6976) fix(core): remove trailing slash in http scope url, closes #5208 (#6974) fix(core): remove trailing slash in http scope url, closes #5208 fix(cli): find correct binary when `--profile` is used, closes #6954 (#6979) fix(cli): find correct binary when `--profile` is used, closes #6954 closes #6955 (#6987) closes #6955 closes #6158 (#6969) closes #6158 fix(cli): improve vs build tools detection (#6982) fix: updated appimage script to follow symlinks for /usr/lib* (fix: #6992) (#6996) fix(cli): correctly remove Cargo features (#7013) Fix typo (#7012) fix(cli): revert metadata.json field rename from #6795 (#7029) closes #6732 (#6736) fix: add missing file properties on Windows, closes #6676 (#6693) fix(cli.js): detect node-20 binary (#6667) fix version-or-publish workflow (#7031) fix(cli/devserver): inject autoreload into HTML only, closes #6997 (#7032) fix(bundler/nsis): write installer templates UTF16LE encoded, closes #7036 (#7040) fix(bundler/nsis): write installer templates UTF16LE encoded, closes #7036 fix(core): rewrite `asset` protocol streaming, closes #6375 (#6390) closes #5939 (#5960) fix(core): use `safe_block_on` (#7047) closes #6859 (#6933) closes #6955 (#6998) fix(core): populate webview_attrs from config, closes #6794 (#6797) closes #5176 (#5180) fix: sound for notifications on windows (fix #6652) (#6680) close native window's buttons, closes #2353 (#6665) fix(bundler/nsis): calculate accurate app size, closes #7056 (#7057) fix(tests): only download update when it is available (#7061) closes #6706 (#6712) fix(doc): correct the doc of `content_protected()` (#7065) closes #6472 (#6530) fix(macros): use full path to Result to avoid issues with type aliases (#7071)
170 lines
12 KiB
Markdown
170 lines
12 KiB
Markdown
<img src=".github/splash.png" alt="Tauri" />
|
|
|
|
[![status](https://img.shields.io/badge/status-stable-blue.svg)](https://github.com/tauri-apps/tauri/tree/dev)
|
|
[![License](https://img.shields.io/badge/License-MIT%20or%20Apache%202-green.svg)](https://opencollective.com/tauri)
|
|
[![test core](https://img.shields.io/github/actions/workflow/status/tauri-apps/tauri/test-core.yml?label=test%20core&logo=github)](https://github.com/tauri-apps/tauri/actions/workflows/test-core.yml)
|
|
[![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)
|
|
[![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)
|
|
[![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)
|
|
[![support](https://img.shields.io/badge/sponsor-Open%20Collective-blue.svg)](https://opencollective.com/tauri)
|
|
|
|
## Current Releases
|
|
|
|
### 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) | ✅ | ✅ | ✅ |
|
|
| [**tauri-cli**](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) | ✅ | ✅ | ✅ |
|
|
| [**@tauri-apps/cli**](https://github.com/tauri-apps/tauri/tree/dev/tooling/cli/node) | Node.js CLI wrapper for `tauri-cli` | [![](https://img.shields.io/npm/v/@tauri-apps/cli.svg)](https://www.npmjs.com/package/@tauri-apps/cli) | ✅ | ✅ | ✅ |
|
|
| [**@tauri-apps/api**](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) | ✅ | ✅ | ✅ |
|
|
|
|
### 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) | ✅ | ✅ | ✅ |
|
|
|
|
## Introduction
|
|
|
|
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.
|
|
|
|
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.
|
|
|
|
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.
|
|
|
|
## Get Started
|
|
|
|
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:
|
|
|
|
### Platforms
|
|
|
|
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.1-0`, `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>
|
|
- Void with the following packages installed:
|
|
- `webkit2gtk`, `gtk+3`, `libappindicator`<sup>1</sup>
|
|
|
|
<sup>1</sup> `appindicator` is only required if system trays are used
|
|
|
|
### Features
|
|
|
|
- [x] Desktop Bundler (.app, .dmg, .deb, AppImage, .msi)
|
|
- [x] Self Updater
|
|
- [x] App Signing
|
|
- [x] Native Notifications (toast)
|
|
- [x] App Tray
|
|
- [x] Core Plugin System
|
|
- [x] Scoped Filesystem
|
|
- [x] Sidecar
|
|
|
|
### Security Features
|
|
|
|
- [x] localhost-free (:fire:)
|
|
- [x] custom protocol for secure mode
|
|
- [x] Dynamic ahead of Time Compilation (dAoT) with functional tree-shaking
|
|
- [x] functional Address Space Layout Randomization
|
|
- [x] OTP salting of function names and messages at runtime
|
|
- [x] CSP Injection
|
|
|
|
### Utilities
|
|
|
|
- [x] Rust-based CLI
|
|
- [x] GH Action for creating binaries for all platforms
|
|
- [x] VS Code Extension
|
|
|
|
## Development
|
|
|
|
Tauri is a system composed of a number of moving pieces:
|
|
|
|
### Infrastructure
|
|
|
|
- Git for code management
|
|
- GitHub for project management
|
|
- GitHub actions for CI and CD
|
|
- Discord for discussions
|
|
- Netlify-hosted documentation website
|
|
- DigitalOcean Meilisearch instance
|
|
|
|
### Operating systems
|
|
|
|
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.
|
|
|
|
### Contributing
|
|
|
|
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.
|
|
|
|
Please make sure to read the [Contributing Guide](./.github/CONTRIBUTING.md) before making a pull request.
|
|
|
|
Thank you to everyone contributing to Tauri!
|
|
|
|
### Documentation
|
|
|
|
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
|
|
|
|
Test all the things! We have a number of test suites, but are always looking to improve our coverage:
|
|
|
|
- Rust (`cargo test`) => sourced via inline `#[cfg(test)]` declarations
|
|
- Typescript (`jest`) => via spec files
|
|
- Smoke Tests (run on merges to latest)
|
|
- eslint, clippy
|
|
|
|
### CI/CD
|
|
|
|
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/
|
|
|
|
## Organization
|
|
|
|
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).
|
|
|
|
## Semver
|
|
|
|
**tauri** is following [Semantic Versioning 2.0](https://semver.org/).
|
|
|
|
## Licenses
|
|
|
|
Code: (c) 2015 - 2021 - The Tauri Programme within The Commons Conservancy.
|
|
|
|
MIT or MIT/Apache 2.0 where applicable.
|
|
|
|
Logo: CC-BY-NC-ND
|
|
|
|
- Original Tauri Logo Designs by [Alve Larsson](https://alve.io/), [Daniel Thompson-Yvetot](https://github.com/nothingismagick) and [Guillaume Chau](https://github.com/akryum)
|
|
|
|
[![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)
|