* refactor(tauri-cli): use OsString where possible
* refactor(tauri-cli): remove needless scoping blocks
* refactor(tauri-cli): make return type concrete
* refactor(tauri-cli): use ?
* refactor(tauri-cli): coerce later to trait object
* refactor(tauri-cli): remove clone
* refactor(tauri-cli): make better use of static OnceLock
* fix(tauri-cli): upgrade atomics to SeqCst
* Add change file
* Update .changes/change-pr-14836.md
Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com>
* feat(webview): add set_simple_fullscreen to WebviewWindow
* add changes
* Combine per platform fn to one
---------
Co-authored-by: Tony <legendmastertony@gmail.com>
* refactor(tauri-cli): introduce replacement functions
* refactor(tauri-cli): apply replacement to remove.rs
* refactor(tauri-cli): apply replacement to icon.rs
* refactor(tauri-cli): apply replacement to bundle.rs
* refactor(tauri-cli): apply replacement to build.rs
* refactor(tauri-cli): apply replacement to add.rs
* refactor(tauri-cli): apply replacement to dev.rs
* refactor(tauri-cli): less controlflow
* refactor(tauri-cli): split config loading from locking static
* refactor(tauri-cli): remove duplicate checks covered by if let Some(tauri_dir) = tauri_dir
tauri_dir.is_some() must be true, otherwise the entire block is not run, so the frontend_dir check
is irrelevant
* fmt
* refactor(tauri-cli): apply replacement to inspect.rs
* refactor(tauri-cli): dont use statics for config
* refactor(tauri-cli): finish threading directory paths through functions
* fix: clippy
* fixup CI
* refactor(tauri-cli): dont need mutex
* refactor(tauri-cli): rescope mutex use to minimal necessary
* fix CI, reduce mutex use
* fixup PR #14607
* fix: clippy
* refactor(tauri-cli): remove ConfigHandle
* refactor(tauri-cli): remove more unwraps and panicing functions
* refactor(tauri-cli): less mutexes
* refactor(tauri-cli): undo mistaken change, address review comment
* Split android build to 2 functions
* Pass in dirs to migration v1 like the v2 beta
* Add change file
---------
Co-authored-by: Tony <legendmastertony@gmail.com>
* refactor(cli): disable jsonschema resolving external resources
* Move `CONFIG_SCHEMA_VALIDATOR` to fn
* Format
* Update ureq to fix compile on linux
* New clippy warnings
* feat(cli): add RISC-V 64-bit pre-built binary support
Add riscv64gc-unknown-linux-gnu target to the tauri-cli release workflow,
enabling pre-built binaries for RISC-V 64-bit Linux systems.
This eliminates the multi-hour QEMU compilation time that currently blocks
RISC-V adoption of Tauri apps. Native compilation on RISC-V hardware
takes ~63 minutes.
Changes:
- Add RISC-V entry to build matrix with self-hosted runner support
- Support custom `runs_on` field for matrix entries (falls back to `os`)
- Skip dtolnay/rust-toolchain and rust-cache for self-hosted runners
- Source ~/.cargo/env for self-hosted runners where Rust is pre-installed
Tested on:
- Hardware: Banana Pi F3 (RISC-V64, 16GB RAM)
- OS: Debian Trixie (required for WebKit2GTK RISC-V support)
- Build time: 1h 2m 28s
- Binary: ELF 64-bit RISC-V, 16MB stripped
* feat(cli): use cross for RISC-V cross-compilation
Switch from self-hosted runners to cross-rs for building RISC-V binaries.
This approach is simpler and doesn't require maintaining self-hosted infrastructure.
Local testing confirms cross builds a valid RISC-V binary in ~4 minutes.
* refactor(cli): address review feedback for RISC-V workflow
- Skip Rust toolchain and cache setup for cross builds (unnecessary)
- Pin cross version to 0.2.5 for reproducibility
- Fix Linux dependencies condition to match ubuntu-* variants
* refactor: use empty vector for features instead of None
* refactor: reorder
* add change file
* comment: highlight places where serialization is used
* refactor: simplify serialization
* Update .changes/empty-vec-instead-of-none.md
* Update crates/tauri-cli/src/mobile/ios/mod.rs
---------
Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com>
* Typos
* Rename to `handler`/`protocol_handler`
* Fix the `AssetResolver::get` fallback docs
* Refactor and update the docs for `get_url`
* Rename the remaining ones to `get_app_url`
* Apply suggestions from code review
Co-authored-by: Fabian-Lars <github@fabianlars.de>
* Generate schema
* refactor(tauri-utils): current_dest and current_pattern always change in-sync, group them to one Option
* refactor(tauri-utils): pass path as explicit argument instead of implicitly through self
* refactor(tauri-utils): remove struct field that is never set to Some
* refactor(tauri-cli): use OsString, OsStr where possible
* refactor(tauri-cli): Deref Arc early
* refactor(tauri-cli): lock config before passing to build::setup()
* refactor(tauri-build, tauri-utils): bettern pattern matching and borrowing
* refactor(tauri-cli): dont need Arc if already have static
* fix(tauri-cli): race condition initializing static flag, remove unnecessary OnceLock
* refactor(tauri-cli): use expect
* refactor(tauri-cli): remove unnecessary OnceLock
* refactor(tauri-cli): better use of dunce api
* refactor(tauri-cli): rename
* fix(core): properly handle async errors in addPluginListener
The previous implementation used .then() after invoke() without await, which prevented the catch block from handling rejected promises. Now using await to properly catch errors and allow fallback to camelCase registerListener method.
* Change file and generate `bundle.global.js`
---------
Co-authored-by: Tony <legendmastertony@gmail.com>
* refactor(core): improve iOS log messages from stdout/stderr
move the stdout/stderr forward logic to Swift so it does not consume a Rust thread and never deadlocks on the simulator
I had to work on this because i'm facing #12172 again on latest Xcode (26.1)
* patch
* fix: Premultiply alpha before resizing
* feat: Use rayon for process speedup
* Fix change tag
* `cargo fmt`
* Document reasoning & use imageops::resize directly
---------
Co-authored-by: Tony <legendmastertony@gmail.com>
Replace `fs::write` with `write_if_changed` in two places. This can
prevent unnecessary rebuilds. (I didn’t encounter any, but this should
be ok nonetheless.)
* add info to error message
* changes file and linux only warning
Signed-off-by: Krzysztof Andrelczyk <cristof@curiana.net>
* Update change file
---------
Signed-off-by: Krzysztof Andrelczyk <cristof@curiana.net>
Co-authored-by: Tony <legendmastertony@gmail.com>
* add new api (auto_increment_version_code) in android configuration
* ensure increment is only ran once
* skip on dev
* update doc
* change file
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* fix(core): SHA256 hash for JS scripts CSP on Windows
we hash JS scripts as SHA256 for the Content-Security-Policy (CSP) header. The isolation pattern is broken on Windows due to the hash including carriage return characters, which are not processed when the webview checks the script hash to see if the CSP allows the script.
* fmt, clippy
by default Jackson treats the `isX` as a getter, so it looks for the `x` key in the JSON. To match behavior on other platforms we now configure Jackson to treat it as the field name itself.
* fix(cli): improve Android BuildTask.kt Windows executable detection
- Fix Android build error on Windows when using nvm4w
- Add robust fallback logic for Windows executable detection
- Prevent 'node.exe.cmd' and 'Cannot find module' errors
- Graceful fallback to cargo when Node.js detection fails
Fixes#13892
* strip extension from project, try exe/cmd/bat
* revert args
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* fix(api): "command not found" error when running addPluginListener
the backend expects the command name to be in snake case
we've made this change already for check_permissions and request_permissions, but missed register_listener
* fix check instead
* update bundle.global.js
* code review suggestion
* add note
* adjust change file
* remove unused var
* fmt
* build
currently the `use_network_address_for_dev_url` function already detects Ipv4Addr::UNSPECIFIED to resolve the local IP address for mobile development when the dev URL host is 0.0.0.0, but we only call it when `--host` is provided or running on a physical device. This change detects the unspecified host early and force the resolution to run even for simulator builds
* feat(cli): detect Android env and install SDK and NDK if needed
changes the Android setup to be a bit more automated - looking up ANDROID_HOME and NDK_HOME from common system paths and installing the Android SDK and NDK if needed using the command line tools
* fix windows
* clippy
* lint
* add prmopts and ci check
* also check ANDROID_SDK_ROOT
* Expose `ScrollBarStyle` webview option to tauri.
This commit exposes the scroll_bar_style option from wry via the tauri
WebviewWindowBuilder API. By itself, the commit does not include changes
to the configuration file or JavaScript APIs: These will be added in a
later commit.
* Fix a compile error on macOS and Linux.
* Add `scroll_bar_style` to WindowConfig.
This commit exposes the `scroll_bar_style` option in tauri.conf.json/
.json5/.toml as `scrollBarStyle` and `scroll-bar-style`.
* Expose `scroll_bar_style` to JavaScript API.
This commit exposes the `scroll_bar_style` in the options object passed
to the JavaScript API `Webview` and `WebviewWindow` constructors.
While testing this, I discovered that on Windows, attempting to create
a webview from the JavaScript API will cause the hosting window to
immediately hang if it attempts to use the same data directory as
another webview without sharing the same environment options. This
commit includes no mitigation for this behaviour, as I will be opening
a separate issue about it at some point in the near future.
* Document WebView2 environment requirements.
This commit adds a message to the documentation for all components of
the `scroll_bar_style` configuration option, telling users that all
webviews that use the same data directory must use the same value for
this option.
* Fix formatting.
* Add change files to .changes directory.
* Remove `tauri-schema-generator` from change file.
* Remove quotes from change tags.
* Add tags to change files.
I did not realise that these were needed, as the pull request that I
used as my reference when building this feature did not have them.
* update conf
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* feat(bundle): add --no-sign flag to skip code signing in bundling process
- Introduce a
o_sign option in bundle settings to allow skipping code signing
- Update macOS and Windows bundler implementations to respect the flag
- Wire up CLI option --no-sign to control signing behavior during bundling
- Add necessary config and type changes to propagate the flag throughout bundler
Signed-off-by: ShigrafS <shigrafsalik@proton.me>
* ci: added yml for github action testing
Signed-off-by: ShigrafS <shigrafsalik@proton.me>
* fix: fixed field 'digest_algorithm' is already declared error
Signed-off-by: ShigrafS <shigrafsalik@proton.me>
* ci: updated to test the new features as well
Signed-off-by: ShigrafS <shigrafsalik@proton.me>
* ci: fixed yml issue
Signed-off-by: ShigrafS <shigrafsalik@proton.me>
* fix: fixed missing parameter issue in android sign.rs
Signed-off-by: ShigrafS <shigrafsalik@proton.me>
* chore: apply linting
Signed-off-by: ShigrafS <shigrafsalik@proton.me>
* chore: remove redundant files
Signed-off-by: ShigrafS <shigrafsalik@proton.me>
* chore: revert indentations
Signed-off-by: ShigrafS <shigrafsalik@proton.me>
* fix: added parameters to ios mobile build.rs
Signed-off-by: ShigrafS <shigrafsalik@proton.me>
* docs: updated documentation for settigs.rs
Signed-off-by: ShigrafS <shigrafsalik@proton.me>
* docs(cli): add documentation for
o_sign flag in build options
Signed-off-by: ShigrafS <shigrafsalik@proton.me>
* chore: apply cargo fmt
Signed-off-by: ShigrafS <shigrafsalik@proton.me>
* docs: added CHANGES.md
Signed-off-by: ShigrafS <shigrafsalik@proton.me>
* refactor(bundler): make
o_sign private and add getter
Signed-off-by: ShigrafS <shigrafsalik@proton.me>
* fix: minor error
Signed-off-by: ShigrafS <shigrafsalik@proton.me>
* refactor: revert build_benchmark_jsons.rs
Signed-off-by: ShigrafS <shigrafsalik@proton.me>
* impl for macos too
* fix ci
* fix windows build
---------
Signed-off-by: ShigrafS <shigrafsalik@proton.me>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
without the type Deno assumes that the package is a ESM so it cannot use `require`
we should probably update our minimum Node.js version and use ESM instead, but I want to ship this fix first
currently we only install Rust targets for mobile when initializing the projects.
Users can commit the Android/iOS projects, so running the init command is not a requirement to develop mobile apps. This change ensures the Rust targets are installed before trying to compile them.
* fix(tauri-runtime-wry): ignore about:blank initial URL
fixes a macOS warning when a navigation handler is registered and you choose to create a new window on the on_new_window hook - in this case we shouldn't perform the initial navigation since the URL is provided by the webview configuration from the hook
* change tag
* bump min wry
- Replace `unwrap` and `expect` with `anyhow::Result` for safer error handling
- Add contextual error messages using `anyhow::Context`
- Fix `home_path` on Windows by using `USERPROFILE` instead of `HOMEPATH`
- Ensure process helpers (`run_collect`, `run`) return `Result` instead of panicking
- Improve parsing logic in `parse_max_mem` and `parse_strace_output`
- Add documentation comments for all public functions
- Add best-effort cleanup and resilience against malformed input
* Fix Tauri iOS build not having a PATH variable to access unzip to extract binaryTargets and also not including Frameworks when linking
* Add covector change
* fmt
* Update crates/tauri-utils/src/build.rs
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
---------
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
* feat(cli): check plugin versions for incompatibilities
check core plugin versions for incompatibilities between Cargo and NPM releases
a plugin NPM/cargo version is considered "incompatible" if their major or minor versions are not equal
on dev we show an warning
on build we error out (with a `--ignore-incompatible-plugins` flag to prevent that)
this is an idea from @oscartbeaumont
we've seen several plugin changes that require updates for both the cargo and the NPM releases of a plugin, and if they are not in sync, the functionality does not work
e.g. https://github.com/tauri-apps/plugins-workspace/pull/2573 where the change actually breaks the app updater if you miss the NPM update
* Use list to get multiple package versions at once
* Fix for older rust versions
* Clippy
* Support yarn classic
* Support yarn berry
* Use `.cmd` only for `npm`, `yarn`, `pnpm`
* Use yarn list without --pattern
* rename
* Extract function `check_incompatible_packages`
* Check `tauri` <-> `@tauri-apps/api`
* incompatible -> mismatched
* run build check in parallel
* rename struct
* Switch back to use sync check and add todo
* Extract to function `cargo_manifest_and_lock`
---------
Co-authored-by: Tony <legendmastertony@gmail.com>
* fix: a few regressions from previous PRs
* rename with_window_features to window_features
* Clippy
* clippy
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* Adds the ability to set the focused property from tauri.conf.json -- windows
* add set_focusable, pin tao
* fmt
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* add "new window" and "document title changed" webview handler
* take document title changed handler
* update example, add missing api, change files
* allow creating tauri window for the window.open call
* set size and position, fix linux, example
* enhance document title change
* fix windows deadlock
* wry 0.53
* update wry
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* feat: add `--root-certificate-path` option for mobile dev
lets you use a HTTPS development server
example usage:
```
cargo install tauri-cli --git https://github.com/tauri-apps/tauri --branch feat/mobile-dev-cert
cargo tauri android dev --open --root-certificate-path "/Users/lucas/Library/Application Support/mkcert/rootCA.pem" --features tauri/rustls-tls
```
* Apply suggestions from code review
Co-authored-by: Fabian-Lars <github@fabianlars.de>
---------
Co-authored-by: Fabian-Lars <github@fabianlars.de>
* feat: add option to not wait on notarization to finish
* cli arg istead of config
* changefile
* fix serde
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* fix: double free of resizing handler's userdata on Windows
Using WM_NCDESTROY instead of WM_DESTROY is more correct for freeing userdata, as windows can receive multiple WM_DESTROY events if they're parented.
* chore: add change entry for resizing handler double-free fix
* feat(menu): add icon and nativeIcon support for Submenu in tauri and @tauri-apps/api
* Merge branch 'dev' into dev
* Update muda
* feat(menu): add set_icon and set_native_icon methods to set submenu icons
* feat(menu): unify icon handling by introducing MenuIcon type
* chore: sync bundle.global.js
* Make setIcon actually work
* Regenerate `bundle.global.js`
---------
Co-authored-by: Tony <legendmastertony@gmail.com>
* fix: update vite.config.ts to support Svelte 4 in example app
* Migrate the code to svelte 5 instead
* Add change file
---------
Co-authored-by: Tony <legendmastertony@gmail.com>
* feat: add config option for custom watch folders
* fix: cargo clippy changes
* chore: remove file
* fix: ios dev
* docs: clarify absolute allowed
* refactor: rename variable
* fix: review suggestions
* fix: resolve paths
* fixL use canonicalize
* chore: add changefile
* chore: add error if cant canonicalize
* reformat changelog
* Update .changes/additional-watch-folders.md
* Update crates/tauri-cli/src/interface/rust.rs
Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com>
* Revert "Update .changes/additional-watch-folders.md"
This reverts commit 98186b1a89.
* Also bump `@tauri-apps/cli`
* Apparently I'm so used to a higher rust version
* Revert "Apparently I'm so used to a higher rust version"
This reverts commit ea1d89e2d3.
* Need to check for existence for abs paths as well
---------
Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com>
Co-authored-by: Tony <legendmastertony@gmail.com>
* feat(mock): add mock for listen and emit
* feat(mock): add mock for listen and emit
* feat(mock): add mock for listen and emit
* Add change file
* correctly clear unregisterListener
* format with prettier
* build project
* opt-in to mocking events
* Use a minor bump
* Update config.schema.json
* Add RunnerConfig for customizable build runner
Replaces runner String with RunnerConfig in CLI and config, allowing advanced runner configuration via string or object with cmd, cwd, and args. Updates schema and usage to support new format, and adds tests for serialization, deserialization, and API. Enables more flexible build and run command customization.
* Create runner-object-config.md
* Remove unused RunnerConfig import in tests
Cleaned up the test module in config.rs by removing the unused RunnerConfig import from two test functions.
* Fix tests failing
Updates related tests in tauri-utils to improve readability and maintain consistency. Minor import reordering in tauri-cli for clarity.
* Move RunnerConfig enum and impls above BuildConfig
Relocated the RunnerConfig enum and its associated implementations to appear before the BuildConfig definition. This improves code organization and logical grouping of configuration-related types.
currently deps are only installed on init, which might not be executed on someone's machine if the xcode project is commited to the repo. we need to ensure dependencies are installed before running them
applies https://github.com/tauri-apps/cargo-mobile2/pull/468
* patch binary with bundle type info
* only patch if the updater is included
* fix linux warnings
* patch binary when updaer is configured
* patch binary with bundle type info
only patch if the updater is included
fix linux warnings
patch binary when updaer is configured
* fix formatting
* fix license header
* fix taplo error
* move __TAURI_BUNDLE_TYPE to utils
* export get_current_bundle_type
* macos fix
* cleanup, add api
* update change file
* fix windows
* fmt, fix rust version support
* fix macos
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* fix: dont depend on private schemars api
* tauri-cli/deps: update kuchikiki and html5ever
tauri-utils/deps: update kuchikiki and html5ever
tauri-runtime-wry/deps: update wry to match kuchikiki and html5ever versions
* fix: specify exact patch version of schemars
Without this, cargo resolves the patch version of schemars to one that
does not include the _private module on which tauri-utils v1 depends,
which is a dependency of tauri-cli. As a result of this, the build breaks.
* tauri-utils/fix: inline tauri-utils v1 config module
* deps: upgrade and pin schemars 0.8.21 to pick up crate patch in Cargo.toml
* update tao, wry
* lint, license
* lint
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* fix(cli): read original identifier to fix mobile options reading
the iOS and Android CLI commands leverage an android_studio_script/xcode_script that is executed by the native IDE or build tool. This script reads the Tauri configuration to find the app identifier used to communicate with the parent Tauri CLI process to read CLI options.
The communication is broken when the `--config` arg is used, since the IDE script does not have access to that value before reaching the parent process, which is impossible without knowing the actual identifier used.
To bypass this we'll agree on using the original identifier. This obviously won't work if the original tauri.conf.json do not have an identifier, so we error out in this case
* fix build, lint
* Dynamic dispatch async commands
* format
* Preserve `'static`
* Use a inner function instead
* Only do it for dev for now
* Add change file
* Tag respond_async_serialized_dyn with debug
* fix(core): capability filtering crashing allowed command generation
tauri-plugin and tauri build scripts cannot have access to the capabilities file (generated by tauri-build) and can only infer capabilities from the config path
* cleanup
* unused import
* followup
* fix reassign
* mut
* Update crates/tauri-utils/src/acl/build.rs
Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com>
---------
Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com>
* refactor: put dynamic acl to a feature
* Add change file
* Tweak remove_unused_commands's docs
* License header
* Document the feature
* Merge remote-tracking branch 'upstream/dev' into dynamic-acl-feature
* Use a inner non generic fn for add_capability
* Clippy and macro stability notice
* Merge remote-tracking branch 'upstream/dev' into dynamic-acl-feature
* Format
* fix(core): immediately unregister event listener on unlisten call
the unlisten function is currently async, but marked as `() => void` in the TypeScript definition. To avoid a breaking change, we're going to immediately unregister the listener function so it's not called.
this fixes a race condition where after calling unlisten() you would still receive events if you do not `await` it and there's a new event triggering while the unlisten command is running
* cleanup
* fix build
* fix ci
* Update docs for WebviewWindowBuilder::from_config
The documentation for `WebviewWindowBuilder::from_config` mentions changing the label of the new `WebviewWindowBuilder`, which is not possible.
Instead, the label must be changed in the `WindowConfig` that is passed into `WebviewWindowBuilder::from_config`.
This change fixes that description and adds an example code snippet for this use-case.
* Add reference to function arguments so the type is correctly inferred
* Remove unnecesary reference
* fix tests
* fix doctest
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* fix path joining behavior where path.join('', 'a') incorrectly returns "/a" instead of "a" (#13313)
* Clean up
---------
Co-authored-by: Tony <legendmastertony@gmail.com>
macOS uses a different coordinate system for visibleFrame, so to get accurate values we should only get the diff between frame() and visibleFrame() and apply that to the standard monitor position returned by CGDisplayBounds. Size isn't impacted by this, and properly returns the value (accounting for dock position).
* fix(core): fix TrayIcon.getById returning new resource IDs
this prevents the close() from working properly if you somehow lose the new() resource ID (for instance when the app reloads) and need to pick it up again and close it.
* cleanup on close
* Use `Headers` in `sendIpcMessage`
* Add change file
* Change files
* Don't use optional chaining
Seems like we have changed it in #9530 deliberately,
so preserving it in this change
* do not let the tauri headers to be overwritten
Co-authored-by: Sean Wang <126865849+WSH032@users.noreply.github.com>
* use HeadersInit on the type definition
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
Co-authored-by: Sean Wang <126865849+WSH032@users.noreply.github.com>
* fix(webdriver): windows: make native webdriver close with parent process
* add change file
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* feat(cli): enhance iOS bundle version formatting
follow-up for #13030 and https://github.com/tauri-apps/cargo-mobile2/pull/450
the bundle version validation has been updated, now it can actually handle one or two integers (e.g. `100` or `10.7`) instead of just full triple semver strings (e.g. `10.7.1`).
* lint
* Add an option for preventing window overflow
* Fix shadow counted as part of the width
* Enable prevent overflow by default
* Fix crashing when margin is bigger than screen
* Config file support
* Add to ts type
* Add mac implementation
* Should be let some
* Apply suggestions from code review
Co-authored-by: Jason Tsai <jason@pews.dev>
* checked_sub -> saturating_sub
* Revert license header
* Migrate windows 0.58
* Generate schema
* Fix merge conflict
* Try casting to objc2_app_kit::NSScreen
* Add NSScreen feature
* Use cast instead of as
* fmt
* Deref first
* Wrong unsafe block
* Add change file
* Add serde alias
* More docs
* Disable prevent_overflow by default
since we can't make breaking changes anymore right now
* Remove unused default impl
* Missing pub
* Fix mock_runtime on ios
* Match PreventOverflowMargin's description
* Typo
* Apply suggestions from code review
* Move get_work_area_size to seperate files
* Unused imports
* Add prevent_overflow to WebviewWindowBuilder
* Fix mac compile
* MonitorExt is only for desktop
* Rename to work_area
* Use workarea for linux
* Missing `()`
* Convert size
* Import MonitorExt
* as u32
* Re-build API js
* Fix wrong docs for work_area
* Remove linux platform specific note
* Remove left over linux platform specific note
* Use work area API for center as well
* Fix mobile
* Clean up
* small cleanup
* fix codegen
* update docs
* fix generated
---------
Co-authored-by: Jason Tsai <jason@pews.dev>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* fix(cli): iOS dev broken on Xcode 16.3, closes#13128
Looks like we cannot use the arm64-sim custom architecture on Xcode 16.3, as it incorrectly appends the -sim suffix on some clang build scripts which ends up with an invalid target triple.
Currently we do not have automation to update Xcode/Android projects, so a manual intervention is required by our users, either recreating the project or modifying it manually (the arm64-sim arch must be removed and all its references).
ref https://github.com/tauri-apps/cargo-mobile2/pull/445
* fix dev on macOS with intel chip
* Fix channel cb never cleaned up from `window`
* Should be `_{id}`
* Still need to manually impl clone
* Regenerate bundle.global.js
* Remove current_index from ChannelInner
* Move phantom to `Channel`
* `Channel` not `Self`
* Clean up
* Clean up
* Fix missing end quote
* Add change file
* Rename id to index to match js side
* Improve channel speed on small data
* do the same perf check for IPC responses and raw bytes
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* macOS/iOS: add option to disable or enable link previews when building a webview (the webkit api has it enabled by default)
- `WebViewBuilderExtDarwin.allow_link_preview(allow_link_preview: bool)`
- `WebViewBuilder.allow_link_preview(allow_link_preview: bool)`
- `WebviewWindowBuilder.allow_link_preview(allow_link_preview: bool)`
* also call on iOS
* add api
* fix tests
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* chore: fix a few internal docs
* Remove label clone
* Unused allow lint
* No way clippy just updated
* `cargo clippy --fix -- -W clippy::redundant_clone`
* format
* api!: expose api to run initialisation scripts on all frames.
* remove breaking change, add new api instead.
* Update .changes/init-script-on-all-frames.md
Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com>
* use struct `InitializationScript` instead of tuple
* Update crates/tauri-runtime/src/webview.rs
Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com>
* Apply suggestions from code review
* Update crates/tauri/src/webview/webview_window.rs
---------
Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com>
* enhance: include permissions in default permission description
* Only include in schema
* Remove 'which includes` to tauri's build script
* Also bump utils
* Clippy
My local clippy didn't report this, weird
* Use `which enables all commands`
for default permissions that enables everything
* Extract description into a variable
* Generate permissions with or without description
* Tweak the docs and generate 'which includes'
* Simplify to just `includes`
* Docs change change file
* Put the change in minor
* Update .changes/include-permissions-in-schema.md
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
* Remove unused change file
---------
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
* fix: channel no longer being always allowed
* Prettier
* Don't change the plugin name just yet
* Handle TAURI_CHANNEL as a special case in macro
* remove commented out code
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
The initial version of the MR that introduced this to Wry
(https://github.com/tauri-apps/wry/pull/1496)
had no Android implementation, but it has been added
in a later version of the MR, so the comment is no longer valid.
* docs: remove outdated `tauri_build::build` docs
The docstring has been unchanged ever since
40ac52971e (2021).
The `build()` function has grown massivly since then,
now it's not only about Windows.
* docs: `tauri_build::build`: see `try_build` for more config
`try_build` is not only about not panicing, but it also takes the
`attributes: Attributes` argument,
which is very important for controlling command permissions.
* Update crates/tauri-build/src/lib.rs
Co-authored-by: Amr Bashir <github@amrbashir.me>
* update docs
---------
Co-authored-by: Amr Bashir <github@amrbashir.me>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* docs: clarify Capability::windows/webviews OR nature
It is intuitive to expect that for the capability to be enabled,
_both_ the window label and the webview label have to match.
However, this is not the case: the capability is enabled
if _either_ the window label matches a pattern
in `Capability::windows` _or_ the webview label matches a pattern
in `Capability::webviews`.
This commit should somewhat clarify this oddity
and protect developers from adding excessive permissions.
For reference, `Capability::webviews` was added in
0cb0a15ce2
(https://github.com/tauri-apps/tauri/pull/8789).
* Apply suggestions from code review
Co-authored-by: Amr Bashir <github@amrbashir.me>
* update schemas
---------
Co-authored-by: Amr Bashir <github@amrbashir.me>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* feat(uninstaller): remove autostart entry during uninstallation
Signed-off-by: animeshchaudri <animeshchaudhri3@gmail.com>
* add change file
* check when not updating
* delete registry value only if install mode is "currentUser"
---------
Signed-off-by: animeshchaudri <animeshchaudhri3@gmail.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* Remove description from runtime
* Just use none instead
* global_scope_schema and add comments about it
* Tweak wording
* remove comments [skip ci]
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* fix: AppHandle::restart() may not send RunEvent::Exit event
* docs: add changelog: `AppHandle::restart()` may not send `RunEvent::Exit` event before exiting the application.
* style: cargo fmt
* avoid deadlock on main thread
* do not let the restart be prevented
leads to a deadlock currently
* Apply suggestions from code review
* lint
* do not emit RunEvent on main thread
* re-export RESTART_EXIT_CODE
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* Use a single closure for filtering
* clippy
* Update crates/tauri/src/manager/mod.rs
---------
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
* Add a new option to remove unused commands
* Fix compile
* Add markers to all core plugins
* Clippy
* Add allow unused when running with this
* Use build script to generate allowed-commands.json
* Clean up and add proper reruns
* Wrong path
* Revert to #[cfg_attr(not(debug_assertions), allow(unused))]
* Add change files
* Some more docs
* Add version requirement note
* Avoid rerun if no capabilities folder
* Remove unused box
* small cleanup
* fix channel
* implement for app handler too
* rely on core:default for channel perms
* Move this feature to config
* Docs change
* Forget one last remove_unused_commands
* Remove removeUnusedCommands from helloworld
* tell handler that the app ACL manifest exists
* update change file
* update doc
* update change file
* Use a struct to pass the data instead of env var
* Clippy
* Fix can't exclude inlined plugins on Windows
due to UNC paths...
* Apply suggestion from code review
* Remove remove on empty to tauri-build
* Revert "Remove remove on empty to tauri-build"
This reverts commit b727dd621e.
* Centralize remove_file(allowed_commands_file_path)
* Escape glob pattern
* update change file
* remove unused commands for dev too
* Update crates/tauri-utils/src/config.rs
Co-authored-by: Fabian-Lars <github@fabianlars.de>
* regen schema
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
Co-authored-by: Fabian-Lars <github@fabianlars.de>
* Add support for fetching cookies by url
* Add support for fetching all cookies
* add missing getters, update change file
* update docs for windows deadlock
* fix mobile build
* Update crates/tauri-runtime/Cargo.toml
* add docs for stability [skip ci]
---------
Co-authored-by: Adam Charron <acharron@higherlogic.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* moving to macbook
* that was so weird to implement
* rm patch
* Discard changes to Cargo.lock
* Create change-pr-12366.md
* add missing builder fn
* remove test
* split change files
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* feat(cli): allow merging multiple configuration values
Currently the dev/build/bundle commands can only merge a single Tauri configuration value (file or raw JSON string), which imposes a limitation in scenarios where you need more flexibility (like multiple app flavors and environments). This changes the config CLI option to allow multiple values, letting you merge multiple Tauri config files with the main one.
* fix ios build
That is, it would try to get `sers/john` if you called
`AssetResolver.get("users/john")`.
This commit fixes the bug by only skipping the first character
only if it _is_ a slash (/).
Why it is important:
`tauri::WebviewUrl::App()` docs state that it's OK to specify
the path as `users/john` to get `tauri://localhost/users/john`
in the end.
So if an application developer is using `AssetResolver.get()`
together with `WebviewUrl::App()`, they will would get
inconsistent behavior: for the same path, the latter would work,
while the former would fail.
In fact, we encountered this bug in our code,
[here](c860b0f4c6/packages/target-tauri/src-tauri/src/help_window.rs (L34-L43)).
* add `AppHandle::fetch_all_data_store_identifiers` and `AppHandle::remove_data_store`
* make it run on main thread, so you can call the function from any thread and it works.
* changes file
* update signature, move functions to RuntimeHandle
* add api
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* feat: add `WebviewBuilder.disable_javascript` and `WebviewWindowBuilder.disable_javascript`
* wry 0.50.3
* add missing config options and API types
* add change file for api
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* enhance(windows): disable our in-client resizing for undecorated window with shadows
ref: https://github.com/tauri-apps/tao/pull/1052
* skip hittesting for undeceorated windows
* chore(deps): Update windows to 0.59. Update webview2-com to 0.35
* wry and other crates and objc2
* window-vibrancy 0.6
* Update windows059-webview035.md
* win compile error
* tao
* tao 0.32.1
* updatus maximus
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
It currently isn't possible to simply add a community plugin the same was as adding official plugins.
Trying to perform `npm run tauri add tauri-plugin-python` is trying to install npm package `@tauri-apps/plugin-python`.
But the npm scope `@tauri-apps/` is reserved for official tauri plugins.
The official documentation recommends to name the npm package `tauri-plugin-{name}-api` and it should be possible to have a parameter that makes it possible to install that package.
- closes#12217
This changes the command to check if the plugin is an official tauri plugin or not, using the appropriate npm package name format
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
Even though I couldn't even get the build to succeed when using the team name as the "developmentTeam" configuration (instead of the team ID), I've received reports that our processing of that value is broken and only works when it is escaped using `\"`.
* fix(cli): Statically compile msvc runtime
fixes https://github.com/tauri-apps/tauri/issues/11642
ref https://github.com/swc-project/swc/pull/7965
i only added it for x64 for now but we should monitor x32 (swc removed it for this one again) and aarch64 (swc never added it).
x32 is fairly rare as a dev system and aarch64 didn't seem much testing in general (as a dev system) so i'd prefer to wait and see if it's needed.
note that i don't know if any other tooling (rust etc) need the dyn runtime so that's also something to monitor
* 32bit and arm64
closes#11614
Remove UNC manually, instead of `dunce::simplified` because `path` could have `*` in it and that's not allowed on Windows and `dunce::simplified` will check that and return `path` as is without simplification resulting in a missing pattern in scope
for the scope pattern `\\?\C:\path\to\dir\**`, we expect the scope to have:
- `\\?\C:\path\to\dir\**`
- `C:\path\to\dir\**`
but if we use `dunce::simplified`, it will see `**` as invalid path component on Windows and will not simplify the path resulting in a scope that only has `\\?\C:\path\to\dir\**`
* On Windows, set name of Window Class, closes#7498
allow to customize it instead of current value hard coded "Window Class"
* feat(windows): add window_classname, closes#7498
allow to customize the window class name instead of current value hard coded "Window Class"
* feat: add window_classname, closes#7498
* add changes file
* Update core/tauri-config-schema/schema.json
* Update tooling/cli/schema.json
* missing pieces after merge
* clippy
---------
Co-authored-by: Géraud-Loup <47665233+geraudloup@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* enhance(core): use `diagnostic::on_unimplemented` on rustc 1.78 and newer for async commands with references
* change file
* clippy
* clippy
* add TODO
* Fix mixup of `env_tauri_app_path()` and `env_tauri_frontend_path()` in tauri's path resolutions
* Rename functions in `app_paths` to match their corresponding, publicly exposed env var keys
* Rename `app_dir`/`app_path` variables that deal with the frontend app's directory to `frontend_dir
* Rename `APP_DIR` to `FRONTEND_DIR`
* Improve comment on meaning of tauri path env vars
* fix(api/menu): fix submenus when created using an object in `items` field in the object passed to `Menu/Submenu.new`
closes#11435
also closes#11422 as I included the docs in this PR
* Update .changes/js-submenu-in-options.md
* Update packages/api/src/menu/base.ts
---------
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
* chore(deps) Update Rust crate image to v0.25.4
* Also bump json-patch and resvg
* Just json-patch for now
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Tony <legendmastertony@gmail.com>
* fix(runtime-wry): run `cursor_position` getter on main thread
closes#10340
* clippy
* clippy
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* feat(core): add WebviewWindow::resolve_command_scope
This new functionality exposes the `CommandScope` resolution as a function (currently only commands can resolve them as a dependency injection via CommandItem)
This function is useful to validate the configuration at runtime (do some asserts at setup phase to ensure capabilities are properly configured) and to resolve scopes in a separate thread or context
* adjust return type
this changes the resource plugin close() API to fallback to the parent window and AppHandle resource tables, letting the JS to delete global resources.
The need for this was brought up on https://github.com/tauri-apps/plugins-workspace/pull/1860#issuecomment-2419175001
the store plugin stores the resources in the AppHandle, and we want the existing close() API to work on global resources otherwise every consumer needs their own resource close commands
* feat(cli): add support for providing custom app/src paths to tauri's CLI via optional env vars
* fix tests
* rename env vars (app vs src is confusing)
* add change file
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* Warn that android is not supported
* Warn that Android is not supported.
* Update crates/tauri/src/ipc/mod.rs
---------
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
the audit failed, so the 2.0.2 release is failing. I'm also adding the latest merged change to the 2.0.2 release in this change so we're in sync in the changelog.
* fix(bundler): wrap `Exec` in desktop with quotes, rename appimage main binary if has spaces
* Update .changes/main-binary-name-spaces-linux.md [skip ci[
---------
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
custom IPC systems that manually call Webview::on_message must know the invoke key checked by Tauri. This exposes that key in the App/AppHandle instances.
This is safe because the key is never leaked to remote denied webview URLs
* chore: promote to v2 stable
- deletes all RC change files
- adds a new change file to promote all packages to v2 stable
- manually fix the tauri-driver, tauri-macos-sign, tauri-bundler versions so the next covector bump will move them to 2.0.0
- manually patch the metadata-v2.json file so the next covector update will mark all packages as 2.0.0
* ignore audit vuln without fixes
* bump msrv to 1.78
* run covector version
* fix sync lockfile covector
* #[allow(clippy::manual_inspect)]
* feat(cli): enhance Android dev port forwarding, closes#11137
this changes the `android dev` port forwarding (that is actually handled by the `android-studio-script` command - triggered by our Gradle plugin) with some enhancements:
- make the whole process more resilient by checking if the port was actually forwarded and rerunning the `adb reverse` command until it tells us the forward is ready
- if the `adb devices` list is empty, retry a few times (waiting a few seconds) to tolerate devices being booted - slows down "raw builds" (Build Project Android Studio menu for instance) that shouldn't happen often anyway - if you're running `android dev` you're usually running the app on a device instead of simply testing builds
* use host IP to run on android physical device
* fix(cli): iOS app signature not retaining entitlements, closes#11089
The IPA does not retain the entitlements as a regression from #10854 which removed the signing step from the build() and archive(), deferring to the export() call
To retain the entitlements we need to force sign one of the files in the app bundle. The most reliable way to do this is to use a self signed certificate as a dummy signature - it is replaced by the export() call so we do not rely on any user provided certificate
Additionally the export options are incorrectly configuring a manual signing, preventing Xcode from properly managing provisioning profiles, which is also part of the fix
* fix header
* Detect ARM gnueabi as soft-float (armel)
Detect ARM gnueabi as soft-float (armel) instead of hard-float (armhf).
Also change the signature of `tauri_bundler::bundle::Settings::binary_arch`
to return an enum instead of a `&str`.
* Update .changes/bundler-gnueabi-armel.md
* fix dmg
---------
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
* fix(core): share webcontext between webviews
closes#10981
* update wry version
* Update crates/tauri-runtime-wry/src/lib.rs [skip ci]
* on linux, only register protocol once per context
---------
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
* feat: add `upgradeCode` config option
* fix build on other platforms
* Update crates/tauri-bundler/src/bundle/settings.rs [skip ci]
* move to subcommand, use same product name fallback as the bundler
---------
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
This PR groups files in a predictable mannar, so instead of
```
windows/
|_ templates
|_ main.wxs
|_ installer.nsi
|_ nsis.rs
|_ msi.rs
```
we group them next to each other
```
windows/
|_ msi
|_ main.wxs
|_ mod.rs
|_ nsis
|_ installer.nsi
|_ mod.rs
```
* Migrate from objc/cocoa to objc2
* Update crates/tauri-runtime-wry/src/webview.rs
---------
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
* feat(cli): add log plugin to the app template
The log plugin is really important for mobile development - without it you don't have a clue about logs and stdout for iOS apps
* patch tauri dep for local testing
* clippy
the checkPermissions command is also a PermissionCallback, and the annotation check is incorrectly ignoring that fact, so the requestPermissions is never resolved for the geolocation plugin
* remove dbg! in resources test
* use methods from `fs` and `env` qualified
* share `ACL_MANIFESTS_FILE_NAME` and `CAPABILITIES_FILE_NAME` consts across crates
* simplifiy `Manifest::new` code for better readability
* move reading global api scripts logic next to the function that defines it
* [tauri-build] move acl logic from lib.rs to acl.rs
* use const value for schema instead of enum value with a single variant
* remove unnecessary info from permissions hover
* move related functions next to each other & improve readability of others
* use methods from `fs` and `env` qualified
* fix warning, unused return in test
* document some functions
* improve generated schema for better scope schema completion, simplify, reorganize and document the logic
previously if you had `fs` and `http` plugins added in a project
and then try to write an extended permission for `fs:allow-app-meta`
```json
{
"identifier": "fs:allow-app-meta",
"allow": [ <here> ]
}
```
and even though identifier is from `fs` plugin,
the JSON schema suggests `path` and `url`.
Now it will only suggest relevant field which is `path`
* resolve permissions from other plugins, generate `core:default` as a normal set instead of special logic
* move `PERMISSION_SCHEMAS_FOLDER_NAME` to acl module
* use gneric trait because of MSRV
* ensure `gen/schemas` dir is created
* clippy
* fix(core): Use productName for FileDescription
fixes#10968fixes#10890
* just unwrap since winres will panic anyway or use the cargo.toml description which we don't want
* regen
* nsis
The upgrade code generation was changed due to an accidental regression in #9375. Previously `UpgradeCode` was calculated using the main binary name which was `<product_name>.exe`, but #9375 changed the default main binary name to `<cargo-crate-name>.exe` and thus a different UpgradeCode was generetad.
This PR reverts this change to use product name for `UpgradeCode` generation.
* refactor(core): change `Assets::iter` item to use `Cow`
make the iterator more flexible to support Assets implementations that do not rely on static assets
* fix test?
* lint
* lint
* clippy again
having duplicate capability identifier lead to unexpected behavior because one of the capabilities gets ignored.
With this change the build script now fails when this happens.
- the Xcode project now uses a fixed output library name, which means changes to the Cargo.toml lib name won't affect it (backwards compatible change, we're checking if this new format is being used or not by reading the project.pbxproj)
- sync config identifier with the pbxproj
- sync development team config with the pbxproj
the sync runs both on dev and on build
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
* chore: add root taurignore
enhances the DX of running `tauri dev` in any of the examples folder - we don't need to watch the entire workspace for changes
* extend ignore list
The example for the `setSize()` method in the documentation wrongly imports `getCurrent` (I believe as was in tauri v1)
instead of `getCurrentWebview`.
* generate `Context` inside a thread
fix#9882
this is a workaround for #9882 due to windows having a small
stack size for the main thread (1MiB) versus other platforms which
have 8MiB. the true fix would be to lower the generated code
stack size, but with lots a plugins, there are lots of ACL
configurations.
* add change file [skip ci]
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
* feat(cli/info): include plugins info
closes#10682
* header
* resolve package manager once
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
* chore: cleanup unnecessary scripts and files
- Removed `.cargo/config` and `__TAURI_WORKSPACE__` workaround
- Removed husky and precommit hooks
- Remove unecessary script files
- Moved `.scripts/covector/sync-cli-metadata.js` to `.scripts/ci/sync-cli-metadata.js`
- Moved `app-icon.png` to `.github/icon.png`
- Enhanced has-diff.sh script to output which files are modified
* lock file
* bring back __TAURI_WORKSPACE__
* add change file
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
changes the CLI `add` command to match the CLI major and pre requirements for known plugins
this is required because right now adding the deep-link plugin installs the v1 plugin (latest version known by cargo as the v2 is still in RC), even though we're running the v2 CLI
* feat(core): enhance IPC permission error message
- include more information about current URL and allowed origins
- enhance formatting of the error message
* plugin not found & command not found
* lint
I noticed the plugin build fails on older Swift (tested on macOS 12) because the default minimum required macOS version (10.10 in my case) is older than `v10_13` which is set by the Tauri iOS package (and also swift-rs).
So the plugins must explicitly define a minimum macOS version too.
* fix(android): avoid rebuilds if nothing changed
Unconditionally overwriting files where the build reruns if they changed
leads to rebuilds every time.
Only overwrite a file if its content is different to not rebuild in such
a case.
* use write_if_changed utils
* use existing function
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* feat(ios): add a new cli option to dev to use project archs
Add a new option to instruct cargo-mobile2 to use architectures configured in the project for building
* update cargo-mobile2, add change file
* fix change file [skip ci]
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* skip pack in publish, use check fetch
* remove script
* remove apt, exists in main pipeline
* CLI doesn't need separate check
* no assets for tauri-cli
* fix(utils): fix resources map becomes directory
closes#10187
Fixes the behavior of mapped resources generating extra directory, for example:
`"../resources/user.json": "resources/user.json"` generates this resource `resources/user.json/user.json`
where it should generate `resources/user.json`
This PR includes a refactor of the Iterator implementation which splits it into more scoped functions and relis on recursing instead of a loop which makes the code a lot more readable and easier to maintain.
* clippy
* cover more cases
* clippy
* fix glob into directory, not resolving target correctly
* return error when resource origin path doesn't exist
* fix resources example build
* Update .changes/resources-map-becoming-dirs.md
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* refactor(core): serialize response once closes#5641
This change impacts both the custom protocol and the postMessage based IPC implementations. Basically it changes the whole IPC mechanism to work on raw JSON strings so we do not need to serialize a serde_json::Value after serializing to it from a user-provided type.
i benchmarked this with a 150MB file response (returning Vec<u8> instead of tauri::ipc::Response since the latter does not serialize at all) and it went from 29s to 23s (custom protocol) and from 54s to 48s (post message) on macOS.
* fix mobile & lint
* clippy
immediately after merging #10588 I noticed that the variable name might be a bit ambigious and could cause confusion on other pl atforms other than Windows
* refactor(core): return 200 on any IPC call, closes#10286
By default the webview prints a `Failed to load resource: the server responded with a status of 400 (Bad Request) ipc://localhost` error message when a command returns an error, which is confusing to users.
This changes the IPC to return status 200 on any call, with a header to indicate whether the result was ok or not. This removes the console error, which would only log the actual error result if it isn't caught by the user.
* add change file
* apply code review changes
The IPC fallback system kicks in when the custom protocol implementation cannot be used (e.g. CORS issues).
The fallback uses the postMessage mechanism, which by default uses channels to send large responses. If the custom protocol implementation cannot be used, we should not use channels, but eval the response directly.
- make the v1 config migration more resilient by checking null values
- fix "targets: all" incorrectly migrating createUpdaterArtifacts when there's no updater configuration (this is problematic because this targets config is the default)
- migrate Tauri.toml
- add more tests
* fix(cli): Make app_dir() consistent by basing it on the explicit invocation directory rather than the current working directory
* resolve app paths before everything else
* fix xcode script
* fix test
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* chore: update brotli dependency to v6
brotli v6 plays nice with other versions of the same crate
* add change file
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* refactor: remove targetSdk as it is being removed in DSL 9.0
* note
* fix: typo
* update: changelog
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
---------
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
* feat: Add option to allow all commands by default
* option to use a list of permissions, move logic to tauri-build
* fix plugin
* add utils change file
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* feat(cli): Upgrade gradle to 8.9 and gradle-android to 8.5.1
* Update .changes/android-gradle-8-9.md
---------
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
* fix(cli): v1 migration should add the updater plugin if it is enabled
* fix change tag
* move to process_updater
* Update tooling/cli/src/migrate/migrations/v1/config.rs
Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
---------
Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
It is recommended to use `[android|ios] dev --open` or `[android|ios] build --open` instead as it properly sets up the requirements for developing and building apps with Tauri.
- Changes the IP prompt to also show IPV6 address ending with ::2 (usually device's address)
- Adds --host option on ios dev to force the host
- Also makes it work with our own dev server impl (builtin)
* hash codegen image cache output
* remove left over dbg! statement
* prevent info.plist from workspace rebuilds
* prevent schema generation from workspace rebuilds
* use new `Cached` struct in `CachedIcon`
* fmt
* use full import for cached plist
* use `to_vec()` for raw icons
* hide `Invoke` from documentation
* make `Asset` non-exhaustive
* make `InvokeRequest` non-exhaustive
* mark `tauri_utils::platform::Target` non-exhaustive
* mark the runtime crates as unstable API
* Revert "mark the runtime crates as unstable API" [skip ci]
This reverts commit b8377222e3.
* mark the runtime crates as unstable API
* Revert "mark the runtime crates as unstable API" [skip ci]
This reverts commit 9284897644.
* mark the runtime crates as unstable API
* mark tauri_utils::TitleBarStyle as `#[non_exhaustive]`
* mark `InvokeRequest` as non_exhaustive unless `unstable` feature
* mark config and acl items as unstable
* feat(core): fallback to file system for AssetResolver::get, closes#8411
Ports #10356 to v2
* fix test
---------
Co-authored-by: Chip Reed <chip@chip.sh>
* add failable try_build for plugin builder
* add changefile
* implement `Hash`, `PartialEq` for `BuilderError`
* mark config and acl items as unstable
give some doc tips if they need to be used from Rust
* Revert "mark config and acl items as unstable" [skip ci]
This reverts commit e23728edb6.
* Conf parsing error displays `tauri.conf.json` when using toml or json5
Conf parsing error always displays `tauri.conf.json` as path, even when using `Tauri.toml` or `tauri.conf.json5`
Example Error Message when using Tauri.toml:
Error unable to parse toml Tauri config file at
/Users/bla/repo/bla/bla/src-tauri/tauri.conf.json because
invalid TOML value, did you mean to use a quoted string? at line 41
column 7
* merge changefile pr into main pr
* Update and rename fix-conf-parsing-error-filepath to fix-conf-parsing-error-filepath.md
---------
Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
* feat(cli): iOS signing for CI usage
* license headers
* change file
* chore: support more cert types
* xplicit method arg
* keep keychain alive
* fix early keychano drop
* set team id
* use common name as cert name
* fix(core): fix raw invoke body for isolation pattern
The `isolation` pattern requests are made using JSON but the payload could be raw bytes, so we send the original `Content-Type` from frontend and make sure to deserialize the payload using that one instead of `Content-Type` from request headers
* clippy
* disable plist embed in generate_context in tests
* change file
* docs [skip ci]
* move unused_variables [skip ci]
* last commit regression [skip ci]
* fix test
* add example, do not text encode raw request
* check type instead of contenttype
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* add plugin resolution to gradle settings
This is needed to make Android Studio able to link to the project
* reflect codegen edit in the plugin example
* Add updater field
* Don't sign updaters when updater field is false
* Clippy
* Add updater to bundle migration
* Format
* Add updater config to api example
* No warning if update is not enabled
* Build
* Add change file
* We don't generate updater for dmg package
* Warning only for v1 compatible
* clean up
* More clean up
* little bit more
* Apply suggestions from code review
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
* Revert license header change
* Remove option around pubkey and msi args
* More migration tests
* Refactor private_key getter
* Only generate signature for updater for v1 compat
* Format
* Use map_err instead of anyhow context
* Don't generate updater for api example
* Fix misaligned comment
* Rename `updater` to `createUpdaterArtifacts`
* Revert changes in helloworld example
* Add warning for v1 compatible
* Update .changes/separate-updater-field.md
Co-authored-by: Lucas Nogueira <118899497+lucasfernog-crabnebula@users.noreply.github.com>
* update error messages [skip ci]
---------
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
Co-authored-by: Lucas Nogueira <118899497+lucasfernog-crabnebula@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
* bug: removed alpha channel from default IOS AppIcons
According to Apple's human interface guideline
(https://developer.apple.com/design/human-interface-guidelines/app-icons)
transparent or icons with alpha channel are not allowed, and will be rejected
upon upload to Apple appstore.
* Update .changes/ios-non-transparent-icons.md
fixes#10082
The problem that we were calling `PathBuf::join()` with value of collecting an empty iterator of path components which was equivalent to `PathBuf::from("ios").join("")` which will result in `ios/` with a trailing slash.
This is fixed by chaining iterators of path components and collecting only once into `PathBuf`, which will never append empy path component and will never append trailing slash.
```rs
[
Component::Normal(OsStr::new("ios")),
Component::Normal(&some_folder_name),
]
.into_iter()
.chain(other_components_iterator)
.collect::<PathBuf>()
```
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
* fix: #7614: rebuild every time on macos because of Info.plist changes
* apply proposed patch from lucasfernog
* Update core/tauri-codegen/src/context.rs
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
* Update core/tauri-codegen/src/context.rs
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
* added changes file
---------
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
* Fix delete app data button gone on high DPI
* Add change file
* change back translation template
* Use w string instead of t
* Add in some comment explaining PerMonitorV2
* fix(cli): icon should render explicit svg text node fonts (fix: #10022)
* fix(cli): icon should render explicit svg text node fonts (fix: #10022)
added a .change file for the fix
* feat(cli): include default.toml and capabilities in plugin template
* replace execute usage with ping
* add to capabilities
* use default permission set
* chore(cli): update to new buildConfig format
the existing usage has been deprecated and will be removed on gradle plugin v9, as Android Studio warns
* add config to our lib too
* refactor(cli&bundler): avoid renaming main executable and reserve cargo name
closes#8109closes#8349
* fix bundler
* fix test
* Discard changes to core/tauri-build/Cargo.toml
* revert Cargo.toml changes
* Discard changes to Cargo.lock
* Discard changes to tooling/cli/Cargo.lock
* lock file
* use product name for installers
* only warn for sign on windows
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
* refactor(core)!: include all args in `Env.args_os`, closes#9430
* skip first arg on restart fn
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* fix(codegen): use `TAURI_ENV_TARGET_TRIPLE` to determine the current platform-specific config
* set env var
* Update .changes/tauri-codegen-use-correct-env.md
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* refactor: made `tauri::dev` as constant function
this enables the `tauri::dev()` can be used as const or static
* is_dev && change files
---------
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
* fix: emit cargo cfg alias using new syntax too
* Update lib.rs
* fixes for other crates
* clippy
* readd clone
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
* only allow tauri-initialized frames to call the ipc
* dont regenerate the invoke key
* return early if the invoke key does not match
* add change file
* wry 0.40
* update change file
* trigger ci
---------
Co-authored-by: Chip Reed <chip@chip.sh>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* fix(cli): pnpm detection on mobile init
* small outputFiles fix
* same check for xcode-script
* Discard changes to tooling/cli/node/index.js
* Discard changes to tooling/cli/node/index.d.ts
---------
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
As the workflow is failing because of a larger number of unvetted dependencies I transform this to suggestions only until we have a better vetting workflow and resources to audit available.
* Use `tauri::Wry` as default runtime for menu types
* do it properly
* changes
* same for tray icon
* change file
---------
Co-authored-by: amrbashir <amr.bashir2015@gmail.com>
* Use WinShell instead of ApplicationID
* Uninst shortcut before removing start menu one
* Use nsis's buit-in com plugin instead of WinShell
* Remove download ApplicationID code
* Add change file
* Clippy and format
* Allow dead code on extract_zip
* Qualify extract_zip path to make clippy happy
* Move macro up
* chore: port PR template from `dev` branch (#9004)
* fix(runtime-wry): avoid panic during clipboard initialization on wayland (#9003)
closes#8964
* ci: downgrade thread_local to 1.1.7 in msrv list (#9012)
* Apply Version Updates From Current Changes (v1) (#9013)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
* fix(bundler): escape potentially problematic strings in an XML (#9040)
* fix(bundler): escape potentially problematic strings in an XML (#9030)
- replace characters invalid in XML with their escaped form to properly bundle resources with such characters in their pathnames.
* change file
* fix(cli): use `matched_path_or_any_parents` when checking if a file is ignored (#8903)
* fix: taurignore ignoreing folders not working for watch
* docs: add to changes
* fix: panic: path is expected to be under the root
* Update taurignore-ignoring-folders-not-working-for-watch.md
* Update taurignore-ignoring-folders-not-working-for-watch.md
* fix(cli): migrate to stable features of `log` crate (#9119)
* fix(cli): migrate to stable features of `log` crate
* to_cow_str
* Apply Version Updates From Current Changes (v1) (#9074)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
* fix(core/path): remove suffix in basename only once (#9166)
* fix(core/path): remove suffix in basename only once
ref: #9064
* Update tooling/api/src/path.ts
---------
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
* fix(cli): Clone Options struct after mutating it. (#9188)
* fix(bundler): Fix nsis resource paths on non-windows build systems. (#9281)
* fix(bundler): Fix nsis resource paths on non-windows build systems.
* remove leftover from alternative
* fix(bundler/nsis): Don't use /R flag on installation dir (#9282)
* fix(cli): upgrade heck to better support Chinese/Japanese prodcut name on Linux (#9298)
* chore: fix clippy false positive (#9329)
* fix(cli/info): fix crash when checking node version (#9411)
closes#9396
---------
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: lucasfernog <lucasfernog@users.noreply.github.com>
Co-authored-by: bifs <127015052+bifs@users.noreply.github.com>
Co-authored-by: anatawa12 <anatawa12@icloud.com>
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
Co-authored-by: Jet Li <jing.i.qin@icloud.com>
* feat(bundler): added provides, conflicts and replaces for deb and rpm packages
* added change file
* update .changes/deb-rpm-provides-conflicts-replaces.md according to review
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
* inlined provides/conflicts/replaces(obsoletes) variables
* fmt
* fix(core): Update webview metadata on window close
* make it multiwebview friendlier
* support webview.close() too -> THIS IS STILL MISSING AN EVENT LIKE tauri://destroyed !!!
* Fix window center doesn't consider taskbar size
* Clean up
* Add change file
* Calculate title bar size on initial creation
* Comment about not adding in rect.bottom
* Tweak comment
* Fix center existing window a bit too high
* us NSWindow::center on macOS
* skip if undecorated
* refactor(core): scope JS resources to the webview
* clippy
* change files
* swap args order
* more clippy
* just add them on each type
* clippy
* macro docs
* Update mod.rs
* use random rid
* revert resource table arg change
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* fix(core): Announce new webviews and windows
fixes#9200fixes#8144
* fix js import in example
* emit created events to all listeners.
* remove duplicate event
* fix(core/path): remove suffix in `basename` only once
closes#9064
* Update tooling/api/src/path.ts
* remove extra assert
---------
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
* feat(cli/add): add default permission to capabilities
also cleanup `tauri add` command
* license headers & clippy
* print permission name
* do not error out if default permission is not set
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* feat(core): allow defining global API script on plugin build
Adds `tauri_plugin::Builder::global_api_script_path` so plugin authors can define the JavaScript global API bindings (supposed to be injected to `window.__TAURI__`) at compile time, so the string is only part of the binary when withGlobalTauri is true.
Currently this needs to be done manually at runtime (and it's always added to the binary via include_str).
* prefix variable
* use list of scripts instead of combining them
* static str
* header [skip ci]
* slice
* refactor(acl): permission and capability platforms are optional
* add iterator version
* fix build
---------
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
* fix(acl): scope resolution should be per window
* Update core/tauri-utils/src/acl/resolved.rs
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
* update snapshots
* lint
---------
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
* fix(build): fix app permissions not included when there isn't any inlined plugins
* simplify
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* feat(core): allow defining permissions for the app commands
* global scope
* command scope
* write to disk
* lint
* fix path
* get autogenerated commands from generate_handler macro
* revert
* remove cli
* use const instead of empty str
* refactor(cli): use `tauri/custom-protocol` instead of relying on user having `custom-protocol` in their cargo features
* tauri-build dev cfg
* pass build-feature when building apk
* run beforeBuildCommand before first build for plugins
* clippy
* fix
* mut
* enhance dev/prod checks
* lint [skip ci]
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* refactor: optimize undecorated resizing handling
* license
* separate modules
* fix windows
* rename export
* fix export
* same for gtk
* shared hit_test function
* change cursor on drag
* only set cursor on windows
* Revert "only set cursor on windows"
This reverts commit 03294a8430.
* fix flickering on Windows, change cursor on motion on Linux
* remove changing cursor on move on linux
* fix linux implementation
* clippy
* Windows, on left click only
* prevent on fullscreen, use OS border size on Windows
* fix build
* clippy
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
* Fix resource_dir when app run from new target/someting/(debug|release) dir
* Update core/tauri-utils/src/platform.rs
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
* change file, update logic, add tests
* lint
* fix tests
---------
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* refactor(core): capabilities must be referenced on the Tauri config file
* add all capabilities by default
* refactor(cli): reference all capabilities by default
* feat(tauri-build): add `config-json` feature flag
This allows disabling rebuilding when `tauri.conf.json` when using another config format
see https://github.com/tauri-apps/tauri/issues/8721
* document feature flag
* Update .changes/tauri-build-config-json.md [skip ci]
* Update core/tauri/src/lib.rs [skip ci]
* disable default features for tauri-build on tauri, plugins
* fmt
---------
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
* feat(wry): support proxy in wry runtime
wry has been supported http/socks5 proxy in
[#1006](https://github.com/tauri-apps/wry/pull/1006), which has been
merged in [commit
3cc4d79](3cc4d79843).
This patch aims to support its feature.
Signed-off-by: lin fu <river@vvl.me>
* Apply suggestions from code review
* Apply suggestions from code review
* Update core/tauri-runtime-wry/src/lib.rs
* Update core/tauri/src/window/mod.rs
* add macos-proxy flag
* add change file
* delete file
* update change file
* use macos-14 runner to test core
---------
Signed-off-by: lin fu <river@vvl.me>
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* feat(acl): generate schema for scope
* allow plugin to define its global scope schema
* refactor to use schemas folder instead of individual files
* change signature
* delete .schema.json files
* fix: disable global gitignore
There are cases when people use git to manage their dotfiles in the home directory. When a tauri projects uses other name than `src-tauri` for the rust source code, the lookup may fail if there's a global gitignore.
* change file
* fix(core): clear window surface for transparent windows
closes#8632
this may conflict with `tauri-egui` rendering to the surface so we may need to add an option to disable internal rendering
* fix build
* feat(cli): migrate tauri-build version
This changes the migrate command to also migrate the tauri-build dependency to v2, previously it only updated the tauri dependency.
* lint
* Add appContents field in macos tauri config.
* Change MacConfig::appContents to MacConfig::files to make it similar to DebConfig::files.
* Change appContents to files in helloworld/tauri.conf.json
* use common::copy_dir helper
* add change files [skip ci]
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* fix(cli): Handle target triples with 4 components
Follow up of #8321 which broke the `TAURI_ENV_` vars for linux, windows and ios-sim
* use host for platform as is
* clippy
* fix(core): scope checks on Android
On Android, when we call canonicalize() on "/data/user/0/appid" (which is the data dir), the result is a "/data/data/appid" path, so we need to adjust our scope for that.
* clarify code
* apply the logic to all targets
* feat(core): set CORS headers on protocol errors
This ensures the frontend can read the error message instead of just showing a CORS error
* fix statuscode
* Add `get_ipc_response` to the `MockRuntime`
* Fix `MockRuntime` doctests
* Add support for raw ipc
* cleanup, add change file
* only a single get fn
---------
Co-authored-by: Lucas Nogueira <lucas@crabnebula.dev>
* fix(build): Always invoke resource compiler on windows, fixes#8164
* move all the stuff out of the version check
* check for icon path when setting the icon
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
fix(cli): set current dir to tauri dir before reading config, closes#6771
* fix(ci): enable openssl vendored feature for cli.js
* enable feature on CI
* add openssl dep
* avoid openssl on Linux
* vendored openssl on macOS CI
* fix dep install
* lint [skip ci]
* refactor(build): change tauri-api dependency path to skip rebuilds
The tauri-api Swift package cannot be injected inside the iOS plugin project because swift-rs reruns when the project folder changes. We will now inject the project in the parent folder instead.
* revert tauri-plugin-log [skip ci]
* feat(core): update swift-rs
* update tauri-plugin-log
* use env var for min iOS version
* test x86_64-apple-ios
* Revert "test x86_64-apple-ios"
This reverts commit 3ae6b79e5f.
* chore: swift min version 5.3 [skip ci]
* fix build [skip ci]
* fix cgrect usage
* test CI
* Revert "test CI"
This reverts commit 76ce0c5992.
* update swift-rs to 1.0.1
* lint
* lint [skip ci]
* fix(cli): use `npm run tauri -- foo` for correctly pass args to tauri
* fix xcode-script current dir, GCC_PREPROCESSOR_DEFINITIONS optional
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* fix(core): use `require_literal_separator` when matching paths
* document the need for `require_literal_separator`
* use `require_literal_leading_dot`
@@ -24,7 +24,7 @@ Prerequisites are mainly derived from VS Code's instructions for usage of develo
### A note on filesystem performance
Due to limitations in how Docker shares files between the Docker host and a container, it's also recommended that developers [clone Tauri source code into a container volume](https://code.visualstudio.com/remote/advancedcontainers/improve-performance#_use-clone-repository-in-container-volume). This is optional, but highly advised as many filesystem/IO heavy operations (`cargo build`, `yarn install`, etc) will be very slow if they operate on directories shared with a Docker container from the Docker host.
Due to limitations in how Docker shares files between the Docker host and a container, it's also recommended that developers [clone Tauri source code into a container volume](https://code.visualstudio.com/remote/advancedcontainers/improve-performance#_use-clone-repository-in-container-volume). This is optional, but highly advised as many filesystem/IO heavy operations (`cargo build`, `pnpm install`, etc) will be very slow if they operate on directories shared with a Docker container from the Docker host.
To do this, open your project with VS Code and run **Remote-Containers: Clone Repository in Container Volume...** from the Command Palette (<kbd>F1</kbd>).
@@ -33,6 +33,7 @@ To do this, open your project with VS Code and run **Remote-Containers: Clone Re
Docker Desktop provides facilities for [allowing the development container to connect to a service on the Docker host](https://docs.docker.com/desktop/windows/networking/#i-want-to-connect-from-a-container-to-a-service-on-the-host). So long as you have an X window server running on your Docker host, the devcontainer can connect to it and expose your Tauri GUI via an X window.
**Export the `DISPLAY` variable within the devcontainer terminal you launch your Tauri application from to expose your GUI outside of the devcontainer**.
@@ -22,7 +22,7 @@ Hi! We, the maintainers, are really excited that you are interested in contribut
- Issues with no clear repro steps will not be triaged. If an issue labeled "need repro" receives no further input from the issue author for more than 5 days, it will be closed.
- If your issue is resolved but still open, don’t hesitate to close it. In case you found a solution by yourself, it could be helpful to explain how you fixed it.
- If your issue is resolved but still open, don't hesitate to close it. In case you found a solution by yourself, it could be helpful to explain how you fixed it.
- Most importantly, we beg your patience: the team must balance your request against many other responsibilities — fixing other bugs, answering other questions, new features, new documentation, etc. The issue list is not paid support and we cannot make guarantees about how fast your issue can be resolved.
@@ -33,58 +33,77 @@ Hi! We, the maintainers, are really excited that you are interested in contribut
- It's OK to have multiple small commits as you work on the PR - we will let GitHub automatically squash it before merging.
- If adding new feature:
- Provide convincing reason to add this feature. Ideally you should open a suggestion issue first and have it greenlighted before working on it.
- If fixing a bug:
- If you are resolving a special issue, add `(fix: #xxxx[,#xxx])` (#xxxx is the issue id) in your PR title for a better release log, e.g. `fix: update entities encoding/decoding (fix #3899)`.
- Provide detailed description of the bug in the PR, or link to an issue that does.
- If the PR is meant to be released, follow the instructions in `.changes/readme.md` to log your changes. ie. [readme.md](https://github.com/tauri-apps/tauri/blob/dev/.changes/README.md)
## Development Guide
**NOTE: Tauri is undergoing rapid development right now, and the docs match the latest published version of Tauri. They are horribly out of date when compared with the code in the dev branch. This contributor guide is up-to-date, but it doesn't cover all of Tauri's functions in depth. If you have any questions, don't hesitate to ask in our Discord server.**
**NOTE: If you have any question don't hesitate to ask in our Discord server. We try to keep this guide to up guide, but if something doesn't work let us know.**
### General Setup
First, [join our Discord server](https://discord.gg/SpmNs4S) and let us know that you want to contribute. This way we can point you in the right direction and help ensure your contribution will be as helpful as possible.
To set up your machine for development, follow the [Tauri setup guide](https://tauri.app/v1/guides/getting-started/prerequisites/) to get all the tools you need to develop Tauri apps. The only additional tool you may need is [Yarn](https://yarnpkg.com/), it is only required if you are developing the Node CLI or API packages (`tooling/cli/node` and `tooling/api`). Next, fork and clone this repo. It is structured as a monorepo, which means that all the various Tauri packages are under the same repository. The development process varies depending on what part of Tauri you are contributing to, see the guides below for per-package instructions.
To set up your machine for development, follow the [Tauri setup guide](https://v2.tauri.app/start/prerequisites/) to get all the tools you need to develop Tauri apps. The only additional tool you may need is [PNPM](https://pnpm.io/), it is only required if you are developing the Node CLI or API packages (`packages/cli` and `packages/api`).
Some Tauri packages will be automatically built when running one of the examples. Others, however, will need to be built beforehand. To build these automatically, run the `.scripts/setup.sh` (Linux and macOS) or `.scripts/setup.ps1` (Windows) script. This will install the Rust and Node.js CLI and build the JS API. After that, you should be able to run all the examples. Note that the setup script should be executed from the root folder of the repository in order to run correctly.
Next, [fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) and clone [this repository](https://github.com/tauri-apps).
The development process varies depending on what part of Tauri you are contributing to, see the guides below for per-package instructions.
### Packages Overview
Some Tauri packages will be automatically built when running one of the examples. Others, however, will need to be built beforehand. To initialize, execute these commands in the repository root:
- Tauri Core (`/core/tauri`) is the heart of Tauri. It contains the code that starts the app, configures communication between Rust and the Webview, and ties all the other packages together.
- The Macros (`/core/tauri-macros`) are used by Tauri Core for various functions.
- Tauri Bundler (`/tooling/bundler`) is used by the Rust CLI to package executables into installers.
- The Rust CLI aka `tauri-cli` (`/tooling/cli`) is the primary CLI for creating and developing Tauri apps.
- The JS CLI aka `@tauri-apps/cli` (`/tooling/cli/node`) is a Node.js CLI wrapper for `tauri-cli`.
- The JS API aka `@tauri-apps/api` (`/tooling/api`) contains JS bindings to the builtin Rust functions in the Rust API.
```bash
pnpm install
pnpm build
```
### Developing Tauri Bundler and Rust CLI
### Overview
The code for the bundler is located in `[Tauri repo root]/tooling/bundler`, and the code for the Rust CLI is located in `[Tauri repo root]/tooling/cli`. If you are using your local copy of `@tauri-apps/cli` (see above), any changes you make to the bundler and CLI will be automatically built and applied when running the build or dev command. Otherwise, running `cargo install --path .` in the Rust CLI directory will allow you to run `cargo tauri build` and `cargo tauri dev` anywhere, using the updated copy of the bundler and cli. You will have to run this command each time you make a change in either package.
### Developing The Node.js CLI (`@tauri-apps/cli`)
`@tauri-apps/cli` is a wrapper to `tauri-cli` so most changes should be written on the Rust CLI. The `[Tauri repo root]/tooling/cli/node` folder contains only packaging scripts to properly publish the Rust CLI binaries to NPM.
See [Architecture](../ARCHITECTURE.md#major-components) for an overview of the packages in this repository.
### Developing Tauri Core and Related Components (Rust API, Macros, Codegen, and Utils)
The code for Tauri Core is located in`[Tauri repo root]/core/tauri`, and the Rust API, Macros, and Utils are in `[Tauri repo root]/core/tauri-(api/macros/utils)`. The easiest way to test your changes is to use the `[Tauri repo root]/examples/helloworld` app. It automatically rebuilds and uses your local copy of the Tauri core packages. Just run `yarn tauri build` or `yarn tauri dev` in the helloworld app directory after making changes to test them out. To use your local changes in another project, edit its `src-tauri/Cargo.toml` file so that the `tauri` key looks like `tauri = { path = "PATH", features = [ "api-all", "cli" ] }`, where `PATH` is the relative path to `[Tauri repo root]/core/tauri`. Then, your local copy of the Tauri core packages will be rebuilt and used whenever you build that project.
The code for the Rust crates, including the Core, Macros, Utils, WRY runtime, and a few more are located in the [main Tauri repository](https://github.com/tauri-apps/tauri/tree/dev/crates).
The easiest way to test your changes is to use the [helloworld](https://github.com/tauri-apps/tauri/tree/dev/examples/helloworld) example app. It automatically rebuilds and uses your local copy of the Tauri core packages. Just run `cargo run --example helloworld` after making changes to test them out.
To test local changes against your own application simply point the Tauri create to your local repository. In `src-tauri/Cargo.toml` file change:
If any other crates depend on Tauri you will have to point them to the local repo as well.
### Developing Tauri Bundler and Rust CLI
The code for the bundler is located in [crates/tauri-bundler](https://github.com/tauri-apps/tauri/tree/dev/crates/tauri-bundler), and the code for the Rust CLI is located in [tauri-cli](https://github.com/tauri-apps/tauri/tree/dev/crates/tauri-cli).
Running `cargo install --path .` in the Rust CLI directory will allow you to run `cargo tauri build` and `cargo tauri dev` anywhere, using the updated copy of the bundler and cli. You will have to run this command each time you make a change in either package.
You can use `cargo install --path . --debug` to speed up test builds.
### Developing The Node.js CLI (`@tauri-apps/cli`)
[`@tauri-apps/cli`](https://github.com/tauri-apps/tauri/tree/dev/packages/cli) is a small wrapper around `tauri-cli` so most changes should be happen in the Rust CLI (see above).
#### Building the documentation locally
You can build the Rust documentation locally running the following script:
The JS API provides bindings between the developer's JS in the Webview and the builtin Tauri APIs, written in Rust. Its code is located in `[Tauri repo root]/tooling/api`. After making changes to the code, run `yarn build` to build it. To test your changes, we recommend using the API example app, located in `[Tauri repo root]/examples/api`. It will automatically use your local copy of the JS API and provides a helpful UI to test the various commands.
The JS API provides bindings between the developer's JS in the Webview and the built-in Tauri APIs, written in Rust. Its code is located in [/packages/api](https://github.com/tauri-apps/tauri/tree/dev/packages/api).
After making changes to the code, run `pnpm build` to build it. To test your changes, we recommend using the API example app, located in [/examples/api](https://github.com/tauri-apps/tauri/tree/dev/examples/api). It will automatically use your local copy of the JS API and provides a helpful UI to test the various commands.
## Financial Contribution
Tauri is an MIT-licensed open source project. Its ongoing development can be supported via [GitHub Sponsors](https://github.com/sponsors/nothingismagick) or [Open Collective](https://opencollective.com/tauri). We prefer GitHub Sponsors as donations made are doubled through the matching fund program.
Tauri is an MIT-licensed open source project. Its ongoing development can be supported via [GitHub Sponsors](https://github.com/sponsors/tauri-apps) or [Open Collective](https://opencollective.com/tauri). We prefer GitHub Sponsors as donations made are doubled through the matching fund program.
Before submitting a PR, please read https://github.com/tauri-apps/tauri/blob/dev/.github/CONTRIBUTING.md#pull-request-guidelines
Please make sure to read the Pull Request Guidelines: https://github.com/tauri-apps/tauri/blob/dev/.github/CONTRIBUTING.md#pull-request-guidelines
1. Give the PR a descriptive title.
Examples of good title:
- fix(windows): fix race condition in event loop
- docs: update example for `App::show`
- feat: add `Window::set_fullscreen`
Examples of bad title:
- fix #7123
- update docs
- fix bugs
2. If there is a related issue, reference it in the PR text, e.g. closes #123.
3. If this change requires a new version, then add a change file in `.changes` directory with the appropriate bump, see https://github.com/tauri-apps/tauri/blob/dev/.changes/README.md
4. Ensure that all your commits are signed https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits
5. Ensure `cargo test` and `cargo clippy` passes.
6. Propose your changes as a draft PR if your work is still in progress.
-->
### What kind of change does this PR introduce?
<!-- Check at least one. If you are introducing a new binding, you must reference an issue where this binding has been proposed, discussed and approved by the maintainers. -->
- [ ] Bugfix
- [ ] Feature
- [ ] Docs
- [ ] New Binding issue #___
- [ ] Code style update
- [ ] Refactor
- [ ] Build-related changes
- [ ] Other, please describe:
### Does this PR introduce a breaking change?
<!-- If yes, please describe the impact and migration path for existing applications in an attached issue. -->
- [ ] Yes, and the changes were approved in issue #___
- [ ] No
### Checklist
- [ ] When resolving issues, they are referenced in the PR's title (e.g `fix: remove a typo, closes #___, #___`)
- [ ] A change file is added if any packages will require a version bump due to this PR per [the instructions in the readme](https://github.com/tauri-apps/tauri/blob/dev/.changes/readme.md).
- [ ] I have added a convincing reason for adding this feature, if necessary
This handbook contains information about our release pipeline and how to deal with common issues.
This document is mainly intended for team members responsible for maintaining the project.
- [Covector](#covector)
- [Version Pull Request](#version-pull-request)
- [Releasing and Publishing](#releasing-and-publishing)
- [Publishing failed, what to do?](#publishing-failed-what-to-do)
## Covector
We use [`covector`](https://github.com/jbolda/covector) to manage our version bumps and release pipeline.
It can be configured in [`.changes/config.json`](../.changes/config.json) which includes how each package should be published step by step.
Some packages can't be published directly using `covector` as it requires to be built on a matrix of platforms
such as `tauri-cli` prebuilt binaries which is published using [publish-cli-rs.yml](./workflows/publish-cli-rs.yml)
and `@tauri-apps/cli` native Node.js modules which is published using using [publish-cli-js.yml](./workflows/publish-cli-js.yml)
both of which are triggered after `covector` has created a github release for both of them, see `Trigger @tauri-apps/cli publishing workflow`
and `Trigger tauri-cli publishing workflow` steps in [covector-version-or-publish.yml](./workflows/covector-version-or-publish.yml)
## Version Pull Request
On each pull request merged, [covector-version-or-publish.yml](./workflows/covector-version-or-publish.yml) workflow will run, and:
When there're change files inside `.changes` folder and they're not all included in `pre.json` (usually this is only when we are in `-alpha` to `-rc` phase), it will open/update an `Apply Version Updates From Current Changes` PR (https://github.com/tauri-apps/tauri/pull/11029 for example) that bumps all packages based on current existing change files and generate `CHANGELOG.md` entries. see `Create Pull Request With Versions Bumped` step in [covector-version-or-publish.yml](./workflows/covector-version-or-publish.yml).
Otherwise, covector will start to publish packages configured in [`.changes/config.json`](../.changes/config.json).
## Releasing and Publishing
Releasing can be as easy as merging the version pull request but here is a checklist to follow:
- [ ] Double check that every package is bumped correctly and there are no accidental major or minor being released unless that is indeed the intention.
- [ ] Make sure that there are no pending or unfinished [covector-version-or-publish.yml](./workflows/covector-version-or-publish.yml) workflow runs.
- [ ] Approve and merge the version pull request
## Publishing failed, what to do?
It is possible and due to many factors that one or many packages release can fail to release, there is no reason to panic, we can fix this.
Did all of the packages fail to release?
- yes?
- [ ]`git checkout -b revert-branch`
- [ ]`git revert HEAD~1`
- no?
- [ ]`git checkout -b revert-branch`
- [ ]`git revert HEAD~1 --no-commit`
- [ ] Edit the commit and revert only changes related to packages that failed to publish
- [ ]`git revert --continue`
Then:
- [ ] Make a pull request with reverted changes, get it approved and merged
- [ ] Fix the issue that caused releases to fail in another PR, get it approved and merged
Tauri is a polyglot and generic toolkit that is very composable and allows engineers to make a wide variety of applications. It is used for building applications for Desktop Computers using a combination of Rust tools and HTML rendered in a Webview. Apps built with Tauri can ship with any number of pieces of an optional JS API / Rust API so that webviews can control the system via message passing. In fact, developers can extend the default API with their own functionality and bridge the Webview and Rust-based backend easily.
Tauri apps can have custom menus and have tray-type interfaces. They can be updated, and are managed by the user's operating system as expected. They are very small, because they use the OS's webview. They do not ship a runtime, since the final binary is compiled from Rust. This makes the reversing of Tauri apps not a trivial task.
## What Tauri is NOT
- Tauri is not a lightweight kernel wrapper...instead it directly uses [WRY](#wry) and [TAO](#tao) to do the heavy-lifting in making system calls to the OS.
- Tauri is not a VM or virtualized environment...instead it is an application toolkit that allows making Webview OS applications.
## Major Components
The following section briefly describes the roles of the various parts of Tauri.
This is the major crate that holds everything together. It brings the runtimes, macros, utilities and API into one final product. It reads the `tauri.conf.json` file at compile time in order to bring in features and undertake actual configuration of the app (and even the `Cargo.toml` file in the project's folder). It handles script injection (for polyfills / prototype revision) at runtime, hosts the API for systems interaction, and even manages updating.
This crate opens up direct systems-level interactions specifically for WRY, such as printing, monitor detection, and other windowing related tasks. `tauri-runtime` implementation for WRY.
This is common code that is reused in many places and offers useful utilities like parsing configuration files, detecting platform triples, injecting the CSP, and managing assets.
A TypeScript library that creates `cjs` and `esm` JavaScript endpoints for you to import into your Frontend framework so that the Webview can call and listen to backend activity. We also ship the pure TypeScript, because for some frameworks this is more optimal. It uses the message passing of webviews to their hosts.
The bundler is a library that builds a Tauri App for the platform triple it detects / is told. At the moment it currently supports macOS, Windows and Linux - but in the near future will support mobile platforms as well. May be used outside of Tauri projects.
It is a wrapper around [tauri-cli](https://github.com/tauri-apps/tauri/blob/dev/tooling/cli) using [napi-rs](https://github.com/napi-rs/napi-rs) to produce NPM packages for each platform.
It is a wrapper around [tauri-cli](https://github.com/tauri-apps/tauri/blob/dev/crates/tauri-cli) using [napi-rs](https://github.com/napi-rs/napi-rs) to produce NPM packages for each platform.
This rust executable provides the full interface to all of the required activities for which the CLI is required. It will run on macOS, Windows, and Linux.
This is a toolkit that will enable engineering teams to rapidly scaffold out a new tauri-apps project using the frontend framework of their choice (as long as it has been configured).
# External Crates
The Tauri-Apps organisation maintains two "upstream" crates from Tauri, namely TAO for creating and managing application windows, and WRY for interfacing with the Webview that lives within the window.
## [TAO](https://github.com/tauri-apps/tao)
Cross-platform application window creation library in Rust that supports all major platforms like Windows, macOS, Linux, iOS and Android. Written in Rust, it is a fork of [winit](https://github.com/rust-windowing/winit) that we have extended for our own needs like menu bar and system tray.
## [WRY](https://github.com/tauri-apps/wry)
WRY is a cross-platform WebView rendering library in Rust that supports all major desktop platforms like Windows, macOS, and Linux.
Tauri uses WRY as the abstract layer responsible to determine which webview is used (and how interactions are made).
This is a github workflow that builds tauri binaries for all platforms. It is not the fastest out there, but it gets the job done and is highly configurable. Even allowing you to create a (very basic) tauri app even if tauri is not setup.
Because this is a very risky (potentially destructive) github action, we forked it in order to have strong guarantees that the code we think is running is actually the code that is running.
A developer must first install the prerequisite toolchains for creating a Tauri app. At the very least this will entail installing rust & cargo, and most likely also a modern version of node.js and potentially another package manager. Some platforms may also require other tooling and libraries, but this has been documented carefully in the respective platform docs.
Because of the many ways to build front-ends, we will stick with a common node.js based approach for development. (Note: Tauri does not by default ship a node.js runtime.)
The easiest way to do this is to run the following:
```
npx create-tauri-app
npm createtauri-app
```
Which will ask you a bunch of questions about the framework you want to install and then create everything you need in a single folder - some via the placement of template files and some through normal installation procedures of your framework.
@@ -107,12 +136,17 @@ Which will ask you a bunch of questions about the framework you want to install
> If you don't use this process, you will have to manually install the tauri cli, initialise tauri and manually configure the `tauri.conf.json` file.
Once everything is installed, you can run:
```
pnpm tauri dev
-or-
yarn tauri dev
-or-
npm run tauri dev
```
This will do several things:
1. start the JS Framework devserver
2. begin the long process of downloading and compiling the rust libraries
3. open an application window with devtools enabled
@@ -125,10 +159,9 @@ If you modify your rust code or anything in the Cargo.toml, the window will clos
If you need to get deeper insight into your current project, or triage requires investigation of installed components, just run:
```
yarn tauri info
pnpm tauri info
```
## What does the Release flow look like?
The release flow begins with proper configuration in the `tauri.conf.json` file. In this file, the developer can configure not only the basic behaviour of the application (like window size and decoration), they can also provide settings for signing and updating.
@@ -136,21 +169,25 @@ The release flow begins with proper configuration in the `tauri.conf.json` file.
Depending upon the operating system that the developer (or CI) is building the application on, there will be an app built for them for that system. (Cross compilation is not currently available, however there is an official [GitHub Action](https://github.com/tauri-apps/tauri-action) that can be used to build for all platforms.)
To kick off this process, just:
```
yarn tauri build
pnpm tauri build
```
After some time, the process will end and you can see the results in the `./src-tauri/target/release` folder.
## What does the End-User flow look like?
End users will be provided with binaries in ways that are appropriate for their systems. Whether macOS, Linux, or Windows, direct download or store installations - they will be able to follow procedures for installing and removing that they are used to.
## What does the Updating flow look like?
When a new version is ready, the developer publishes the new signed artifacts to a server (that they have configured within `tauri.conf.json`).
The application can poll this server to see if there is a new release. When there is a new release, the user is prompted to update. The application update is downloaded, verified (checksum & signature), updated, closed, and restarted.
## License
Tauri itself is licensed under MIT or Apache-2.0. If you repackage it and modify any source code, it is your responsibility to verify that you are complying with all upstream licenses. Tauri is provided AS-IS with no explicit claim for suitability for any purpose.
Here you may peruse our [Software Bill of Materials](https://app.fossa.com/projects/git%2Bgithub.com%2Ftauri-apps%2Ftauri).
| [**tauri-utils**](https://github.com/tauri-apps/tauri/tree/dev/core/tauri-utils) | common code used across the tauri crates | [](https://crates.io/crates/tauri-utils) | ✅ | ✅ | ✅ |
### Tooling
| 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://www.npmjs.com/package/create-tauri-app) | ✅ | ✅ | ✅ |
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.
The user interface in Tauri apps currently leverages [`tao`](https://docs.rs/tao) as a window handling library on macOS, Windows, Linux, Android and iOS. To render your application, Tauri uses [WRY](https://github.com/tauri-apps/wry), a library which provides a unified interface to the system webview, leveraging WKWebView on macOS & iOS, WebView2 on Windows, WebKitGTK on Linux and Android System WebView on Android.
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
## Getting 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:
If you are interested in making a tauri app, please visit the [documentation website](https://tauri.app).
The quickest way to get started is to install the [prerequisites](https://v2.tauri.app/start/prerequisites/) for your system and create a new project with [`create-tauri-app`](https://github.com/tauri-apps/create-tauri-app/#usage). For example with `npm`:
```sh
npm create tauri-app@latest
```
## Features
The list of Tauri's features includes, but is not limited to:
- Built-in app bundler to create app bundles in formats like `.app`, `.dmg`, `.deb`, `.rpm`, `.AppImage` and Windows installers like `.exe` (via NSIS) and `.msi` (via WiX).
- Built-in self updater (desktop only)
- System tray icons
- Native notifications
- Native WebView Protocol (tauri doesn't create a localhost http(s) server to serve the WebView contents)
- GitHub action for streamlined CI
- VS Code extension
### Platforms
Tauri currently supports development and distribution on the following platforms:
| Linux | webkit2gtk 4.0 for Tauri v1 (for example Ubuntu 18.04). webkit2gtk 4.1 for Tauri v2 (for example Ubuntu 22.04). |
| iOS/iPadOS | 9 and above |
| Android | 7 and above (currently 8 and above) |
**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:
- [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
## 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.
@@ -133,32 +61,31 @@ 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
Documentation in a polyglot system is a tricky proposition. To this end, we prefer to use inline documentation in the Rust & JS source code as much as possible. Check out the hosting repository for the documentation site for further information: <https://github.com/tauri-apps/tauri-docs>
### Testing & Linting
## Partners
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/
For the complete list of sponsors please visit our [website](https://tauri.app#sponsors) and [Open Collective](https://opencollective.com/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/).
Tauri aims to be a sustainable collective based on principles that guide sustainable free and open software communities. 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).
## Licenses
Code: (c) 2015 - 2021 - The Tauri Programme within The Commons Conservancy.
Code: (c) 2015 - Present - The Tauri Programme within The Commons Conservancy.
If you have found a potential security threat, vulnerability or exploit in Tauri
or one of its upstream dependencies, please DON’T create a pull-request, DON’T
file an issue on GitHub, DON’T mention it on Discord and DON’T create a forum thread.
or one of its upstream dependencies, please DON'T create a pull-request, DON'T
file an issue on GitHub, DON'T mention it on Discord and DON'T create a forum thread.
Please submit your report via the GitHub Private Vulnerability Disclosure functionality.
@@ -24,5 +24,5 @@ Additionally, we may ask you to independently verify our patch, which will be av
Depending on your decision to accept or deny credit for the vulnerability, you will be publicly attributed to the vulnerability and may be mentioned in our announcements.
At the current time we do not have the financial ability to reward bounties,
At the current time we do not have the financial ability to reward bounties,
but in extreme cases will at our discretion consider a reward.
Tauri is a polyglot and generic system that is very composable and allows engineers to make a wide variety of applications. It is used for building applications for Desktop Computers using a combination of Rust tools and HTML rendered in a Webview. Apps built with Tauri can ship with any number of pieces of an optional JS API / Rust API so that webviews can control the system via message passing. In fact, developers can extend the default API with their own functionality and bridge the Webview and Rust-based backend easily.
Tauri apps can have custom menus and have tray-type interfaces. They can be updated, and are managed by the user's operating system as expected. They are very small, because they use the system's webview. They do not ship a runtime, since the final binary is compiled from rust. This makes the reversing of Tauri apps not a trivial task.
## This module
This rust module run on CI, provides internal metrics results of Tauri. To learn more see [benchmark_results](https://github.com/tauri-apps/benchmark_results) repository.
***_Internal use only_**
**\*_Internal use only_**
## 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 [Daniel Thompson-Yvetot](https://github.com/nothingismagick) and [Guillaume Chau](https://github.com/akryum)
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
//! This Rust binary runs on CI and provides internal metrics results of Tauri. To learn more see [benchmark_results](https://github.com/tauri-apps/benchmark_results) repository.
- [`d1e09da0`](https://www.github.com/tauri-apps/tauri/commit/d1e09da084b849b9e384fc27ed250dd17e72c7a3)([#7918](https://www.github.com/tauri-apps/tauri/pull/7918)) Bump to 1.5 due to tauri-utils dependency bump.
## \[1.4.1]
### Bug Fixes
- [`5ecb46b3`](https://www.github.com/tauri-apps/tauri/commit/5ecb46b3410afd1b5c82494c1e0a91d5a358c41a)([#7773](https://www.github.com/tauri-apps/tauri/pull/7773)) Automatically set rpath on macOS if frameworks are bundled and copy frameworks to `src-tauri/target/Frameworks` for usage in development.
- [`290e366a`](https://www.github.com/tauri-apps/tauri/commit/290e366ae98e9a52b1b43bfd3e285150427ebffa)([#7419](https://www.github.com/tauri-apps/tauri/pull/7419)) Correctly copy the WebView2 runtime in development when `webviewInstallMode` is used instead of `webviewFixedRuntimePath`.
### Dependencies
- Upgraded to `tauri-utils@1.5.0`
- Upgraded to `tauri-codegen@1.4.1`
## \[1.4.0]
### Enhancements
- [`52474e47`](https://www.github.com/tauri-apps/tauri/commit/52474e479d695865299d8c8d868fb98b99731020)([#7141](https://www.github.com/tauri-apps/tauri/pull/7141)) Enhance Cargo features check.
- [`af937290`](https://www.github.com/tauri-apps/tauri/commit/af93729031565a69d1fde6cf16bea3b9b6e43a65)([#6676](https://www.github.com/tauri-apps/tauri/pull/6676)) On Windows, set `LegalCopyright` and `FileDescription` file properties on the executable from `tauri.bundle.copyright` and `tauri.bundle.shortDescription`,
- [`d2710e9d`](https://www.github.com/tauri-apps/tauri/commit/d2710e9d2e8fd93975ef6494512370faa8cb3b7e)([#6944](https://www.github.com/tauri-apps/tauri/pull/6944)) Unpin `time`, `ignore`, and `winnow` crate versions. Developers now have to pin crates if needed themselves. A list of crates that need pinning to adhere to Tauri's MSRV will be visible in Tauri's GitHub workflow: https://github.com/tauri-apps/tauri/blob/dev/.github/workflows/test-core.yml#L85.
## \[1.3.0]
- Bump minimum supported Rust version to 1.60.
- [5fdc616d](https://www.github.com/tauri-apps/tauri/commit/5fdc616df9bea633810dcb814ac615911d77222c) feat: Use the zbus-backed of notify-rust ([#6332](https://www.github.com/tauri-apps/tauri/pull/6332)) on 2023-03-31
- Add initial support for building `nsis` bundles on non-Windows platforms.
- [60e6f6c3](https://www.github.com/tauri-apps/tauri/commit/60e6f6c3f1605f3064b5bb177992530ff788ccf0) feat(bundler): Add support for creating NSIS bundles on unix hosts ([#5788](https://www.github.com/tauri-apps/tauri/pull/5788)) on 2023-01-19
- Add `WindowsAttributes::app_manifest` to specify the application manifest on Windows.
- [bca09f7f](https://www.github.com/tauri-apps/tauri/commit/bca09f7f5ff1c9c5a4b51da043bdd5da668a179b) feat(tauri-build): add option to specify Windows manifest, closes [#5584](https://www.github.com/tauri-apps/tauri/pull/5584) ([#5730](https://www.github.com/tauri-apps/tauri/pull/5730)) on 2022-12-14
- Added support for Cargo's workspace inheritance for package information. The cli now also detects inherited `tauri` and `tauri-build` dependencies and disables manifest rewrites accordingly.
- [cd8c074a](https://www.github.com/tauri-apps/tauri/commit/cd8c074ae6592303d3f6844a4fb6d262eae913b2) feat(cli): add support for Cargo's workspace inheritance for the package version, closes [#5070](https://www.github.com/tauri-apps/tauri/pull/5070) ([#5775](https://www.github.com/tauri-apps/tauri/pull/5775)) on 2022-12-14
- [d20a7288](https://www.github.com/tauri-apps/tauri/commit/d20a728892eee1858ab525ab6216cd721f473ab5) feat: Further improve workspace inheritance, closes [#6122](https://www.github.com/tauri-apps/tauri/pull/6122), [#5070](https://www.github.com/tauri-apps/tauri/pull/5070) ([#6144](https://www.github.com/tauri-apps/tauri/pull/6144)) on 2023-01-26
- Pin `winnow` crate to 0.4.1 to keep the 1.60 MSRV.
- [bb251087](https://www.github.com/tauri-apps/tauri/commit/bb2510876d0bdff736d36bf3a465cdbe4ad2b90c) fix(core): extend allowlist with `app`'s allowlist, closes [#5650](https://www.github.com/tauri-apps/tauri/pull/5650) ([#5652](https://www.github.com/tauri-apps/tauri/pull/5652)) on 2022-11-18
## \[1.2.0]
- - [7d9aa398](https://www.github.com/tauri-apps/tauri/commit/7d9aa3987efce2d697179ffc33646d086c68030c) feat: bump MSRV to 1.59 ([#5296](https://www.github.com/tauri-apps/tauri/pull/5296)) on 2022-09-28
## \[1.1.1]
- Add missing allowlist config for `set_cursor_grab`, `set_cursor_visible`, `set_cursor_icon` and `set_cursor_position` APIs.
- Bumped due to a bump in tauri-utils.
- [c764408d](https://www.github.com/tauri-apps/tauri/commit/c764408da7fae123edd41115bda42fa75a4731d2) fix: Add missing allowlist config for cursor apis, closes [#5207](https://www.github.com/tauri-apps/tauri/pull/5207) ([#5211](https://www.github.com/tauri-apps/tauri/pull/5211)) on 2022-09-16
## \[1.1.0]
- Rerun codegen if assets or icons change.
- [ff8fd761](https://www.github.com/tauri-apps/tauri/commit/ff8fd7619ae894b70f149b192d8635d842827141) fix(tauri-build): rerun if assets or icons change ([#4910](https://www.github.com/tauri-apps/tauri/pull/4910)) on 2022-08-10
- Create the `desktop` and `mobile` cfg aliases.
- [c04d0340](https://www.github.com/tauri-apps/tauri/commit/c04d0340e2f163483f3556c7aabe35322ee71e6a) feat(core): prepare build for mobile targets ([#4830](https://www.github.com/tauri-apps/tauri/pull/4830)) on 2022-08-02
- Added support to configuration files in TOML format (Tauri.toml file).
- [ae83d008](https://www.github.com/tauri-apps/tauri/commit/ae83d008f9e1b89bfc8dddaca42aa5c1fbc36f6d) feat: add support to TOML config file `Tauri.toml`, closes [#4806](https://www.github.com/tauri-apps/tauri/pull/4806) ([#4813](https://www.github.com/tauri-apps/tauri/pull/4813)) on 2022-08-02
- Enhance the dialog style on Windows via the manifest dependency `Microsoft.Windows.Common-Controls v6.0.0.0`.
- [5c5c42ed](https://www.github.com/tauri-apps/tauri/commit/5c5c42edb64adf4250af6891d7d226fda7d4d783) feat(build): use modern dialog styles on Windows, closes [#4709](https://www.github.com/tauri-apps/tauri/pull/4709) ([#4840](https://www.github.com/tauri-apps/tauri/pull/4840)) on 2022-08-02
- Fix root of codegen output when using the `CodegenContext` API.
- [ed581950](https://www.github.com/tauri-apps/tauri/commit/ed581950ea6fd0afee47aa73fb63083d2483429f) fix(tauri-build): use `::tauri` as root for the CodegenContext ([#4894](https://www.github.com/tauri-apps/tauri/pull/4894)) on 2022-08-08
- Return an error if a sidecar is configured with the same file name as the application.
- Only rewrite temporary icon files when the content change, avoid needless rebuilds.
- [f957cbb5](https://www.github.com/tauri-apps/tauri/commit/f957cbb56ccbd8d1c047a978b4579946252a6fd2) fix(codegen): write output file when contents change ([#4889](https://www.github.com/tauri-apps/tauri/pull/4889)) on 2022-08-09
## \[1.0.4]
- Reduce the amount of allocations when converting cases.
- [bc370e32](https://www.github.com/tauri-apps/tauri/commit/bc370e326810446e15b1f50fb962b980114ba16b) feat: reduce the amount of `heck`-related allocations ([#4634](https://www.github.com/tauri-apps/tauri/pull/4634)) on 2022-07-11
- The `TAURI_CONFIG` environment variable now represents the configuration to be merged instead of the entire JSON.
- [fa028ebf](https://www.github.com/tauri-apps/tauri/commit/fa028ebf3c8ca7b43a70d283a01dbea86217594f) refactor: do not pass entire config from CLI to core, send patch instead ([#4598](https://www.github.com/tauri-apps/tauri/pull/4598)) on 2022-07-06
## \[1.0.2]
- Expose `platform::windows_version` function.
- Bumped due to a bump in tauri-utils.
- [bf764e83](https://www.github.com/tauri-apps/tauri/commit/bf764e83e01e7443e6cc54572001e1c98c357465) feat(utils): expose `windows_version` function ([#4534](https://www.github.com/tauri-apps/tauri/pull/4534)) on 2022-06-30
## \[1.0.1]
- Changed the `BundleConfig::targets` to a `BundleTarget` enum to enhance generated documentation.
- Bumped due to a bump in tauri-utils.
- [31c15cd2](https://www.github.com/tauri-apps/tauri/commit/31c15cd2bd94dbe39fb94982a15cbe02ac5d8925) docs(config): enhance documentation for bundle targets, closes [#3251](https://www.github.com/tauri-apps/tauri/pull/3251) ([#4418](https://www.github.com/tauri-apps/tauri/pull/4418)) on 2022-06-21
- Added `platform::is_windows_7`.
- Bumped due to a bump in tauri-utils.
- [57039fb2](https://www.github.com/tauri-apps/tauri/commit/57039fb2166571de85271b014a8711a29f06be1a) fix(core): add windows 7 notification support ([#4491](https://www.github.com/tauri-apps/tauri/pull/4491)) on 2022-06-28
- Suppress unused variable warning in release builds.
- Bumped due to a bump in tauri-utils.
- [45981851](https://www.github.com/tauri-apps/tauri/commit/45981851e35119266c1a079e1ff27a39f1fdfaed) chore(lint): unused variable warnings for release builds ([#4411](https://www.github.com/tauri-apps/tauri/pull/4411)) on 2022-06-22
- [f4bb30cc](https://www.github.com/tauri-apps/tauri/commit/f4bb30cc73d6ba9b9ef19ef004dc5e8e6bb901d3) feat(covector): prepare for v1 ([#4351](https://www.github.com/tauri-apps/tauri/pull/4351)) on 2022-06-15
## \[1.0.0-rc.15]
- Read the tray icon path relatively to the config directory.
- Bumped due to a bump in tauri-codegen.
- [562e8ca2](https://www.github.com/tauri-apps/tauri/commit/562e8ca23facf1a8e5fa6c8cdf872357d3523a78) fix(codegen): tray icon path is relative to the config directory on 2022-06-15
## \[1.0.0-rc.14]
- Do not copy the tray icon to the output directory on Linux since it is embedded in the binary.
- [4ce8e228](https://www.github.com/tauri-apps/tauri/commit/4ce8e228134cd3f22973b74ef26ca0d165fbbbd9) refactor(core): use `Icon` for tray icons ([#4342](https://www.github.com/tauri-apps/tauri/pull/4342)) on 2022-06-14
## \[1.0.0-rc.13]
- Copy `tauri.conf.json > tauri.bundle.windows.webview_fixed_runtime_path` as a resource to the target directory to fix development usage of a fixed Webview2 runtime path.
- [8a634895](https://www.github.com/tauri-apps/tauri/commit/8a63489567b9fa86e404ad42b5b30c64361efe85) fix(build): fixed Webview2 runtime path in development, closes [#4308](https://www.github.com/tauri-apps/tauri/pull/4308) on 2022-06-10
- Improve usage of the GNU toolchain on Windows by copying the Webview2Loader.dll file to the target directory.
- [58a6879b](https://www.github.com/tauri-apps/tauri/commit/58a6879b82e3a82027604cdd0913caacaaab5c76) feat(tauri-build): improve Windows GNU toolchain usage, closes [#4319](https://www.github.com/tauri-apps/tauri/pull/4319) ([#4323](https://www.github.com/tauri-apps/tauri/pull/4323)) on 2022-06-12
- Only statically link the VC runtime when the `STATIC_VCRUNTIME` environment variable is set to `true` (automatically done by the Tauri CLI).
- [d703d27a](https://www.github.com/tauri-apps/tauri/commit/d703d27a707edc028f13b35603205da1133fcc2b) fix(build): statically link VC runtime only on `tauri build` ([#4292](https://www.github.com/tauri-apps/tauri/pull/4292)) on 2022-06-07
## \[1.0.0-rc.12]
- Statically link the Visual C++ runtime instead of using a merge module on the installer.
- [bb061509](https://www.github.com/tauri-apps/tauri/commit/bb061509fb674bef86ecbc1de3aa8f3e367a9907) refactor(core): statically link vcruntime, closes [#4122](https://www.github.com/tauri-apps/tauri/pull/4122) ([#4227](https://www.github.com/tauri-apps/tauri/pull/4227)) on 2022-05-27
## \[1.0.0-rc.11]
- Create `dev` cfg alias.
- [9cdcf9b3](https://www.github.com/tauri-apps/tauri/commit/9cdcf9b3a8fa27612b3156c1702a4e776627e869) feat(build): create `dev` alias ([#4212](https://www.github.com/tauri-apps/tauri/pull/4212)) on 2022-05-25
- Search `tauri.conf.json > tauri > bundle > icons` for a `.ico` file for the window icon instead of simple default `icons/icon.ico` when `WindowsAttributes::window_icon_path` is not set.
- [bad85a1f](https://www.github.com/tauri-apps/tauri/commit/bad85a1f11da03421401080531275ba201480cd1) feat(build): find .ico in config instead of default `icons/icon.ico` ([#4115](https://www.github.com/tauri-apps/tauri/pull/4115)) on 2022-05-13
## \[1.0.0-rc.8]
- Properly set file version information for the Windows executable.
- [1ca2dd67](https://www.github.com/tauri-apps/tauri/commit/1ca2dd677d50b4c724c55b37060c3ba64b81c54a) fix(tauri-build): properly set executable version info on Windows ([#4045](https://www.github.com/tauri-apps/tauri/pull/4045)) on 2022-05-03
## \[1.0.0-rc.7]
- Rerun build script if `TAURI_CONFIG` environment variable change.
- [7ae9e252](https://www.github.com/tauri-apps/tauri/commit/7ae9e25262376529637cd3b47b1cf84809efaec9) fix(tauri-build): rerun if `TAURI_CONFIG` env var changes on 2022-04-26
## \[1.0.0-rc.6]
- Copy system tray icon resource to the target directory on Linux.
- [f2a30d8b](https://www.github.com/tauri-apps/tauri/commit/f2a30d8bc54fc3ba49e16f69a413eca5f61a9b1f) refactor(core): use ayatana appindicator by default, keep option to use gtk ([#3916](https://www.github.com/tauri-apps/tauri/pull/3916)) on 2022-04-19
## \[1.0.0-rc.5]
- Print error context on the `build` panic.
- [49546c52](https://www.github.com/tauri-apps/tauri/commit/49546c5269080f38d57365788eb2592bff8f6d10) feat(build): print error context ([#3644](https://www.github.com/tauri-apps/tauri/pull/3644)) on 2022-03-09
## \[1.0.0-rc.4]
- Parse window icons at compile time.
- Bumped due to a bump in tauri-codegen.
- [8c935872](https://www.github.com/tauri-apps/tauri/commit/8c9358725a17dcc2acaf4d10c3f654afdff586b0) refactor(core): move `png` and `ico` behind Cargo features ([#3588](https://www.github.com/tauri-apps/tauri/pull/3588)) on 2022-03-05
## \[1.0.0-rc.3]
- Automatically emit `cargo:rustc-env=MACOSX_DEPLOYMENT_TARGET` with the value set on `tauri.conf.json > tauri > bundle > macos > minimumSystemVersion`.
- [4bacea5b](https://www.github.com/tauri-apps/tauri/commit/4bacea5bf48ea5ca6c9bdd10e28e85e67a0c6ef9) feat(core): set `MACOSX_DEPLOYMENT_TARGET` environment variable, closes [#2732](https://www.github.com/tauri-apps/tauri/pull/2732) ([#3496](https://www.github.com/tauri-apps/tauri/pull/3496)) on 2022-02-17
## \[1.0.0-rc.2]
- Rerun if sidecar or resource change.
- [afcc3ec5](https://www.github.com/tauri-apps/tauri/commit/afcc3ec50148074293350aaa26a05812207716be) fix(build): rerun if resource or sidecar change ([#3460](https://www.github.com/tauri-apps/tauri/pull/3460)) on 2022-02-14
## \[1.0.0-rc.1]
- Remove `cargo:rerun-if-changed` check for non-existent file that caused projects to *always* rebuild.
- [65287cd6](https://www.github.com/tauri-apps/tauri/commit/65287cd6148feeba91df86217b261770fed34608) remove non-existent cargo rerun check ([#3412](https://www.github.com/tauri-apps/tauri/pull/3412)) on 2022-02-11
## \[1.0.0-rc.0]
- Allow user to specify windows sdk path in build.rs.
- [59b6ee87](https://www.github.com/tauri-apps/tauri/commit/59b6ee87932d341433032befe3babd897ed8f7d0) fix(tauri-build): allow user to specify win sdk path (fix: [#2871](https://www.github.com/tauri-apps/tauri/pull/2871)) ([#2893](https://www.github.com/tauri-apps/tauri/pull/2893)) on 2021-11-16
- Adds support for using JSON5 format for the `tauri.conf.json` file, along with also supporting the `.json5` extension.
Here is the logic flow that determines if JSON or JSON5 will be used to parse the config:
1. Check if `tauri.conf.json` exists
a. Parse it with `serde_json`
b. Parse it with `json5` if `serde_json` fails
c. Return original `serde_json` error if all above steps failed
2. Check if `tauri.conf.json5` exists
a. Parse it with `json5`
b. Return error if all above steps failed
3. Return error if all above steps failed
- [995de57a](https://www.github.com/tauri-apps/tauri/commit/995de57a76cf51215277673e526d7ec32b86b564) Add seamless support for using JSON5 in the config file ([#47](https://www.github.com/tauri-apps/tauri/pull/47)) on 2022-02-03
- Move the copying of resources and sidecars from `cli.rs` to `tauri-build` so using the Cargo CLI directly processes the files for the application execution in development.
- [5eb72c24](https://www.github.com/tauri-apps/tauri/commit/5eb72c24deddf5a01093bea96b90c0d8806afc3f) refactor: copy resources and sidecars on the Cargo build script ([#3357](https://www.github.com/tauri-apps/tauri/pull/3357)) on 2022-02-08
- The minimum Rust version is now `1.56`.
- [a9dfc015](https://www.github.com/tauri-apps/tauri/commit/a9dfc015505afe91281c2027954ffcc588b1a59c) feat: update to edition 2021 and set minimum rust to 1.56 ([#2789](https://www.github.com/tauri-apps/tauri/pull/2789)) on 2021-10-22
- Validate `tauri` dependency `features` under `Cargo.toml` matching `tauri.conf.json`'s `allowlist`.
- [4de285c3](https://www.github.com/tauri-apps/tauri/commit/4de285c3967d32250d73acdd5d171a6fd332d2b3) feat(core): validate Cargo features matching allowlist \[TRI-023] on 2022-01-09
## \[1.0.0-beta.4]
- Implement `Debug` on public API structs and enums.
- [fa9341ba](https://www.github.com/tauri-apps/tauri/commit/fa9341ba18ba227735341530900714dba0f27291) feat(core): implement `Debug` on public API structs/enums, closes [#2292](https://www.github.com/tauri-apps/tauri/pull/2292) ([#2387](https://www.github.com/tauri-apps/tauri/pull/2387)) on 2021-08-11
## \[1.0.0-beta.3]
- Improve ESM detection with regexes.
- Bumped due to a bump in tauri-codegen.
- [4b0ec018](https://www.github.com/tauri-apps/tauri/commit/4b0ec0188078a8fefd4119fe5e19ebc30191f802) fix(core): improve JS ESM detection ([#2139](https://www.github.com/tauri-apps/tauri/pull/2139)) on 2021-07-02
- Inject invoke key on `script` tags with `type="module"`.
- Bumped due to a bump in tauri-codegen.
- [f03eea9c](https://www.github.com/tauri-apps/tauri/commit/f03eea9c9b964709532afbc4d1dd343b3fd96081) feat(core): inject invoke key on `<script type="module">` ([#2120](https://www.github.com/tauri-apps/tauri/pull/2120)) on 2021-06-29
## \[1.0.0-beta.2]
- Detect ESM scripts and inject the invoke key directly instead of using an IIFE.
- Bumped due to a bump in tauri-codegen.
- [7765c7fa](https://www.github.com/tauri-apps/tauri/commit/7765c7fa281853ddfb26b6b17534df95eaede804) fix(core): invoke key injection on ES module, improve performance ([#2094](https://www.github.com/tauri-apps/tauri/pull/2094)) on 2021-06-27
- Improve invoke key code injection performance time rewriting code at compile time.
- Bumped due to a bump in tauri-codegen.
- [7765c7fa](https://www.github.com/tauri-apps/tauri/commit/7765c7fa281853ddfb26b6b17534df95eaede804) fix(core): invoke key injection on ES module, improve performance ([#2094](https://www.github.com/tauri-apps/tauri/pull/2094)) on 2021-06-27
## \[1.0.0-beta.1]
- Pull Windows resource information (`FileVersion`, `ProductVersion`, `ProductName` and `FileDescription`) from `tauri.conf.json > package` configuration.
- [dc6b0d85](https://www.github.com/tauri-apps/tauri/commit/dc6b0d8522ca9f0962aa7c6fe446743889470b8c) feat(core): set .rc values from tauri.conf.json, closes [#1849](https://www.github.com/tauri-apps/tauri/pull/1849) ([#1951](https://www.github.com/tauri-apps/tauri/pull/1951)) on 2021-06-05
## \[1.0.0-beta.0]
- The `try_build` method now has a `Attributes` argument to allow specifying the window icon path used on Windows.
- [c91105f](https://www.github.com/tauri-apps/tauri/commit/c91105ff965cceb2dfb402004c12799bf3b1c2f6) refactor(build): allow setting window icon path on `try_build` ([#1686](https://www.github.com/tauri-apps/tauri/pull/1686)) on 2021-05-03
## \[1.0.0-beta-rc.1]
- The package info APIs now checks the `package` object on `tauri.conf.json`.
- Bumped due to a bump in tauri-codegen.
- [8fd1baf](https://www.github.com/tauri-apps/tauri/commit/8fd1baf69b14bb81d7be9d31605ed7f02058b392) fix(core): pull package info from tauri.conf.json if set ([#1581](https://www.github.com/tauri-apps/tauri/pull/1581)) on 2021-04-22
- [f575aaa](https://www.github.com/tauri-apps/tauri/commit/f575aaad71f23d44b2f89cf9ee5d84817dc3bb7a) fix: change files not referencing core packages ([#1619](https://www.github.com/tauri-apps/tauri/pull/1619)) on 2021-04-25
## \[1.0.0-beta-rc.0]
- Update all code files to have our license header.
- [bf82136](https://www.github.com/tauri-apps/tauri/commit/bf8213646689175f8a158b956911f3a43e360690) feat(license): SPDX Headers ([#1449](https://www.github.com/tauri-apps/tauri/pull/1449)) on 2021-04-11
- [a6def70](https://www.github.com/tauri-apps/tauri/commit/a6def7066eec19c889b0f14cc1e475bf209a332e) Refactor(tauri): move tauri-api and tauri-updater to tauri ([#1455](https://www.github.com/tauri-apps/tauri/pull/1455)) on 2021-04-11
- [aea6145](https://www.github.com/tauri-apps/tauri/commit/aea614587bddab930d552512b54e18624fbf573e) refactor(repo): add /tooling folder ([#1457](https://www.github.com/tauri-apps/tauri/pull/1457)) on 2021-04-12
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.