fs
Modern and easy-to-use file system API.
Oct 10, 2026
a934743b(#3637) Added thescopeDroppedPathsplugin config option (plugins > fs > scopeDroppedPathsintauri.conf.json). Set it tofalseto stop adding the paths dropped onto any window to the fs scope, which otherwise gives every webview with an fs permission access to them (directories recursively). Defaults totrue, the current behaviour.085a0283(#3636) Fixed a panic on Android when a content provider returns no file descriptor for acontent://URI (e.g. virtual files). The fs command now fails with an error instead.f81f0447(#3635) Fixed reading uncompressed Android assets ($RESOURCEfiles such as images or audio that are stored uncompressed in the APK) returning the bytes of the APK instead of the asset. Assets are now always read from a copy in the app cache, like compressed ones.e03dca60(#3628)startAccessingSecurityScopedResourceandstopAccessingSecurityScopedResourcenow accept absolute paths on iOS, as documented, instead of silently doing nothing unless given afile://URL.5de7ebfc(#3634) Security: theopencommand no longer accepts acustomFlagsoption from the webview. It was not part of the JavaScript types and let the webview pass arbitraryopen(2)flags (e.g.O_TRUNC) to files it may only read.OpenOptionsExt::custom_flagsstill works from Rust.5e6c023a(#3626)FileHandle.readno longer allocates a buffer of the requested size up front: the length is capped to the rest of the file (64 MiB for files of unknown size), an allocation failure is reported as an error instead of aborting the app, and only the bytes that were read are sent back to the webview.3a900017(#3627) Security: the fs scope check now resolves symlinks in the ancestors of paths that do not exist yet, and resolves relative symlink targets against the link's directory instead of the process working directory. Previously a new file created below a symlinked directory inside the scope (writeFile,mkdir,create,rename,copyFile, …) was written outside of the scope. Deny patterns now also apply to the path as given, so they can name a symlink, and a path whose symlinks cannot be resolved (e.g. a loop) is rejected.77d00a4f(#3633)FileHandle.seeknow rejects a negative offset withSeekMode.Startinstead of seeking to a huge position.5c144e74(#3631) FixedreadTextFileLineswith a UTF-16 encoding splitting lines on a0x0A 0x00(LE) or0x00 0x0A(BE) byte sequence that is not aligned on a code unit, e.g.ਗĀ, which garbled every following line.dcc8cb03(#3629) FixedwriteFilewith aReadableStreamleaving the end of the previous contents in place when the new data is shorter. The file is now truncated first unlessappendis set, like when writing a buffer.
Sep 26, 2026
97e865bc(#3623) Added anoptionsparameter withbaseDirtosize, so relative paths can be measured, like the other functions and like the JSDoc example already showed. The Rust command already accepted it.9106093f(#3624) Fixed opening Androidcontent://URIs withappendor withwrite,truncateandappendtogether: the options were turned into invalid modes such asraorwta. They now map to the modes Android accepts (r,w,wt,wa,rw,rwt),appendtaking precedence overreadsince there is no read and append mode.1cae06a5(#3625) FixedreadTextFileLinesyielding empty lines forever when reading fails (e.g. on a directory). The read error is now reported: the iterator rejects and the file is closed.1cae06a5(#3625) FixedreadTextFileLinesleaving the file open until the webview is destroyed when afor awaitloop over it exits early (break,returnorthrow). The iterator now implementsreturn(), which closes the file.0c84c917(#3621) File watcher errors (e.g. the watched directory was removed or the inotify limit was reached) are now logged instead of being silently dropped.b46a88ff(#3622)writeFileandwriteTextFilenow fail when their options cannot be parsed instead of silently ignoring them (includingbaseDir,appendandcreateNew) and writing to the raw path. Data sent as a JSON array is rejected if it contains values that are not bytes, instead of truncating them.ae3c808e(#3602) The plugin's global API script (used withapp.withGlobalTauri) now resolves the core API fromwindow.__TAURI__instead of bundling its own copy of@tauri-apps/api. Values created with the core API are now accepted by plugin APIs in global mode (e.g. anImagefromwindow.__TAURI__.imagepassed toclipboardManager.writeImage, which previously failed theinstanceofcheck against the plugin's private copy), and the script is considerably smaller.9b29b601Update MSRV to 1.90 to match tauri.a87a3c7dUpdate documentation.
Aug 31, 2026
db9c5998(#3531 by @Legend-Master) Fix missingconsumer-rules.proon Gradle v9.f8053e65(#3527 by @Legend-Master) Documented Cargo feature flags in each plugin's crate-level documentation.685610ae(#3507 by @Legend-Master) Fixfs:defaultandfs:read-app-specific-dirs-recursivenot giving any command scopes3fb27bf1(#3504 by @vasfvitor) Fixeddeny-webview-datahas no effect, and on Linux, only deny access to the webview data paths instead of the entire$APPLOCALDATA
May 2, 2026
Apr 4, 2026
e97a4ded(#3244 by @SeijiOkuda) Addencodingoption forreadTextFileandreadTextFileLinesf75d21db(#3360 by @Legend-Master) Removed the dependency ontauri-utils'sbuildfeaturef5f68063(#3185 by @lucasfernog) Enable access for security-scoped resources on iOS by automatically callingNSURL::startAccessingSecurityScopedResourceon resource access and adding thestopAccessingSecurityScopedResourceAPI.
Jan 8, 2026
521cd8b3(#3155 by @EliasStar) Fix off by one error in the implementation of readTextFileLines causing all lines to end with an (additional) null byte. Issue: #3154 PR: #3155
Oct 27, 2025
93426f85Fixed an issue that caused docs.rs builds to fail. No user facing changes.
Oct 26, 2025
6c9b61fb(#3039 by @FabianLars) On Android, updated compileSdk to 36.6b5b1053(#1939 by @amrbashir) Enhance error messages.
Aug 20, 2025
4eb36b0f(#2907 by @Legend-Master) Fixed callingwriteFilewithdata: ReadableStreamthrowsInvalid argument515182a1(#2915 by @samhinshaw)readFilenow returns a more specific typePromise<Uint8Array<ArrayBuffer>>instead of the defaultPromise<Uint8Array<ArrayBufferLike>
Jul 20, 2025
44a1f659(#2846 by @Legend-Master) FixwriteFiledoesn't create a new file by default when the data is aReadableStream
Jun 25, 2025
May 20, 2025
dac4d537(#2613 by @Legend-Master) Reduce the overhead ofwatchandunwatch
Apr 2, 2025
Dec 9, 2024
3a79266b(#2173 by @FabianLars) Bumped all plugins tov2.2.0. From now, the versions for the Rust and JavaScript packages of each plugin will be in sync with each other.
Full Changelog
Section titled “Full Changelog”Version List
Section titled “Version List”- v2.7.0 Oct 10, 2026
- v2.6.0 Sep 26, 2026
- v2.5.2 Aug 31, 2026
- v2.5.1 May 2, 2026
- v2.5.0 Apr 4, 2026
- v2.4.5 Jan 8, 2026
- v2.4.4 Oct 27, 2025
- v2.4.3 Oct 26, 2025
- v2.4.2 Aug 20, 2025
- v2.4.1 Jul 20, 2025
- v2.4.0 Jun 25, 2025
- v2.3.0 May 20, 2025
- v2.2.1 Apr 2, 2025
- v2.2.0 Dec 9, 2024
- v2.0.4 Dec 9, 2024
- v2.0.3 Dec 2, 2024
- v2.0.2 Nov 5, 2024
- v2.0.1 Oct 20, 2024
- v2.0.0 Oct 2, 2024
- v2.0.0-rc.6 Oct 2, 2024
- v2.0.0-rc.5 Sep 15, 2024
- v2.0.0-rc.4 Sep 12, 2024
- v2.0.0-rc.3 Sep 5, 2024
- v2.0.0-rc.2 Aug 29, 2024
- v2.0.0-rc.1 Aug 17, 2024
- v2.0.0-rc.0 Aug 2, 2024
- v2.0.0-beta.8 Jul 31, 2024
- v2.0.0-beta.7 Jul 12, 2024
- v2.0.0-beta.6 Jul 2, 2024
- v2.0.0-beta.5 May 30, 2024
- v2.0.0-beta.4 May 30, 2024
- v2.0.0-beta.3 May 1, 2024
- v2.0.0-beta.2 Mar 7, 2024
- v2.0.0-beta.1 Feb 21, 2024
- v2.0.0-beta.0 Feb 3, 2024
- v2.0.0-alpha.6 Dec 28, 2023
- v2.0.0-alpha.5 Dec 20, 2023
- v2.0.0-alpha.4 Dec 14, 2023
- v2.0.0-alpha.3 Oct 29, 2023
- v2.0.0-alpha.2 Oct 23, 2023
- v2.0.0-alpha.1 Aug 14, 2023
- v2.0.0-alpha.0 May 24, 2023
© 2026 Tauri Contributors. CC-BY / MIT