- 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
* fix(clipboard): fail to build on wayland
* specify exact version
* bump MSRV to 1.63
* revert msrv changes
---------
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
* fix(core): Retain order of map keys in ipc, fixes#7922
* enable dep on http-api feature instead of http-request
* Create fix-formbody-order.md
* Update fix-formbody-order.md
* fix(cli): Watch workspace members if tauri dir is ws root
See title. This PR also includes a fix/workaround for paths with funny characters that may not make the glob expansion panic.
Fixes#8509
* extract into function
* cleanup
* 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
* feat(bundler): codesign nested code on macos
* chore: update changelog tag
* typo
* also sign stuff in the Libraries folder
tested this for spacedrive, which has a bunch of dylib inside the libraries folder
* Update .changes/mac-bundler-nested-code-sign.md [skip ci]
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* 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): Prevent crash when sending events.
* add change file
* use dedicated type for windows refcell map
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
* 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
* refactor(api): generate types next to modules"
this fixes an issue with `moduleResolution: node`
* change file
* Update api-module-resolution-node.md
* feat(core): Add additional functions to the
* Add documentation and cleanup the code
* Improve and add tests to helper functions
* Clean unecessary code and correct tests
* Make `Ipc` and `IpcKey` public
* Open `Ipc` with public functions
* Update core/tauri/src/test/mod.rs
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
* cleanup, change file
---------
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
Co-authored-by: Lucas Nogueira <lucas@crabnebula.dev>
* 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>
* perf: Skip large Window and AppHandle fields on traces
These contain large fields like image buffers, causing spans/events to be very large when serialized.
Especially the `window::emit::eval` one which is in a hot code path.
* fix: MSRV issues
* fix(bundler): Fix nsis installer taking longer than expected to install resources
* create dir structure for resources before extracting files
* calculate size in rust on the build system
* i'm sorry clippy, i programmed in unholy languages where += wasn't a thing so i forgot it exists in rust...
* i'm a better clippy than clippy🌚
* fix(api): do nothing in clearMocks if __TAURI_INTERNALS__ is not defined (fix: #8179)
Prevents tests that didn't define any mocks from failing in `afterEach` test hook.
* Update fix-clearmocks.md
* check for indvidiual properties instead
* 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 Fernandes Nogueira <lucas@tauri.app>
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
fix(bundler): team ID is now required for notarytool via app password (#7972)
fix(bundler): team ID is now required for notarytool via app password (#7972)"
* fix(bundler): Use escaped installer path when starting the updater setup, fixes#7931
* fun ci stuff
* who needs lockfiles anyway
* stahp
* please let it be the last one. i want to leave
* chore: resolves a warning seen while running cargo update
warning: some crates are on edition 2021 which defaults to `resolver = "2"`, but virtual workspaces default to `resolver = "1"`
note: to keep the current resolver, specify `workspace.resolver = "1"` in the workspace root's manifest
note: to use the edition 2021 resolver, specify `workspace.resolver = "2"` in the workspace root's manifest
* Now using resolver 2.
* fix(bundler/nsis): delete app data of current user when uninstall, closes#7588
* fix(bundler/nsis): delete app data of current user when uninstall, closes#7588
* Update .changes/fix-nsis-uninstall-delete-app-data.md
---------
* fix(bundler/nsis): use temp dir for webview2 installer, closes#7409
* Update .changes/fix-nsis-webview2-installer-use-tempdir.md
---------
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
* ci: check for change tag
* fix workflow
* Update .scripts/ci/check-change-tags.js
* feat: also check if tag is known
seems like covector does not check that so we can do it here for now
* remove push run
* only check changed files
* add missing tag
---------
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.studio>
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
* feat: try_get_item() for window menu
Add a method in the MenuHandle struct, that will return an Optional MenuItemHandle
feat: try_get_item() for systemtray
Add a method in the SystemTrayHandle struct, that will return an Optional SystemTrayMenuItemHandle
docs: features documented in ./changes/minor.md
fix: suggested changes
fix CI
* Update .changes/tray_get_item.md
---------
* fix(bundler): ensure that there are no duplicate extension arguments during bundling on Windows (fix#6103)
* fix(bundler): ensure that there are no duplicate extension arguments during bundling on Windows (fix#6103)
* refactor: add useful diagnostics to `tauri info`
this also paves the way for interactive fixes in the future
* refactor: add useful diagnostics to `tauri info`
this also paves the way for interactive fixes in the future
* fix use_npm logic [skip ci]
* lint [skip ci]
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
* 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]
* docs: update formdata usage
* update generated files
* update generated files
* run workflow on push for dev only
* remove `js-api.json` from generated files check
* restore js-api.json before checking diff
* 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`
* fix(core): use `require_literal_separator` when matching paths
* document the need for `require_literal_separator`
* use `require_literal_leading_dot`
* Issue template change rendering of 'platform and version'
The previously used 'shell' is for shellscript, not for console output with commands. 'console' does render much more nicely text output and commands.
* remove `tauri info` render
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
As you create PRs and make changes that require a version bump, please add a new markdown file in this folder. You do not note the version _number_, but rather the type of bump that you expect: major, minor, or patch. The filename is not important, as long as it is a `.md`, but we recommend that it represents the overall change for organizational purposes.
When you select the version bump required, you do _not_ need to consider dependencies. Only note the package with the actual change, and any packages that depend on that package will be bumped automatically in the process.
Use the following format:
```md
---
'package-a': 'patch:enhance'
'package-b': 'patch:enhance'
---
Change summary goes here
```
Summaries do not have a specific character limit, but are text only. These summaries are used within the (future implementation of) changelogs. They will give context to the change and also point back to the original PR if more details and context are needed.
Changes will be designated as a `major`, `minor` or `patch` as further described in [semver](https://semver.org/).
Given a version number MAJOR.MINOR.PATCH, increment the:
- MAJOR version when you make incompatible API changes,
- MINOR version when you add functionality in a backwards compatible manner, and
- PATCH version when you make backwards compatible bug fixes.
Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format, but will be discussed prior to usage (as extra steps will be necessary in consideration of merging and publishing).
Additionally you could specify a tag for the change file to group it with other changes by prefixing the bump with `:<tag>`, for example:
```md
---
'package-a': 'patch:enhance'
---
Change summary goes here
```
which will group this change file with other changes that specify the `bug` tag.
For list of available tags, see the `changeTags` key in [./config.json](./config.json)
Core plugin permissions are now prefixed with `core:`, the `core:default` permission set can now be used and the `core` plugin name is reserved.
The `tauri migrate` tool will automate the migration process, which involves prefixing all `app`, `event`, `image`, `menu`, `path`, `resources`, `tray`, `webview` and `window` permissions with `core:`.
Fixed an issue where configuration parsing errors always displayed 'tauri.conf.json' as the file path, even when using 'Tauri.toml' or 'tauri.conf.json5'.
The error messages now correctly shows the actual config file being used.
@@ -24,7 +24,7 @@ Prerequisites are mainly derived from VS Code's instructions for usage of develo
### A note on filesystem performance
Due to limititations 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 opearations (`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`, `yarn 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.
@@ -42,43 +42,38 @@ Hi! We, the maintainers, are really excited that you are interested in contribut
## 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.studio/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://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.
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 respository in order to run correctly.
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.
### Packages Overview
### Overview
- The JS API (`/tooling/api`) contains JS bindings to the builtin Rust functions in the Rust API.
- cli.rs (`/tooling/cli`) is the primary CLI for creating and developing Tauri apps.
- cli.js (`/tooling/cli/node`) is a Node.js CLI wrapper for `cli.rs`.
- Tauri Bundler (`/tooling/bundler`) is used by the Rust CLI to package executables into installers.
- 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.
### Developing The Node.js CLI (cli.js)
`cli.js` is a wrapper to `cli.rs` 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 Bundler and Rust CLI
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 cli.js (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.
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.
### 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 `[Tauri repo root]/core/tauri-(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 `cargo run --example helloworld` after making changes to test them out.
#### Building the documentation locally
You can build the Rust documentation locally running the following script:
@@ -87,4 +82,4 @@ The JS API provides bindings between the developer's JS in the Webview and the b
## 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 docstrings
- 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
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.
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 [cli.rs](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/tooling/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 the delivery mechanism for tauri prebuilt binaries: currently the cli.rs (used by cli.js) and rustup binaries (used by the deps install command of cli.js). These artifacts are automatically created on release.
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
```
@@ -109,16 +136,19 @@ 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:
```
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
4. keep a long-lived console alive
4. keep a long-lived console alive
If you change your HTML/CSS/TS/JS, your framework devserver should give you its best shot at instant hot module reloading and you will see the changes instantly.
@@ -130,7 +160,6 @@ If you need to get deeper insight into your current project, or triage requires
yarn 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.
@@ -138,6 +167,7 @@ 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
```
@@ -145,14 +175,17 @@ yarn 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`).
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.studio). 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://tauri.app/v1/guides/getting-started/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
- Localhost free (🔥)
- 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 (beta) | 9 and above |
| Android (beta) | 7 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:
1. Electron has no native auto updater on Linux, but is offered by electron-packager
## 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
### Major Runtimes
- Node.js for running the CLI (deno and pure rust are on the roadmap)
- Cargo for testing, running the dev service, building binaries and as the runtime harness for the webview
### Major Languages
- Rust for the CLI
- ECMAScript bindings to the Rust API, written in typescript
- Rust for bindings, rust side of the API, harnesses
- Rust plugins to Tauri backend
### 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.
@@ -181,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
- TS (`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/).
## 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.
We will be adding contact information to this page very soon.
Please submit your report via the GitHub Private Vulnerability Disclosure functionality.
At the current time we do not have the financial ability to reward bounties,
Find out more about the reporting process [here](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability#privately-reporting-a-security-vulnerability).
Our team will triage your report and keep you informed about the progress.
We may ask questions or request further guidance on reproduction of the vulnerability in the comments of the advisory, which will be publicized.
Additionally, we may ask you to independently verify our patch, which will be available in the private advisory branch. Please do not publish your vulnerability during the process or before coordinated public disclosure from our side. We try to adhere to common standards of publication within 90-Days of disclosure.
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,
but in extreme cases will at our discretion consider a reward.
"description":"A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\n It controls application windows fine grained access to the Tauri core, application, or plugin commands.\n If a window is not matching any capability then it has no access to the IPC layer at all.\n\n This can be done to create groups of windows, based on their required system access, which can reduce\n impact of frontend vulnerabilities in less privileged windows.\n Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`.\n A Window can have none, one, or multiple associated capabilities.\n\n ## Example\n\n ```json\n {\n \"identifier\": \"main-user-files-write\",\n \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.\",\n \"windows\": [\n \"main\"\n ],\n \"permissions\": [\n \"core:default\",\n \"dialog:open\",\n {\n \"identifier\": \"fs:allow-write-text-file\",\n \"allow\": [{ \"path\": \"$HOME/test.txt\" }]\n },\n \"platforms\": [\"macOS\",\"windows\"]\n }\n ```",
"type":"object",
"required":[
"identifier",
"permissions"
],
"properties":{
"identifier":{
"description":"Identifier of the capability.\n\n ## Example\n\n `main-user-files-write`",
"type":"string"
},
"description":{
"description":"Description of what the capability is intended to allow on associated windows.\n\n It should contain a description of what the grouped permissions should allow.\n\n ## Example\n\n This capability allows the `main` window access to `filesystem` write related\n commands and `dialog` commands to enable programatic access to files selected by the user.",
"default":"",
"type":"string"
},
"remote":{
"description":"Configure remote URLs that can use the capability permissions.\n\n This setting is optional and defaults to not being set, as our\n default use case is that the content is served from our local application.\n\n :::caution\n Make sure you understand the security implications of providing remote\n sources with local system access.\n :::\n\n ## Example\n\n ```json\n {\n \"urls\": [\"https://*.mydomain.dev\"]\n }\n ```",
"anyOf":[
{
"$ref":"#/definitions/CapabilityRemote"
},
{
"type":"null"
}
]
},
"local":{
"description":"Whether this capability is enabled for local app URLs or not. Defaults to `true`.",
"default":true,
"type":"boolean"
},
"windows":{
"description":"List of windows that are affected by this capability. Can be a glob pattern.\n\n On multiwebview windows, prefer [`Self::webviews`] for a fine grained access control.\n\n ## Example\n\n `[\"main\"]`",
"type":"array",
"items":{
"type":"string"
}
},
"webviews":{
"description":"List of webviews that are affected by this capability. Can be a glob pattern.\n\n This is only required when using on multiwebview contexts, by default\n all child webviews of a window that matches [`Self::windows`] are linked.\n\n ## Example\n\n `[\"sub-webview-one\", \"sub-webview-two\"]`",
"type":"array",
"items":{
"type":"string"
}
},
"permissions":{
"description":"List of permissions attached to this capability.\n\n Must include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`.\n For commands directly implemented in the application itself only `${permission-name}`\n is required.\n\n ## Example\n\n ```json\n [\n \"core:default\",\n \"shell:allow-open\",\n \"dialog:open\",\n {\n \"identifier\": \"fs:allow-write-text-file\",\n \"allow\": [{ \"path\": \"$HOME/test.txt\" }]\n }\n ```",
"type":"array",
"items":{
"$ref":"#/definitions/PermissionEntry"
},
"uniqueItems":true
},
"platforms":{
"description":"Limit which target platforms this capability applies to.\n\n By default all platforms are targeted.\n\n ## Example\n\n `[\"macOS\",\"windows\"]`",
"type":[
"array",
"null"
],
"items":{
"$ref":"#/definitions/Target"
}
}
},
"definitions":{
"CapabilityRemote":{
"description":"Configuration for remote URLs that are associated with the capability.",
"type":"object",
"required":[
"urls"
],
"properties":{
"urls":{
"description":"Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n ## Examples\n\n - \"https://*.mydomain.dev\": allows subdomains of mydomain.dev\n - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api",
"type":"array",
"items":{
"type":"string"
}
}
}
},
"PermissionEntry":{
"description":"An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`]\n or an object that references a permission and extends its scope.",
"anyOf":[
{
"description":"Reference a permission or permission set by identifier.",
"allOf":[
{
"$ref":"#/definitions/Identifier"
}
]
},
{
"description":"Reference a permission or permission set by identifier and extends its scope.",
"type":"object",
"required":[
"identifier"
],
"properties":{
"identifier":{
"description":"Identifier of the permission or permission set.",
"allOf":[
{
"$ref":"#/definitions/Identifier"
}
]
},
"allow":{
"description":"Data that defines what is allowed by the scope.",
"type":[
"array",
"null"
],
"items":{
"$ref":"#/definitions/Value"
}
},
"deny":{
"description":"Data that defines what is denied by the scope. This should be prioritized by validation logic.",
"type":[
"array",
"null"
],
"items":{
"$ref":"#/definitions/Value"
}
}
}
}
]
},
"Identifier":{
"type":"string"
},
"Value":{
"description":"All supported ACL values.",
"anyOf":[
{
"description":"Represents a null JSON value.",
"type":"null"
},
{
"description":"Represents a [`bool`].",
"type":"boolean"
},
{
"description":"Represents a valid ACL [`Number`].",
"allOf":[
{
"$ref":"#/definitions/Number"
}
]
},
{
"description":"Represents a [`String`].",
"type":"string"
},
{
"description":"Represents a list of other [`Value`]s.",
"type":"array",
"items":{
"$ref":"#/definitions/Value"
}
},
{
"description":"Represents a map of [`String`] keys to [`Value`]s.",
"description":"Descriptions of explicit privileges of commands.\n\n It can enable commands to be accessible in the frontend of the application.\n\n If the scope is defined it can be used to fine grain control the access of individual or multiple commands.",
"type":"object",
"required":[
"identifier"
],
"properties":{
"version":{
"description":"The version of the permission.",
"type":[
"integer",
"null"
],
"format":"uint64",
"minimum":1.0
},
"identifier":{
"description":"A unique identifier for the permission.",
"type":"string"
},
"description":{
"description":"Human-readable description of what the permission does.\n Tauri internal convention is to use <h4> headings in markdown content\n for Tauri documentation generation purposes.",
"type":[
"string",
"null"
]
},
"commands":{
"description":"Allowed or denied commands when using this permission.",
"default":{
"allow":[],
"deny":[]
},
"allOf":[
{
"$ref":"#/definitions/Commands"
}
]
},
"scope":{
"description":"Allowed or denied scoped when using this permission.",
"allOf":[
{
"$ref":"#/definitions/Scopes"
}
]
},
"platforms":{
"description":"Target platforms this permission applies. By default all platforms are affected by this permission.",
"type":[
"array",
"null"
],
"items":{
"$ref":"#/definitions/Target"
}
}
},
"definitions":{
"Commands":{
"description":"Allowed and denied commands inside a permission.\n\n If two commands clash inside of `allow` and `deny`, it should be denied by default.",
"type":"object",
"properties":{
"allow":{
"description":"Allowed command.",
"default":[],
"type":"array",
"items":{
"type":"string"
}
},
"deny":{
"description":"Denied command, which takes priority.",
"default":[],
"type":"array",
"items":{
"type":"string"
}
}
}
},
"Scopes":{
"description":"An argument for fine grained behavior control of Tauri commands.\n\n It can be of any serde serializable type and is used to allow or prevent certain actions inside a Tauri command.\n The configured scope is passed to the command and will be enforced by the command implementation.\n\n ## Example\n\n ```json\n {\n \"allow\": [{ \"path\": \"$HOME/**\" }],\n \"deny\": [{ \"path\": \"$HOME/secret.txt\" }]\n }\n ```",
"type":"object",
"properties":{
"allow":{
"description":"Data that defines what is allowed by the scope.",
"type":[
"array",
"null"
],
"items":{
"$ref":"#/definitions/Value"
}
},
"deny":{
"description":"Data that defines what is denied by the scope. This should be prioritized by validation logic.",
"type":[
"array",
"null"
],
"items":{
"$ref":"#/definitions/Value"
}
}
}
},
"Value":{
"description":"All supported ACL values.",
"anyOf":[
{
"description":"Represents a null JSON value.",
"type":"null"
},
{
"description":"Represents a [`bool`].",
"type":"boolean"
},
{
"description":"Represents a valid ACL [`Number`].",
"allOf":[
{
"$ref":"#/definitions/Number"
}
]
},
{
"description":"Represents a [`String`].",
"type":"string"
},
{
"description":"Represents a list of other [`Value`]s.",
"type":"array",
"items":{
"$ref":"#/definitions/Value"
}
},
{
"description":"Represents a map of [`String`] keys to [`Value`]s.",
"description":"An argument for fine grained behavior control of Tauri commands.\n\n It can be of any serde serializable type and is used to allow or prevent certain actions inside a Tauri command.\n The configured scope is passed to the command and will be enforced by the command implementation.\n\n ## Example\n\n ```json\n {\n \"allow\": [{ \"path\": \"$HOME/**\" }],\n \"deny\": [{ \"path\": \"$HOME/secret.txt\" }]\n }\n ```",
"type":"object",
"properties":{
"allow":{
"description":"Data that defines what is allowed by the scope.",
"type":[
"array",
"null"
],
"items":{
"$ref":"#/definitions/Value"
}
},
"deny":{
"description":"Data that defines what is denied by the scope. This should be prioritized by validation logic.",
"type":[
"array",
"null"
],
"items":{
"$ref":"#/definitions/Value"
}
}
},
"definitions":{
"Value":{
"description":"All supported ACL values.",
"anyOf":[
{
"description":"Represents a null JSON value.",
"type":"null"
},
{
"description":"Represents a [`bool`].",
"type":"boolean"
},
{
"description":"Represents a valid ACL [`Number`].",
"allOf":[
{
"$ref":"#/definitions/Number"
}
]
},
{
"description":"Represents a [`String`].",
"type":"string"
},
{
"description":"Represents a list of other [`Value`]s.",
"type":"array",
"items":{
"$ref":"#/definitions/Value"
}
},
{
"description":"Represents a map of [`String`] keys to [`Value`]s.",
- [`69dcfdfe0`](https://www.github.com/tauri-apps/tauri/commit/69dcfdfe0f3b0570fcf5997267a7200087d5341b) ([#10267](https://www.github.com/tauri-apps/tauri/pull/10267) by [@lucasfernog](https://www.github.com/tauri-apps/tauri/../../lucasfernog)) Fix build script rerun-if-changed instruction if Info.plist do not exist next to tauri.conf.json.
### Dependencies
- Upgraded to `tauri-codegen@2.0.0-beta.19`
- Upgraded to `tauri-utils@2.0.0-beta.19`
## \[2.0.0-beta.18]
### Enhancements
- [`35110dba2`](https://www.github.com/tauri-apps/tauri/commit/35110dba21d7db0f155c45da58b41c9ca4d5853c) ([#10106](https://www.github.com/tauri-apps/tauri/pull/10106)) Fix delete app data button gone on higher scaling (>= 1.5)
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.18`
- Upgraded to `tauri-codegen@2.0.0-beta.18`
- [`f955f7b49`](https://www.github.com/tauri-apps/tauri/commit/f955f7b4903bcea376c0a8b430736f66c8cebf56) ([#9929](https://www.github.com/tauri-apps/tauri/pull/9929)) Switch from `dirs_next` to `dirs` as `dirs_next` is now unmaintained while `dirs` is
## \[2.0.0-beta.17]
### Enhancements
- [`adac2185a`](https://www.github.com/tauri-apps/tauri/commit/adac2185a3e2e65a89a3c392363c50ddde4acff2)([#9898](https://www.github.com/tauri-apps/tauri/pull/9898)) Check for Android version code before building the package in release mode.
### Bug Fixes
- [`19b696b61`](https://www.github.com/tauri-apps/tauri/commit/19b696b61c95ced0f07dd7471565ad329a0badcf)([#9710](https://www.github.com/tauri-apps/tauri/pull/9710)) Avoid copying resources if the target path is the same as source.
### What's Changed
- [`9ac930380`](https://www.github.com/tauri-apps/tauri/commit/9ac930380a5df3fe700e68e75df8684d261ca292)([#9850](https://www.github.com/tauri-apps/tauri/pull/9850)) Emit `cargo:rustc-check-cfg` instruction so Cargo validates custom cfg attributes on Rust 1.80 (or nightly-2024-05-05).
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.17`
- Upgraded to `tauri-codegen@2.0.0-beta.17`
### Breaking Changes
- [`1df5cdeb0`](https://www.github.com/tauri-apps/tauri/commit/1df5cdeb06f5464e0eec4055e21b7b7bc8739eed)([#9858](https://www.github.com/tauri-apps/tauri/pull/9858)) Use `tauri.conf.json > identifier` to set the `PackageName` in Android and `BundleId` in iOS.
- [`aaecb6a72`](https://www.github.com/tauri-apps/tauri/commit/aaecb6a72e5d1462967cc910c2628999997742d0)([#9890](https://www.github.com/tauri-apps/tauri/pull/9890)) Renamed `dev` function to `is_dev`
## \[2.0.0-beta.16]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.16`
- Upgraded to `tauri-codegen@2.0.0-beta.16`
## \[2.0.0-beta.15]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.15`
- Upgraded to `tauri-codegen@2.0.0-beta.15`
## \[2.0.0-beta.14]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.14`
- Upgraded to `tauri-codegen@2.0.0-beta.14`
## \[2.0.0-beta.13]
### Bug Fixes
- [`88c0ad9cf`](https://www.github.com/tauri-apps/tauri/commit/88c0ad9cf5d2f9ed65285540c26b54fb18b10137)([#9471](https://www.github.com/tauri-apps/tauri/pull/9471)) Fix tauri always rebuilding even if source code didn't change.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.13`
- Upgraded to `tauri-codegen@2.0.0-beta.13`
## \[2.0.0-beta.12]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.12`
- Upgraded to `tauri-codegen@2.0.0-beta.12`
## \[2.0.0-beta.11]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.11`
- Upgraded to `tauri-codegen@2.0.0-beta.11`
## \[2.0.0-beta.10]
### New Features
- [`e227fe02f`](https://www.github.com/tauri-apps/tauri/commit/e227fe02f986e145c0731a64693e1c830a9eb5b0)([#9156](https://www.github.com/tauri-apps/tauri/pull/9156)) Allow plugins to define (at compile time) JavaScript that are initialized when `withGlobalTauri` is true.
### Enhancements
- [`7213b9e47`](https://www.github.com/tauri-apps/tauri/commit/7213b9e47242bef814aa7257e0bf84631bf5fe7e)([#9124](https://www.github.com/tauri-apps/tauri/pull/9124)) Fallback to an empty permission set if the plugin did not define its `default` permissions.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.10`
- Upgraded to `tauri-codegen@2.0.0-beta.10`
## \[2.0.0-beta.9]
### Dependencies
- Upgraded to `tauri-codegen@2.0.0-beta.9`
- Upgraded to `tauri-utils@2.0.0-beta.9`
## \[2.0.0-beta.8]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.8`
- Upgraded to `tauri-codegen@2.0.0-beta.8`
## \[2.0.0-beta.7]
### Bug Fixes
- [`bb23511ea`](https://www.github.com/tauri-apps/tauri/commit/bb23511ea80bcaffbdebf057301e463fff268c90)([#9079](https://www.github.com/tauri-apps/tauri/pull/9079)) Fixed generation of capability schema for permissions field which previously disallowed mixed (strings and objects) permission definition.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.7`
- Upgraded to `tauri-codegen@2.0.0-beta.7`
## \[2.0.0-beta.6]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.6`
- Upgraded to `tauri-codegen@2.0.0-beta.6`
### Breaking Changes
- [`3657ad82`](https://www.github.com/tauri-apps/tauri/commit/3657ad82f88ce528551d032d521c52eed3f396b4)([#9008](https://www.github.com/tauri-apps/tauri/pull/9008)) Allow defining permissions for the application commands via `tauri_build::Attributes::app_manifest`.
## \[2.0.0-beta.5]
### Breaking Changes
- [`b9e6a018`](https://www.github.com/tauri-apps/tauri/commit/b9e6a01879d9233040f3d3fab11c59e70563da7e)([#8937](https://www.github.com/tauri-apps/tauri/pull/8937)) The `custom-protocol` Cargo feature is no longer required on your application and is now ignored. To check if running on production, use `#[cfg(not(dev))]` instead of `#[cfg(feature = "custom-protocol")]`.
- [`b9e6a018`](https://www.github.com/tauri-apps/tauri/commit/b9e6a01879d9233040f3d3fab11c59e70563da7e)([#8937](https://www.github.com/tauri-apps/tauri/pull/8937)) Removed `tauri_build::CodegenContext::dev()` and added `tauri_build::dev()`.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.5`
- Upgraded to `tauri-codegen@2.0.0-beta.5`
## \[2.0.0-beta.4]
### Enhancements
- [`b5eb6472`](https://www.github.com/tauri-apps/tauri/commit/b5eb64728aeb410d3f3068608a94762655c4690f)([#8940](https://www.github.com/tauri-apps/tauri/pull/8940)) Enable Hight DPI awareness for NSIS installer so it is not blurry on some systems.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.4`
- Upgraded to `tauri-codegen@2.0.0-beta.4`
## \[2.0.0-beta.3]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.3`
- Upgraded to `tauri-codegen@2.0.0-beta.3`
## \[2.0.0-beta.2]
### Enhancements
- [`83a68deb`](https://www.github.com/tauri-apps/tauri/commit/83a68deb5676d39cd4728d2e140f6b46d5f787ed)([#8797](https://www.github.com/tauri-apps/tauri/pull/8797)) Added a new configuration option `tauri.conf.json > app > security > capabilities` to reference existing capabilities and inline new ones. If it is empty, all capabilities are still included preserving the current behavior.
- [`edb11c13`](https://www.github.com/tauri-apps/tauri/commit/edb11c138def2e317099db432479e3ca5dbf803f)([#8781](https://www.github.com/tauri-apps/tauri/pull/8781)) Added `Attributes::plugin()` to register a plugin that is inlined in the application crate.
- [`8d16a80d`](https://www.github.com/tauri-apps/tauri/commit/8d16a80d2fb2468667e7987d0cc99dbc7e3b9d0a)([#8802](https://www.github.com/tauri-apps/tauri/pull/8802)) Added `CodegenContext::capability` to include a capability file dynamically.
### Bug Fixes
- [`0e8e9cd0`](https://www.github.com/tauri-apps/tauri/commit/0e8e9cd064627e734adf8f62e571dc5f4e8f4d9f)([#8906](https://www.github.com/tauri-apps/tauri/pull/8906)) Fixes the capability schema not resolving inner definitions.
- [`4e101f80`](https://www.github.com/tauri-apps/tauri/commit/4e101f801657e7d01ce8c22f9c6468067d0caab2)([#8756](https://www.github.com/tauri-apps/tauri/pull/8756)) Moved the capability JSON schema to the `src-tauri/gen` folder so it's easier to track changes on the `capabilities` folder.
### Bug Fixes
- [`4e101f80`](https://www.github.com/tauri-apps/tauri/commit/4e101f801657e7d01ce8c22f9c6468067d0caab2)([#8756](https://www.github.com/tauri-apps/tauri/pull/8756)) Do not trigger build script to rerun if the frontendDist directory does not exist.
- [`0f2789cd`](https://www.github.com/tauri-apps/tauri/commit/0f2789cd6767e2eadbc4f7dfe32e2173e972b9a0)([#8757](https://www.github.com/tauri-apps/tauri/pull/8757)) Do not rewrite capability JSON schema if it did not change.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.1`
- Upgraded to `tauri-codegen@2.0.0-beta.1`
## \[2.0.0-beta.0]
### New Features
- [`74a2a603`](https://www.github.com/tauri-apps/tauri/commit/74a2a6036a5e57462f161d728cbd8a6f121028ca)([#8661](https://www.github.com/tauri-apps/tauri/pull/8661)) Implement access control list for IPC usage.
### Enhancements
- [`e8d3793c`](https://www.github.com/tauri-apps/tauri/commit/e8d3793c3c34715569312a91633fde4d58d7621c)([#8732](https://www.github.com/tauri-apps/tauri/pull/8732)) Add `config-json` cargo feature flag (enabled by default) to. Disabling this feature flag will stop cargo from rebuilding when `tauri.conf.json` changes, see [#8721](https://github.com/tauri-apps/tauri/issues/8721) for more info.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.0`
- Upgraded to `tauri-codegen@2.0.0-beta.0`
### Breaking Changes
- [`8de308d1`](https://www.github.com/tauri-apps/tauri/commit/8de308d1bf6a855d7a26af58bd0e744938ba47d8)([#8723](https://www.github.com/tauri-apps/tauri/pull/8723)) Restructured Tauri config per [RFC#5](https://github.com/tauri-apps/rfcs/blob/f3e82a6b0c5390401e855850d47dc7b7d9afd684/texts/0005-tauri-config-restructure.md):
- Moved `package.productName`, `package.version` and `tauri.bundle.identifier` fields to the top-level.
- Removed `package` object.
- Renamed `tauri` object to `app`.
- Moved `tauri.bundle` object to the top-level.
- Renamed `build.distDir` field to `frontendDist`.
- Renamed `build.devPath` field to `devUrl` and will no longer accepts paths, it will only accept URLs.
- Moved `tauri.pattern` to `app.security.pattern`.
- Removed `tauri.bundle.updater` object, and its fields have been moved to the updater plugin under `plugins.updater` object.
- Moved `build.withGlobalTauri` to `app.withGlobalTauri`.
- Moved `tauri.bundle.dmg` object to `bundle.macOS.dmg`.
- Moved `tauri.bundle.deb` object to `bundle.linux.deb`.
- Moved `tauri.bundle.appimage` object to `bundle.linux.appimage`.
- Removed all license fields from each bundle configuration object and instead added `bundle.license` and `bundle.licenseFile`.
- Renamed `AppUrl` to `FrontendDist` and refactored its variants to be more explicit.
- [`0cdfda28`](https://www.github.com/tauri-apps/tauri/commit/0cdfda28767701369cd774e2b20d943c6ddc9f05)([#8737](https://www.github.com/tauri-apps/tauri/pull/8737)) Moved `mobile::PluginBuilder`, `mobile::update_entitlements`, `config::plugin_config` and `mobile::update_android_manifest` to the new `tauri-plugin` crate.
- [`74a2a603`](https://www.github.com/tauri-apps/tauri/commit/74a2a6036a5e57462f161d728cbd8a6f121028ca)([#8661](https://www.github.com/tauri-apps/tauri/pull/8661)) `CodegenContext::build` and `CodegenContext::try_build` have been removed, use `tauri_build::try_build(tauri_build::Attributes::new().codegen(codegen))` instead.
## \[2.0.0-alpha.14]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-alpha.13`
- Upgraded to `tauri-codegen@2.0.0-alpha.13`
## \[2.0.0-alpha.13]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-alpha.12`
- Upgraded to `tauri-codegen@2.0.0-alpha.12`
## \[2.0.0-alpha.12]
### Bug Fixes
- [`a5479712`](https://www.github.com/tauri-apps/tauri/commit/a5479712095c224e2cb147d5c271acbc2fc97e79)([#8168](https://www.github.com/tauri-apps/tauri/pull/8168)) Fixed an issue that caused the resource compiler to not run on Windows when `package.version` was not set in `tauri.conf.json` preventing the app from starting.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-alpha.11`
- Upgraded to `tauri-codegen@2.0.0-alpha.11`
## \[2.0.0-alpha.11]
### Enhancements
- [`c6c59cf2`](https://www.github.com/tauri-apps/tauri/commit/c6c59cf2373258b626b00a26f4de4331765dd487) Pull changes from Tauri 1.5 release.
### Dependencies
- Upgraded to `tauri-codegen@2.0.0-alpha.10`
- Upgraded to `tauri-utils@2.0.0-alpha.10`
## \[2.0.0-alpha.10]
### New Features
- [`880266a7`](https://www.github.com/tauri-apps/tauri/commit/880266a7f697e1fe58d685de3bb6836ce5251e92)([#8031](https://www.github.com/tauri-apps/tauri/pull/8031)) Bump the MSRV to 1.70.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-alpha.9`
- Upgraded to `tauri-codegen@2.0.0-alpha.9`
### Breaking Changes
- [`ebcc21e4`](https://www.github.com/tauri-apps/tauri/commit/ebcc21e4b95f4e8c27639fb1bca545b432f52d5e)([#8057](https://www.github.com/tauri-apps/tauri/pull/8057)) Renamed the beforeDevCommand, beforeBuildCommand and beforeBundleCommand hooks environment variables from `TAURI_PLATFORM, TAURI_ARCH, TAURI_FAMILY, TAURI_PLATFORM_VERSION, TAURI_PLATFORM_TYPE and TAURI_DEBUG` to `TAURI_ENV_PLATFORM, TAURI_ENV_ARCH, TAURI_ENV_FAMILY, TAURI_ENV_PLATFORM_VERSION, TAURI_ENV_PLATFORM_TYPE and TAURI_ENV_DEBUG` to differentiate the prefix with other CLI environment variables.
## \[2.0.0-alpha.9]
### Dependencies
- Upgraded to `tauri-codegen@2.0.0-alpha.8`
- Upgraded to `tauri-utils@2.0.0-alpha.8`
## \[2.0.0-alpha.8]
### Bug Fixes
- [`560b34dd`](https://www.github.com/tauri-apps/tauri/commit/560b34dd2a194ad62db09b3e9e41a2cfff4e5710)([#7610](https://www.github.com/tauri-apps/tauri/pull/7610)) Skip validation of the `tray-icon` feature flag.
## \[2.0.0-alpha.7]
### New Features
- [`522de0e7`](https://www.github.com/tauri-apps/tauri/commit/522de0e78891d0bdf6387a5118985fc41a11baeb)([#7447](https://www.github.com/tauri-apps/tauri/pull/7447)) Added the `config::plugin_config` function to read the plugin configuration set from the CLI.
- [`1e1d839e`](https://www.github.com/tauri-apps/tauri/commit/1e1d839e7e3d9496f71b6bc1336ced01f2965541)([#7450](https://www.github.com/tauri-apps/tauri/pull/7450)) Added the `mobile::update_android_manifest` function.
- [`aba04fa8`](https://www.github.com/tauri-apps/tauri/commit/aba04fa823d70ff8df9bd22f8e6a25184689c3cb)([#7448](https://www.github.com/tauri-apps/tauri/pull/7448)) Added the `mobile::update_entitlements` function for iOS.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-alpha.7`
- Upgraded to `tauri-codegen@2.0.0-alpha.7`
## \[2.0.0-alpha.6]
### Bug Fixes
- [`3256a372`](https://www.github.com/tauri-apps/tauri/commit/3256a37263f60eafdf5a8321458b868bff26c1b8)([#7016](https://www.github.com/tauri-apps/tauri/pull/7016)) Fixes injection of the proguard rules on the Android project.
## \[2.0.0-alpha.5]
- [`3188f376`](https://www.github.com/tauri-apps/tauri/commit/3188f3764978c6d1452ee31d5a91469691e95094)([#6883](https://www.github.com/tauri-apps/tauri/pull/6883)) Bump the MSRV to 1.65.
- [`2969d1cb`](https://www.github.com/tauri-apps/tauri/commit/2969d1cbba39301f9cc611d9f7d7051d80eef846)([#6773](https://www.github.com/tauri-apps/tauri/pull/6773)) Use absolute path to each Android plugin project instead of copying the files to enhance developer experience.
- [`cdad6e08`](https://www.github.com/tauri-apps/tauri/commit/cdad6e083728ea61bd6fc734ef93f6306056ea2e)([#6774](https://www.github.com/tauri-apps/tauri/pull/6774)) Changed how the `tauri-android` dependency is injected. This requires the `gen/android` project to be recreated.
- Added `android` configuration object under `tauri > bundle`.
- Bumped due to a bump in tauri-utils.
- [db4c9dc6](https://www.github.com/tauri-apps/tauri/commit/db4c9dc655e07ee2184fe04571f500f7910890cd) feat(core): add option to configure Android's minimum SDK version ([#6651](https://www.github.com/tauri-apps/tauri/pull/6651)) on 2023-04-07
## \[2.0.0-alpha.3]
- Read the `IPHONEOS_DEPLOYMENT_TARGET` environment variable to set the Swift iOS target version, defaults to 13.
- [4c3b9ecf](https://www.github.com/tauri-apps/tauri/commit/4c3b9ecfdcd1a4489b1e466727f11045ef34d67a) fix(build): iOS deployment target env var is IPHONEOS_DEPLOYMENT_TARGET ([#6602](https://www.github.com/tauri-apps/tauri/pull/6602)) on 2023-03-31
## \[2.0.0-alpha.2]
- Add `mobile::PluginBuilder` for running build tasks related to Tauri plugins.
- [05dad087](https://www.github.com/tauri-apps/tauri/commit/05dad0876842e2a7334431247d49365cee835d3e) feat: initial work for iOS plugins ([#6205](https://www.github.com/tauri-apps/tauri/pull/6205)) on 2023-02-11
## \[2.0.0-alpha.1]
- Refactor mobile environment variables.
- [dee9460f](https://www.github.com/tauri-apps/tauri/commit/dee9460f9c9bc92e9c638e7691e616849ac2085b) feat: keep CLI alive when iOS app exits, show logs, closes [#5855](https://www.github.com/tauri-apps/tauri/pull/5855) ([#5902](https://www.github.com/tauri-apps/tauri/pull/5902)) on 2022-12-27
- Bump the MSRV to 1.64.
- [7eb9aa75](https://www.github.com/tauri-apps/tauri/commit/7eb9aa75cfd6a3176d3f566fdda02d88aa529b0f) Update gtk to 0.16 ([#6155](https://www.github.com/tauri-apps/tauri/pull/6155)) on 2023-01-30
- Removed mobile logging initialization, which will be handled by `tauri-plugin-log`.
- [](https://www.github.com/tauri-apps/tauri/commit/undefined) on undefined
## \[2.0.0-alpha.0]
- Set environment variables used by `tauri::mobile_entry_point`.
- [98904863](https://www.github.com/tauri-apps/tauri/commit/9890486321c9c79ccfb7c547fafee85b5c3ffa71) feat(core): add `mobile_entry_point` macro ([#4983](https://www.github.com/tauri-apps/tauri/pull/4983)) on 2022-08-21
- First mobile alpha release!
- [fa3a1098](https://www.github.com/tauri-apps/tauri/commit/fa3a10988a03aed1b66fb17d893b1a9adb90f7cd) feat(ci): prepare 2.0.0-alpha.0 ([#5786](https://www.github.com/tauri-apps/tauri/pull/5786)) on 2022-12-08
## \[1.5.1]
### Dependencies
- Upgraded to `tauri-utils@1.5.2`
- Upgraded to `tauri-codegen@1.4.2`
## \[1.5.0]
### What's Changed
- [`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.
// Copyright 2019-2021 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
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.