PackageTrack
Sign in Get early access

tempfile

A library for managing temporary files and directories.

3.27.0 754M downloads/mo #97 most downloaded on crates.io Stebalien/tempfile

What this package is like to depend on

Last release 5 months ago

11 Mar 2026

Release timing varies

gaps range from 2 weeks to 3 months

Most releases are documented

notes for 49 of 63 stable releases

3 versions withdrawn

withdrawn after publishing

11 years old

66 releases · first in 2015

6 releases in the last 12 months

see the full history below

Release timeline

66 releases · Apr 2015 to Mar 2026
2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 60 of 66
  1. 3.27.0 11 Mar 2026
    Release notes

    This release adds TempPath::try_from_path and deprecates TempPath::from_path.

    Prior to this release, TempPath::from_path made no attempts to convert relative paths into absolute paths. The following code would have deleted the wrong file:

    let tmp_path = TempPath::from_path("foo")
    std::env::set_current_dir("/some/other/path").unwrap();
    drop(tmp_path);
    

    Now:

    1. TempPath::from_path will attempt to convert relative paths into absolute paths. However, this isn't always possible as we need to call std::env::current_dir, which can fail. If we fail to convert the relative path to an absolute path, we simply keep the relative path.
    2. The TempPath::try_from_path behaves exactly like TempPath::from_path, except that it returns an error if we fail to convert a relative path into an absolute path (or if the passed path is empty).

    Neither function attempt to verify the existence of the file in question.

    Thanks to @meng-xu-cs for reporting this issue.

    Open source →
  2. 3.26.0 24 Feb 2026
    Release notes
    • Support NamedTempFile::persist on RedoxOS (#393) (thanks to @Andy-Python-Programmer).
    Open source →
  3. 3.25.0 09 Feb 2026
    Release notes
    • Allow getrandom 0.4.x while retaining support for getrandom 0.3.x.
    Open source →
  4. 3.24.0 23 Dec 2025
    Release notes
    • Actually support WASIp2 without the nightly feature. This library is now feature complete on WASIp2 without any additional feature flags.
    • Exclude CI scripts from the published crate.
    Open source →
  5. 3.23.0 23 Sep 2025
    Release notes

    chore: release v3.23.0 (#381)

    Open source →
    Release notes
    • Remove need for the "nightly" feature to compile with "wasip2".
    Open source →
  6. 3.22.0 09 Sep 2025
    Release notes
    • Updated windows-sys requirement to allow version 0.61.x
    • Remove unstable-windows-keep-open-tempfile feature.
    Open source →
  7. 3.21.0 19 Aug 2025
    Release notes
    • Updated windows-sys requirement to allow version 0.60.x
    Open source →
  8. 3.20.0 11 May 2025
    Release notes

    This release mostly unifies the behavior/capabilities around "keeping" temporary files:

    • Rename Builder::keep(bool) (via deprecation) to Builder::disable_cleanup(bool) to make it clear that behaves differently from NamedTempFile::keep(). The former disables automatic cleanup while the latter consumes the NamedTempFile object entirely and unsets the "temporary file" attribute (on Windows).
    • Rename TempDir::into_path (via deprecation) to TempDir::keep to mirror NamedTempFile::keep.
    • Add TempDir::disable_cleanup, NamedTempFile::disable_cleanup, and TempPath::disable_cleanup making it possible to disable automatic cleanup in-place after creating a temporary file/directory (equivalent to calling Builder::disable_cleanup before creating the file/directory).

    Additionally, it adds a few spooled temporary file features: git lo

    • Add SpooledTempFile::into_file for turning a SpooledTempFile into a regular unnamed temporary file, writing it to the backing storage ("rolling" it) if it was still stored in-memory.
    • Add spooled_tempfile_in and SpooledTempFile::new_in methods for creating spooled temporary files in a specific directory. This makes it possible to choose the backing device for your spooled temporary file which is rather important on Linux where the default temporary directory is likely backed by memory (defeating the entire point of having a spooled temporary file).

    Finally, this release improves documentation, especially the top-level documentation explaining which temporary file type to use.

    BREAKING for those with deny(warnings):

    • Builder::keep deprecated in favor of Builder::disable_cleanup.
    • TempDir::into_path is deprecated in favor of TempDir::keep.
    Open source →
  9. 3.19.1 19 Mar 2025
    Release notes
    • Don't unlink temporary files immediately on Windows (fixes #339). Unfortunately, this seemed to corrupt the file object (possibly a Windows kernel bug) in rare cases and isn't strictly speaking necessary.
    Open source →
  10. 3.19.0 14 Mar 2025
    Release notes
    • Remove direct dependency on cfg-if. It's still in the tree, but we didn't really need to use it in this crate.
    • Add an unstable feature (unstable-windows-keep-open-tempfile) to test a potential fix to #339.
    Open source →
  11. 3.18.0 06 Mar 2025
    Release notes
    • Update rustix to 1.0.0.
    • Make NamedTempFile::persist_noclobber atomic on Apple operating systems. It's now atomic on MacOS, Windows, and Linux (depending on the OS version and filesystem used).
    Open source →
  12. 3.17.1 17 Feb 2025
    Release notes
    • Fix build with windows-sys 0.52. Unfortunately, we have no CI for older windows-sys versions at the moment...
    Open source →
  13. 3.17.0 16 Feb 2025
    Release notes
    • Make sure to use absolute paths in when creating unnamed temporary files (avoids a small race in the "immediate unlink" logic) and in Builder::make_in (when creating temporary files of arbitrary types).
    • Prevent a theoretical crash that could (maybe) happen when a temporary file is created from a drop function run in a TLS destructor. Nobody has actually reported a case of this happening in practice and I have been unable to create this scenario in a test.
    • When reseeding with getrandom, use platform (e.g., CPU) specific randomness sources where possible.
    • Clarify some documentation.
    • Unlink unnamed temporary files on windows immediately when possible instead of waiting for the handle to be closed. We open files with "Unix" semantics, so this is generally possible.
    Open source →
  14. 3.16.0 28 Jan 2025
    Release notes
    • Update getrandom to 0.3.0 (thanks to @paolobarbolini).
    • Allow windows-sys versions 0.59.x in addition to 0.59.0 (thanks @ErichDonGubler).
    • Improved security documentation (thanks to @n0toose for collaborating with me on this).
    Open source →
  15. 3.15.0 02 Jan 2025
    Release notes

    Re-seed the per-thread RNG from system randomness when we repeatedly fail to create temporary files (#314). This resolves a potential DoS vector (#178) while avoiding getrandom in the common case where it's necessary. The feature is optional but enabled by default via the getrandom feature.

    For libc-free builds, you'll either need to disable this feature or opt-in to a different getrandom backend.

    Open source →
  16. 3.14.0 08 Nov 2024
    Release notes
    • Make the wasip2 target work (requires tempfile's "nightly" feature to be enabled). #305.
    • Allow older windows-sys versions #304.
    Open source →
  17. 3.13.0 28 Sep 2024
    Release notes
    • Add with_suffix constructors for easily creating new temporary files with a specific suffix (e.g., a specific file extension). Thanks to @Borgerr.
    • Update dependencies (fastrand & rustix).
    Open source →
  18. 3.12.0 06 Aug 2024
    Release notes
    • Add a keep(keep: bool) function to builder that suppresses delete-on-drop behavior (thanks to @RalfJung).
    • Update windows-sys from 0.52 to 0.59.
    Open source →
  19. 3.11.0 02 Aug 2024
    Release notes
    • Add the ability to override the default temporary directory. This API shouldn't be used in general, but there are some cases where it's unavoidable.
    Open source →
  20. 3.10.1 26 Feb 2024
    Release notes
    • Handle potential integer overflows in 32-bit systems when seeking/truncating "spooled" temporary files past 4GiB (2³²).
    • Handle a theoretical 32-bit overflow when generating a temporary file name larger than 4GiB. Now it'll panic (on allocation failure) rather than silently succeeding due to wraparound.

    Thanks to @stoeckmann for finding and fixing both of these issues.

    Open source →
  21. 3.10.0 05 Feb 2024
    Release notes
    • Drop redox_syscall dependency, we now use rustix for Redox.
    • Add Builder::permissions for setting the permissions on temporary files and directories (thanks to @Byron).
    • Update rustix to 0.38.31.
    • Update fastrand to 2.0.1.
    Open source →
  22. 3.9.0 28 Dec 2023
    Release notes
    • Updates windows-sys to 0.52
    • Updates minimum rustix version to 0.38.25
    Open source →
  23. 3.8.1 26 Oct 2023
    Release notes
    • Update rustix to fix a potential panic on persist_noclobber on android.
    • Update redox_syscall to 0.4 (on redox).
    • Fix some docs typos.
    Open source →
  24. 3.8.0 18 Aug 2023
    Release notes
    • Added with_prefix and with_prefix_in to TempDir and NamedTempFile to make it easier to create temporary files/directories with nice prefixes.
    • Misc cleanups.
    Open source →
  25. 3.7.1 06 Aug 2023
    Release notes
    • Tempfile builds on haiku again.
    • Under the hood, we've switched from the unlinkat/linkat syscalls to the regular unlink/link syscalls where possible.
    Open source →
  26. 3.7.0 20 Jul 2023
    Release notes

    BREAKING: This release updates the MSRV to 1.63. This isn't an API-breaking change (so no major release) but it's still a breaking change for some users.

    • Update fastrand from 1.6 to 2.0
    • Update rustix to 0.38
    • Updates the MSRV to 1.63.
    • Provide AsFd/AsRawFd on wasi.
    Open source →
  27. 3.6.0 06 Jun 2023
    Release notes
    • Update windows-sys to 0.48.
    • Update rustix min version to 0.37.11
    • Forward some NamedTempFile and SpooledTempFile methods to the underlying File object for better performance (especially vectorized writes, etc.).
    • Implement AsFd and AsHandle.
    • Misc documentation fixes and code cleanups.
    Open source →
  28. 3.5.0 29 Mar 2023
    Release notes
    • Update rustix from 0.36 to 0.37.1. This makes wasi work on rust stable
    • Update windows-sys, redox_syscall
    • BREAKING: Remove the implementation of Write for &NamedTempFile<F> where &F: Write. Unfortunately, this can cause compile issues in unrelated code (https://github.com/Stebalien/tempfile/issues/224).
    Open source →
  29. 3.4.0 25 Feb 2023
    Release notes

    SECURITY: Prior tempfile releases depended on remove_dir_all version 0.5.0 which was vulnerable to a TOCTOU race. This same race is present in rust versions prior to 1.58.1.

    Features:

    • Generalized temporary files: NamedTempFile can now abstract over different kinds of files (e.g., unix domain sockets, pipes, etc.):
      • Add Builder::make and Builder::make_in for generalized temp file creation.
      • Add NamedTempFile::from_parts to complement NamedTempFile::into_parts.
      • Add generic parameter to NamedTempFile to support wrapping non-File types.

    Bug Fixes/Improvements:

    • Don't try to create a temporary file multiple times if the file path has been fully specified by the user (no random characters).
    • NamedTempFile::persist_noclobber is now always atomic on linux when renameat_with is supported. Previously, it would first link the new path, then unlink the previous path.
    • Fix compiler warnings on windows.

    Trivia:

    • Switch from libc to rustix on wasi/unix. This now makes direct syscalls instead of calling through libc.
    • Remove remove_dir_all dependency. The rust standard library has optimized their internal version significantly.
    • Switch to official windows-sys windows bindings.

    Breaking:

    • The minimum rust version is now 1.48.0.
    • Mark most functions as must_use.
    • Uses direct syscalls on linux by default, instead of libc.
    • The new type parameter in NamedTempFile may lead to type inference issues in some cases.
    Open source →
  30. 3.3.0 08 Jan 2022
    Release notes

    Features:

    • Replace rand with fastrand for a significantly smaller dependency tree. Cryptographic randomness isn't necessary for temporary file names, and isn't all that helpful either.
    • Add limited WASI support.
    • Add a function to extract the inner data from a SpooledTempFile.

    Bug Fixes:

    • Make it possible to persist unnamed temporary files on linux by removing the O_EXCL flag.
    • Fix redox minimum crate version.
    Open source →
  31. 3.2.0 12 Jan 2021
    Release notes

    Features:

    • Bump rand dependency to 0.8.
    • Bump cfg-if dependency to 1.0

    Other than that, this release mostly includes small cleanups and simplifications.

    Breaking: The minimum rust version is now 1.40.0.

    Open source →
  32. 3.1.0 01 Jul 2019
    Release notes

    Features:

    • Bump rand dependency to 0.7.

    Breaking: The minimum rust version is now 1.32.0.

    Open source →
  33. 3.0.9 30 Jun 2019 withdrawn
    Release notes

    Documentation:

    • Add an example for reopening a named temporary file.
    • Flesh out the security documentation.

    Features:

    • Introduce an append option to the builder.
    • Errors:
      • No longer implement the soft-deprecated description.
      • Implement source instead of cause.

    Breaking: The minimum rust version is now 1.30.

    Open source →
  34. 3.0.8 19 May 2019
    Release notes

    This is a bugfix release.

    Fixes:

    • Export PathPersistError.
    • Fix a bug where flushing a SpooledTempFile to disk could fail to write part of the file in some rare, yet-to-reproduced cases.
    Open source →
  35. 3.0.7 17 Feb 2019
    Release notes

    Breaking:

    • Builder::prefix and Builder::suffix now accept a generic &AsRef<OsStr>. This could affect type inference.
    • Temporary files (except unnamed temporary files on Windows and Linux >= 3.11) now use absolute path names. This will break programs that create temporary files relative to their current working directory when they don't have the search permission (x) on some ancestor directory. This is only likely to affect programs with strange chroot-less filesystem sandboxes. If you believe you're affected by this issue, please comment on #40.

    Features:

    • Accept anything implementing &AsRef<OsStr> in the builder: &OsStr, &OsString, &Path, etc.

    Fixes:

    • Fix LFS support.
    • Use absolute paths for named temporary files to guard against changes in the current directory.
    • Use absolute paths when creating unnamed temporary files on platforms that can't create unlinked or auto-deleted temporary files. This fixes a very unlikely race where the current directory could change while the temporary file is being created.

    Misc:

    • Use modern stdlib features to avoid custom unsafe code. This reduces the number of unsafe blocks from 12 to 4.
    Open source →
  36. 3.0.6 06 Feb 2019
    Release notes
    • Don't hide temporary files on windows, fixing #66 and #69.
    Open source →
  37. 3.0.5 26 Nov 2018
    Release notes

    Features:

    • Added a spooled temporary file implementation. This temporary file variant starts out as an in-memory temporary file but "rolls-over" onto disk when it grows over a specified size (#68).
    • Errors are now annotated with paths to make debugging easier (#73).

    Misc:

    • The rand version has been bumped to 0.6 (#74).

    Bugs:

    • Tempfile compiles again on Redox (#75).
    Open source →
  38. 3.0.4 14 Sep 2018
    Release notes
    • Now compiles on unsupported platforms.
    Open source →
  39. 3.0.3 17 Jul 2018
    Release notes
    • update rand to 0.5
    Open source →
  40. 3.0.2 10 May 2018
    Release notes
    • Actually delete temporary files on non-Linux unix systems (thanks to @oliverhenshaw for the fix and a test case).
    Open source →
  41. 3.0.1 18 Apr 2018 withdrawn
    Release notes
    • Restore NamedTempFile::new_in
    Open source →
  42. 3.0.0 25 Mar 2018 withdrawn
    Release notes
    • Adds temporary directory support (@KodrAus)
    • Allow closing named temporary files without deleting them (@jasonwhite)
    Open source →
  43. 2.2.0 27 Sep 2017
    Release notes
    • Redox Support
    Open source →
  44. 2.1.6 16 Jul 2017
    Release notes
    • Remove build script and bump minimum rustc version to 1.9.0
    Open source →
  45. 2.1.5 19 Jan 2017
    Release notes
    • Don't build platform-specific dependencies on all platforms.
    • Cleanup some documentation.
    Open source →
  46. 2.1.4 14 Jun 2016
    Release notes
    • Fix crates.io tags. No interesting changes.
    Open source →
  47. 2.1.3 21 Apr 2016
    Release notes

    Export PersistError.

    Open source →
  48. 2.1.2 11 Apr 2016
    Release notes

    Add Read/Write/Seek impls on &NamedTempFile. This mirrors the implementations on &File. One can currently just deref to a &File but these implementations are more discoverable.

    Open source →
  49. 2.1.1 17 Feb 2016
    Release notes

    Add LFS Support.

    Open source →
  50. 2.1.0 11 Feb 2016
    Release notes
    • Implement AsRef<File> for NamedTempFile allowing named temporary files to be borrowed as Files.
    • Add a method to convert a NamedTempFile to an unnamed temporary File.
    Open source →
  51. 2.0.1 18 Jan 2016
    Release notes
    • Arm bugfix
    Open source →
  52. 2.0.0 05 Jan 2016
    Release notes

    This release replaces TempFile with a tempfile() function that returns std::fs::File objects. These are significantly more useful because most rust libraries expect normal File objects.

    To continue supporting shared temporary files, this new version adds a reopen() method to NamedTempFile.

    Open source →
  53. 1.1.3 21 Nov 2015

    Nothing published for this version

  54. 1.1.2 08 Nov 2015

    Nothing published for this version

  55. 1.1.1 15 Aug 2015

    Nothing published for this version

  56. 1.1.0 10 Jul 2015

    Nothing published for this version

  57. 1.0.0 29 Jun 2015

    Nothing published for this version

  58. 0.5.1 22 May 2015

    Nothing published for this version

  59. 0.5.0 22 May 2015

    Nothing published for this version

  60. 0.4.0 21 May 2015

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive