## Table of Contents - [Examples](#examples) * [Features](#features) - [list the features for the latest version](#list-the-features-for-the-latest-version) - [list the features for a specific version](#list-the-features-for-a-specific-version) - [list the features for a local crate](#list-the-features-for-a-local-crate) * [Simple listing](#simple-listing) - [get the latest version](#get-the-latest-version) - [list all name and version pairs](#list-all-name-and-version-pairs) - [list all name and version pairs, including yanked versions](#list-all-name-and-version-pairs-including-yanked-versions) - [list all name and version pairs, only showing yanked versions](#list-all-name-and-version-pairs-only-showing-yanked-versions) * [Dependencies](#dependencies) - [list the deps for the latest version](#list-the-deps-for-the-latest-version) - [list the deps for a specific version](#list-the-deps-for-a-specific-version) - [list the deps for a local crate](#list-the-deps-for-a-local-crate) - [list the deps and transitive features](#list_the_deps_and_transitive_features) ## Examples: ### Features #### list the features for the latest version >cargo whatfeatures serde or >cargo whatfeatures -p serde ``` serde = 1.0.114 └─ features ├─ default │ └─ std ├─ alloc ├─ derive ├─ rc ├─ std (default) └─ unstable ``` The `(default)` will let you easily reference what indv. features are included in the default. #### list the features and optional deps for the latest version >cargo whatfeatures serde -v **Note** this also list 'implied features' (ones that are enabled by other features). ``` serde = 1.0.114 ├─ features │ ├─ default │ │ └─ std │ ├─ alloc │ ├─ derive │ │ └─ serde_derive │ ├─ rc │ ├─ std (default) │ └─ unstable └─ optional dependencies └─ serde_derive = =1.0.114 ``` #### list the features for a specific version >cargo whatfeatures -p twitchchat:0.10.2 ``` twitchchat = 0.10.2 └─ features ├─ default │ ├─ async │ └─ tokio_native_tls ├─ async (default) ├─ tokio_native_tls (default) └─ tokio_rustls ``` ### list the features for a local crate >cargo whatfeatures --manifest-path . ``` cargo-whatfeatures = 0.9.2 └─ features ├─ default │ └─ native-tls ├─ native-tls (default) └─ rustls ``` The command is somewhat smart, if you give it a local directory or the path to a Cargo.toml and it doesn't look like a remote crate, it'll use that. So the above could be expressed as `cargo whatfeatures .` or `cargo whatfeatures ~/p/foobar` `--manifest-path` is a way to ensure it uses the local crate rather than an unfournate similarly named crate on crates.io. ### Simple listing #### get the latest version >cargo whatfeatures --short lock-api ``` lock_api = 0.4.1 # 4 weeks ago ``` #### get the latest version, with timestamp >cargo whatfeatures --verbose --short lock-api ``` lock_api = 0.4.1 # 2020-07-06 08:10:00 +0000 ``` #### list all name and version pairs >cargo whatfeatures --list lock-api ``` lock_api = 0.4.1 # 4 weeks ago lock_api = 0.4.0 # 5 weeks ago lock_api = 0.3.4 # 16 weeks ago lock_api = 0.3.3 # 30 weeks ago lock_api = 0.3.2 # 36 weeks ago lock_api = 0.3.1 # 55 weeks ago lock_api = 0.2.0 # 65 weeks ago lock_api = 0.1.5 # 89 weeks ago lock_api = 0.1.4 # 96 weeks ago lock_api = 0.1.3 # 111 weeks ago lock_api = 0.1.1 # 112 weeks ago lock_api = 0.1.0 # 112 weeks ago ``` #### list all name and version pairs, with timestamp >cargo whatfeatures --verbose --list lock-api ``` lock_api = 0.4.1 # 2020-07-06 08:10:00 +0000 lock_api = 0.4.0 # 2020-06-23 18:35:22 +0000 lock_api = 0.3.4 # 2020-04-10 16:18:43 +0000 lock_api = 0.3.3 # 2020-01-04 10:54:14 +0000 lock_api = 0.3.2 # 2019-11-25 21:16:41 +0000 lock_api = 0.3.1 # 2019-07-14 12:55:33 +0000 lock_api = 0.2.0 # 2019-05-04 09:29:36 +0000 lock_api = 0.1.5 # 2018-11-18 21:58:31 +0000 lock_api = 0.1.4 # 2018-09-25 22:03:20 +0000 lock_api = 0.1.3 # 2018-06-18 11:40:56 +0000 lock_api = 0.1.1 # 2018-06-08 00:17:16 +0000 lock_api = 0.1.0 # 2018-06-08 00:16:14 +0000 ``` #### list all name and version pairs, including yanked versions >cargo whatfeatures --list --show-yanked include lock-api ``` lock_api = 0.4.1 # 4 weeks ago lock_api = 0.4.0 # 5 weeks ago lock_api = 0.3.4 # 16 weeks ago lock_api = 0.3.3 # 30 weeks ago lock_api = 0.3.2 # 36 weeks ago lock_api = 0.3.1 # 55 weeks ago lock_api = 0.3.0 # 56 weeks ago -- yanked lock_api = 0.2.0 # 65 weeks ago lock_api = 0.1.5 # 89 weeks ago lock_api = 0.1.4 # 96 weeks ago lock_api = 0.1.3 # 111 weeks ago lock_api = 0.1.2 # 111 weeks ago -- yanked lock_api = 0.1.1 # 112 weeks ago lock_api = 0.1.0 # 112 weeks ago ``` #### list all name and version pairs, including yanked versions, with timestamp >cargo whatfeatures --verbose --list --show-yanked include lock-api ``` lock_api = 0.4.1 # 2020-07-06 08:10:00 +0000 lock_api = 0.4.0 # 2020-06-23 18:35:22 +0000 lock_api = 0.3.4 # 2020-04-10 16:18:43 +0000 lock_api = 0.3.3 # 2020-01-04 10:54:14 +0000 lock_api = 0.3.2 # 2019-11-25 21:16:41 +0000 lock_api = 0.3.1 # 2019-07-14 12:55:33 +0000 lock_api = 0.3.0 # 2019-07-03 11:21:03 +0000 -- yanked lock_api = 0.2.0 # 2019-05-04 09:29:36 +0000 lock_api = 0.1.5 # 2018-11-18 21:58:31 +0000 lock_api = 0.1.4 # 2018-09-25 22:03:20 +0000 lock_api = 0.1.3 # 2018-06-18 11:40:56 +0000 lock_api = 0.1.2 # 2018-06-18 02:07:52 +0000 -- yanked lock_api = 0.1.1 # 2018-06-08 00:17:16 +0000 lock_api = 0.1.0 # 2018-06-08 00:16:14 +0000 ``` #### list all name and version pairs, only showing yanked versions >cargo whatfeatures --list --show-yanked only lock-api ``` lock_api = 0.3.0 # 56 weeks ago -- yanked lock_api = 0.1.2 # 111 weeks ago -- yanked ``` #### list all name and version pairs, only showing yanked versions, with timestamp >cargo whatfeatures --list --show-yanked only lock-api ``` lock_api = 0.3.0 # 2019-07-03 11:21:03 +0000 -- yanked lock_api = 0.1.2 # 2018-06-18 02:07:52 +0000 -- yanked ``` ### Dependencies #### list the deps for the latest version **Note** use `--no-features` (`-n`) to not list the features >cargo whatfeatures curl --deps ``` curl = 0.4.31 ├─ features │ ├─ default │ │ └─ ssl │ ├─ force-system-lib-on-osx │ ├─ http2 │ ├─ mesalink │ ├─ protocol-ftp │ ├─ spnego │ ├─ ssl (default) │ ├─ static-curl │ └─ static-ssl └─ required dependencies ├─ normal │ ├─ for cfg(target_env = "msvc") │ │ ├─ schannel = ^0.1.13 │ │ └─ winapi = ^0.3 (has enabled features) │ ├─ curl-sys = ^0.4.33 │ ├─ libc = ^0.2.42 │ └─ socket2 = ^0.3.7 ├─ development │ ├─ anyhow = ^1.0.31 │ ├─ mio = ^0.6 │ └─ mio-extras = ^2.0.3 └─ no build dependencies ``` #### list the deps for a specific version **note** use `-n`,`--no-features` to not list the features >cargo whatfeatures -p curl:0.3.0 --deps ``` curl = 0.3.0 ├─ no features └─ required dependencies ├─ normal │ ├─ for cfg(all(unix, not(target_os = "macos"))) │ │ └─ openssl-sys = ^0.7.0 │ ├─ curl-sys = ^0.2.0 │ └─ libc = ^0.2 ├─ development │ └─ mio = ^0.5 └─ no build dependencies ``` #### list the deps for a local crate >cargo whatfeatures --manifest-path . -d -n ``` cargo-whatfeatures = 0.9.2 ├─ no optional dependencies └─ required dependencies ├─ normal │ ├─ anyhow = ^1.0.32 │ ├─ attohttpc = ^0.15.0 (has enabled features) │ ├─ cargo_metadata = ^0.11.1 │ ├─ crate_version_parse = ^0.2.0 │ ├─ directories-next = ^1.0.1 │ ├─ flate2 = ^1.0.16 │ ├─ home = ^0.5.3 │ ├─ pico-args = ^0.3.3 │ ├─ serde = ^1.0.114 (has enabled features) │ ├─ tar = ^0.4.29 │ ├─ time = ^0.2.16 │ └─ yansi = ^0.5.0 ├─ no development dependencies └─ no build dependencies ``` #### example of scrying a workspace >cargo whatfeatures ~/dev/godot-rust ``` workspace for godot-rust ├─ gdnative = 0.9.0-preview.0 │ └─ features │ ├─ default │ │ └─ bindings │ ├─ bindings (default) │ ├─ formatted │ └─ gd_test ├─ gdnative-bindings = 0.9.0-preview.0 │ └─ features │ ├─ no default features │ ├─ formatted │ └─ one_class_one_file ├─ gdnative-core = 0.9.0-preview.0 │ └─ features │ ├─ default │ │ └─ nativescript │ ├─ gd_test │ └─ nativescript (default) ├─ gdnative-derive = 0.9.0-preview.0 │ └─ no features ├─ gdnative-impl-proc-macros = 0.9.0-preview.0 │ └─ no features ├─ gdnative-sys = 0.9.0-preview.0 │ └─ no features └─ gdnative_bindings_generator = 0.9.0-preview.0 └─ features ├─ no default features └─ debug ``` using the `-r`, `--restricted` will also list packages that are set to private >cargo whatfeatures -r ~/dev/godot-rust ``` workspace for godot-rust ├─ dodge_the_creeps = 0.1.0 (restricted) │ └─ no features ├─ gdnative = 0.9.0-preview.0 │ └─ features │ ├─ default │ │ └─ bindings │ ├─ bindings (default) │ ├─ formatted │ └─ gd_test ├─ gdnative-bindings = 0.9.0-preview.0 │ └─ features │ ├─ no default features │ ├─ formatted │ └─ one_class_one_file ├─ gdnative-core = 0.9.0-preview.0 │ └─ features │ ├─ default │ │ └─ nativescript │ ├─ gd_test │ └─ nativescript (default) ├─ gdnative-derive = 0.9.0-preview.0 │ └─ no features ├─ gdnative-impl-proc-macros = 0.9.0-preview.0 │ └─ no features ├─ gdnative-sys = 0.9.0-preview.0 │ └─ no features ├─ gdnative-test = 0.1.0 (restricted) │ └─ no features ├─ gdnative_bindings_generator = 0.9.0-preview.0 │ └─ features │ ├─ no default features │ └─ debug ├─ hello_world = 0.1.0 (restricted) │ └─ no features ├─ scene_create = 0.1.0 (restricted) │ └─ no features ├─ signals = 0.1.0 (restricted) │ └─ no features └─ spinning_cube = 0.1.0 (restricted) └─ no features ``` #### list the deps and transitive features you can list the deps of a crate, with its transitively enabled features > cargo whatfeatures --deps --no-features --verbose reqwest ``` reqwest = 0.10.7 ├─ optional dependencies │ ├─ for cfg(not(target_arch = "wasm32")) │ │ ├─ async-compression = ^0.3.0 (has enabled features) │ │ │ └─ stream │ │ ├─ cookie = ^0.14 (renamed to cookie_crate) │ │ ├─ cookie_store = ^0.12 │ │ ├─ hyper-rustls = ^0.21 │ │ ├─ hyper-tls = ^0.4 │ │ ├─ native-tls = ^0.2 (renamed to native-tls-crate) │ │ ├─ rustls = ^0.18 (has enabled features) │ │ │ └─ dangerous_configuration │ │ ├─ time = ^0.2.11 │ │ ├─ tokio-rustls = ^0.14 │ │ ├─ tokio-socks = ^0.2 │ │ ├─ tokio-tls = ^0.3.0 │ │ ├─ trust-dns-resolver = ^0.19 │ │ └─ webpki-roots = ^0.19 │ └─ serde_json = ^1.0 └─ required dependencies ├─ normal │ ├─ for cfg(not(target_arch = "wasm32")) │ │ ├─ base64 = ^0.12 │ │ ├─ encoding_rs = ^0.8 │ │ ├─ futures-core = ^0.3.0 │ │ ├─ futures-util = ^0.3.0 │ │ ├─ http-body = ^0.3.0 │ │ ├─ hyper = ^0.13.4 (has enabled features) │ │ │ └─ tcp │ │ ├─ ipnet = ^2.3 │ │ ├─ lazy_static = ^1.4 │ │ ├─ log = ^0.4 │ │ ├─ mime = ^0.3.7 │ │ ├─ percent-encoding = ^2.1 │ │ ├─ pin-project-lite = ^0.1.1 │ │ └─ tokio = ^0.2.5 (has enabled features) │ │ ├─ tcp │ │ └─ time │ ├─ for cfg(target_arch = "wasm32") │ │ ├─ js-sys = ^0.3.28 │ │ ├─ wasm-bindgen = ^0.2.51 (has enabled features) │ │ │ └─ serde-serialize │ │ ├─ wasm-bindgen-futures = ^0.4.1 │ │ └─ web-sys = ^0.3.25 (has enabled features) │ │ ├─ Headers │ │ ├─ Request │ │ ├─ RequestInit │ │ ├─ RequestMode │ │ ├─ Response │ │ ├─ Window │ │ ├─ FormData │ │ ├─ Blob │ │ └─ BlobPropertyBag │ ├─ for cfg(windows) │ │ └─ winreg = ^0.7 │ ├─ bytes = ^0.5 │ ├─ http = ^0.2 │ ├─ mime_guess = ^2.0 │ ├─ serde = ^1.0 │ ├─ serde_urlencoded = ^0.6.1 │ └─ url = ^2.1 ├─ development │ └─ for cfg(not(target_arch = "wasm32")) │ ├─ brotli = ^3.3.0 (renamed to brotli_crate) │ ├─ doc-comment = ^0.3 │ ├─ env_logger = ^0.7 │ ├─ hyper = ^0.13 (has enabled features) │ │ ├─ tcp │ │ └─ stream │ ├─ libflate = ^1.0 │ ├─ serde = ^1.0 (has enabled features) │ │ └─ derive │ └─ tokio = ^0.2.0 (has enabled features) │ └─ macros └─ no build dependencies ```