Commit Graph
1330 Commits
Author SHA1 Message Date
Lucas Nogueira 8181dd1f30 chore: release 2026-09-30 09:05:03 -03:00
Mayo TakanashiandFabian-Lars 0163bbaca5 fix(updater): import Manager on macOS (fix #3652) (#3653)
Co-authored-by: Fabian-Lars <30730186+FabianLars@users.noreply.github.com>
2026-09-29 17:06:09 +02:00
github-actions[bot] 44a2b9a4b1 publish new versions (#3616)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-09-26 22:24:59 -03:00
Lucas Nogueira 9a06773d5a Merge remote-tracking branch 'origin/v2' into v3 2026-09-26 18:40:51 -03:00
Lucas Nogueira a2364a5f21 fix: integration test 2026-09-26 18:40:24 -03:00
Lucas Nogueira 8caf15bc38 Merge remote-tracking branch 'origin/v2' into v3 2026-09-26 18:40:12 -03:00
github-actions[bot]andLucas Nogueira cbfd428bcc Publish New Versions (v2) (#3618)
* publish new versions

* clippy

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2026-09-26 17:21:49 -03:00
Lucas Nogueira f460570b44 chore: fmt 2026-09-26 15:57:33 -03:00
Lucas Nogueira a433ec09d1 fix: mobile clippy warnings 2026-09-26 15:57:33 -03:00
Lucas Nogueira 3d8a3c877b chore: edition 2024 2026-09-26 15:36:22 -03:00
Lucas Nogueira 9b29b601f3 feat: update to tauri 2.12
- (MSRV bump
- Android compiler options update
- notification plugin windows7 feature deprecation
2026-09-26 14:46:48 -03:00
Lucas Fernandes Nogueira 1cae06a55b fix(fs): report read errors of readTextFileLines (#3625)
* fix(fs): report read errors of readTextFileLines

In plugins/fs/src/commands.rs read_text_file_lines_next, a read error was
mapped to "not done, empty line", so a persistent error such as EISDIR
(File::open of a directory succeeds on Unix) made the iterator yield ""
forever and the error was swallowed.

The command now closes the resource and returns the error; the JS iterator
resets its rid so a new iteration starts over. api-iife.js regenerated. E2E
spec iterates a directory and expects a rejection.

* fix(fs): close the file when a readTextFileLines loop exits early

In plugins/fs/guest-js/index.ts readTextFileLines, the async iterator did
not implement return(), so breaking out of a for await loop left the
StdLinesResource (an open file) in the webview resource table.

return() now closes the resource and resets the iterator. api-iife.js
regenerated. E2E spec breaks out of a loop, checks the resource id is no
longer valid and that iterating again starts over.
2026-09-23 13:05:04 -03:00
Lucas Fernandes Nogueira 9106093f77 fix(fs): map open options to valid Android modes (#3624)
In plugins/fs/src/lib.rs OpenOptions::android_mode, the mode was built by
concatenating r/w/t/a, so open(url, {append: true}) (read defaults to
true) produced "ra" and write+truncate+append "wta", which
ParcelFileDescriptor.parseMode / ContentResolver reject.

The options now map to r, w, wt, wa, rw or rwt. append wins over the
default read (no read+append mode exists). create/createNew still have no
Android equivalent (documented on the function). Unit tests for the
mapping, compiled on the host with cfg(test).
2026-09-23 12:58:28 -03:00
Lucas Fernandes Nogueira 97e865bc13 feat(fs): accept baseDir in size (#3623)
In plugins/fs/guest-js/index.ts, the size function only sent `path`
although the Rust command accepts `options.baseDir` and the JSDoc example
passed `{ baseDir: BaseDirectory.AppData }` (a TS error, silently dropped
at runtime, so the relative path was rejected).

Adds an optional `options?: SizeOptions` parameter (new exported type).
api-iife.js regenerated. The e2e spec now measures a file and a directory
relative to AppData instead of working around the missing option.
2026-09-23 12:58:03 -03:00
Lucas Fernandes Nogueira b46a88ff55 fix(fs): reject malformed write_file options instead of ignoring them (#3622)
In plugins/fs/src/commands.rs write_file_inner, a malformed or non-ASCII
`options` header was dropped with .ok(), so baseDir/append/createNew were
silently ignored and the call became a truncating write to the raw path;
the JSON array body fallback truncated values above 255 and dropped
non-numbers.

The header is parsed with parse_write_file_options: empty, `undefined`
(what fetch sends for JSON.stringify(undefined)) and `null` mean no
options, anything else must parse. Array bodies must only contain bytes.
Unit test for the header parser; e2e spec for writes without options,
which is the case the `undefined` handling keeps working.
2026-09-23 12:57:49 -03:00
Lucas Fernandes Nogueira 0c84c917e3 fix(fs): log file watcher errors (#3621)
In plugins/fs/src/watcher.rs, notify errors were discarded (TODO), so a
watch that died left no trace. They are now logged with log::error!.
Reporting them to the JS callback would change the event payload and is
deferred to v3.
2026-09-23 12:57:33 -03:00
Lucas Fernandes NogueiraandTony f2c77194d6 refactor(opener)!: rename reveal_item_in_dir command to reveal_items_in_dir (#3608)
* refactor(opener)!: rename reveal_item_in_dir command to reveal_items_in_dir

The `allow-reveal-item-in-dir` and `deny-reveal-item-in-dir` permissions
are now `allow-reveal-items-in-dir` and `deny-reveal-items-in-dir`. The
`revealItemInDir` JavaScript function and the Rust `Opener` methods are
unchanged.

* cr

* retain rust api

* fix build

* update docs, rename ts api

* cr

* Apply suggestion from @Legend-Master

---------

Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com>
2026-09-23 09:56:02 -03:00
Timofey Maykov 101e1b068a fix(updater): stop overriding SSL_CERT_FILE and SSL_CERT_DIR on Linux (#3615)
check() set both variables to Debian paths when they were unset. On distros
with a different layout, such as ALT Linux, the paths do not exist, and
rustls-native-certs then loads roots only from them, so every TLS client
created afterwards in the app got an empty root store.

reqwest with rustls already finds the system store through
rustls-platform-verifier and openssl-probe, so the override is not needed.

Closes #3598
2026-09-23 09:29:37 -03:00
Lucas Nogueira 4a94356386 fix(deep-link): unregister must refresh the database 2026-09-22 22:03:02 -03:00
Lucas Nogueira 710d097b6b chore: fmt 2026-09-22 21:56:25 -03:00
Lucas Nogueira 5c78814220 fix(autostart): handle disabling when the autostart is already disabled 2026-09-22 21:56:01 -03:00
Lucas Nogueira c8c373b48b tests(e2e): improve coverage 2026-09-22 21:54:21 -03:00
Lucas Fernandes Nogueira 684feb2510 feat(tests): add api e2e tests (#3617)
* feat(tests): add api e2e tests

* lockfile

* mobile

* try linux fix [skip ci]

* ios fix

* fix test on windows

* improve cache

* fix pnpm audit [skip ci]
2026-09-22 18:58:14 -03:00
Lucas Nogueira 7f87091288 test(updater): fix e2e tests on Windows (missing bundle_type patch) 2026-09-22 18:52:27 -03:00
Lucas Fernandes Nogueira 06485c5884 test(updater): also check .deb and .rpm on e2e test (#3619)
* test(updater): also check .deb and .rpm on e2e test

* fix test on mac

* install rpm on ci

* improve update server, fix rpm crash
2026-09-22 18:51:05 -03:00
Lucas Fernandes Nogueira 28d644572c test(docs): run doctest on CI, make sure doctests pass (#3620)
* test(docs): run doctest on CI, make sure doctests pass

* no_run on dialog doctests [skip ci]
2026-09-22 13:18:21 -03:00
Lucas Nogueira a87a3c7d44 chore: update documentation 2026-09-22 11:30:47 -03:00
Lucas Nogueira 4e0d6706f7 Merge branch 'v2' into v3 2026-09-22 06:42:29 -03:00
Lucas Nogueira d869c162a7 fix: geolocation and haptics plugin build fails with specta feature on 2026-09-22 06:40:58 -03:00
Lucas Fernandes NogueiraandLucas Nogueira 152ff5bb6d refactor(shell)!: remove deprecated open API (#3604)
* refactor(shell)!: remove deprecated open API

`open` has been deprecated since 2.1.0 in favor of tauri-plugin-opener.
This removes:

- the `open` command and its `allow-open`/`deny-open` permissions
  (`shell:default` now grants nothing)
- the `plugins > shell > open` configuration; `init()` returns
  `TauriPlugin<R>` again
- `Shell::open`, the `tauri_plugin_shell::open` module and
  `Error::UnknownProgramName`
- the `open` JavaScript function
- the Android and iOS plugins, since `open` was their only command

* chore(examples): drop the now empty shell:default permission set

---------

Co-authored-by: Lucas Nogueira <lucas@crabnebula.dev>
2026-09-22 06:14:49 -03:00
Lucas Fernandes NogueiraandAmr Bashir 6a12f7c80a refactor(updater)!: remove deprecated Update.available field (#3607)
* refactor(updater)!: remove deprecated Update.available field

It was always `true`; check whether `check()` returned `null` instead.

* fix(examples): remove usage of the dropped Update.available field

* Update .changes/updater-remove-available.md

---------

Co-authored-by: Amr Bashir <github@amrbashir.me>
2026-09-22 06:13:04 -03:00
Lucas Fernandes NogueiraandAmr Bashir 73ec7ed401 refactor(autostart)!: rename ManagerExt::autolaunch to autostart (#3614)
* refactor(autostart)!: rename ManagerExt::autolaunch to autostart

* Apply suggestion from @amrbashir

---------

Co-authored-by: Amr Bashir <github@amrbashir.me>
2026-09-22 06:07:55 -03:00
Lucas Fernandes Nogueira 0ecb30e3cb refactor(upload)!: take headers, method and body via an options object (#3613)
`upload(url, path, onProgress, { headers, method })` and
`download(url, path, onProgress, { headers, body })` replace the
positional optional arguments.

`headers` accepts both a `Map` and a plain object; previously a `Map`
was silently serialized as an empty object.
2026-09-22 06:07:43 -03:00
Lucas Fernandes NogueiraandAmr Bashir b2d7c387ef refactor(dialog)!: remove deprecated MessageDialogOptions.okLabel (#3612)
* refactor(dialog)!: remove deprecated MessageDialogOptions.okLabel

Use `buttons: { ok: 'label' }` instead. `ConfirmDialogOptions` (used by
`ask` and `confirm`) still accepts `okLabel` and `cancelLabel`.

* Apply suggestion from @amrbashir

---------

Co-authored-by: Amr Bashir <github@amrbashir.me>
2026-09-22 06:07:16 -03:00
Lucas Fernandes NogueiraandAmr Bashir 1a43e4701d refactor(log)!: take u64 in Builder::max_file_size (#3611)
* refactor(log)!: take u64 in Builder::max_file_size

* Apply suggestion from @amrbashir

---------

Co-authored-by: Amr Bashir <github@amrbashir.me>
2026-09-22 06:07:06 -03:00
Lucas Fernandes Nogueira fdfb35e531 refactor(fs)!: return Watcher from watch and watchImmediate (#3610)
* refactor(fs)!: return Watcher from watch and watchImmediate

Both resolve to a `Watcher` resource instead of an `UnwatchFn` callback;
call `await watcher.close()` to stop watching. `UnwatchFn` is removed and
`Watcher` is now exported.

* fix change file

* fmt
2026-09-22 06:06:50 -03:00
Lucas Fernandes Nogueira 8083107a0a refactor(fs)!: drop notify's serialization-compat-6, flatten WatchEvent (#3609)
`WatchEvent` now follows notify v8's format: the event kind is flattened
into the event, with `type` holding the top-level kind and `kind`/`mode`
refining it, e.g. `{ type: 'modify', kind: 'data', mode: 'content' }`
instead of `{ type: { modify: { kind: 'data', mode: 'content' } } }`.
`attrs` is now typed as `WatchEventAttributes` and its `flag` is
`rescan` instead of `Rescan`.
2026-09-22 06:05:51 -03:00
Lucas Fernandes Nogueira a315a07f36 refactor(fs)!: remove the unwatch permission (#3606)
There has been no `unwatch` command since v2.0 (`Watcher.close()` releases
the resource), so `allow-unwatch` and `deny-unwatch` never granted anything.
2026-09-22 06:05:04 -03:00
Lucas Fernandes Nogueira 5c077a3812 refactor(fs)!: remove read_text_file and write_text_file commands (#3605)
`readTextFile` and `writeTextFile` now go through `read_file` and
`write_file`, so the `allow-read-text-file`, `deny-read-text-file`,
`allow-write-text-file` and `deny-write-text-file` permissions are gone;
grant `fs:allow-read-file` and `fs:allow-write-file` instead.
2026-09-22 06:04:53 -03:00
Lucas Fernandes Nogueira ae3c808eb6 fix: global API script should reuse window.__TAURI__ types (#3602)
currently each script inlines what it needs from @tauri-apps/api, so type checks like `image instanceof Image` all fail
2026-09-22 06:04:28 -03:00
Lucas Fernandes Nogueira 120d00558e refactor(deep-link)!: return Error::Execute when an OS command fails to run (#3603)
* refactor(deep-link)!: return Error::Execute when an OS command fails to run

On Linux, `register`, `unregister` and `is_registered` now fail with the
new `Error::Execute(command, io_error)` variant when `xdg-mime` or
`update-desktop-database` cannot be spawned, instead of logging and
returning the raw `Error::Io`. This is the change deferred to v3 in #2970.

* docs(deep-link): unregister does not run OS commands
2026-09-22 06:04:13 -03:00
Lucas Fernandes NogueiraandLucas Nogueira c7416a1a2c refactor(http)!: remove deprecated macos-system-configuration feature (#3601)
* refactor(http)!: remove deprecated macos-system-configuration feature

Use `system-proxy` (enabled by default) instead.

* chore(upload): enable reqwest's system-proxy feature instead of the deprecated alias

---------

Co-authored-by: Lucas Nogueira <lucas@crabnebula.dev>
2026-09-22 06:03:58 -03:00
Lucas Fernandes Nogueira 34a06e7f60 refactor(http)!: always enforce the scope on redirects (#3600)
* refactor(http)!: always enforce the scope on redirects

Removes the `scopeRedirects` option (and the `Config` struct with it) that
was added as an opt-in in 2.7.0. Every hop of a redirect chain is now
checked against the URL scope, so a server on an allowed origin can no
longer redirect the request to a URL the scope denies.

`tauri_plugin_http::init()` returns `TauriPlugin<R>` again.

* chore(http): compile without warnings when the cookies feature is disabled
2026-09-22 06:03:27 -03:00
Lucas Fernandes NogueiraandLucas Nogueira b566f09124 refactor(store)!: reset to defaults before merging the on-disk state in reload (#3599)
* refactor(store)!: reset to defaults before merging the on-disk state in reload

`Store::reload` / `reload()` previously merged the on-disk state into the
current in-memory store. It now resets the store to its defaults first,
so in-memory keys that are neither in the defaults nor on disk are
dropped. `reload_ignore_defaults` / `reload({ ignoreDefaults: true })`
is unchanged.

* test(store): cover reload resetting to the defaults before merging the on-disk state

---------

Co-authored-by: Lucas Nogueira <lucas@crabnebula.dev>
2026-09-22 06:03:10 -03:00
Lucas Nogueira b7897cab5d chore: run taplo fmt 2026-09-21 21:56:40 -03:00
Lucas Nogueira 2fd27c2d43 chore: set MSRV to 1.95 2026-09-21 18:48:38 -03:00
Lucas Nogueira d0cfa15b71 chore: release 3.0.0-alpha.1 2026-09-21 13:53:23 -03:00
Lucas Nogueira ce7fcb3263 Merge branch 'v2' into v3 2026-09-21 13:45:38 -03:00
Lucas Nogueira 15bf611d68 chore(deps): update tauri, api, CLI 2026-09-21 13:42:00 -03:00
github-actions[bot] 2393188dea publish new versions (#3591)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-09-19 22:23:23 -03:00