NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #1212 most downloaded on crates.io
Open a path or URL using the program configured on the system
Last release 28 days ago
10 Sep 2026
Ships unpredictably
gaps range from 8 days to 11 months
Nearly every release is documented
notes for 52 of 56 stable releases
7 versions withdrawn
withdrawn after publishing
12 years old
63 releases · first in 2015
open Windows paths without wildcard expansion
open Windows paths without wildcard expansion
Opening a child of a bracket-named directory fails because Start-Process
resolves parent directories as PowerShell wildcard patterns. The isolated
Windows regression test reproduced WildcardPatternException for a copied
executable under "【Tiny Asa】 [77P7V-712MB]\child" before this change.
Use Test-Path and Invoke-Item with LiteralPath for existing items, retaining
Start-Process for URLs and application names. These cmdlets also work under
PowerShell Constrained Language Mode. Share the embedded script between
Windows and WSL, keep targets in environment data, and stop on launch errors
to report a nonzero exit status. Preserve the security boundary established
in fd29861: cmd /c start remains opt-in through the insecure feature. No
previously removed launcher options are restored.
The integration test launches only a copy of its own test binary, which
records its executable path and exits. It checks absolute and relative paths
with invalid and valid bracket patterns, Unicode, backticks, quotes, shell
metacharacters, and leading dashes in normal and constrained PowerShell
sessions, plus failure for a missing executable. It requires neither Explorer
nor registered document or URL handlers. Adjust the existing fallback
assertion to also allow the opt-in cmd launcher after Explorer with all
features enabled.
Validated locally on Windows with PowerShell 5.1.26100.33438 and rustc 1.97.1:
cargo test and cargo test --all-features each passed all 19 tests, including
the behavioral regression. git diff --check passed, and cargo
package --list includes the embedded script. Test-Path returned false without
errors for representative https, mailto, and file URLs. Actual GUI folder,
document, URL handling and WSL interop were not exercised locally.
One column per quarter.
wait for intermediate child to terminate when double-forking
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
wait in that_detached instead of double-fork On macOS /usr/bin/open already detaches via LaunchServices. spawn_detached() adds another fork and leaves
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Forward WSL targets to PowerShell to make open actually work there
Forward WSL targets to PowerShell to make open actually work there
Opening a URL from WSL failed because the Windows process did not receive
OPEN_RS_TARGET, even though it was present in the Linux command environment.
The failure reproduces with cargo run -- https://google.com on Ubuntu under
WSL, where Start-Process receives a null FilePath and exits unsuccessfully.
Add OPEN_RS_TARGET to WSLENV so WSL interop forwards the target into the
PowerShell environment. Preserve existing WSLENV entries and their flags,
while keeping the PowerShell command fixed so targets remain data rather than
shell code.
Validated with focused WSL tests, the all-features test suite, rustfmt,
Clippy with warnings denied, and an end-to-end cargo run from WSL.
cargo run now shows the exact commands that were tried when opening. This is useful for debugging, mainly.
cargo run now shows the exact commands that were tried when opening.Align WSL PowerShell invocation with Windows
Pass the WSL open target to PowerShell through the OPEN_RS_TARGET
environment variable instead of embedding it in the command string and
escaping it as a single-quoted PowerShell value.
This matches the safer invocation already used by the native Windows
backend. Keeping the PowerShell program fixed ensures that paths and URLs
are treated purely as data, even when they contain quotes, semicolons, or
other PowerShell metacharacters. It also removes the need for custom
PowerShell quoting and avoids converting the target through
to_string_lossy() during command construction.
Add -NonInteractive for consistency with the Windows launcher and update
the WSL tests to verify both the fixed command and the unchanged
environment-variable value.
prevent launcher option and shell injection
Opening an attacker-controlled dash-leading path could be interpreted as
launcher options. On Windows, cmd /c start also parsed embedded quotes and
metacharacters as command language, while the legacy gnome-open fallback
could load a module even after a double-dash separator.
Add command-construction regressions for malicious option-shaped paths and
Windows shell metacharacters. Use supported separators on macOS and KDE, and
rewrite dash-leading relative paths for launchers without separator support.
Keep Windows values out of shell syntax by passing the default target through
the environment and invoking custom applications directly, with explorer.exe
as a PowerShell-free fallback.
Exclude cmd-based opening by default, while providing an
explicit insecure Cargo feature for users who need compatibility it
and accept their unsafe handling of untrusted input.
Validated with default and all-feature cargo tests, clippy, and cross-target
cargo check --tests for aarch64 Linux and Windows.
use PowerShell instead of wslview on WSL WSL users reported that wslu's wslview is discontinued and unavailable in some package managers. The regressi
use PowerShell instead of wslview on WSL
WSL users reported that wslu's wslview is discontinued and unavailable in
some package managers. The regression tests cover the WSL command builder and
initially failed because the first generated command was still wslview.
Build the WSL opener as a PowerShell Start-Process -FilePath script argument
with the target quoted as data, then retain the xdg-open, gio, gnome-open, and
kde-open fallbacks. Update the user-facing docs and keep the WSL command builder
testable from host builds without adding dev-dependencies.
delegate to winebrowser under Wine When running a Windows-targeted binary under Wine, open requests previously fell back to Wine's bundled explorer.ex
delegate to winebrowser under Wine
When running a Windows-targeted binary under Wine, open requests previously fell back to Wine's bundled explorer.exe, which lacks proper host desktop integration.
This change detects the Wine environment at runtime (via WINEPREFIX, WINELOADER, or WINEDEBUG) and prepends a winebrowser command to the launcher list. winebrowser is Wine's official utility for forwarding file/URL requests to the host OS's default handler (e.g., xdg-open on Linux, open on macOS).
If winebrowser is unavailable or fails, the existing cmd /c start fallback is used automatically, preserving backward compatibility. No public API changes or compile-time flags are introduced.
align with_detached() implementation with with() On macOS, /usr/bin/open is natively detached. This commit changes with_detached to use the same logic
Clippy helped 1 time to make code idiomatic.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 1 time to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
7bd519c)7db5738)8e122d4)20ea175)7faae87)1ab9c47)5604cee)
</details>point to webbrowser crate for users that seek this specific functionality.
ILCreateFromPathWILCreateFromPathW (abcd0f4)<csr-id-314d80ac36650f3ff57d62596513e1dcda4870fb/>
ILCreateFromPathW<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
ab1b306)a1ca334)c84cade)ILCreateFromPathW (abcd0f4)335146b)314d80a)07b246c)1c4a952)43b6a2d)
</details>fix that_detached for UNC path of a directory
that_detached for UNC path of a directorythat_detached for UNC path of a directory<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
On Windows, respect the expand to open folder setting.
On Windows, respect the expand to open folder setting.
On Windows, respect the expand to open folder setting.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
add GNU/Hurd support Handle it like most of the other Unix platforms (e.g. Linux, BSDs, etc).
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
2 commits contributed to the release.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
This release adds vision-os support, by means of ios simulation. See the PR for a little more context.
This release adds vision-os support, by means of ios simulation.
See the PR for a little more context.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
use ShellExecuteExW to avoid freeze when opening directories
ShellExecuteExW to avoid freeze when opening directories<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
3 commits contributed to the release.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
add shellexecute-on-windows feature. That way, it's possible to toggle on a feature that might cause issues in some dependency trees that contain flat
shellexecute-on-windows feature.
That way, it's possible to toggle on a feature that might
cause issues in some dependency trees that contain flate2
with zlib-ng backend.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
use ShellExecuteW for detached spawning on Windows
ShellExecuteW for detached spawning on Windows<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
3 commits contributed to the release.
<csr-id-a583658a2f2cfea64c3be6e12cef159f5cbc7fbf/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
open paths with given applications with whitespace in their paths on windows.
<csr-id-dca688bf473169b6d779695e35cb05596d094ba1/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
with() on windows to be able to lookup program in registry/PATH. The underlying invocation of with() changed slightly on windows to make it more usefu
<csr-id-ddf4842dc78389e87615f5c2ddf9e859b11277b2/> with() on windows to be able to lookup program in registry/PATH.
The underlying invocation of with() changed slightly on windows to make it more useful
as it can now find application names like chrome in the registry, but that change may also
be breaking for some who previously worked around the previous behaviour.
Please let us know if this truly works better, or if more changes are needed to launch something with a program on Windows.
See https://github.com/Byron/open-rs/pull/82 for details.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
add that_detached() and with_detached() functions.
<csr-id-323b8ea2aba9b0661bf3af6bd48ccef53197b0bf/>
<csr-id-7ad9cb373eb7e999f7e79705db891fd24a4d4bd2/> add that_detached() and with_detached() functions.
They allow to open the program in a completely independent fashion so that it can out-live the program that spawned it.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
4 commits contributed to the release over the course of 9 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
now works within WSL if gio is installed. gio would fail on WSL which is fixed by detecting that WSL is present which is when wslview will be prioriti
<csr-id-5f1f80f9fb63e6c63b48ef97370711fd8cebcfcc/> now works within WSL if gio is installed.
gio would fail on WSL which is fixed by detecting that WSL is present
which is when wslview will be prioritized.
Note that the binary size inceases by ~13kb as we try to avoid running wslview
first and fail everywhere, so prefer runtime performance on linux over binary
size. The binary size changes only on unix.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
In the previous releases 3.3 and 4.0 on windows the console windows would show. This was unintentional and is now fixed.
In the previous releases 3.3 and 4.0 on windows the console windows would show. This was unintentional and is now fixed.
Thanks so much for the contribution.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
This might be a breaking change as previously there was no minimal supported Rust version.
<csr-id-9ceb0a4b707022a6ce8046d3512be7c7a51d77a4/> Windows URL encoding for multiple query params Previously, passing a URL with multiple query parameters on Windows would result in improper escaping, causing unexpected behavior when using it with "cmd /c". This commit addresses this issue by properly escaping all query parameters in the URL. Now, URLs with multiple query parameters are handled correctly on Windows.
See also:
<csr-id-0cd6f98d0a97ac3ddcecefc5d33952e7632298a5/> set minimal required Rust version of 1.62.
This version is motivated only when compiling on windows (but we can't differentiate that)
due to the recent addition of CommandExt::raw_arg().
This might be a breaking change as previously there was no minimal supported Rust version.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
un-deprecate that_in_background(). In some configurations launchers may block, thus it's better to provide an easy mechanism to unblock an otherwise b…
<csr-id-7e2a9c645cd4ff5f86ece7cdc220e18c1b4ac1b5/>
that_in_background().
In some configurations launchers may block, thus it's better to provide an easy mechanism to unblock
an otherwise blocking call. This is alongside being able to use command() directly and simply spawn
the command without waiting for it.with_command() to obtain the command that opens a program with a given application.commands() function to obtain a list of launchers to open the given path.
This allows async applications to control the application launch in an async way,
for instance with tokio.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 1 time to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
031c44b)bfededa)7e2a9c6)impl instead of 'the other way'. (cb322bf)2f6fb47)that_in_background(). (adf99e9)with_command() to obtain the command that opens a program with a given application. (66e0d7c)c2e0eb2)a501d65)commands() function to obtain a list of launchers to open the given path. (245c95e)5644f17)
</details>add command function to return std::Command Adds new command function that returns the underlying std::Command that would be called to open given path
<csr-id-fdd2ef013fe7dee1767694e229f4653f16d4ab8a/> add command function to return std::Command
Adds new command function that returns the underlying std::Command
that would be called to open given path.
<csr-id-056cb003d19a6deb58214a041ee76d62716524c2/> use std Command
Use std Command instead of ShellExecuteW from windows sys crate.
This change was already attempted in: https://github.com/Byron/open-rs/issues/25
and later reverted in: https://github.com/Byron/open-rs/pull/27
and it it seems that it didn't work due to incorrect usage of
explorer instead of cmd /c start.
(see https://github.com/helix-editor/helix/pull/5820#issuecomment-1416796024
for detailed explanation).
<csr-id-55dc10dd1b3d04dbb0c7acb2b0a5efe7fc97dee6/> don't unnecessarily reject launchers on linux.
Previously it probably went through 5 launers assuming they don't work
before falling back to xdg-open which is usually present.
Now it will use the first launcher that it could invoke.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
6600c23)55dc10d)8aa9bce)fdd2ef0)0d09f28)1f4a9f9)7ab725a)056cb00)
</details>upgrade windows-sys to more recent version. This mainly reduces build times for some, and may increase them for others, on windows only. If build time
windows-sys to more recent version.
This mainly reduces build times for some, and may increase them for
others, on windows only. If build times increase, try to upgrade
windows-sys across the dependency tree.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
upgrade windows-sys to more recent version. This mainly reduces build times for some, and may increase them for others, on windows only. If build time
YANKED
windows-sys to more recent version.
This mainly reduces build times for some, and may increase them for
others, on windows only. If build times increase, try to upgrade
windows-sys across the dependency tree.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
quote paths on windows to allow spaces in paths not be treated as multiple paths. Note that paths that are already quoted will also be quoted, as the
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
9c69785)4c0fdb3)e0d5968)1ab9bc3)b20e01c)
</details>Improve documentation about blocking behaviour.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
deprecate that_in_background() as that() is definitely non-blocking now. Note that we keep with_in_background() as it's unclear if a custom launcher b…
that_in_background() as that() is definitely non-blocking now.
Note that we keep with_in_background() as it's unclear if a custom
launcher blocks or not.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
A major release which simplifies the error type to resolve a significant problems that surfaced on linux (and was present from day one).
A major release which simplifies the error type to resolve a significant problems that surfaced on linux (and was present from day one).
<csr-id-0bdc6d64ed425b2627a7ba17614f44ba686536fb/> Assure that(…) is non-blocking on linux
This change goes hand in hand with removing additional information
from the error case which was the reason for the blocking issue
on linux.
Note that the top-level Result type was also removed.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
A maintenance release which reduces compile times on windows by switching from winapi to the windows crate.
A maintenance release which reduces compile times on windows by switching from winapi to the
windows crate.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
3 commits contributed to the release.
<csr-id-85f4dfdafe6119af5b3a5d8f079279818d3d61ee/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
A maintenance release which allows boxed values in parameter position.
A maintenance release which allows boxed values in parameter position.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
3 commits contributed to the release.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
On MacOS, specify the open program explicitly by path, instead of relying on a similarly named program to be available in the PATH.
On MacOS, specify the open program explicitly by path, instead of relying on a similarly named program to be available
in the PATH.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Prevent deadlocks due to filled pipe on stderr
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Update documentation. No functionality changes.
Update documentation. No functionality changes.
Breaking: Change result from io::Result to io::Result<()>. Commands that exit with a successful exit status result in Ok, otherwise an Err variant is
Breaking: Change result from io::Result<ExitStatus> to io::Result<()>.
Commands that exit with a successful exit status result in Ok, otherwise an Err variant is created.
Previously it was easy to receive an Ok(ExitStatus) but forget to actually check the status. Along with
issues with particular programs reporting success even on error, doing error handling correctly was
close to impossible.
This releases alleviates most of the issues.
Improved support for Windows Subsystem for Linux
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
c5c0bf7)866740b)1dfb789)5bc5e8e)428ff97)81d8c40)215227a)4f87a78)d2d35af)
</details>Add gio support on unix platforms
gio support on unix platforms<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
ac09da1)e39f357)0db1b1a)10fd4a7)6a1766a)90bc634)ccbae5d)
</details>* Add IOS support * Restore Android support
YANKED as it would erroneously exclude Android from the list of supported platforms, making it a breaking release for some despite the minor version c
YANKED as it would erroneously exclude Android from the list of supported platforms, making it a breaking release for some despite the minor version change.
YANKED to avoid potential for breakage by using 'explorer.exe' to open URLs.
YANKED to avoid potential for breakage by using 'explorer.exe' to open URLs.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
68613a5)c058966)9e20f22)9bfefd0)049f698)ef91705)00119a7)330c2d0)
</details>add open::with(path, app) and open::with_in_background(…)
open::with(path, app) and open::with_in_background(…)<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Add LICENSE.md and README.md into the crates.io tarball.
<csr-id-5c1497c6d09a829d4be19e9bd3eec5557efce370/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
update code and crate to Edition 2018
3 commits contributed to the release.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
3 commits contributed to the release.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Nothing published for this version
3 commits contributed to the release over the course of 16 calendar days.
<csr-id-c2908176e2bb982a679d7097584e584a53deaf15/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
6 commits contributed to the release.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
7 commits contributed to the release over the course of 178 calendar days.
<csr-id-79bc73b7ca0927f0594670bcc23de989693275c0/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
d52cfb2)59dd0bd)c017217)a631235)89caa59)0ccdbd0)79bc73b)
</details>windows: escape '&' in URLs. On windows, a shell is used to execute the command, which requires certain precautions for the URL to open to get through
<csr-id-37a253c89b1241b6f6ca0d3cafc8baa936aa274f/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
no docs for open And I thought I did that, but disabled tests only ... .
<csr-id-da45d9bad33fd9ed9659ec56ffe3b31d310253ca/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
added 'open' program Which uses the open library to open any path or url.
<csr-id-a5557d5c096983cf70f59b1807cb6fbe2b6dab5e/> <csr-id-8db67f5874b007ea3710ed9670e88ad3f49b6d7d/> <csr-id-d816380f9680a9d56e22a79e025dc6c2073fb439/> <csr-id-bf8c9a11f4c1b1ac17d684a31c90d2a38255045e/> <csr-id-210ec6ef37ba7d230a0cc367e979173a555fa092/>
open library to open any path or url.<csr-id-30c96b1cb95c1e03bede218b8fb03bbd9ada9317/> <csr-id-4696d1a5ec80691e97bb1be4261d4f79ee0ade4d/> <csr-id-0fcafb56cdb5d154b3e983d17c93a1dd7c665426/>
Command API<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
a5557d5)25c0e39)a4c3a35)dee0000)210ec6e)8db67f5)d816380)bf8c9a1)8b4e155)30c96b1)4696d1a)0fcafb5)c2e31d5)
</details>Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →